feat(Core/Modules): add separated lib for modules (#9281)

This commit is contained in:
Kargatum
2021-12-02 20:28:58 +07:00
committed by GitHub
parent 8668a03e14
commit 51adbffae4
56 changed files with 1904 additions and 1014 deletions

View File

@@ -43,43 +43,44 @@ class Battleground;
class BattlegroundMap;
class BattlegroundQueue;
class Channel;
class ChatHandler;
class Creature;
class CreatureAI;
class DynamicObject;
class GameObject;
class GameObjectAI;
class Guild;
class GridMap;
class Group;
class Guild;
class InstanceMap;
class InstanceScript;
class Item;
class Map;
class MotionTransport;
class OutdoorPvP;
class Player;
class Quest;
class ScriptMgr;
class Spell;
class SpellScript;
class SpellInfo;
class SpellCastTargets;
class Transport;
class SpellInfo;
class SpellScript;
class StaticTransport;
class MotionTransport;
class Transport;
class Unit;
class Vehicle;
class WorldObject;
class WorldPacket;
class WorldSocket;
class WorldObject;
struct AchievementCriteriaData;
struct AuctionEntry;
struct ConditionSourceInfo;
struct Condition;
struct ConditionSourceInfo;
struct DungeonProgressionRequirements;
struct GroupQueueInfo;
struct ItemTemplate;
struct OutdoorPvPData;
struct GroupQueueInfo;
struct TargetInfo;
namespace Acore::ChatCommands
@@ -167,13 +168,24 @@ public:
// being open; it is not.
virtual void OnSocketClose(std::shared_ptr<WorldSocket> /*socket*/) { }
// Called when a packet is sent to a client. The packet object is a copy of the original packet, so reading
// and modifying it is safe.
virtual void OnPacketSend(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
/**
* @brief This hook called when a packet is sent to a client. The packet object is a copy of the original packet, so reading and modifying it is safe.
*
* @param session Contains information about the WorldSession
* @param packet Contains information about the WorldPacket
* @return True if you want to continue sending the packet, false if you want to disallow sending the packet
*/
[[nodiscard]] virtual bool CanPacketSend(WorldSession* /*session*/, WorldPacket& /*packet*/) { return true; }
// Called when a (valid) packet is received by a client. The packet object is a copy of the original packet, so
// reading and modifying it is safe. Make sure to check WorldSession pointer before usage, it might be null in case of auth packets
virtual void OnPacketReceive(WorldSession* /*session*/, WorldPacket& /*packet*/) { }
/**
* @brief Called when a (valid) packet is received by a client. The packet object is a copy of the original packet, so
* reading and modifying it is safe. Make sure to check WorldSession pointer before usage, it might be null in case of auth packets
*
* @param session Contains information about the WorldSession
* @param packet Contains information about the WorldPacket
* @return True if you want to continue receive the packet, false if you want to disallow receive the packet
*/
[[nodiscard]] virtual bool CanPacketReceive(WorldSession* /*session*/, WorldPacket& /*packet*/) { return true; }
};
class WorldScript : public ScriptObject
@@ -217,7 +229,12 @@ public:
*
* @param version The cache version that we will be sending to the Client.
*/
virtual void OnBeforeFinalizePlayerWorldSession(uint32& /*cacheVersion*/) {}
virtual void OnBeforeFinalizePlayerWorldSession(uint32& /*cacheVersion*/) { }
/**
* @brief This hook runs after all scripts loading and before itialized
*/
virtual void OnBeforeWorldInitialized() { }
};
class FormulaScript : public ScriptObject
@@ -426,6 +443,14 @@ public:
[[nodiscard]] virtual bool CanSetPhaseMask(Unit const* /*unit*/, uint32 /*newPhaseMask*/, bool /*update*/) { return true; }
[[nodiscard]] virtual bool IsCustomBuildValuesUpdate(Unit const* /*unit*/, uint8 /*updateType*/, ByteBuffer& /*fieldBuffer*/, Player const* /*target*/, uint16 /*index*/) { return false; }
/**
* @brief This hook runs in Unit::Update
*
* @param unit Contains information about the Unit
* @param diff Contains information about the diff time
*/
virtual void OnUnitUpdate(Unit* /*unit*/, uint32 /*diff*/) { }
};
class MovementHandlerScript : public ScriptObject
@@ -444,11 +469,62 @@ protected:
AllMapScript(const char* name);
public:
// Called when a player enters any Map
/**
* @brief This hook called when a player enters any Map
*
* @param map Contains information about the Map
* @param player Contains information about the Player
*/
virtual void OnPlayerEnterAll(Map* /*map*/, Player* /*player*/) { }
// Called when a player leave any Map
/**
* @brief This hook called when a player leave any Map
*
* @param map Contains information about the Map
* @param player Contains information about the Player
*/
virtual void OnPlayerLeaveAll(Map* /*map*/, Player* /*player*/) { }
/**
* @brief This hook called before create instance script
*
* @param instanceMap Contains information about the WorldSession
* @param instanceData Contains information about the WorldPacket
* @param load if true loading instance save data
* @param data Contains information about the instance save data
* @param completedEncounterMask Contains information about the completed encouter mask
*/
virtual void OnBeforeCreateInstanceScript(InstanceMap* /*instanceMap*/, InstanceScript* /*instanceData*/, bool /*load*/, std::string /*data*/, uint32 /*completedEncounterMask*/) { }
/**
* @brief This hook called before destroy instance
*
* @param mapInstanced Contains information about the MapInstanced
* @param map Contains information about the Map
*/
virtual void OnDestroyInstance(MapInstanced* /*mapInstanced*/, Map* /*map*/) { }
/**
* @brief This hook called before creating map
*
* @param map Contains information about the Map
*/
virtual void OnCreateMap(Map* /*map*/) { }
/**
* @brief This hook called before destroing map
*
* @param map Contains information about the Map
*/
virtual void OnDestroyMap(Map* /*map*/) { }
/**
* @brief This hook called before updating map
*
* @param map Contains information about the Map
* @param diff Contains information about the diff time
*/
virtual void OnMapUpdate(Map* /*map*/, uint32 /*diff*/) { }
};
class AllCreatureScript : public ScriptObject
@@ -462,6 +538,147 @@ public:
// Called from End of Creature SelectLevel.
virtual void Creature_SelectLevel(const CreatureTemplate* /*cinfo*/, Creature* /*creature*/) { }
/**
* @brief This hook runs after add creature in world
*
* @param creature Contains information about the Creature
*/
virtual void OnCreatureAddWorld(Creature* /*creature*/) { }
/**
* @brief This hook runs after remove creature in world
*
* @param creature Contains information about the Creature
*/
virtual void OnCreatureRemoveWorld(Creature* /*creature*/) { }
/**
* @brief This hook called when a player opens a gossip dialog with the creature.
*
* @param player Contains information about the Player
* @param creature Contains information about the Creature
*
* @return False if you want to continue, true if you want to disable
*/
[[nodiscard]] virtual bool CanCreatureGossipHello(Player* /*player*/, Creature* /*creature*/) { return false; }
/**
* @brief This hook called when a player selects a gossip item in the creature's gossip menu.
*
* @param player Contains information about the Player
* @param creature Contains information about the Creature
* @param sender Contains information about the sender type
* @param action Contains information about the action id
*
* @return False if you want to continue, true if you want to disable
*/
[[nodiscard]] virtual bool CanCreatureGossipSelect(Player* /*player*/, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) { return false; }
/**
* @brief This hook called when a player selects a gossip with a code in the creature's gossip menu.
*
* @param player Contains information about the Player
* @param creature Contains information about the Creature
* @param sender Contains information about the sender type
* @param action Contains information about the action id
* @param code Contains information about the code entered
*
* @return True if you want to continue, false if you want to disable
*/
[[nodiscard]] virtual bool CanCreatureGossipSelectCode(Player* /*player*/, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { return false; }
// Called when a player accepts a quest from the creature.
[[nodiscard]] virtual bool CanCreatureQuestAccept(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; }
// Called when a player selects a quest reward.
[[nodiscard]] virtual bool CanCreatureQuestReward(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; }
// Called when a CreatureAI object is needed for the creature.
[[nodiscard]] virtual CreatureAI* GetCreatureAI(Creature* /*creature*/) const { return nullptr; }
};
class AllItemScript : public ScriptObject
{
protected:
AllItemScript(const char* name);
public:
// Called when a player accepts a quest from the item.
[[nodiscard]] virtual bool CanItemQuestAccept(Player* /*player*/, Item* /*item*/, Quest const* /*quest*/) { return true; }
// Called when a player uses the item.
[[nodiscard]] virtual bool CanItemUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) { return false; }
// Called when the item is destroyed.
[[nodiscard]] virtual bool CanItemRemove(Player* /*player*/, Item* /*item*/) { return true; }
// Called when the item expires (is destroyed).
[[nodiscard]] virtual bool CanItemExpire(Player* /*player*/, ItemTemplate const* /*proto*/) { return true; }
// Called when a player selects an option in an item gossip window
virtual void OnItemGossipSelect(Player* /*player*/, Item* /*item*/, uint32 /*sender*/, uint32 /*action*/) { }
// Called when a player selects an option in an item gossip window
virtual void OnItemGossipSelectCode(Player* /*player*/, Item* /*item*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { }
};
class AllGameObjectScript : public ScriptObject
{
protected:
AllGameObjectScript(const char* name);
public:
/**
* @brief This hook runs after add game object in world
*
* @param go Contains information about the GameObject
*/
virtual void OnGameObjectAddWorld(GameObject* /*go*/) { }
/**
* @brief This hook runs after remove game object in world
*
* @param go Contains information about the GameObject
*/
virtual void OnGameObjectRemoveWorld(GameObject* /*go*/) { }
/**
* @brief This hook runs after remove game object in world
*
* @param go Contains information about the GameObject
*/
virtual void OnGameObjectUpdate(GameObject* /*go*/, uint32 /*diff*/) { }
// Called when a player opens a gossip dialog with the gameobject.
[[nodiscard]] virtual bool CanGameObjectGossipHello(Player* /*player*/, GameObject* /*go*/) { return false; }
// Called when a player selects a gossip item in the gameobject's gossip menu.
[[nodiscard]] virtual bool CanGameObjectGossipSelect(Player* /*player*/, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) { return false; }
// Called when a player selects a gossip with a code in the gameobject's gossip menu.
[[nodiscard]] virtual bool CanGameObjectGossipSelectCode(Player* /*player*/, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { return false; }
// Called when a player accepts a quest from the gameobject.
[[nodiscard]] virtual bool CanGameObjectQuestAccept(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/) { return false; }
// Called when a player selects a quest reward.
[[nodiscard]] virtual bool CanGameObjectQuestReward(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; }
// Called when the game object is destroyed (destructible buildings only).
virtual void OnGameObjectDestroyed(GameObject* /*go*/, Player* /*player*/) { }
// Called when the game object is damaged (destructible buildings only).
virtual void OnGameObjectDamaged(GameObject* /*go*/, Player* /*player*/) { }
// Called when the game object loot state is changed.
virtual void OnGameObjectLootStateChanged(GameObject* /*go*/, uint32 /*state*/, Unit* /*unit*/) { }
// Called when the game object state is changed.
virtual void OnGameObjectStateChanged(GameObject* /*go*/, uint32 /*state*/) { }
// Called when a GameObjectAI object is needed for the gameobject.
virtual GameObjectAI* GetGameObjectAI(GameObject* /*go*/) const { return nullptr; }
};
class CreatureScript : public ScriptObject, public UpdatableScript<Creature>
@@ -1064,6 +1281,105 @@ public:
virtual void OnSetServerSideVisibilityDetect(Player* /*player*/, ServerSideVisibilityType& /*type*/, AccountTypes& /*sec*/) { }
virtual void OnPlayerResurrect(Player* /*player*/, float /*restore_percent*/, bool /*applySickness*/) { }
/**
* @brief This hook called before player sending message in default chat
*
* @param player Contains information about the Player sender
* @param type Contains information about the chat message type
* @param language Contains information about the language type
* @param msg Contains information about the message
*
* @return True if you want to continue sending the message, false if you want to disable sending the message
*/
[[nodiscard]] virtual bool CanPlayerUseChat(Player* /*player*/, uint32 /*type*/, uint32 /*language*/, std::string& /*msg*/) { return true; }
/**
* @brief This hook called before player sending message to other player via private
*
* @param player Contains information about the Player sender
* @param type Contains information about the chat message type
* @param language Contains information about the language type
* @param msg Contains information about the message
* @param receiver Contains information about the Player receiver
*
* @return True if you want to continue sending the message, false if you want to disable sending the message
*/
[[nodiscard]] virtual bool CanPlayerUseChat(Player* /*player*/, uint32 /*type*/, uint32 /*language*/, std::string& /*msg*/, Player* /*receiver*/) { return true; }
/**
* @brief This hook called before player sending message to group
*
* @param player Contains information about the Player sender
* @param type Contains information about the chat message type
* @param language Contains information about the language type
* @param msg Contains information about the message
* @param group Contains information about the Group
*
* @return True if you want to continue sending the message, false if you want to disable sending the message
*/
[[nodiscard]] virtual bool CanPlayerUseChat(Player* /*player*/, uint32 /*type*/, uint32 /*language*/, std::string& /*msg*/, Group* /*group*/) { return true; }
/**
* @brief This hook called before player sending message to guild
*
* @param player Contains information about the Player sender
* @param type Contains information about the chat message type
* @param language Contains information about the language type
* @param msg Contains information about the message
* @param guild Contains information about the Guild
*
* @return True if you want to continue sending the message, false if you want to disable sending the message
*/
[[nodiscard]] virtual bool CanPlayerUseChat(Player* /*player*/, uint32 /*type*/, uint32 /*language*/, std::string& /*msg*/, Guild* /*guild*/) { return true; }
/**
* @brief This hook called before player sending message to channel
*
* @param player Contains information about the Player sender
* @param type Contains information about the chat message type
* @param language Contains information about the language type
* @param msg Contains information about the message
* @param channel Contains information about the Channel
*
* @return True if you want to continue sending the message, false if you want to disable sending the message
*/
[[nodiscard]] virtual bool CanPlayerUseChat(Player* /*player*/, uint32 /*type*/, uint32 /*language*/, std::string& /*msg*/, Channel* /*channel*/) { return true; }
/**
* @brief This hook called after player learning talents
*
* @param player Contains information about the Player
* @param talentId Contains information about the talent id
* @param talentRank Contains information about the talent rank
* @param spellid Contains information about the spell id
*/
virtual void OnPlayerLearnTalents(Player* /*player*/, uint32 /*talentId*/, uint32 /*talentRank*/, uint32 /*spellid*/) { }
/**
* @brief This hook called after player entering combat
*
* @param player Contains information about the Player
* @param Unit Contains information about the Unit
*/
virtual void OnPlayerEnterCombat(Player* /*player*/, Unit* /*enemy*/) { }
/**
* @brief This hook called after player leave combat
*
* @param player Contains information about the Player
*/
virtual void OnPlayerLeaveCombat(Player* /*player*/) { }
/**
* @brief This hook called after player abandoning quest
*
* @param player Contains information about the Player
* @param questId Contains information about the quest id
*/
virtual void OnQuestAbandon(Player* /*player*/, uint32 /*questId*/) { }
// Passive Anticheat System
virtual void AnticheatSetSkipOnePacketForASH(Player* /*player*/, bool /*apply*/) { }
virtual void AnticheatSetCanFlybyServer(Player* /*player*/, bool /*apply*/) { }
@@ -1211,7 +1527,11 @@ protected:
public:
[[nodiscard]] bool IsDatabaseBound() const override { return false; }
// Start Battlegroud
/**
* @brief This hook runs before start Battleground
*
* @param bg Contains information about the Battleground
*/
virtual void OnBattlegroundStart(Battleground* /*bg*/) { }
// End Battleground
@@ -1262,6 +1582,28 @@ public:
* @return True if you want to continue sending the message, false if you want to disable the message
*/
[[nodiscard]] virtual bool OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* /*queue*/, GroupQueueInfo* /*ginfo*/) { return true; }
/**
* @brief This hook runs after end Battleground
*
* @param bg Contains information about the Battleground
* @param TeamId Contains information about the winneer team
*/
virtual void OnBattlegroundEnd(Battleground* /*bg*/, TeamId /*winner team*/) { }
/**
* @brief This hook runs before Battleground destroy
*
* @param bg Contains information about the Battleground
*/
virtual void OnBattlegroundDestroy(Battleground* /*bg*/) { }
/**
* @brief This hook runs after Battleground create
*
* @param bg Contains information about the Battleground
*/
virtual void OnBattlegroundCreate(Battleground* /*bg*/) { }
};
class ArenaTeamScript : public ScriptObject
@@ -1307,6 +1649,36 @@ public:
virtual void OnRemoveAuraScaleTargets(Spell* /*spell*/, TargetInfo& /*targetInfo*/, uint8 /*auraScaleMask*/, bool& /*needErase*/) { }
virtual void OnBeforeAuraRankForLevel(SpellInfo const* /*spellInfo*/, SpellInfo const* /*latestSpellInfo*/, uint8 /*level*/) { }
/**
* @brief This hook called after spell dummy effect
*
* @param caster Contains information about the WorldObject
* @param spellID Contains information about the spell id
* @param effIndex Contains information about the SpellEffIndex
* @param gameObjTarget Contains information about the GameObject
*/
virtual void OnDummyEffect(WorldObject* /*caster*/, uint32 /*spellID*/, SpellEffIndex /*effIndex*/, GameObject* /*gameObjTarget*/) { }
/**
* @brief This hook called after spell dummy effect
*
* @param caster Contains information about the WorldObject
* @param spellID Contains information about the spell id
* @param effIndex Contains information about the SpellEffIndex
* @param creatureTarget Contains information about the Creature
*/
virtual void OnDummyEffect(WorldObject* /*caster*/, uint32 /*spellID*/, SpellEffIndex /*effIndex*/, Creature* /*creatureTarget*/) { }
/**
* @brief This hook called after spell dummy effect
*
* @param caster Contains information about the WorldObject
* @param spellID Contains information about the spell id
* @param effIndex Contains information about the SpellEffIndex
* @param itemTarget Contains information about the Item
*/
virtual void OnDummyEffect(WorldObject* /*caster*/, uint32 /*spellID*/, SpellEffIndex /*effIndex*/, Item* /*itemTarget*/) { }
};
// this class can be used to be extended by Modules
@@ -1381,6 +1753,13 @@ public:
[[nodiscard]] virtual bool CanUnlearnSpellDefault(Pet* /*pet*/, SpellInfo const* /*spellEntry*/) { return true; }
[[nodiscard]] virtual bool CanResetTalents(Pet* /*pet*/) { return true; }
/**
* @brief This hook called after add pet in world
*
* @param pet Contains information about the Pet
*/
virtual void OnPetAddToWorld(Pet* /*pet*/) { }
};
class ArenaScript : public ScriptObject
@@ -1443,6 +1822,14 @@ public:
virtual void OnPlayerSetPhase(const AuraEffect* /*auraEff*/, AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/, uint32& /*newPhase*/) { }
virtual void OnInstanceSave(InstanceSave* /*instanceSave*/) { }
/**
* @brief This hook called before get Quest Dialog Status
*
* @param player Contains information about the Player
* @param questgiver Contains information about the Object
*/
virtual void GetDialogStatus(Player* /*player*/, Object* /*questgiver*/) { }
};
class CommandSC : public ScriptObject
@@ -1455,7 +1842,15 @@ public:
bool IsDatabaseBound() const { return false; }
virtual void OnHandleDevCommand(Player* /*player*/, std::string& /*argstr*/) { }
virtual void OnHandleDevCommand(Player* /*player*/, std::string& /*argstr*/) { }
/**
* @brief This hook runs execute chat command
*
* @param handler Contains information about the ChatHandler
* @param cmdStr Contains information about the command name
*/
[[nodiscard]] virtual bool CanExecuteCommand(ChatHandler& /*handler*/, std::string_view /*cmdStr*/) { return true; }
};
class DatabaseScript : public ScriptObject
@@ -1468,7 +1863,93 @@ public:
bool IsDatabaseBound() const { return false; }
virtual void OnAfterDatabasesLoaded(uint32 /*updateFlags*/) {}
virtual void OnAfterDatabasesLoaded(uint32 /*updateFlags*/) { }
};
class WorldObjectScript : public ScriptObject
{
protected:
WorldObjectScript(const char* name);
public:
bool IsDatabaseBound() const { return false; }
/**
* @brief This hook called before destroy world object
*
* @param object Contains information about the WorldObject
*/
virtual void OnWorldObjectDestroy(WorldObject* /*object*/) { }
/**
* @brief This hook called after create world object
*
* @param object Contains information about the WorldObject
*/
virtual void OnWorldObjectCreate(WorldObject* /*object*/) { }
/**
* @brief This hook called after world object set to map
*
* @param object Contains information about the WorldObject
*/
virtual void OnWorldObjectSetMap(WorldObject* /*object*/, Map* /*map*/ ) { }
/**
* @brief This hook called after world object reset
*
* @param object Contains information about the WorldObject
*/
virtual void OnWorldObjectResetMap(WorldObject* /*object*/) { }
/**
* @brief This hook called after world object update
*
* @param object Contains information about the WorldObject
* @param diff Contains information about the diff time
*/
virtual void OnWorldObjectUpdate(WorldObject* /*object*/, uint32 /*diff*/) { }
};
class LootScript : public ScriptObject
{
protected:
LootScript(const char* name);
public:
bool IsDatabaseBound() const { return false; }
/**
* @brief This hook called before money loot
*
* @param player Contains information about the Player
* @param gold Contains information about money
*/
virtual void OnLootMoney(Player* /*player*/, uint32 /*gold*/) { }
};
class ElunaScript : public ScriptObject
{
protected:
ElunaScript(const char* name);
public:
/**
* @brief This hook called when the weather changes in the zone this script is associated with.
*
* @param weather Contains information about the Weather
* @param state Contains information about the WeatherState
* @param grade Contains information about the grade
*/
virtual void OnWeatherChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { }
// Called when the area trigger is activated by a player.
[[nodiscard]] virtual bool CanAreaTrigger(Player* /*player*/, AreaTrigger const* /*trigger*/) { return false; }
};
// Manages registration, loading, and execution of scripts.
@@ -1493,6 +1974,7 @@ public: /* Initialization */
uint32 GetScriptCount() const { return _scriptCount; }
typedef void(*ScriptLoaderCallbackType)();
typedef void(*ModulesLoaderCallbackType)();
/// Sets the script loader callback which is invoked to load scripts
/// (Workaround for circular dependency game <-> scripts)
@@ -1501,6 +1983,13 @@ public: /* Initialization */
_script_loader_callback = script_loader_callback;
}
/// Sets the modules loader callback which is invoked to load modules
/// (Workaround for circular dependency game <-> modules)
void SetModulesLoader(ModulesLoaderCallbackType script_loader_callback)
{
_modules_loader_callback = script_loader_callback;
}
public: /* Unloading */
void Unload();
@@ -1514,8 +2003,8 @@ public: /* ServerScript */
void OnNetworkStop();
void OnSocketOpen(std::shared_ptr<WorldSocket> socket);
void OnSocketClose(std::shared_ptr<WorldSocket> socket);
void OnPacketReceive(WorldSession* session, WorldPacket const& packet);
void OnPacketSend(WorldSession* session, WorldPacket const& packet);
bool CanPacketReceive(WorldSession* session, WorldPacket const& packet);
bool CanPacketSend(WorldSession* session, WorldPacket const& packet);
public: /* WorldScript */
void OnLoadCustomDatabaseTable();
@@ -1529,6 +2018,7 @@ public: /* WorldScript */
void OnWorldUpdate(uint32 diff);
void OnStartup();
void OnShutdown();
void OnBeforeWorldInitialized();
public: /* FormulaScript */
void OnHonorCalculation(float& honor, uint8 level, float multiplier);
@@ -1573,6 +2063,8 @@ public: /* CreatureScript */
uint32 GetDialogStatus(Player* player, Creature* creature);
CreatureAI* GetCreatureAI(Creature* creature);
void OnCreatureUpdate(Creature* creature, uint32 diff);
void OnCreatureAddWorld(Creature* creature);
void OnCreatureRemoveWorld(Creature* creature);
public: /* GameObjectScript */
bool OnGossipHello(Player* player, GameObject* go);
@@ -1587,6 +2079,8 @@ public: /* GameObjectScript */
void OnGameObjectStateChanged(GameObject* go, uint32 state);
void OnGameObjectUpdate(GameObject* go, uint32 diff);
GameObjectAI* GetGameObjectAI(GameObject* go);
void OnGameObjectAddWorld(GameObject* go);
void OnGameObjectRemoveWorld(GameObject* go);
public: /* AreaTriggerScript */
bool OnAreaTrigger(Player* player, AreaTrigger const* trigger);
@@ -1773,6 +2267,18 @@ public: /* PlayerScript */
bool CanInitTrade(Player* player, Player* target);
void OnSetServerSideVisibility(Player* player, ServerSideVisibilityType& type, AccountTypes& sec);
void OnSetServerSideVisibilityDetect(Player* player, ServerSideVisibilityType& type, AccountTypes& sec);
void OnPlayerResurrect(Player* player, float restore_percent, bool applySickness);
bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg);
bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg, Player* receiver);
bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg, Group* group);
bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg, Guild* guild);
bool CanPlayerUseChat(Player* player, uint32 type, uint32 language, std::string& msg, Channel* channel);
void OnPlayerLearnTalents(Player* player, uint32 talentId, uint32 talentRank, uint32 spellid);
void OnPlayerEnterCombat(Player* player, Unit* enemy);
void OnPlayerLeaveCombat(Player* player);
void OnQuestAbandon(Player* player, uint32 questId);
// Anti cheat
void AnticheatSetSkipOnePacketForASH(Player* player, bool apply);
void AnticheatSetCanFlybyServer(Player* player, bool apply);
void AnticheatSetUnderACKmount(Player* player);
@@ -1850,6 +2356,7 @@ public: /* UnitScript */
bool IsNeedModHealPercent(Unit const* unit, AuraEffect* auraEff, float& doneTotalMod, SpellInfo const* spellProto);
bool CanSetPhaseMask(Unit const* unit, uint32 newPhaseMask, bool update);
bool IsCustomBuildValuesUpdate(Unit const* unit, uint8 updateType, ByteBuffer& fieldBuffer, Player const* target, uint16 index);
void OnUnitUpdate(Unit* unit, uint32 diff);
public: /* MovementHandlerScript */
void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);
@@ -1860,9 +2367,8 @@ public: /* AllCreatureScript */
void Creature_SelectLevel(const CreatureTemplate* cinfo, Creature* creature);
public: /* AllMapScript */
//listener functions are called by OnPlayerEnterMap and OnPlayerLeaveMap
//void OnPlayerEnterAll(Map* map, Player* player);
//void OnPlayerLeaveAll(Map* map, Player* player);
void OnBeforeCreateInstanceScript(InstanceMap* instanceMap, InstanceScript* instanceData, bool load, std::string data, uint32 completedEncounterMask);
void OnDestroyInstance(MapInstanced* mapInstanced, Map* map);
public: /* BGScript */
void OnBattlegroundStart(Battleground* bg);
@@ -1880,6 +2386,9 @@ public: /* BGScript */
bool CanSendMessageBGQueue(BattlegroundQueue* queue, Player* leader, Battleground* bg, PvPDifficultyEntry const* bracketEntry);
bool OnBeforeSendJoinMessageArenaQueue(BattlegroundQueue* queue, Player* leader, GroupQueueInfo* ginfo, PvPDifficultyEntry const* bracketEntry, bool isRated);
bool OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* queue, GroupQueueInfo* ginfo);
void OnBattlegroundEnd(Battleground* bg, TeamId winnerTeamId);
void OnBattlegroundDestroy(Battleground* bg);
void OnBattlegroundCreate(Battleground* bg);
public: /* Arena Team Script */
void OnGetSlotByType(const uint32 type, uint8& slot);
@@ -1899,6 +2408,9 @@ public: /* SpellSC */
void OnScaleAuraUnitAdd(Spell* spell, Unit* target, uint32 effectMask, bool checkIfValid, bool implicit, uint8 auraScaleMask, TargetInfo& targetInfo);
void OnRemoveAuraScaleTargets(Spell* spell, TargetInfo& targetInfo, uint8 auraScaleMask, bool& needErase);
void OnBeforeAuraRankForLevel(SpellInfo const* spellInfo, SpellInfo const* latestSpellInfo, uint8 level);
void OnDummyEffect(WorldObject* caster, uint32 spellID, SpellEffIndex effIndex, GameObject* gameObjTarget);
void OnDummyEffect(WorldObject* caster, uint32 spellID, SpellEffIndex effIndex, Creature* creatureTarget);
void OnDummyEffect(WorldObject* caster, uint32 spellID, SpellEffIndex effIndex, Item* itemTarget);
public: /* GameEventScript */
void OnGameEventStart(uint16 EventID);
@@ -1909,53 +2421,71 @@ public: /* MailScript */
public: /* AchievementScript */
void SetRealmCompleted(AchievementEntry const* achievement);
bool IsCompletedCriteria(AchievementMgr* mgr, AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement, CriteriaProgress const* progress);
bool IsRealmCompleted(AchievementGlobalMgr const* globalmgr, AchievementEntry const* achievement, std::chrono::system_clock::time_point completionTime);
void OnBeforeCheckCriteria(AchievementMgr* mgr, AchievementCriteriaEntryList const* achievementCriteriaList);
bool CanCheckCriteria(AchievementMgr* mgr, AchievementCriteriaEntry const* achievementCriteria);
void SetRealmCompleted(AchievementEntry const* achievement);
bool IsCompletedCriteria(AchievementMgr* mgr, AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement, CriteriaProgress const* progress);
bool IsRealmCompleted(AchievementGlobalMgr const* globalmgr, AchievementEntry const* achievement, std::chrono::system_clock::time_point completionTime);
void OnBeforeCheckCriteria(AchievementMgr* mgr, AchievementCriteriaEntryList const* achievementCriteriaList);
bool CanCheckCriteria(AchievementMgr* mgr, AchievementCriteriaEntry const* achievementCriteria);
public: /* PetScript */
public: /* PetScript */
void OnInitStatsForLevel(Guardian* guardian, uint8 petlevel);
void OnCalculateMaxTalentPointsForLevel(Pet* pet, uint8 level, uint8& points);
bool CanUnlearnSpellSet(Pet* pet, uint32 level, uint32 spell);
bool CanUnlearnSpellDefault(Pet* pet, SpellInfo const* spellEntry);
bool CanResetTalents(Pet* pet);
void OnInitStatsForLevel(Guardian* guardian, uint8 petlevel);
void OnCalculateMaxTalentPointsForLevel(Pet* pet, uint8 level, uint8& points);
bool CanUnlearnSpellSet(Pet* pet, uint32 level, uint32 spell);
bool CanUnlearnSpellDefault(Pet* pet, SpellInfo const* spellEntry);
bool CanResetTalents(Pet* pet);
public: /* ArenaScript */
public: /* ArenaScript */
bool CanAddMember(ArenaTeam* team, ObjectGuid PlayerGuid);
void OnGetPoints(ArenaTeam* team, uint32 memberRating, float& points);
bool CanSaveToDB(ArenaTeam* team);
bool CanAddMember(ArenaTeam* team, ObjectGuid PlayerGuid);
void OnGetPoints(ArenaTeam* team, uint32 memberRating, float& points);
bool CanSaveToDB(ArenaTeam* team);
public: /* MiscScript */
public: /* MiscScript */
void OnConstructObject(Object* origin);
void OnDestructObject(Object* origin);
void OnConstructPlayer(Player* origin);
void OnDestructPlayer(Player* origin);
void OnConstructGroup(Group* origin);
void OnDestructGroup(Group* origin);
void OnConstructInstanceSave(InstanceSave* origin);
void OnDestructInstanceSave(InstanceSave* origin);
void OnItemCreate(Item* item, ItemTemplate const* itemProto, Player const* owner);
bool CanApplySoulboundFlag(Item* item, ItemTemplate const* proto);
bool CanItemApplyEquipSpell(Player* player, Item* item);
bool CanSendAuctionHello(WorldSession const* session, ObjectGuid guid, Creature* creature);
void ValidateSpellAtCastSpell(Player* player, uint32& oldSpellId, uint32& spellId, uint8& castCount, uint8& castFlags);
void OnPlayerSetPhase(const AuraEffect* auraEff, AuraApplication const* aurApp, uint8 mode, bool apply, uint32& newPhase);
void ValidateSpellAtCastSpellResult(Player* player, Unit* mover, Spell* spell, uint32 oldSpellId, uint32 spellId);
void OnAfterLootTemplateProcess(Loot* loot, LootTemplate const* tab, LootStore const& store, Player* lootOwner, bool personal, bool noEmptyError, uint16 lootMode);
void OnInstanceSave(InstanceSave* instanceSave);
void OnConstructObject(Object* origin);
void OnDestructObject(Object* origin);
void OnConstructPlayer(Player* origin);
void OnDestructPlayer(Player* origin);
void OnConstructGroup(Group* origin);
void OnDestructGroup(Group* origin);
void OnConstructInstanceSave(InstanceSave* origin);
void OnDestructInstanceSave(InstanceSave* origin);
void OnItemCreate(Item* item, ItemTemplate const* itemProto, Player const* owner);
bool CanApplySoulboundFlag(Item* item, ItemTemplate const* proto);
bool CanItemApplyEquipSpell(Player* player, Item* item);
bool CanSendAuctionHello(WorldSession const* session, ObjectGuid guid, Creature* creature);
void ValidateSpellAtCastSpell(Player* player, uint32& oldSpellId, uint32& spellId, uint8& castCount, uint8& castFlags);
void OnPlayerSetPhase(const AuraEffect* auraEff, AuraApplication const* aurApp, uint8 mode, bool apply, uint32& newPhase);
void ValidateSpellAtCastSpellResult(Player* player, Unit* mover, Spell* spell, uint32 oldSpellId, uint32 spellId);
void OnAfterLootTemplateProcess(Loot* loot, LootTemplate const* tab, LootStore const& store, Player* lootOwner, bool personal, bool noEmptyError, uint16 lootMode);
void OnInstanceSave(InstanceSave* instanceSave);
void GetDialogStatus(Player* player, Object* questgiver);
public: /* CommandSC */
public: /* CommandSC */
void OnHandleDevCommand(Player* player, std::string& argstr);
void OnHandleDevCommand(Player* player, std::string& argstr);
bool CanExecuteCommand(ChatHandler& handler, std::string_view cmdStr);
public: /* DatabaseScript */
public: /* DatabaseScript */
void OnAfterDatabasesLoaded(uint32 updateFlags);
void OnAfterDatabasesLoaded(uint32 updateFlags);
public: /* WorldObjectScript */
void OnWorldObjectDestroy(WorldObject* object);
void OnWorldObjectCreate(WorldObject* object);
void OnWorldObjectSetMap(WorldObject* object, Map* map);
void OnWorldObjectResetMap(WorldObject* object);
void OnWorldObjectUpdate(WorldObject* object, uint32 diff);
public: /* PetScript */
void OnPetAddToWorld(Pet* pet);
public: /* LootScript */
void OnLootMoney(Player* player, uint32 gold);
private:
uint32 _scriptCount;
@@ -1964,6 +2494,7 @@ private:
std::atomic<long> _scheduledScripts;
ScriptLoaderCallbackType _script_loader_callback;
ModulesLoaderCallbackType _modules_loader_callback;
};
namespace Acore::SpellScripts