summaryrefslogtreecommitdiff
path: root/src/server/game/Scripting/ScriptDefines
diff options
context:
space:
mode:
author天鹿 <18535853+PkllonG@users.noreply.github.com>2024-04-12 22:00:16 +0800
committerGitHub <noreply@github.com>2024-04-12 11:00:16 -0300
commitb3a332f57cf00b0e3bad302e228fdf9826994883 (patch)
treef088a14773789b46471fd364dccd17d255f77cb2 /src/server/game/Scripting/ScriptDefines
parenta4af83b277d47a1e5827e19095ee5089ac075606 (diff)
feat(Core/Scripts): Optimize AllBattlegroundScript (#18704)
* Add files via upload * Update AllBattlegroundScript.h
Diffstat (limited to 'src/server/game/Scripting/ScriptDefines')
-rw-r--r--src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp111
-rw-r--r--src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h24
2 files changed, 51 insertions, 84 deletions
diff --git a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp
index b5828687a8..0c9ecfc200 100644
--- a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp
+++ b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.cpp
@@ -21,148 +21,93 @@
void ScriptMgr::OnBattlegroundStart(Battleground* bg)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundStart(bg);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_START, script->OnBattlegroundStart(bg));
}
void ScriptMgr::OnBattlegroundEndReward(Battleground* bg, Player* player, TeamId winnerTeamId)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundEndReward(bg, player, winnerTeamId);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END_REWARD, script->OnBattlegroundEndReward(bg, player, winnerTeamId));
}
void ScriptMgr::OnBattlegroundUpdate(Battleground* bg, uint32 diff)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundUpdate(bg, diff);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_UPDATE, script->OnBattlegroundUpdate(bg, diff));
}
void ScriptMgr::OnBattlegroundAddPlayer(Battleground* bg, Player* player)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundAddPlayer(bg, player);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_ADD_PLAYER, script->OnBattlegroundAddPlayer(bg, player));
}
void ScriptMgr::OnBattlegroundBeforeAddPlayer(Battleground* bg, Player* player)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundBeforeAddPlayer(bg, player);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_BEFORE_ADD_PLAYER, script->OnBattlegroundBeforeAddPlayer(bg, player));
}
void ScriptMgr::OnBattlegroundRemovePlayerAtLeave(Battleground* bg, Player* player)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundRemovePlayerAtLeave(bg, player);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_REMOVE_PLAYER_AT_LEAVE, script->OnBattlegroundRemovePlayerAtLeave(bg, player));
}
-void ScriptMgr::OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry,
- uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId, uint32 opponentsArenaTeamId)
+void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnAddGroup(queue, ginfo, index, leader, group, bgTypeId, bracketEntry,
- arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_QUEUE_UPDATE, script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating));
}
-bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id)
+void ScriptMgr::OnAddGroup(BattlegroundQueue* queue, GroupQueueInfo* ginfo, uint32& index, Player* leader, Group* group, BattlegroundTypeId bgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 arenaType, bool isRated, bool isPremade, uint32 arenaRating, uint32 matchmakerRating, uint32 arenaTeamId, uint32 opponentsArenaTeamId)
{
- auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- return !script->CanFillPlayersToBG(queue, bg, bracket_id);
- });
-
- return ReturnValidBool(ret);
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_ADD_GROUP, script->OnAddGroup(queue, ginfo, index, leader, group, bgTypeId, bracketEntry, arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId));
}
-bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers)
+bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id)
{
- auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- return script->IsCheckNormalMatch(queue, bgTemplate, bracket_id, minPlayers, maxPlayers);
- });
-
- return ReturnValidBool(ret, true);
+ CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_CAN_FILL_PLAYERS_TO_BG, !script->CanFillPlayersToBG(queue, bg, bracket_id));
}
-void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating)
+bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating);
- });
+ CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_IS_CHECK_NORMAL_MATCH, script->IsCheckNormalMatch(queue, bgTemplate, bracket_id, minPlayers, maxPlayers));
}
bool ScriptMgr::CanSendMessageBGQueue(BattlegroundQueue* queue, Player* leader, Battleground* bg, PvPDifficultyEntry const* bracketEntry)
{
- auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- return !script->CanSendMessageBGQueue(queue, leader, bg, bracketEntry);
- });
-
- return ReturnValidBool(ret);
+ CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_CAN_SEND_MESSAGE_BG_QUEUE, !script->CanSendMessageBGQueue(queue, leader, bg, bracketEntry));
}
bool ScriptMgr::OnBeforeSendJoinMessageArenaQueue(BattlegroundQueue* queue, Player* leader, GroupQueueInfo* ginfo, PvPDifficultyEntry const* bracketEntry, bool isRated)
{
- auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- return !script->OnBeforeSendJoinMessageArenaQueue(queue, leader, ginfo, bracketEntry, isRated);
- });
-
- return ReturnValidBool(ret);
+ CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_JOIN_MESSAGE_ARENA_QUEUE, !script->OnBeforeSendJoinMessageArenaQueue(queue, leader, ginfo, bracketEntry, isRated));
}
bool ScriptMgr::OnBeforeSendExitMessageArenaQueue(BattlegroundQueue* queue, GroupQueueInfo* ginfo)
{
- auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- return !script->OnBeforeSendExitMessageArenaQueue(queue, ginfo);
- });
-
- return ReturnValidBool(ret);
+ CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_EXIT_MESSAGE_ARENA_QUEUE, !script->OnBeforeSendExitMessageArenaQueue(queue, ginfo));
}
void ScriptMgr::OnBattlegroundEnd(Battleground* bg, TeamId winnerTeam)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundEnd(bg, winnerTeam);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END, script->OnBattlegroundEnd(bg, winnerTeam));
}
void ScriptMgr::OnBattlegroundDestroy(Battleground* bg)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundDestroy(bg);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_DESTROY, script->OnBattlegroundDestroy(bg));
}
void ScriptMgr::OnBattlegroundCreate(Battleground* bg)
{
- ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
- {
- script->OnBattlegroundCreate(bg);
- });
+ CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_CREATE, script->OnBattlegroundCreate(bg));
}
-AllBattlegroundScript::AllBattlegroundScript(char const* name) :
- ScriptObject(name)
+AllBattlegroundScript::AllBattlegroundScript(char const* name, std::vector<uint16> enabledHooks) :
+ ScriptObject(name, ALLBATTLEGROUNDHOOK_END)
{
- ScriptRegistry<AllBattlegroundScript>::AddScript(this);
+ // If empty - enable all available hooks.
+ if (enabledHooks.empty())
+ for (uint16 i = 0; i < ALLBATTLEGROUNDHOOK_END; ++i)
+ enabledHooks.emplace_back(i);
+
+ ScriptRegistry<AllBattlegroundScript>::AddScript(this, std::move(enabledHooks));
}
template class AC_GAME_API ScriptRegistry<AllBattlegroundScript>;
diff --git a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h
index 379cc4635e..880518b5dc 100644
--- a/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h
+++ b/src/server/game/Scripting/ScriptDefines/AllBattlegroundScript.h
@@ -19,6 +19,28 @@
#define SCRIPT_OBJECT_ALL_BATTLEGROUND_SCRIPT_H_
#include "ScriptObject.h"
+#include <vector>
+
+enum AllBattlegroundHook
+{
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_START,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END_REWARD,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_UPDATE,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_ADD_PLAYER,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_BEFORE_ADD_PLAYER,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_REMOVE_PLAYER_AT_LEAVE,
+ ALLBATTLEGROUNDHOOK_ON_QUEUE_UPDATE,
+ ALLBATTLEGROUNDHOOK_ON_ADD_GROUP,
+ ALLBATTLEGROUNDHOOK_CAN_FILL_PLAYERS_TO_BG,
+ ALLBATTLEGROUNDHOOK_IS_CHECK_NORMAL_MATCH,
+ ALLBATTLEGROUNDHOOK_CAN_SEND_MESSAGE_BG_QUEUE,
+ ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_JOIN_MESSAGE_ARENA_QUEUE,
+ ALLBATTLEGROUNDHOOK_ON_BEFORE_SEND_EXIT_MESSAGE_ARENA_QUEUE,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_END,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_DESTROY,
+ ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_CREATE,
+ ALLBATTLEGROUNDHOOK_END
+};
enum BattlegroundBracketId : uint8;
enum BattlegroundTypeId : uint8;
@@ -27,7 +49,7 @@ enum TeamId : uint8;
class AllBattlegroundScript : public ScriptObject
{
protected:
- AllBattlegroundScript(const char* name);
+ AllBattlegroundScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>());
public:
[[nodiscard]] bool IsDatabaseBound() const override { return false; }