summaryrefslogtreecommitdiff
path: root/src/server/game/Scripting/ScriptDefines
diff options
context:
space:
mode:
author天鹿 <18535853+PkllonG@users.noreply.github.com>2024-04-12 22:00:31 +0800
committerGitHub <noreply@github.com>2024-04-12 11:00:31 -0300
commit0e1888ac92e4ceab56128d656d07dc9c3a635fd9 (patch)
tree819a2b84f434d923082fd4f97cc48c9a21075435 /src/server/game/Scripting/ScriptDefines
parentb3a332f57cf00b0e3bad302e228fdf9826994883 (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.cpp57
-rw-r--r--src/server/game/Scripting/ScriptDefines/AchievementScript.h13
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; }