aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormegamage <megamage@mega.mage>2011-09-12 11:44:32 -0400
committermegamage <megamage@mega.mage>2011-09-12 11:44:32 -0400
commit2dbf64827aa49e9493262567a48dfbe93f139cb7 (patch)
tree6940d878f19944627531c607b94524285428f9fd
parentfc8d2f91f4f25e1072e44df9440be656a8408855 (diff)
Do not call AddObjectToRemoveList(Pet*) in Map::MoveAllCreaturesInMoveList(). Fix #2892.
-rwxr-xr-xsrc/server/game/Maps/Map.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 001f22815b5..418e06ed1c3 100755
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -824,9 +824,17 @@ void Map::MoveAllCreaturesInMoveList()
}
else
{
+ //AddObjectToRemoveList(Pet*) should only be called in Pet::Remove
+ //This may happen when a player just logs in and a pet moves to a nearby unloaded cell
+ //To avoid this, we can load nearby cells when player log in
+ //But this check is always needed to ensure safety
+ if (c->isPet())
+ {
+ ((Pet*)c)->Remove(PET_SAVE_NOT_IN_SLOT, true);
+ }
// if creature can't be move in new cell/grid (not loaded) move it to repawn cell/grid
// creature coordinates will be updated and notifiers send
- if (!CreatureRespawnRelocation(c))
+ else if (!CreatureRespawnRelocation(c))
{
// ... or unload (if respawn grid also not loaded)
#ifdef TRINITY_DEBUG