24#include <boost/preprocessor/punctuation/remove_parens.hpp>
100#define VISIBLE_RANGE 166.0f
189 std::string
const& GetName()
const;
227 virtual void OnNetworkStart();
230 virtual void OnNetworkStop();
233 virtual void OnSocketOpen(std::shared_ptr<WorldSocket> socket);
237 virtual void OnSocketClose(std::shared_ptr<WorldSocket> socket);
259 virtual void OnOpenStateChange(
bool open);
262 virtual void OnConfigLoad(
bool reload);
265 virtual void OnMotdChange(std::string& newMotd);
271 virtual void OnShutdownCancel();
274 virtual void OnUpdate(
uint32 diff);
277 virtual void OnStartup();
280 virtual void OnShutdown();
294 virtual void OnHonorCalculation(
float& honor,
uint8 level,
float multiplier);
297 virtual void OnGrayLevelCalculation(
uint8& grayLevel,
uint8 playerLevel);
303 virtual void OnZeroDifferenceCalculation(
uint8& diff,
uint8 playerLevel);
306 virtual void OnBaseGainCalculation(
uint32& gain,
uint8 playerLevel,
uint8 mobLevel);
312 virtual void OnGroupRateCalculation(
float& rate,
uint32 count,
bool isRaid);
335 virtual void OnCreate(TMap* map);
338 virtual void OnDestroy(TMap* map);
341 virtual void OnPlayerEnter(TMap* map,
Player* player);
344 virtual void OnPlayerLeave(TMap* map,
Player* player);
346 virtual void OnUpdate(TMap* map,
uint32 diff);
392 explicit ItemScript(
char const* name)
noexcept;
399 virtual bool OnQuestAccept(
Player* player,
Item* item,
Quest const* quest);
408 virtual bool OnRemove(
Player* player,
Item* item);
418 explicit UnitScript(
char const* name)
noexcept;
428 virtual void OnDamage(
Unit* attacker,
Unit* victim,
uint32& damage);
431 virtual void ModifyPeriodicDamageAurasTick(
Unit* target,
Unit* attacker,
uint32& damage);
434 virtual void ModifyMeleeDamage(
Unit* target,
Unit* attacker,
uint32& damage);
437 virtual void ModifySpellDamageTaken(
Unit* target,
Unit* attacker,
int32& damage,
SpellInfo const* spellInfo);
540 virtual std::span<Trinity::ChatCommands::ChatCommandBuilder const>
GetCommands()
const = 0;
607 virtual void OnInstall(
Vehicle* veh);
610 virtual void OnUninstall(
Vehicle* veh);
613 virtual void OnReset(
Vehicle* veh);
619 virtual void OnAddPassenger(
Vehicle* veh,
Unit* passenger,
int8 seatId);
622 virtual void OnRemovePassenger(
Vehicle* veh,
Unit* passenger);
658 virtual void OnRelocate(
Transport* transport,
uint32 mapId,
float x,
float y,
float z);
708 virtual void OnPlayerKilledByCreature(
Creature* killer,
Player* killed);
711 virtual void OnLevelChanged(
Player* player,
uint8 oldLevel);
714 virtual void OnFreeTalentPointsChanged(
Player* player,
uint32 points);
717 virtual void OnTalentsReset(
Player* player,
bool noCost);
720 virtual void OnMoneyChanged(
Player* player,
int64& amount);
723 virtual void OnMoneyLimit(
Player* player,
int64 amount);
729 virtual void OnReputationChange(
Player* player,
uint32 factionId,
int32& standing,
bool incremental);
732 virtual void OnDuelRequest(
Player* target,
Player* challenger);
735 virtual void OnDuelStart(
Player* player1,
Player* player2);
752 virtual void OnClearEmote(
Player* player);
757 virtual void OnSpellCast(
Player* player,
Spell* spell,
bool skipCheck);
760 virtual void OnLogin(
Player* player,
bool firstLogin);
763 virtual void OnLogout(
Player* player);
766 virtual void OnCreate(
Player* player);
775 virtual void OnSave(
Player* player);
784 virtual void OnMapChanged(
Player* player);
787 virtual void OnQuestStatusChange(
Player* player,
uint32 questId);
790 virtual void OnPlayerRepop(
Player* player);
793 virtual void OnMovieComplete(
Player* player,
uint32 movieId);
807 virtual void OnAccountLogin(
uint32 accountId);
810 virtual void OnFailedAccountLogin(
uint32 accountId);
813 virtual void OnEmailChange(
uint32 accountId);
816 virtual void OnFailedEmailChange(
uint32 accountId);
819 virtual void OnPasswordChange(
uint32 accountId);
822 virtual void OnFailedPasswordChange(
uint32 accountId);
839 virtual void OnRemoveMember(
Guild* guild,
ObjectGuid guid,
bool isDisbanding,
bool isKicked);
842 virtual void OnMOTDChanged(
Guild* guild, std::string
const& newMotd);
845 virtual void OnInfoChanged(
Guild* guild, std::string
const& newInfo);
848 virtual void OnCreate(
Guild* guild,
Player* leader, std::string
const& name);
851 virtual void OnDisband(
Guild* guild);
854 virtual void OnMemberWitdrawMoney(
Guild* guild,
Player* player,
uint64& amount,
bool isRepair);
861 bool isDestBank,
uint8 destContainer,
uint8 destSlotId);
891 virtual void OnDisband(
Group* group);
936 virtual void OnSceneTriggerEvent(
Player* player,
uint32 sceneInstanceID,
SceneTemplate const* sceneTemplate, std::string
const& triggerName);
959 virtual void OnAcknowledgeAutoAccept(
Player* player,
Quest const* quest);
976 virtual void OnValueChange(
int32 worldStateId,
int32 oldValue,
int32 newValue,
Map const* map);
1027 void FillSpellSummary();
1028 void LoadDatabase();
1040 typedef void(*ScriptLoaderCallbackType)();
1046 _script_loader_callback = script_loader_callback;
1051 void NotifyScriptIDUpdate();
1059 void SetScriptContext(std::string
const& context);
1064 void ReleaseScriptContext(std::string
const& context);
1068 void SwapScriptContext(
bool initialize =
false);
1071 static std::string
const& GetNameOfStaticContext();
1076 std::shared_ptr<ModuleReference> AcquireModuleReferenceOfScriptName(
1077 std::string
const& scriptname)
const;
1085 void CreateSpellScripts(
uint32 spellId, std::vector<SpellScript*>& scriptVector,
Spell* invoker)
const;
1086 void CreateAuraScripts(
uint32 spellId, std::vector<AuraScript*>& scriptVector,
Aura* invoker)
const;
1091 void OnNetworkStart();
1092 void OnNetworkStop();
1093 void OnSocketOpen(std::shared_ptr<WorldSocket>
const& socket);
1094 void OnSocketClose(std::shared_ptr<WorldSocket>
const& socket);
1100 void OnOpenStateChange(
bool open);
1101 void OnConfigLoad(
bool reload);
1102 void OnMotdChange(std::string& newMotd);
1104 void OnShutdownCancel();
1105 void OnWorldUpdate(
uint32 diff);
1111 void OnHonorCalculation(
float& honor,
uint8 level,
float multiplier);
1112 void OnGrayLevelCalculation(
uint8& grayLevel,
uint8 playerLevel);
1114 void OnZeroDifferenceCalculation(
uint8& diff,
uint8 playerLevel);
1115 void OnBaseGainCalculation(
uint32& gain,
uint8 playerLevel,
uint8 mobLevel);
1117 void OnGroupRateCalculation(
float& rate,
uint32 count,
bool isRaid);
1121 void OnCreateMap(
Map* map);
1122 void OnDestroyMap(
Map* map);
1123 void OnPlayerEnterMap(
Map* map,
Player* player);
1124 void OnPlayerLeaveMap(
Map* map,
Player* player);
1125 void OnMapUpdate(
Map* map,
uint32 diff);
1136 bool OnItemRemove(
Player* player,
Item* item);
1141 bool CanCreateCreatureAI(
uint32 scriptId)
const;
1146 bool CanCreateGameObjectAI(
uint32 scriptId)
const;
1167 std::vector<Trinity::ChatCommands::ChatCommandBuilder> GetChatCommands();
1188 void OnUninstall(
Vehicle* veh);
1192 void OnRemovePassenger(
Vehicle* veh,
Unit* passenger);
1204 void OnRelocate(
Transport* transport,
uint32 mapId,
float x,
float y,
float z);
1219 void OnPlayerLevelChanged(
Player* player,
uint8 oldLevel);
1220 void OnPlayerFreeTalentPointsChanged(
Player* player,
uint32 newPoints);
1221 void OnPlayerTalentsReset(
Player* player,
bool noCost);
1222 void OnPlayerMoneyChanged(
Player* player,
int64& amount);
1223 void OnPlayerMoneyLimit(
Player* player,
int64 amount);
1225 void OnPlayerReputationChange(
Player* player,
uint32 factionID,
int32& standing,
bool incremental);
1226 void OnPlayerDuelRequest(
Player* target,
Player* challenger);
1227 void OnPlayerDuelStart(
Player* player1,
Player* player2);
1234 void OnPlayerClearEmote(
Player* player);
1236 void OnPlayerSpellCast(
Player* player,
Spell* spell,
bool skipCheck);
1237 void OnPlayerLogin(
Player* player,
bool firstLogin);
1238 void OnPlayerLogout(
Player* player);
1239 void OnPlayerCreate(
Player* player);
1242 void OnPlayerSave(
Player* player);
1245 void OnQuestStatusChange(
Player* player,
uint32 questId);
1246 void OnPlayerRepop(
Player* player);
1252 void OnAccountLogin(
uint32 accountId);
1253 void OnFailedAccountLogin(
uint32 accountId);
1254 void OnEmailChange(
uint32 accountId);
1255 void OnFailedEmailChange(
uint32 accountId);
1256 void OnPasswordChange(
uint32 accountId);
1257 void OnFailedPasswordChange(
uint32 accountId);
1262 void OnGuildRemoveMember(
Guild* guild,
ObjectGuid guid,
bool isDisbanding,
bool isKicked);
1263 void OnGuildMOTDChanged(
Guild* guild,
const std::string& newMotd);
1264 void OnGuildInfoChanged(
Guild* guild,
const std::string& newInfo);
1265 void OnGuildCreate(
Guild* guild,
Player* leader,
const std::string& name);
1266 void OnGuildDisband(
Guild* guild);
1267 void OnGuildMemberWitdrawMoney(
Guild* guild,
Player* player,
uint64 &amount,
bool isRepair);
1270 bool isDestBank,
uint8 destContainer,
uint8 destSlotId);
1280 void OnGroupDisband(
Group* group);
1286 void ModifyPeriodicDamageAurasTick(
Unit* target,
Unit* attacker,
uint32& damage);
1287 void ModifyMeleeDamage(
Unit* target,
Unit* attacker,
uint32& damage);
1292 bool CanCreateAreaTriggerAI(
uint32 scriptId)
const;
1297 bool CanCreateConversationAI(
uint32 scriptId)
const;
1303 void OnSceneTrigger(
Player* player,
uint32 sceneInstanceID,
SceneTemplate const* sceneTemplate, std::string
const& triggerName);
1310 void OnQuestAcknowledgeAutoAccept(
Player* player,
Quest const* quest);
1332 template<
typename T>
1335 template<
typename T>
1338 template<
typename T>
1341 template<
typename T,
typename Other>
1344 || std::same_as<T, void>;
1346 template<
typename T>
1350template <Trinity::SpellScripts::IsSpellOrAuraScript Script1, Trinity::SpellScripts::ComplementScriptFor<Script1> Script2, Trinity::SpellScripts::ArgsTuple ArgsType>
1360 return Trinity::new_from_tuple<Script1>(
_args);
1362 return Trinity::new_from_tuple<Script2>(
_args);
1370 return Trinity::new_from_tuple<Script1>(
_args);
1372 return Trinity::new_from_tuple<Script2>(
_args);
1380#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__))
1381#define RegisterSpellAndAuraScriptPair(script_1, script_2) RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, #script_1)
1382#define RegisterSpellScriptWithArgs(spell_script, script_name, ...) RegisterSpellAndAuraScriptPairWithArgs(spell_script, void, script_name, __VA_ARGS__)
1383#define RegisterSpellScript(spell_script) RegisterSpellAndAuraScriptPairWithArgs(spell_script, void, #spell_script)
1392#define RegisterCreatureAI(ai_name) new GenericCreatureScript<ai_name>(#ai_name)
1394template <
class AI, AI* (*AIFactory)(Creature*)>
1401#define RegisterCreatureAIWithFactory(ai_name, factory_fn) new FactoryCreatureScript<ai_name, &factory_fn>(#ai_name)
1410#define RegisterGameObjectAI(ai_name) new GenericGameObjectScript<ai_name>(#ai_name)
1412template <
class AI, AI* (*AIFactory)(GameObject*)>
1419#define RegisterGameObjectAIWithFactory(ai_name, factory_fn) new FactoryGameObjectScript<ai_name, &factory_fn>(#ai_name)
1428#define RegisterAreaTriggerAI(ai_name) new GenericAreaTriggerEntityScript<ai_name>(#ai_name)
1437#define RegisterConversationAI(ai_name) new GenericConversationScript<ai_name>(#ai_name)
1439template<
class Script>
1447#define RegisterBattlegroundMapScript(script_name, mapId) new GenericBattlegroundMapScript<script_name>(#script_name, mapId)
1449#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) noexcept
virtual Battlefield * GetBattlefield(Map *map) const =0
virtual std::span< Trinity::ChatCommands::ChatCommandBuilder const > GetCommands() const =0
virtual CreatureAI * GetAI(Creature *creature) const =0
CreatureAI * GetAI(Creature *me) const override
FactoryCreatureScript(char const *name) noexcept
GameObjectAI * GetAI(GameObject *me) const override
FactoryGameObjectScript(char const *name) noexcept
virtual GameObjectAI * GetAI(GameObject *go) const =0
GenericAreaTriggerEntityScript(char const *name) noexcept
AreaTriggerAI * GetAI(AreaTrigger *at) const override
BattlegroundScript * GetBattlegroundScript(BattlegroundMap *map) const override
GenericBattlegroundMapScript(char const *name, uint32 mapId) noexcept
ConversationAI * GetAI(Conversation *conversation) const override
GenericConversationScript(char const *name) noexcept
GenericCreatureScript(char const *name) noexcept
CreatureAI * GetAI(Creature *me) const override
GameObjectAI * GetAI(GameObject *go) const override
GenericGameObjectScript(char const *name) noexcept
AuraScript * GetAuraScript() const override
GenericSpellAndAuraScriptLoader(char const *name, ArgsType &&args) noexcept
SpellScript * GetSpellScript() const override
MapEntry const * _mapEntry
MapScript(MapScript &&right)=delete
MapScript(MapScript const &right)=delete
MapScript & operator=(MapScript const &right)=delete
MapScript & operator=(MapScript &&right)=delete
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
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.