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 <noreply@anthropic.com>
This commit is contained in:
Sylvania
2026-09-01 22:27:43 +02:00
parent ac40810f25
commit 04b6dd20f5
+5 -3
View File
@@ -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;