mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-14 09:39:11 +00:00
feat(Core/Scripts): Optimize AllBattlegroundScript (#18704)
* Add files via upload * Update AllBattlegroundScript.h
This commit is contained in:
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
|
||||
{
|
||||
script->OnAddGroup(queue, ginfo, index, leader, group, bgTypeId, bracketEntry,
|
||||
arenaType, isRated, isPremade, arenaRating, matchmakerRating, arenaTeamId, opponentsArenaTeamId);
|
||||
});
|
||||
}
|
||||
|
||||
bool ScriptMgr::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id)
|
||||
{
|
||||
auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
|
||||
{
|
||||
return !script->CanFillPlayersToBG(queue, bg, bracket_id);
|
||||
});
|
||||
|
||||
return ReturnValidBool(ret);
|
||||
}
|
||||
|
||||
bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers)
|
||||
{
|
||||
auto ret = IsValidBoolScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
|
||||
{
|
||||
return script->IsCheckNormalMatch(queue, bgTemplate, bracket_id, minPlayers, maxPlayers);
|
||||
});
|
||||
|
||||
return ReturnValidBool(ret, true);
|
||||
CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_BATTLEGROUND_REMOVE_PLAYER_AT_LEAVE, script->OnBattlegroundRemovePlayerAtLeave(bg, player));
|
||||
}
|
||||
|
||||
void ScriptMgr::OnQueueUpdate(BattlegroundQueue* queue, uint32 diff, BattlegroundTypeId bgTypeId, BattlegroundBracketId bracket_id, uint8 arenaType, bool isRated, uint32 arenaRating)
|
||||
{
|
||||
ExecuteScript<AllBattlegroundScript>([&](AllBattlegroundScript* script)
|
||||
{
|
||||
script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating);
|
||||
});
|
||||
CALL_ENABLED_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_ON_QUEUE_UPDATE, script->OnQueueUpdate(queue, diff, bgTypeId, bracket_id, arenaType, isRated, arenaRating));
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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::CanFillPlayersToBG(BattlegroundQueue* queue, Battleground* bg, BattlegroundBracketId bracket_id)
|
||||
{
|
||||
CALL_ENABLED_BOOLEAN_HOOKS(AllBattlegroundScript, ALLBATTLEGROUNDHOOK_CAN_FILL_PLAYERS_TO_BG, !script->CanFillPlayersToBG(queue, bg, bracket_id));
|
||||
}
|
||||
|
||||
bool ScriptMgr::IsCheckNormalMatch(BattlegroundQueue* queue, Battleground* bgTemplate, BattlegroundBracketId bracket_id, uint32 minPlayers, uint32 maxPlayers)
|
||||
{
|
||||
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>;
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user