feat(Core/Scripts): Optimize AccountScript need#18672 (#18697)

Add files via upload
This commit is contained in:
天鹿
2024-04-12 04:09:02 +08:00
committed by GitHub
parent f792b0d708
commit 83c4382c70
2 changed files with 32 additions and 50 deletions

View File

@@ -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>;

View File

@@ -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