diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 21:53:08 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 10:53:08 -0300 |
| commit | f0a21100c54561a38552ae1b60912b9db7848bd2 (patch) | |
| tree | fdf5026a96c320bbeeb58893ecd7c856d65abd97 /src/server/game/Scripting/ScriptDefines | |
| parent | bf4f9774c15c224b6aa3632e54f7db2f59cff3c6 (diff) | |
feat(Core/Scripts): Optimize FormulaScript (#18710)
* Add files via upload
* Update FormulaScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/FormulaScript.cpp | 56 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/FormulaScript.h | 17 |
2 files changed, 33 insertions, 40 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/FormulaScript.cpp b/src/server/game/Scripting/ScriptDefines/FormulaScript.cpp index d9b276f784..7eb79ae0e5 100644 --- a/src/server/game/Scripting/ScriptDefines/FormulaScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/FormulaScript.cpp @@ -21,42 +21,27 @@ void ScriptMgr::OnHonorCalculation(float& honor, uint8 level, float multiplier) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnHonorCalculation(honor, level, multiplier); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_HONOR_CALCULATION, script->OnHonorCalculation(honor, level, multiplier)); } void ScriptMgr::OnGrayLevelCalculation(uint8& grayLevel, uint8 playerLevel) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnGrayLevelCalculation(grayLevel, playerLevel); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_GRAY_LEVEL_CALCULATION, script->OnGrayLevelCalculation(grayLevel, playerLevel)); } void ScriptMgr::OnColorCodeCalculation(XPColorChar& color, uint8 playerLevel, uint8 mobLevel) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnColorCodeCalculation(color, playerLevel, mobLevel); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_COLOR_CODE_CALCULATION, script->OnColorCodeCalculation(color, playerLevel, mobLevel)); } void ScriptMgr::OnZeroDifferenceCalculation(uint8& diff, uint8 playerLevel) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnZeroDifferenceCalculation(diff, playerLevel); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_ZERO_DIFFERENCE_CALCULATION, script->OnZeroDifferenceCalculation(diff, playerLevel)); } void ScriptMgr::OnBaseGainCalculation(uint32& gain, uint8 playerLevel, uint8 mobLevel, ContentLevels content) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnBaseGainCalculation(gain, playerLevel, mobLevel, content); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_BASE_GAIN_CALCULATION, script->OnBaseGainCalculation(gain, playerLevel, mobLevel, content)); } void ScriptMgr::OnGainCalculation(uint32& gain, Player* player, Unit* unit) @@ -64,40 +49,33 @@ void ScriptMgr::OnGainCalculation(uint32& gain, Player* player, Unit* unit) ASSERT(player); ASSERT(unit); - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnGainCalculation(gain, player, unit); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_GAIN_CALCULATION, script->OnGainCalculation(gain, player, unit)); } void ScriptMgr::OnGroupRateCalculation(float& rate, uint32 count, bool isRaid) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnGroupRateCalculation(rate, count, isRaid); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_GROUP_RATE_CALCULATION, script->OnGroupRateCalculation(rate, count, isRaid)); } void ScriptMgr::OnAfterArenaRatingCalculation(Battleground* const bg, int32& winnerMatchmakerChange, int32& loserMatchmakerChange, int32& winnerChange, int32& loserChange) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnAfterArenaRatingCalculation(bg, winnerMatchmakerChange, loserMatchmakerChange, winnerChange, loserChange); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_AFTER_ARENA_RATING_CALCULATION, script->OnAfterArenaRatingCalculation(bg, winnerMatchmakerChange, loserMatchmakerChange, winnerChange, loserChange)); } void ScriptMgr::OnBeforeUpdatingPersonalRating(int32& mod, uint32 type) { - ExecuteScript<FormulaScript>([&](FormulaScript* script) - { - script->OnBeforeUpdatingPersonalRating(mod, type); - }); + CALL_ENABLED_HOOKS(FormulaScript, FORMULAHOOK_ON_BEFORE_UPDATING_PERSONAL_RATING, script->OnBeforeUpdatingPersonalRating(mod, type)); } -FormulaScript::FormulaScript(const char* name) - : ScriptObject(name) +FormulaScript::FormulaScript(const char* name, std::vector<uint16> enabledHooks) + : ScriptObject(name, FORMULAHOOK_END) { - ScriptRegistry<FormulaScript>::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < FORMULAHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry<FormulaScript>::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry<FormulaScript>; diff --git a/src/server/game/Scripting/ScriptDefines/FormulaScript.h b/src/server/game/Scripting/ScriptDefines/FormulaScript.h index 7f664be164..2145e0f0c5 100644 --- a/src/server/game/Scripting/ScriptDefines/FormulaScript.h +++ b/src/server/game/Scripting/ScriptDefines/FormulaScript.h @@ -19,13 +19,28 @@ #define SCRIPT_OBJECT_FORMULA_SCRIPT_H_ #include "ScriptObject.h" +#include <vector> + +enum FormulaHook +{ + FORMULAHOOK_ON_HONOR_CALCULATION, + FORMULAHOOK_ON_GRAY_LEVEL_CALCULATION, + FORMULAHOOK_ON_COLOR_CODE_CALCULATION, + FORMULAHOOK_ON_ZERO_DIFFERENCE_CALCULATION, + FORMULAHOOK_ON_BASE_GAIN_CALCULATION, + FORMULAHOOK_ON_GAIN_CALCULATION, + FORMULAHOOK_ON_GROUP_RATE_CALCULATION, + FORMULAHOOK_ON_AFTER_ARENA_RATING_CALCULATION, + FORMULAHOOK_ON_BEFORE_UPDATING_PERSONAL_RATING, + FORMULAHOOK_END +}; enum XPColorChar : uint8; class FormulaScript : public ScriptObject { protected: - FormulaScript(const char* name); + FormulaScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>()); public: // Called after calculating honor. |
