diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 04:09:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-11 17:09:02 -0300 |
| commit | 83c4382c70c30a901c28f850d0b53a143ab2250b (patch) | |
| tree | 3812a9f1d6d49fda57467ff5e6f643e92a7cf530 /src/server/game/Scripting/ScriptDefines | |
| parent | f792b0d708a073ebfe863ef961d877376a11c705 (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.cpp | 66 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/AccountScript.h | 16 |
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 |
