25#include <boost/preprocessor/punctuation/remove_parens.hpp>
97#define VISIBLE_RANGE 166.0f
186 std::string
const&
GetName()
const;
224 virtual void OnNetworkStart();
227 virtual void OnNetworkStop();
230 virtual void OnSocketOpen(std::shared_ptr<WorldSocket> socket);
234 virtual void OnSocketClose(std::shared_ptr<WorldSocket> socket);
256 virtual void OnOpenStateChange(
bool open);
259 virtual void OnConfigLoad(
bool reload);
262 virtual void OnMotdChange(std::string& newMotd);
268 virtual void OnShutdownCancel();
271 virtual void OnUpdate(
uint32 diff);
274 virtual void OnStartup();
277 virtual void OnShutdown();
291 virtual void OnHonorCalculation(
float& honor,
uint8 level,
float multiplier);
294 virtual void OnGrayLevelCalculation(
uint8& grayLevel,
uint8 playerLevel);
300 virtual void OnZeroDifferenceCalculation(
uint8& diff,
uint8 playerLevel);
303 virtual void OnBaseGainCalculation(
uint32& gain,
uint8 playerLevel,
uint8 mobLevel);
309 virtual void OnGroupRateCalculation(
float& rate,
uint32 count,
bool isRaid);
327 virtual void OnCreate(TMap* map);
330 virtual void OnDestroy(TMap* map);
333 virtual void OnPlayerEnter(TMap* map,
Player* player);
336 virtual void OnPlayerLeave(TMap* map,
Player* player);
338 virtual void OnUpdate(TMap* map,
uint32 diff);
388 virtual bool OnQuestAccept(
Player* player,
Item* item,
Quest const* quest);
397 virtual bool OnRemove(
Player* player,
Item* item);
417 virtual void OnDamage(
Unit* attacker,
Unit* victim,
uint32& damage);
420 virtual void ModifyPeriodicDamageAurasTick(
Unit* target,
Unit* attacker,
uint32& damage);
423 virtual void ModifyMeleeDamage(
Unit* target,
Unit* attacker,
uint32& damage);
426 virtual void ModifySpellDamageTaken(
Unit* target,
Unit* attacker,
int32& damage,
SpellInfo const* spellInfo);
543 virtual std::vector<Trinity::ChatCommands::ChatCommandBuilder>
GetCommands()
const = 0;
610 virtual void OnInstall(
Vehicle* veh);
613 virtual void OnUninstall(
Vehicle* veh);
616 virtual void OnReset(
Vehicle* veh);
622 virtual void OnAddPassenger(
Vehicle* veh,
Unit* passenger,
int8 seatId);
625 virtual void OnRemovePassenger(
Vehicle* veh,
Unit* passenger);
661 virtual void OnRelocate(
Transport* transport,
uint32 mapId,
float x,
float y,
float z);
711 virtual void OnPlayerKilledByCreature(
Creature* killer,
Player* killed);
714 virtual void OnLevelChanged(
Player* player,
uint8 oldLevel);
717 virtual void OnFreeTalentPointsChanged(
Player* player,
uint32 points);
720 virtual void OnTalentsReset(
Player* player,
bool noCost);
723 virtual void OnMoneyChanged(
Player* player,
int64& amount);
726 virtual void OnMoneyLimit(
Player* player,
int64 amount);
732 virtual void OnReputationChange(
Player* player,
uint32 factionId,
int32& standing,
bool incremental);
735 virtual void OnDuelRequest(
Player* target,
Player* challenger);
738 virtual void OnDuelStart(
Player* player1,
Player* player2);
755 virtual void OnClearEmote(
Player* player);
760 virtual void OnSpellCast(
Player* player,
Spell* spell,
bool skipCheck);
763 virtual void OnLogin(
Player* player,
bool firstLogin);
766 virtual void OnLogout(
Player* player);
769 virtual void OnCreate(
Player* player);
778 virtual void OnSave(
Player* player);
787 virtual void OnMapChanged(
Player* player);
790 virtual void OnQuestStatusChange(
Player* player,
uint32 questId);
793 virtual void OnPlayerRepop(
Player* player);
796 virtual void OnMovieComplete(
Player* player,
uint32 movieId);
799 virtual void OnPlayerChoiceResponse(
Player* player,
uint32 choiceId,
uint32 responseId);
813 virtual void OnAccountLogin(
uint32 accountId);
816 virtual void OnFailedAccountLogin(
uint32 accountId);
819 virtual void OnEmailChange(
uint32 accountId);
822 virtual void OnFailedEmailChange(
uint32 accountId);
825 virtual void OnPasswordChange(
uint32 accountId);
828 virtual void OnFailedPasswordChange(
uint32 accountId);
845 virtual void OnRemoveMember(
Guild* guild,
ObjectGuid guid,
bool isDisbanding,
bool isKicked);
848 virtual void OnMOTDChanged(
Guild* guild, std::string
const& newMotd);
851 virtual void OnInfoChanged(
Guild* guild, std::string
const& newInfo);
854 virtual void OnCreate(
Guild* guild,
Player* leader, std::string
const& name);
857 virtual void OnDisband(
Guild* guild);
860 virtual void OnMemberWitdrawMoney(
Guild* guild,
Player* player,
uint64& amount,
bool isRepair);
867 bool isDestBank,
uint8 destContainer,
uint8 destSlotId);
897 virtual void OnDisband(
Group* group);
925 virtual void OnConversationCreate(
Conversation* conversation,
Unit* creator);
928 virtual void OnConversationStart(
Conversation* conversation);
951 virtual void OnSceneTriggerEvent(
Player* player,
uint32 sceneInstanceID,
SceneTemplate const* sceneTemplate, std::string
const& triggerName);
974 virtual void OnAcknowledgeAutoAccept(
Player* player,
Quest const* quest);
991 virtual void OnValueChange(
int32 worldStateId,
int32 oldValue,
int32 newValue,
Map const* map);
1022 void FillSpellSummary();
1023 void LoadDatabase();
1035 typedef void(*ScriptLoaderCallbackType)();
1041 _script_loader_callback = script_loader_callback;
1046 void NotifyScriptIDUpdate();
1054 void SetScriptContext(std::string
const& context);
1059 void ReleaseScriptContext(std::string
const& context);
1063 void SwapScriptContext(
bool initialize =
false);
1066 static std::string
const& GetNameOfStaticContext();
1071 std::shared_ptr<ModuleReference> AcquireModuleReferenceOfScriptName(
1072 std::string
const& scriptname)
const;
1080 void CreateSpellScripts(
uint32 spellId, std::vector<SpellScript*>& scriptVector,
Spell* invoker)
const;
1081 void CreateAuraScripts(
uint32 spellId, std::vector<AuraScript*>& scriptVector,
Aura* invoker)
const;
1086 void OnNetworkStart();
1087 void OnNetworkStop();
1088 void OnSocketOpen(std::shared_ptr<WorldSocket> socket);
1089 void OnSocketClose(std::shared_ptr<WorldSocket> socket);
1095 void OnOpenStateChange(
bool open);
1096 void OnConfigLoad(
bool reload);
1097 void OnMotdChange(std::string& newMotd);
1099 void OnShutdownCancel();
1100 void OnWorldUpdate(
uint32 diff);
1106 void OnHonorCalculation(
float& honor,
uint8 level,
float multiplier);
1107 void OnGrayLevelCalculation(
uint8& grayLevel,
uint8 playerLevel);
1109 void OnZeroDifferenceCalculation(
uint8& diff,
uint8 playerLevel);
1110 void OnBaseGainCalculation(
uint32& gain,
uint8 playerLevel,
uint8 mobLevel);
1112 void OnGroupRateCalculation(
float& rate,
uint32 count,
bool isRaid);
1116 void OnCreateMap(
Map* map);
1117 void OnDestroyMap(
Map* map);
1118 void OnPlayerEnterMap(
Map* map,
Player* player);
1119 void OnPlayerLeaveMap(
Map* map,
Player* player);
1120 void OnMapUpdate(
Map* map,
uint32 diff);
1131 bool OnItemRemove(
Player* player,
Item* item);
1136 bool CanCreateCreatureAI(
uint32 scriptId)
const;
1141 bool CanCreateGameObjectAI(
uint32 scriptId)
const;
1162 std::vector<Trinity::ChatCommands::ChatCommandBuilder> GetChatCommands();
1183 void OnUninstall(
Vehicle* veh);
1187 void OnRemovePassenger(
Vehicle* veh,
Unit* passenger);
1199 void OnRelocate(
Transport* transport,
uint32 mapId,
float x,
float y,
float z);
1214 void OnPlayerLevelChanged(
Player* player,
uint8 oldLevel);
1215 void OnPlayerFreeTalentPointsChanged(
Player* player,
uint32 newPoints);
1216 void OnPlayerTalentsReset(
Player* player,
bool noCost);
1217 void OnPlayerMoneyChanged(
Player* player,
int64& amount);
1218 void OnPlayerMoneyLimit(
Player* player,
int64 amount);
1220 void OnPlayerReputationChange(
Player* player,
uint32 factionID,
int32& standing,
bool incremental);
1221 void OnPlayerDuelRequest(
Player* target,
Player* challenger);
1222 void OnPlayerDuelStart(
Player* player1,
Player* player2);
1229 void OnPlayerClearEmote(
Player* player);
1231 void OnPlayerSpellCast(
Player* player,
Spell* spell,
bool skipCheck);
1232 void OnPlayerLogin(
Player* player,
bool firstLogin);
1233 void OnPlayerLogout(
Player* player);
1234 void OnPlayerCreate(
Player* player);
1237 void OnPlayerSave(
Player* player);
1240 void OnQuestStatusChange(
Player* player,
uint32 questId);
1241 void OnPlayerRepop(
Player* player);
1247 void OnAccountLogin(
uint32 accountId);
1248 void OnFailedAccountLogin(
uint32 accountId);
1249 void OnEmailChange(
uint32 accountId);
1250 void OnFailedEmailChange(
uint32 accountId);
1251 void OnPasswordChange(
uint32 accountId);
1252 void OnFailedPasswordChange(
uint32 accountId);
1257 void OnGuildRemoveMember(
Guild* guild,
ObjectGuid guid,
bool isDisbanding,
bool isKicked);
1258 void OnGuildMOTDChanged(
Guild* guild,
const std::string& newMotd);
1259 void OnGuildInfoChanged(
Guild* guild,
const std::string& newInfo);
1260 void OnGuildCreate(
Guild* guild,
Player* leader,
const std::string& name);
1261 void OnGuildDisband(
Guild* guild);
1262 void OnGuildMemberWitdrawMoney(
Guild* guild,
Player* player,
uint64 &amount,
bool isRepair);
1265 bool isDestBank,
uint8 destContainer,
uint8 destSlotId);
1275 void OnGroupDisband(
Group* group);
1281 void ModifyPeriodicDamageAurasTick(
Unit* target,
Unit* attacker,
uint32& damage);
1282 void ModifyMeleeDamage(
Unit* target,
Unit* attacker,
uint32& damage);
1287 bool CanCreateAreaTriggerAI(
uint32 scriptId)
const;
1300 void OnSceneTrigger(
Player* player,
uint32 sceneInstanceID,
SceneTemplate const* sceneTemplate, std::string
const& triggerName);
1307 void OnQuestAcknowledgeAutoAccept(
Player* player,
Quest const* quest);
1329 template<
typename T>
1332 template<
typename T>
1336template <
typename... Ts>
1343 static_assert(!std::conjunction_v<std::is_same<SpellScriptType, Trinity::find_type_end>, std::is_same<AuraScriptType, Trinity::find_type_end>>,
"At least one of SpellScript/AuraScript arguments must be provided for GenericSpellAndAuraScriptLoader");
1351 if constexpr (!std::is_same_v<SpellScriptType, Trinity::find_type_end>)
1352 return Trinity::new_from_tuple<SpellScriptType>(
_args);
1359 if constexpr (!std::is_same_v<AuraScriptType, Trinity::find_type_end>)
1360 return Trinity::new_from_tuple<AuraScriptType>(
_args);
1368#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) new GenericSpellAndAuraScriptLoader<BOOST_PP_REMOVE_PARENS(spell_script), decltype(std::make_tuple(__VA_ARGS__))>(script_name, std::make_tuple(__VA_ARGS__))
1369#define RegisterSpellScript(spell_script) RegisterSpellScriptWithArgs(spell_script, #spell_script)
1370#define RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, script_name, ...) new GenericSpellAndAuraScriptLoader<BOOST_PP_REMOVE_PARENS(script_1), BOOST_PP_REMOVE_PARENS(script_2), decltype(std::make_tuple(__VA_ARGS__))>(script_name, std::make_tuple(__VA_ARGS__))
1371#define RegisterSpellAndAuraScriptPair(script_1, script_2) RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, #script_1)
1380#define RegisterCreatureAI(ai_name) new GenericCreatureScript<ai_name>(#ai_name)
1382template <
class AI, AI* (*AIFactory)(Creature*)>
1389#define RegisterCreatureAIWithFactory(ai_name, factory_fn) new FactoryCreatureScript<ai_name, &factory_fn>(#ai_name)
1398#define RegisterGameObjectAI(ai_name) new GenericGameObjectScript<ai_name>(#ai_name)
1400template <
class AI, AI* (*AIFactory)(GameObject*)>
1407#define RegisterGameObjectAIWithFactory(ai_name, factory_fn) new FactoryGameObjectScript<ai_name, &factory_fn>(#ai_name)
1416#define RegisterAreaTriggerAI(ai_name) new GenericAreaTriggerEntityScript<ai_name>(#ai_name)
1418#define sScriptMgr ScriptMgr::instance()
T GetEntry(std::unordered_map< uint32, T > const &map, CriteriaTreeEntry const *tree)
virtual bool OnCheck(Player *source, Unit *target)=0
~AchievementCriteriaScript()
~AreaTriggerEntityScript()
AreaTriggerScript(char const *name)
virtual Battlefield * GetBattlefield(Map *map) const =0
virtual Battleground * GetBattleground() const =0
virtual std::vector< Trinity::ChatCommands::ChatCommandBuilder > GetCommands() const =0
virtual CreatureAI * GetAI(Creature *creature) const =0
CreatureAI * GetAI(Creature *me) const override
FactoryCreatureScript(char const *name)
GameObjectAI * GetAI(GameObject *me) const override
FactoryGameObjectScript(char const *name)
virtual GameObjectAI * GetAI(GameObject *go) const =0
GenericAreaTriggerEntityScript(char const *name)
AreaTriggerAI * GetAI(AreaTrigger *at) const override
GenericCreatureScript(char const *name)
CreatureAI * GetAI(Creature *me) const override
GenericGameObjectScript(char const *name)
GameObjectAI * GetAI(GameObject *go) const override
typename Trinity::find_type_if_t< Trinity::SpellScripts::is_AuraScript, Ts... > AuraScriptType
AuraScript * GetAuraScript() const override
typename Trinity::find_type_if_t< Trinity::SpellScripts::is_SpellScript, Ts... > SpellScriptType
SpellScript * GetSpellScript() const override
typename Trinity::find_type_if_t< Trinity::is_tuple, Ts... > ArgsType
GenericSpellAndAuraScriptLoader(char const *name, ArgsType &&args)
MapEntry const * _mapEntry
virtual bool TryHandleOnce(Player *player, AreaTriggerEntry const *trigger)=0
~OnlyOnceAreaTriggerScript()
virtual OutdoorPvP * GetOutdoorPvP(Map *map) const =0
void IncreaseScriptCount()
void SetScriptLoader(ScriptLoaderCallbackType script_loader_callback)
void DecreaseScriptCount()
ScriptMgr(ScriptMgr &&right)=delete
uint32 GetScriptCount() const
ScriptMgr(ScriptMgr const &right)=delete
ScriptMgr & operator=(ScriptMgr &&right)=delete
std::string const & GetCurrentScriptContext() const
Returns the current script context.
ScriptMgr & operator=(ScriptMgr const &right)=delete
friend class ScriptObject
std::string _currentContext
ScriptLoaderCallbackType _script_loader_callback
ScriptObject(ScriptObject &&right)=delete
ScriptObject & operator=(ScriptObject &&right)=delete
ScriptObject(ScriptObject const &right)=delete
ScriptObject & operator=(ScriptObject const &right)=delete
Player session in the World.
TC_GAME_API bool GetName(uint32 accountId, std::string &name)
std::is_base_of< AuraScript, T > is_AuraScript
std::is_base_of< SpellScript, T > is_SpellScript
typename find_type_if< Check, Ts... >::type find_type_if_t