diff options
| author | 天鹿 <18535853+PkllonG@users.noreply.github.com> | 2024-04-12 21:54:35 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 10:54:35 -0300 |
| commit | 55233dd17b5ff2287685ebfd977cb01c611dfdad (patch) | |
| tree | 6659c640d058710cf4c3adba6f0fc2b573e4350f /src/server/game/Scripting/ScriptDefines | |
| parent | 8d20a25e96c9eab5e1ce69e6f248b4bfb9a18fd4 (diff) | |
feat(Core/Scripts): Optimize ServerScript (#18721)
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Add files via upload
* Update ServerScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/ServerScript.cpp | 63 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptDefines/ServerScript.h | 14 |
2 files changed, 31 insertions, 46 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/ServerScript.cpp b/src/server/game/Scripting/ScriptDefines/ServerScript.cpp index ef0e8b721f..1384d680be 100644 --- a/src/server/game/Scripting/ScriptDefines/ServerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/ServerScript.cpp @@ -21,86 +21,59 @@ void ScriptMgr::OnNetworkStart() { - ExecuteScript<ServerScript>([&](ServerScript* script) - { - script->OnNetworkStart(); - }); + CALL_ENABLED_HOOKS(ServerScript, SERVERHOOK_ON_NETWORK_START, script->OnNetworkStart()); } void ScriptMgr::OnNetworkStop() { - ExecuteScript<ServerScript>([&](ServerScript* script) - { - script->OnNetworkStop(); - }); + CALL_ENABLED_HOOKS(ServerScript, SERVERHOOK_ON_NETWORK_STOP, script->OnNetworkStop()); } void ScriptMgr::OnSocketOpen(std::shared_ptr<WorldSocket> socket) { ASSERT(socket); - ExecuteScript<ServerScript>([&](ServerScript* script) - { - script->OnSocketOpen(socket); - }); + CALL_ENABLED_HOOKS(ServerScript, SERVERHOOK_ON_SOCKET_OPEN, script->OnSocketOpen(socket)); } void ScriptMgr::OnSocketClose(std::shared_ptr<WorldSocket> socket) { ASSERT(socket); - ExecuteScript<ServerScript>([&](ServerScript* script) - { - script->OnSocketClose(socket); - }); + CALL_ENABLED_HOOKS(ServerScript, SERVERHOOK_ON_SOCKET_CLOSE, script->OnSocketClose(socket)); } -bool ScriptMgr::CanPacketReceive(WorldSession* session, WorldPacket const& packet) +bool ScriptMgr::CanPacketSend(WorldSession* session, WorldPacket const& packet) { + ASSERT(session); + if (ScriptRegistry<ServerScript>::ScriptPointerList.empty()) return true; WorldPacket copy(packet); - auto ret = IsValidBoolScript<ServerScript>([&](ServerScript* script) - { - return !script->CanPacketReceive(session, copy); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(ServerScript, SERVERHOOK_CAN_PACKET_SEND, !script->CanPacketSend(session, copy)); } -bool ScriptMgr::CanPacketSend(WorldSession* session, WorldPacket const& packet) +bool ScriptMgr::CanPacketReceive(WorldSession* session, WorldPacket const& packet) { - ASSERT(session); - if (ScriptRegistry<ServerScript>::ScriptPointerList.empty()) return true; WorldPacket copy(packet); - auto ret = IsValidBoolScript<ServerScript>([&](ServerScript* script) - { - return !script->CanPacketSend(session, copy); - }); - - if (ret && *ret) - { - return false; - } - - return true; + CALL_ENABLED_BOOLEAN_HOOKS(ServerScript, SERVERHOOK_CAN_PACKET_RECEIVE, !script->CanPacketReceive(session, copy)); } -ServerScript::ServerScript(const char* name) - : ScriptObject(name) +ServerScript::ServerScript(const char* name, std::vector<uint16> enabledHooks) + : ScriptObject(name, SERVERHOOK_END) { - ScriptRegistry<ServerScript>::AddScript(this); + // If empty - enable all available hooks. + if (enabledHooks.empty()) + for (uint16 i = 0; i < SERVERHOOK_END; ++i) + enabledHooks.emplace_back(i); + + ScriptRegistry<ServerScript>::AddScript(this, std::move(enabledHooks)); } template class AC_GAME_API ScriptRegistry<ServerScript>; diff --git a/src/server/game/Scripting/ScriptDefines/ServerScript.h b/src/server/game/Scripting/ScriptDefines/ServerScript.h index b09c07ecba..03c974194c 100644 --- a/src/server/game/Scripting/ScriptDefines/ServerScript.h +++ b/src/server/game/Scripting/ScriptDefines/ServerScript.h @@ -19,11 +19,23 @@ #define SCRIPT_OBJECT_SERVER_SCRIPT_H_ #include "ScriptObject.h" +#include <vector> + +enum ServerHook +{ + SERVERHOOK_ON_NETWORK_START, + SERVERHOOK_ON_NETWORK_STOP, + SERVERHOOK_ON_SOCKET_OPEN, + SERVERHOOK_ON_SOCKET_CLOSE, + SERVERHOOK_CAN_PACKET_SEND, + SERVERHOOK_CAN_PACKET_RECEIVE, + SERVERHOOK_END +}; class ServerScript : public ScriptObject { protected: - ServerScript(const char* name); + ServerScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>()); public: // Called when reactive socket I/O is started (WorldSocketMgr). |
