*A hacky fix of the crash happening when player is teleported during logout.
--HG-- branch : trunk
This commit is contained in:
+3
-3
@@ -282,9 +282,9 @@ struct TRINITY_DLL_DECL mob_ethereal_beaconAI : public ScriptedAI
|
||||
|
||||
void JustDied(Unit* Killer)
|
||||
{
|
||||
Unit *Shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100);
|
||||
Creature *Shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100);
|
||||
if(Shaffar)
|
||||
CAST_AI(boss_nexusprince_shaffarAI, (CAST_CRE(Shaffar)->AI()))->RemoveBeaconFromList(m_creature);
|
||||
CAST_AI(boss_nexusprince_shaffarAI, Shaffar->AI())->RemoveBeaconFromList(m_creature);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
@@ -294,7 +294,7 @@ struct TRINITY_DLL_DECL mob_ethereal_beaconAI : public ScriptedAI
|
||||
|
||||
if(Check_Timer < diff)
|
||||
{
|
||||
Unit *Shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100);
|
||||
Creature *Shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100);
|
||||
if(!Shaffar || Shaffar->isDead() || !Shaffar->isInCombat())
|
||||
{
|
||||
KillSelf();
|
||||
|
||||
@@ -67,6 +67,13 @@ void WorldSession::HandleMoveWorldportAckOpcode()
|
||||
GetPlayer()->SetSemaphoreTeleportFar(false);
|
||||
|
||||
Map * oldMap = GetPlayer()->GetMap();
|
||||
assert(oldMap);
|
||||
if(GetPlayer()->IsInWorld())
|
||||
{
|
||||
sLog.outCrash("Player is still in world when teleported out of map %u! to new map %u", oldMap->GetId(), loc.mapid);
|
||||
oldMap->Remove(GetPlayer(), false);
|
||||
}
|
||||
|
||||
// relocate the player to the teleport destination
|
||||
Map * newMap = MapManager::Instance().CreateMap(loc.mapid, GetPlayer(), 0);
|
||||
// the CanEnter checks are done in TeleporTo but conditions may change
|
||||
|
||||
+3
-2
@@ -1617,12 +1617,13 @@ void Player::SendTeleportAckMsg()
|
||||
GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
// this is not used anywhere
|
||||
void Player::TeleportOutOfMap(Map *oldMap)
|
||||
{
|
||||
while(IsBeingTeleportedFar())
|
||||
GetSession()->HandleMoveWorldportAckOpcode();
|
||||
|
||||
if(FindMap() != oldMap)
|
||||
if(GetMap() != oldMap)
|
||||
return;
|
||||
|
||||
TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation());
|
||||
@@ -1630,7 +1631,7 @@ void Player::TeleportOutOfMap(Map *oldMap)
|
||||
while(IsBeingTeleportedFar())
|
||||
GetSession()->HandleMoveWorldportAckOpcode();
|
||||
|
||||
if(FindMap() == oldMap)
|
||||
if(GetMap() == oldMap)
|
||||
{
|
||||
sLog.outCrash("Cannot teleport player out of map!");
|
||||
ResetMap();
|
||||
|
||||
Reference in New Issue
Block a user