diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 21:56:12 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 10:56:12 -0300 |
| commit | e2a07cf9b7cf13350df9c3efaf0199550e038dbe (patch) | |
| tree | c55e26d347ab0d9909b1a1b38a9fb5bfc1e33620 /src/server/game/Scripting/ScriptDefines | |
| parent | 1ecce50e06ebdde10500c5f72b9a0f5813b1c89b (diff) | |
feat(Core/Scripts): Optimize GuildScript (#18714)
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Update GuildScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/GuildScript.cpp | 81 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/GuildScript.h | 23 |
2 files changed, 41 insertions, 63 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/GuildScript.cpp b/src/server/game/Scripting/ScriptDefines/GuildScript.cpp index 1aae39901a..480c9968ca 100644 --- a/src/server/game/Scripting/ScriptDefines/GuildScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/GuildScript.cpp @@ -21,112 +21,73 @@ void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnAddMember(guild, player, plRank); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_ADD_MEMBER, script->OnAddMember(guild, player, plRank)); } void ScriptMgr::OnGuildRemoveMember(Guild* guild, Player* player, bool isDisbanding, bool isKicked) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnRemoveMember(guild, player, isDisbanding, isKicked); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_REMOVE_MEMBER, script->OnRemoveMember(guild, player, isDisbanding, isKicked)); } void ScriptMgr::OnGuildMOTDChanged(Guild* guild, const std::string& newMotd) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnMOTDChanged(guild, newMotd); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_MOTD_CHANGED, script->OnMOTDChanged(guild, newMotd)); } void ScriptMgr::OnGuildInfoChanged(Guild* guild, const std::string& newInfo) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnInfoChanged(guild, newInfo); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_INFO_CHANGED, script->OnInfoChanged(guild, newInfo)); } void ScriptMgr::OnGuildCreate(Guild* guild, Player* leader, const std::string& name) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnCreate(guild, leader, name); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_CREATE, script->OnCreate(guild, leader, name)); } void ScriptMgr::OnGuildDisband(Guild* guild) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnDisband(guild); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_DISBAND, script->OnDisband(guild)); } void ScriptMgr::OnGuildMemberWitdrawMoney(Guild* guild, Player* player, uint32& amount, bool isRepair) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnMemberWitdrawMoney(guild, player, amount, isRepair); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_MEMBER_WITDRAW_MONEY, script->OnMemberWitdrawMoney(guild, player, amount, isRepair)); } void ScriptMgr::OnGuildMemberDepositMoney(Guild* guild, Player* player, uint32& amount) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnMemberDepositMoney(guild, player, amount); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_MEMBER_DEPOSIT_MONEY, script->OnMemberDepositMoney(guild, player, amount)); } -void ScriptMgr::OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId, - bool isDestBank, uint8 destContainer, uint8 destSlotId) +void ScriptMgr::OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId, bool isDestBank, uint8 destContainer, uint8 destSlotId) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnItemMove(guild, player, pItem, isSrcBank, srcContainer, srcSlotId, isDestBank, destContainer, destSlotId); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_ITEM_MOVE, script->OnItemMove(guild, player, pItem, isSrcBank, srcContainer, srcSlotId, isDestBank, destContainer, destSlotId)); } void ScriptMgr::OnGuildEvent(Guild* guild, uint8 eventType, ObjectGuid::LowType playerGuid1, ObjectGuid::LowType playerGuid2, uint8 newRank) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnEvent(guild, eventType, playerGuid1, playerGuid2, newRank); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_EVENT, script->OnEvent(guild, eventType, playerGuid1, playerGuid2, newRank)); } void ScriptMgr::OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, ObjectGuid::LowType playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId) { - ExecuteScript<GuildScript>([&](GuildScript* script) - { - script->OnBankEvent(guild, eventType, tabId, playerGuid, itemOrMoney, itemStackCount, destTabId); - }); + CALL_ENABLED_HOOKS(GuildScript, GUILDHOOK_ON_BANK_EVENT, script->OnBankEvent(guild, eventType, tabId, playerGuid, itemOrMoney, itemStackCount, destTabId)); } bool ScriptMgr::CanGuildSendBankList(Guild const* guild, WorldSession* session, uint8 tabId, bool sendAllSlots) { - auto ret = IsValidBoolScript<GuildScript>([&](GuildScript* script) - { - return !script->CanGuildSendBankList(guild, session, tabId, sendAllSlots); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(GuildScript, GUILDHOOK_CAN_GUILD_SEND_BANK_LIST, !script->CanGuildSendBankList(guild, session, tabId, sendAllSlots)); } -GuildScript::GuildScript(const char* name) - : ScriptObject(name) +GuildScript::GuildScript(const char* name, std::vector<uint16> enabledHooks) + : ScriptObject(name, GUILDHOOK_END) { - ScriptRegistry<GuildScript>::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < GUILDHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry<GuildScript>::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry<GuildScript>; diff --git a/src/server/game/Scripting/ScriptDefines/GuildScript.h b/src/server/game/Scripting/ScriptDefines/GuildScript.h index 102ad05376..ebdfad81f7 100644 --- a/src/server/game/Scripting/ScriptDefines/GuildScript.h +++ b/src/server/game/Scripting/ScriptDefines/GuildScript.h @@ -20,11 +20,29 @@ #include "ObjectGuid.h" #include "ScriptObject.h" +#include <vector> + +enum GuildHook +{ + GUILDHOOK_ON_ADD_MEMBER, + GUILDHOOK_ON_REMOVE_MEMBER, + GUILDHOOK_ON_MOTD_CHANGED, + GUILDHOOK_ON_INFO_CHANGED, + GUILDHOOK_ON_CREATE, + GUILDHOOK_ON_DISBAND, + GUILDHOOK_ON_MEMBER_WITDRAW_MONEY, + GUILDHOOK_ON_MEMBER_DEPOSIT_MONEY, + GUILDHOOK_ON_ITEM_MOVE, + GUILDHOOK_ON_EVENT, + GUILDHOOK_ON_BANK_EVENT, + GUILDHOOK_CAN_GUILD_SEND_BANK_LIST, + GUILDHOOK_END +}; class GuildScript : public ScriptObject { protected: - GuildScript(const char* name); + GuildScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>()); public: [[nodiscard]] bool IsDatabaseBound() const override { return false; } @@ -54,8 +72,7 @@ public: virtual void OnMemberDepositMoney(Guild* /*guild*/, Player* /*player*/, uint32& /*amount*/) { } // Called when a guild member moves an item in a guild bank. - virtual void OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/, - bool /*isDestBank*/, uint8 /*destContainer*/, uint8 /*destSlotId*/) { } + virtual void OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/, bool /*isDestBank*/, uint8 /*destContainer*/, uint8 /*destSlotId*/) { } virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, ObjectGuid::LowType /*playerGuid1*/, ObjectGuid::LowType /*playerGuid2*/, uint8 /*newRank*/) { } |
