Merge pull request #354 from liyunfan1223/crash-fix-0717

Fix crash caused by summon to instance and avoid aoe
This commit is contained in:
Yunfan Li
2024-07-17 21:22:33 +08:00
committed by GitHub
3 changed files with 26 additions and 15 deletions

View File

@@ -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));
}

View File

@@ -164,6 +164,15 @@ bool SummonAction::SummonUsingNpcs(Player* summoner, Player* player)
bool SummonAction::Teleport(Player* summoner, Player* player)
{
Player* master = GetMaster();
if (master->GetMap() && master->GetMap()->IsDungeon()) {
InstanceMap* map = master->GetMap()->ToInstanceMap();
if (map) {
if (map->CannotEnter(player) == Map::CANNOT_ENTER_MAX_PLAYERS) {
botAI->TellError("I can not enter this dungeon");
return false;
}
}
}
if (!summoner->IsBeingTeleported() && !player->IsBeingTeleported())
{
float followAngle = GetFollowAngle();

View File

@@ -46,7 +46,7 @@ class AreaDebuffValue : public CalculatedValue<Aura*>
{
public:
AreaDebuffValue(PlayerbotAI* botAI) :
CalculatedValue<Aura*>(botAI, "area debuff", 1 * 1000) { }
CalculatedValue<Aura*>(botAI, "area debuff", 1) { }
Aura* Calculate() override;
};