summaryrefslogtreecommitdiff
path: root/src/server/game/Scripting/ScriptDefines
diff options
context:
space:
mode:
author天鹿 <18535853+PkllonG@users.noreply.github.com>2024-04-12 21:54:35 +0800
committerGitHub <noreply@github.com>2024-04-12 10:54:35 -0300
commit55233dd17b5ff2287685ebfd977cb01c611dfdad (patch)
tree6659c640d058710cf4c3adba6f0fc2b573e4350f /src/server/game/Scripting/ScriptDefines
parent8d20a25e96c9eab5e1ce69e6f248b4bfb9a18fd4 (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.cpp63
-rw-r--r--src/server/game/Scripting/ScriptDefines/ServerScript.h14
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).