mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[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:
parent
7323966738
commit
b49cf2df28
3 changed files with 14 additions and 12 deletions
|
|
@ -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();
|
||||
|
||||
player->RemoveFromWorld();
|
||||
RemoveFromGrid(player,grid,cell);
|
||||
|
||||
SendRemoveTransports(player);
|
||||
|
|
@ -830,7 +832,11 @@ Map::Remove(T *obj, bool remove)
|
|||
if(obj->isActiveObject())
|
||||
RemoveFromActive(obj);
|
||||
|
||||
obj->RemoveFromWorld();
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1757,11 +1757,12 @@ 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);
|
||||
}
|
||||
|
||||
// remove from old map now
|
||||
if(oldmap)
|
||||
oldmap->Remove(this, false);
|
||||
|
||||
// new final coordinates
|
||||
float final_x = x;
|
||||
float final_y = y;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8724"
|
||||
#define REVISION_NR "8725"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue