diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 21:55:18 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 10:55:18 -0300 |
| commit | e4cae908faddcd8caf6ed5cd9f30e86f0936518d (patch) | |
| tree | 9a43c866eb49cdc9a522405e42c08427f85e368b /src/server/game/Scripting/ScriptDefines | |
| parent | 574bdc2869c4abe9768279c45a1582ec4c4455f1 (diff) | |
feat(Core/Scripts): Optimize MiscScript (#18719)
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Update MiscScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/MiscScript.cpp | 140 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/MiscScript.h | 26 |
2 files changed, 60 insertions, 106 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/MiscScript.cpp b/src/server/game/Scripting/ScriptDefines/MiscScript.cpp index 6bcba89629..7ec76e4e7c 100644 --- a/src/server/game/Scripting/ScriptDefines/MiscScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/MiscScript.cpp @@ -19,175 +19,105 @@ #include "ScriptMgr.h" #include "ScriptMgrMacros.h" -void ScriptMgr::OnItemCreate(Item* item, ItemTemplate const* itemProto, Player const* owner) -{ - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnItemCreate(item, itemProto, owner); - }); -} - -bool ScriptMgr::CanApplySoulboundFlag(Item* item, ItemTemplate const* proto) -{ - auto ret = IsValidBoolScript<MiscScript>([&](MiscScript* script) - { - return !script->CanApplySoulboundFlag(item, proto); - }); - - if (ret && *ret) - { - return false; - } - - return true; -} - void ScriptMgr::OnConstructObject(Object* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnConstructObject(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_CONSTRUCT_OBJECT, script->OnConstructObject(origin)); } void ScriptMgr::OnDestructObject(Object* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnDestructObject(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_DESTRUCT_OBJECT, script->OnDestructObject(origin)); } void ScriptMgr::OnConstructPlayer(Player* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnConstructPlayer(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_CONSTRUCT_PLAYER, script->OnConstructPlayer(origin)); } void ScriptMgr::OnDestructPlayer(Player* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnDestructPlayer(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_DESTRUCT_PLAYER, script->OnDestructPlayer(origin)); } void ScriptMgr::OnConstructGroup(Group* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnConstructGroup(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_CONSTRUCT_GROUP, script->OnConstructGroup(origin)); } void ScriptMgr::OnDestructGroup(Group* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnDestructGroup(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_DESTRUCT_GROUP, script->OnDestructGroup(origin)); } void ScriptMgr::OnConstructInstanceSave(InstanceSave* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnConstructInstanceSave(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_CONSTRUCT_INSTANCE_SAVE, script->OnConstructInstanceSave(origin)); } void ScriptMgr::OnDestructInstanceSave(InstanceSave* origin) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnDestructInstanceSave(origin); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_DESTRUCT_INSTANCE_SAVE, script->OnDestructInstanceSave(origin)); } -bool ScriptMgr::CanItemApplyEquipSpell(Player* player, Item* item) +void ScriptMgr::OnItemCreate(Item* item, ItemTemplate const* itemProto, Player const* owner) { - auto ret = IsValidBoolScript<MiscScript>([&](MiscScript* script) - { - return !script->CanItemApplyEquipSpell(player, item); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_ITEM_CREATE, script->OnItemCreate(item, itemProto, owner)); +} - if (ret && *ret) - { - return false; - } +bool ScriptMgr::CanApplySoulboundFlag(Item* item, ItemTemplate const* proto) +{ + CALL_ENABLED_BOOLEAN_HOOKS(MiscScript, MISCHOOK_CAN_APPLY_SOULBOUND_FLAG, !script->CanApplySoulboundFlag(item, proto)); +} - return true; +bool ScriptMgr::CanItemApplyEquipSpell(Player* player, Item* item) +{ + CALL_ENABLED_BOOLEAN_HOOKS(MiscScript, MISCHOOK_CAN_ITEM_APPLY_EQUIP_SPELL, !script->CanItemApplyEquipSpell(player, item)); } bool ScriptMgr::CanSendAuctionHello(WorldSession const* session, ObjectGuid guid, Creature* creature) { - auto ret = IsValidBoolScript<MiscScript>([&](MiscScript* script) - { - return !script->CanSendAuctionHello(session, guid, creature); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(MiscScript, MISCHOOK_CAN_SEND_AUCTIONHELLO, !script->CanSendAuctionHello(session, guid, creature)); } void ScriptMgr::ValidateSpellAtCastSpell(Player* player, uint32& oldSpellId, uint32& spellId, uint8& castCount, uint8& castFlags) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->ValidateSpellAtCastSpell(player, oldSpellId, spellId, castCount, castFlags); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_VALIDATE_SPELL_AT_CAST_SPELL, script->ValidateSpellAtCastSpell(player, oldSpellId, spellId, castCount, castFlags)); } void ScriptMgr::ValidateSpellAtCastSpellResult(Player* player, Unit* mover, Spell* spell, uint32 oldSpellId, uint32 spellId) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->ValidateSpellAtCastSpellResult(player, mover, spell, oldSpellId, spellId); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_VALIDATE_SPELL_AT_CAST_SPELL_RESULT, script->ValidateSpellAtCastSpellResult(player, mover, spell, oldSpellId, spellId)); } void ScriptMgr::OnAfterLootTemplateProcess(Loot* loot, LootTemplate const* tab, LootStore const& store, Player* lootOwner, bool personal, bool noEmptyError, uint16 lootMode) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnAfterLootTemplateProcess(loot, tab, store, lootOwner, personal, noEmptyError, lootMode); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_AFTER_LOOT_TEMPLATE_PROCESS, script->OnAfterLootTemplateProcess(loot, tab, store, lootOwner, personal, noEmptyError, lootMode)); } -void ScriptMgr::OnInstanceSave(InstanceSave* instanceSave) +void ScriptMgr::OnPlayerSetPhase(const AuraEffect* auraEff, AuraApplication const* aurApp, uint8 mode, bool apply, uint32& newPhase) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnInstanceSave(instanceSave); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_PLAYER_SET_PHASE, script->OnPlayerSetPhase(auraEff, aurApp, mode, apply, newPhase)); } -void ScriptMgr::OnPlayerSetPhase(const AuraEffect* auraEff, AuraApplication const* aurApp, uint8 mode, bool apply, uint32& newPhase) +void ScriptMgr::OnInstanceSave(InstanceSave* instanceSave) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->OnPlayerSetPhase(auraEff, aurApp, mode, apply, newPhase); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_ON_INSTANCE_SAVE, script->OnInstanceSave(instanceSave)); } void ScriptMgr::GetDialogStatus(Player* player, Object* questgiver) { - ExecuteScript<MiscScript>([&](MiscScript* script) - { - script->GetDialogStatus(player, questgiver); - }); + CALL_ENABLED_HOOKS(MiscScript, MISCHOOK_GET_DIALOG_STATUS, script->GetDialogStatus(player, questgiver)); } -MiscScript::MiscScript(const char* name) - : ScriptObject(name) +MiscScript::MiscScript(const char* name, std::vector<uint16> enabledHooks) + : ScriptObject(name, MISCHOOK_END) { - ScriptRegistry<MiscScript>::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < MISCHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry<MiscScript>::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry<MiscScript>; diff --git a/src/server/game/Scripting/ScriptDefines/MiscScript.h b/src/server/game/Scripting/ScriptDefines/MiscScript.h index cb3004003f..607c34dce1 100644 --- a/src/server/game/Scripting/ScriptDefines/MiscScript.h +++ b/src/server/game/Scripting/ScriptDefines/MiscScript.h @@ -20,11 +20,35 @@ #include "ObjectGuid.h" #include "ScriptObject.h" +#include <vector> + +enum MiscHook +{ + MISCHOOK_ON_CONSTRUCT_OBJECT, + MISCHOOK_ON_DESTRUCT_OBJECT, + MISCHOOK_ON_CONSTRUCT_PLAYER, + MISCHOOK_ON_DESTRUCT_PLAYER, + MISCHOOK_ON_CONSTRUCT_GROUP, + MISCHOOK_ON_DESTRUCT_GROUP, + MISCHOOK_ON_CONSTRUCT_INSTANCE_SAVE, + MISCHOOK_ON_DESTRUCT_INSTANCE_SAVE, + MISCHOOK_ON_ITEM_CREATE, + MISCHOOK_CAN_APPLY_SOULBOUND_FLAG, + MISCHOOK_CAN_ITEM_APPLY_EQUIP_SPELL, + MISCHOOK_CAN_SEND_AUCTIONHELLO, + MISCHOOK_VALIDATE_SPELL_AT_CAST_SPELL, + MISCHOOK_VALIDATE_SPELL_AT_CAST_SPELL_RESULT, + MISCHOOK_ON_AFTER_LOOT_TEMPLATE_PROCESS, + MISCHOOK_ON_PLAYER_SET_PHASE, + MISCHOOK_ON_INSTANCE_SAVE, + MISCHOOK_GET_DIALOG_STATUS, + MISCHOOK_END +}; class MiscScript : public ScriptObject { protected: - MiscScript(const char* name); + MiscScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>()); public: [[nodiscard]] bool IsDatabaseBound() const override { return false; } |
