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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user