From f7c82f0089417c583d8fb0c4f4d852794b71096c Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Tue, 11 Aug 2026 23:37:03 +0200 Subject: [PATCH] BG BotFill : QueueID renseigne dans l inscription BG des bots + garde-fou anti sur-provision ProcessInBGQueue envoyait BattlemasterJoin avec QueueID=0 (ligne commentee du portage) : toutes les inscriptions bots etaient rejetees (invalid bgtype 0). Ajout de GetScheduledBotCount : tant que 8+ bots sont en cours d engagement (login/re-level/inscription), le tick n en engage pas de nouveaux (on est montes a 92 bots en ligne pour un 15v15). Co-Authored-By: Claude Fable 5 --- src/server/game/PlayerBot/PlayerBotMgr.cpp | 20 ++++++++++++++++++++ src/server/game/PlayerBot/PlayerBotMgr.h | 1 + src/server/game/Server/PlayerBotSession.cpp | 5 +++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/server/game/PlayerBot/PlayerBotMgr.cpp b/src/server/game/PlayerBot/PlayerBotMgr.cpp index 6b35043..1afd797 100644 --- a/src/server/game/PlayerBot/PlayerBotMgr.cpp +++ b/src/server/game/PlayerBot/PlayerBotMgr.cpp @@ -3036,8 +3036,28 @@ bool PlayerBotMgr::CanReadyArenaByArenaTeamID(uint32 arenaTeamId) return true; } +// SylvaniaCore (module BG BotFill): nombre de bots en cours d engagement (login / +// re-level / inscription pas encore aboutis). Sert de garde-fou anti sur-provision : +// tant que des bots sont en vol, le tick n en engage pas de nouveaux. +uint32 PlayerBotMgr::GetScheduledBotCount() +{ + uint32 count = 0; + const SessionMap& allSession = sWorld->GetAllSessions(); + for (SessionMap::const_iterator itSession = allSession.begin(); itSession != allSession.end(); itSession++) + { + if (!itSession->second || !itSession->second->IsBotSession()) + continue; + PlayerBotSession* pSession = dynamic_cast((WorldSession*)itSession->second); + if (pSession && !pSession->IsAccountBotSession() && pSession->HasSchedules()) + ++count; + } + return count; +} + void PlayerBotMgr::QueryBattlegroundRequirement() { + if (GetScheduledBotCount() >= 8) + return; int32 teamSizeCap = sConfigMgr->GetIntDefault("pbotbg_maxperteam", 0); for (BattleGroundTypes::iterator itType = m_BGTypes.begin(); itType != m_BGTypes.end(); itType++) { diff --git a/src/server/game/PlayerBot/PlayerBotMgr.h b/src/server/game/PlayerBot/PlayerBotMgr.h index e650055..00bb297 100644 --- a/src/server/game/PlayerBot/PlayerBotMgr.h +++ b/src/server/game/PlayerBot/PlayerBotMgr.h @@ -396,6 +396,7 @@ private: uint32 GetScheduleTalentByLFGRequirement(lfg::LfgRoles roles, uint32 botCls); void QueryBattlegroundRequirement(); void UpdateIdleBotLogout(); + uint32 GetScheduledBotCount(); void QueryRatedArenaRequirement(); void QueryNonRatedArenaRequirement(); void OnlinePlayerBotByGUIDQueue(); diff --git a/src/server/game/Server/PlayerBotSession.cpp b/src/server/game/Server/PlayerBotSession.cpp index 96bad33..14cb633 100644 --- a/src/server/game/Server/PlayerBotSession.cpp +++ b/src/server/game/Server/PlayerBotSession.cpp @@ -445,8 +445,9 @@ bool PlayerBotSession::ProcessInBGQueue(BotGlobleSchedule& schedule) WorldPacket cmd(CMSG_BATTLEMASTER_JOIN); WorldPackets::Battleground::BattlemasterJoin packet(std::move(cmd)); - //packet.QueueID = MS::Battlegrounds::QueueOffsets::Battleground + MS::Battlegrounds::BattlegroundTypeId::BattlegroundRandom; - //packet.RolesMask = 14; + // SylvaniaCore (module BG BotFill): le QueueID n etait jamais renseigne (ligne commentee + // du portage) -> le handler recevait bgtype 0 et rejetait toutes les inscriptions bots + packet.QueueID = uint64(schedule.parameter1); HandleBattlemasterJoinOpcode(packet); return false; }