summaryrefslogtreecommitdiff
path: root/src/server/game/Scripting/ScriptDefines
diff options
context:
space:
mode:
author天鹿 <18535853+PkllonG@users.noreply.github.com>2024-04-12 04:09:02 +0800
committerGitHub <noreply@github.com>2024-04-11 17:09:02 -0300
commit83c4382c70c30a901c28f850d0b53a143ab2250b (patch)
tree3812a9f1d6d49fda57467ff5e6f643e92a7cf530 /src/server/game/Scripting/ScriptDefines
parentf792b0d708a073ebfe863ef961d877376a11c705 (diff)
feat(Core/Scripts): Optimize AccountScript need#18672 (#18697)
Add files via upload
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
-rw-r--r--src/server/game/Scripting/ScriptDefines/AccountScript.cpp66
-rw-r--r--src/server/game/Scripting/ScriptDefines/AccountScript.h16
2 files changed, 32 insertions, 50 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/AccountScript.cpp b/src/server/game/Scripting/ScriptDefines/AccountScript.cpp
index 199956b1d4..0858d8b4ad 100644
--- a/src/server/game/Scripting/ScriptDefines/AccountScript.cpp
+++ b/src/server/game/Scripting/ScriptDefines/AccountScript.cpp
@@ -21,90 +21,58 @@
void ScriptMgr::OnAccountLogin(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnAccountLogin(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_ACCOUNT_LOGIN, script->OnAccountLogin(accountId));
}
void ScriptMgr::OnBeforeAccountDelete(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnBeforeAccountDelete(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_BEFORE_ACCOUNT_DELETE, script->OnBeforeAccountDelete(accountId));
}
-//void ScriptMgr::OnAccountLogout(uint32 accountId)
-//{
-// ExecuteScript<AccountScript>([&](AccountScript* script)
-// {
-// script->OnAccountLogout(accountId);
-// });
-//}
-
void ScriptMgr::OnLastIpUpdate(uint32 accountId, std::string ip)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnLastIpUpdate(accountId, ip);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_LAST_IP_UPDATE, script->OnLastIpUpdate(accountId, ip));
}
void ScriptMgr::OnFailedAccountLogin(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnFailedAccountLogin(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_FAILED_ACCOUNT_LOGIN, script->OnFailedAccountLogin(accountId));
}
void ScriptMgr::OnEmailChange(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnEmailChange(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_EMAIL_CHANGE, script->OnEmailChange(accountId));
}
void ScriptMgr::OnFailedEmailChange(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnFailedEmailChange(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_FAILED_EMAIL_CHANGE, script->OnFailedEmailChange(accountId));
}
void ScriptMgr::OnPasswordChange(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnPasswordChange(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_PASSWORD_CHANGE, script->OnPasswordChange(accountId));
}
void ScriptMgr::OnFailedPasswordChange(uint32 accountId)
{
- ExecuteScript<AccountScript>([&](AccountScript* script)
- {
- script->OnFailedPasswordChange(accountId);
- });
+ CALL_ENABLED_HOOKS(AccountScript, ACCOUNTHOOK_ON_FAILED_PASSWORD_CHANGE, script->OnFailedPasswordChange(accountId));
}
bool ScriptMgr::CanAccountCreateCharacter(uint32 accountId, uint8 charRace, uint8 charClass)
{
- auto ret = IsValidBoolScript<AccountScript>([&](AccountScript* script)
- {
- return !script->CanAccountCreateCharacter(accountId, charRace, charClass);
- });
-
- return ReturnValidBool(ret);
+ CALL_ENABLED_BOOLEAN_HOOKS(AccountScript, ACCOUNTHOOK_CAN_ACCOUNT_CREATE_CHARACTER, !script->CanAccountCreateCharacter(accountId, charRace, charClass));
}
-AccountScript::AccountScript(char const* name) :
- ScriptObject(name)
+AccountScript::AccountScript(char const* name, std::vector<uint16> enabledHooks) :
+ ScriptObject(name, ACCOUNTHOOK_END)
{
- ScriptRegistry<AccountScript>::AddScript(this);
+ // If empty - enable all available hooks.
+ if (enabledHooks.empty())
+ for (uint16 i = 0; i < ACCOUNTHOOK_END; i++)
+ enabledHooks.emplace_back(i);
+
+ ScriptRegistry<AccountScript>::AddScript(this, std::move(enabledHooks));
}
template class AC_GAME_API ScriptRegistry<AccountScript>;
diff --git a/src/server/game/Scripting/ScriptDefines/AccountScript.h b/src/server/game/Scripting/ScriptDefines/AccountScript.h
index 76b3db4591..705eac6764 100644
--- a/src/server/game/Scripting/ScriptDefines/AccountScript.h
+++ b/src/server/game/Scripting/ScriptDefines/AccountScript.h
@@ -20,10 +20,24 @@
#include "ScriptObject.h"
+enum AccountHook
+{
+ ACCOUNTHOOK_ON_ACCOUNT_LOGIN,
+ ACCOUNTHOOK_ON_BEFORE_ACCOUNT_DELETE,
+ ACCOUNTHOOK_ON_LAST_IP_UPDATE,
+ ACCOUNTHOOK_ON_FAILED_ACCOUNT_LOGIN,
+ ACCOUNTHOOK_ON_EMAIL_CHANGE,
+ ACCOUNTHOOK_ON_FAILED_EMAIL_CHANGE,
+ ACCOUNTHOOK_ON_PASSWORD_CHANGE,
+ ACCOUNTHOOK_ON_FAILED_PASSWORD_CHANGE,
+ ACCOUNTHOOK_CAN_ACCOUNT_CREATE_CHARACTER,
+ ACCOUNTHOOK_END
+};
+
class AccountScript : public ScriptObject
{
protected:
- AccountScript(const char* name);
+ AccountScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>());
public:
// Called when an account logged in successfully