From 04b6dd20f50417c1b535afbcbb489bd0cbb25381 Mon Sep 17 00:00:00 2001 From: Sylvania Date: Tue, 1 Sep 2026 22:27:43 +0200 Subject: [PATCH] Playerbots : opcodes manquants sur les paquets de sortie de champ de bataille ProcessLeaveBG et ProcessLeaveAA construisaient BattlefieldLeave a partir dun WorldPacket() par defaut (opcode 65535), et ProcessInAAQueue passait CMSG_BATTLEMASTER_JOIN_SKIRMISH a BattlemasterJoinArena. Le constructeur de ClientPacket asserte GetOpcode() == expectedOpcode : le thread monde mourait des quun bot devait quitter un champ de bataille (fin de match ou depart dun vrai joueur), laissant le processus fige et les joueurs bloques a lecran de chargement. Signale sur le Discord avec une pile gdb par un utilisateur du core. Co-Authored-By: Claude Opus 5 --- src/server/game/Server/PlayerBotSession.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/server/game/Server/PlayerBotSession.cpp b/src/server/game/Server/PlayerBotSession.cpp index 01c21af..581cbd9 100644 --- a/src/server/game/Server/PlayerBotSession.cpp +++ b/src/server/game/Server/PlayerBotSession.cpp @@ -545,7 +545,8 @@ bool PlayerBotSession::ProcessLeaveBG(BotGlobleSchedule& schedule) PlayerBotMgr::SwitchPlayerBotAI(player, PlayerBotAIType::PBAIT_FIELD, true); - WorldPackets::Battleground::BattlefieldLeave leave(std::move(WorldPacket())); + WorldPacket opcode(CMSG_BATTLEFIELD_LEAVE); + WorldPackets::Battleground::BattlefieldLeave leave(std::move(opcode)); HandleBattlefieldLeaveOpcode(leave); //HandleWorldPortAck(); return false; @@ -571,7 +572,7 @@ bool PlayerBotSession::ProcessInAAQueue(BotGlobleSchedule& schedule) return false; } - WorldPacket packet(CMSG_BATTLEMASTER_JOIN_SKIRMISH); + WorldPacket packet(CMSG_BATTLEMASTER_JOIN_ARENA); WorldPackets::Battleground::BattlemasterJoinArena cmd(std::move(packet)); //cmd.RolesMask = schedule.parameter1; //cmd.Bracket = schedule.parameter2; @@ -688,7 +689,8 @@ bool PlayerBotSession::ProcessLeaveAA(BotGlobleSchedule& schedule) //opcode << un16; //HandleBattlefieldLeaveOpcode(opcode); //HandleMoveWorldportAckOpcode(); - WorldPackets::Battleground::BattlefieldLeave leave(std::move(WorldPacket())); + WorldPacket opcode(CMSG_BATTLEFIELD_LEAVE); + WorldPackets::Battleground::BattlefieldLeave leave(std::move(opcode)); HandleBattlefieldLeaveOpcode(leave); //HandleWorldPortAck(); return false;