Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- commit f791a2fa3e1424643262fa084000efdf2bb8d4eb
- Author: balrok <[email protected]>
- Date: Sat Mar 27 18:17:59 2010 +0100
- [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.
- Conflicts:
- src/game/Map.cpp
- src/shared/revision_nr.h
- ich hab die conflicts in der map.cpp garnicht erst grosz beachtet sondern gleich die map.cpp von origin/master als vorbild genommen
- das entspricht dann etwa:
- [8739] Call cleaniup code at remove player from Map before Map unlinking.
- This fix crash when aura remove triggering spell casting.
- diff --git a/src/game/Map.cpp b/src/game/Map.cpp
- index 9099876..2c190ca 100644
- --- a/src/game/Map.cpp
- +++ b/src/game/Map.cpp
- @@ -711,6 +711,11 @@ void Map::Update(const uint32 &t_diff)
- void Map::Remove(Player *player, bool remove)
- {
- + if(remove)
- + player->CleanupsBeforeDelete();
- + else
- + player->RemoveFromWorld();
- +
- // this may be called during Map::Update
- // after decrement+unlink, ++m_mapRefIter will continue correctly
- // when the first element of the list is being removed
- @@ -723,7 +728,7 @@ void Map::Remove(Player *player, bool remove)
- if(p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP)
- {
- // invalid coordinates
- - player->RemoveFromWorld();
- + //player->ResetMap();
- if( remove )
- DeleteFromWorld(player);
- @@ -743,13 +748,13 @@ void Map::Remove(Player *player, bool remove)
- NGridType *grid = getNGrid(cell.GridX(), cell.GridY());
- assert(grid != NULL);
- - player->RemoveFromWorld();
- RemoveFromGrid(player,grid,cell);
- SendRemoveTransports(player);
- UpdateObjectsVisibilityFor(player,cell,p);
- + //player->ResetMap();
- if( remove )
- DeleteFromWorld(player);
- }
- @@ -789,7 +794,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);
- @@ -1983,9 +1992,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:
- @@ -3280,8 +3286,6 @@ void Map::SendObjectUpdates()
- {
- Object* obj = *i_objectsToClientUpdate.begin();
- i_objectsToClientUpdate.erase(i_objectsToClientUpdate.begin());
- - if (!obj)
- - continue;
- obj->BuildUpdateData(update_players);
- }
- diff --git a/src/game/Player.cpp b/src/game/Player.cpp
- index 9e10e51..0851c1b 100644
- --- a/src/game/Player.cpp
- +++ b/src/game/Player.cpp
- @@ -1750,11 +1750,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;
- commit d9033399fc7c14f64bd657c3d170271d92557361
- Author: balrok <[email protected]>
- Date: Mon Apr 5 00:10:03 2010 +0200
- [8729] Fix crash added in [8725]. Sorry.
- Conflicts:
- src/shared/revision_nr.h
- diff --git a/src/game/Object.cpp b/src/game/Object.cpp
- index 64b59fe..daf228f 100644
- --- a/src/game/Object.cpp
- +++ b/src/game/Object.cpp
- @@ -1069,6 +1069,7 @@ WorldObject::WorldObject()
- void WorldObject::CleanupsBeforeDelete()
- {
- + RemoveFromWorld();
- }
- void WorldObject::_Create( uint32 guidlow, HighGuid guidhigh, uint32 mapid )
- diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
- index 352ecf4..8360d5e 100644
- --- a/src/game/Unit.cpp
- +++ b/src/game/Unit.cpp
- @@ -12010,7 +12010,7 @@ void Unit::CleanupsBeforeDelete()
- RemoveAllAuras(AURA_REMOVE_BY_DELETE);
- GetMotionMaster()->Clear(false); // remove different non-standard movement generators.
- }
- - RemoveFromWorld();
- + WorldObject::CleanupsBeforeDelete();
- }
- CharmInfo* Unit::InitCharmInfo(Unit *charm)
- commit a5984ec2faa95b956b7cdb89614772fdfa220677
- Author: balrok <[email protected]>
- Date: Wed Apr 7 15:05:29 2010 +0200
- noch ein crashfix fuer 8725
- eigtl muesste a2d396eb0bb195efc460944dd4e0fab2a858b300 noch gebackported werden dafuer
- diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
- index 3ed2630..e9598cd 100644
- --- a/src/game/GameObject.cpp
- +++ b/src/game/GameObject.cpp
- @@ -92,6 +92,7 @@ void GameObject::CleanupsBeforeDelete()
- }
- }
- }
- + Object::CleanupsBeforeDelete();
- }
- void GameObject::AddToWorld()
- commit 0ae48a5b51f020307eb9c4272341b00f8bfc202b
- Author: balrok <[email protected]>
- Date: Wed Apr 7 15:13:27 2010 +0200
- crashfix fix
- diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
- index e9598cd..1479aec 100644
- --- a/src/game/GameObject.cpp
- +++ b/src/game/GameObject.cpp
- @@ -92,7 +92,7 @@ void GameObject::CleanupsBeforeDelete()
- }
- }
- }
- - Object::CleanupsBeforeDelete();
- + WorldObject::CleanupsBeforeDelete();
- }
- void GameObject::AddToWorld()
Advertisement
Add Comment
Please, Sign In to add comment