From 770921ae50c0c8330bceffc6f8ca85bbf727237b Mon Sep 17 00:00:00 2001 From: Yunfan Li Date: Wed, 17 Jul 2024 19:48:27 +0800 Subject: [PATCH] [Crash fix] Fix summon to instance crash --- src/PlayerbotAI.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/PlayerbotAI.cpp b/src/PlayerbotAI.cpp index 6996d460..4e90e020 100644 --- a/src/PlayerbotAI.cpp +++ b/src/PlayerbotAI.cpp @@ -450,22 +450,24 @@ void PlayerbotAI::HandleTeleportAck() bot->GetMotionMaster()->Clear(true); bot->StopMoving(); - if (bot->IsBeingTeleportedNear()) - { - WorldPacket p = WorldPacket(MSG_MOVE_TELEPORT_ACK, 8 + 4 + 4); - p << bot->GetGUID().WriteAsPacked(); - p << (uint32) 0; // supposed to be flags? not used currently - p << (uint32) time(nullptr); // time - not currently used - bot->GetSession()->HandleMoveTeleportAck(p); - - // add delay to simulate teleport delay + if (bot->IsBeingTeleportedNear()) { + while (bot->IsInWorld() && bot->IsBeingTeleportedNear()) { + Player* plMover = bot->m_mover->ToPlayer(); + if (!plMover) + return; + WorldPacket p = WorldPacket(MSG_MOVE_TELEPORT_ACK, 8 + 4 + 4); + p << plMover->GetPackGUID(); + p << (uint32) 0; // supposed to be flags? not used currently + p << (uint32) 0; // time - not currently used + bot->GetSession()->HandleMoveTeleportAck(p); + } SetNextCheckDelay(urand(1000, 3000)); - } - else if (bot->IsBeingTeleportedFar()) + } + if (bot->IsBeingTeleportedFar()) { - bot->GetSession()->HandleMoveWorldportAck(); - - // add delay to simulate teleport delay + while (bot->IsBeingTeleportedFar()) { + bot->GetSession()->HandleMoveWorldportAck(); + } SetNextCheckDelay(urand(2000, 5000)); }