diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 22:00:31 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 11:00:31 -0300 |
| commit | 0e1888ac92e4ceab56128d656d07dc9c3a635fd9 (patch) | |
| tree | 819a2b84f434d923082fd4f97cc48c9a21075435 /src/server/game/Scripting/ScriptDefines | |
| parent | b3a332f57cf00b0e3bad302e228fdf9826994883 (diff) | |
feat(Core/Scripts): Optimize AchievementScript (#18705)
* Add files via upload
* Update AchievementScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/AchievementScript.cpp | 57 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/AchievementScript.h | 13 |
2 files changed, 25 insertions, 45 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/AchievementScript.cpp b/src/server/game/Scripting/ScriptDefines/AchievementScript.cpp index 4dc58634d6..9bc742b73c 100644 --- a/src/server/game/Scripting/ScriptDefines/AchievementScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/AchievementScript.cpp @@ -21,69 +21,38 @@ void ScriptMgr::SetRealmCompleted(AchievementEntry const* achievement) { - ExecuteScript<AchievementScript>([&](AchievementScript* script) - { - script->SetRealmCompleted(achievement); - }); + CALL_ENABLED_HOOKS(AchievementScript, ACHIEVEMENTHOOK_SET_REALM_COMPLETED, script->SetRealmCompleted(achievement)); } bool ScriptMgr::IsCompletedCriteria(AchievementMgr* mgr, AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement, CriteriaProgress const* progress) { - auto ret = IsValidBoolScript<AchievementScript>([&](AchievementScript* script) - { - return !script->IsCompletedCriteria(mgr, achievementCriteria, achievement, progress); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(AchievementScript, ACHIEVEMENTHOOK_IS_COMPLETED_CRITERIA, !script->IsCompletedCriteria(mgr, achievementCriteria, achievement, progress)); } bool ScriptMgr::IsRealmCompleted(AchievementGlobalMgr const* globalmgr, AchievementEntry const* achievement, SystemTimePoint completionTime) { - auto ret = IsValidBoolScript<AchievementScript>([&](AchievementScript* script) - { - return !script->IsRealmCompleted(globalmgr, achievement, completionTime); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(AchievementScript, ACHIEVEMENTHOOK_IS_REALM_COMPLETED, !script->IsRealmCompleted(globalmgr, achievement, completionTime)); } void ScriptMgr::OnBeforeCheckCriteria(AchievementMgr* mgr, std::list<AchievementCriteriaEntry const*> const* achievementCriteriaList) { - ExecuteScript<AchievementScript>([&](AchievementScript* script) - { - script->OnBeforeCheckCriteria(mgr, achievementCriteriaList); - }); + CALL_ENABLED_HOOKS(AchievementScript, ACHIEVEMENTHOOK_ON_BEFORE_CHECK_CRITERIA, script->OnBeforeCheckCriteria(mgr, achievementCriteriaList)); } bool ScriptMgr::CanCheckCriteria(AchievementMgr* mgr, AchievementCriteriaEntry const* achievementCriteria) { - auto ret = IsValidBoolScript<AchievementScript>([&](AchievementScript* script) - { - return !script->CanCheckCriteria(mgr, achievementCriteria); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(AchievementScript, ACHIEVEMENTHOOK_CAN_CHECK_CRITERIA, !script->CanCheckCriteria(mgr, achievementCriteria)); } -AchievementScript::AchievementScript(const char* name) - : ScriptObject(name) +AchievementScript::AchievementScript(const char* name, std::vector<uint16> enabledHooks) + : ScriptObject(name, ACHIEVEMENTHOOK_END) { - ScriptRegistry<AchievementScript>::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < ACHIEVEMENTHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry<AchievementScript>::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry<AchievementScript>; diff --git a/src/server/game/Scripting/ScriptDefines/AchievementScript.h b/src/server/game/Scripting/ScriptDefines/AchievementScript.h index d1e8ab0767..84aa3746e4 100644 --- a/src/server/game/Scripting/ScriptDefines/AchievementScript.h +++ b/src/server/game/Scripting/ScriptDefines/AchievementScript.h @@ -21,11 +21,22 @@ #include "Duration.h" #include "ScriptObject.h" #include <list> +#include <vector> + +enum AchievementHook +{ + ACHIEVEMENTHOOK_SET_REALM_COMPLETED, + ACHIEVEMENTHOOK_IS_COMPLETED_CRITERIA, + ACHIEVEMENTHOOK_IS_REALM_COMPLETED, + ACHIEVEMENTHOOK_ON_BEFORE_CHECK_CRITERIA, + ACHIEVEMENTHOOK_CAN_CHECK_CRITERIA, + ACHIEVEMENTHOOK_END +}; class AchievementScript : public ScriptObject { protected: - AchievementScript(const char* name); + AchievementScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>()); public: [[nodiscard]] bool IsDatabaseBound() const override { return false; } |
