[8725] Fixed bug with crash at forced logout in combat in instance.

In fact this old bug that just has been triggred more often after recent code changes,
so with some chance maybe some other logout related crashes fixed.

Also small cleanup in avoid double calls RemoveFromWorld and CleanupsBeforeDelete in some cases.
This commit is contained in:
VladimirMangos 2009-10-25 01:03:52 +04:00
parent 7323966738
commit b49cf2df28
3 changed files with 14 additions and 12 deletions

View file

@ -735,9 +735,10 @@ void Map::Remove(Player *player, bool remove)
{
if(remove)
player->CleanupsBeforeDelete();
else
player->RemoveFromWorld();
// invalid coordinates
player->RemoveFromWorld();
player->ResetMap();
if( remove )
@ -760,8 +761,9 @@ void Map::Remove(Player *player, bool remove)
if(remove)
player->CleanupsBeforeDelete();
else
player->RemoveFromWorld();
RemoveFromGrid(player,grid,cell);
SendRemoveTransports(player);
@ -830,7 +832,11 @@ Map::Remove(T *obj, bool remove)
if(obj->isActiveObject())
RemoveFromActive(obj);
if(remove)
obj->CleanupsBeforeDelete();
else
obj->RemoveFromWorld();
RemoveFromGrid(obj,grid,cell);
UpdateObjectVisibility(obj,cell,p);
@ -2161,9 +2167,6 @@ void Map::RemoveAllObjectsInRemoveList()
Remove((GameObject*)obj,true);
break;
case TYPEID_UNIT:
// in case triggered sequence some spell can continue casting after prev CleanupsBeforeDelete call
// make sure that like sources auras/etc removed before destructor start
((Creature*)obj)->CleanupsBeforeDelete ();
Remove((Creature*)obj,true);
break;
default:
@ -3487,8 +3490,6 @@ void Map::SendObjectUpdates()
{
Object* obj = *i_objectsToClientUpdate.begin();
i_objectsToClientUpdate.erase(i_objectsToClientUpdate.begin());
if (!obj)
continue;
obj->BuildUpdateData(update_players);
}

View file

@ -1757,10 +1757,11 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
}
GetSession()->SendPacket( &data );
SendSavedInstances();
}
// remove from old map now
if(oldmap) oldmap->Remove(this, false);
}
if(oldmap)
oldmap->Remove(this, false);
// new final coordinates
float final_x = x;

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "8724"
#define REVISION_NR "8725"
#endif // __REVISION_NR_H__