diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-10-29 18:46:37 +0100 | 
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-10-29 18:46:37 +0100 | 
| commit | 1d17475791cae66beafda1e2c3198a66d355086f (patch) | |
| tree | 518034e30a7531dbb98e3d14ffc65edb3ef4e10d | |
| parent | 7dcddd90be6e49281ca04239de5839e757ef3f7a (diff) | |
Core/Corpses: Fixed map crash happening during map unload when there are corpses inside
| -rw-r--r-- | src/server/game/Entities/Corpse/Corpse.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Corpse/Corpse.h | 2 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 9 | 
3 files changed, 10 insertions, 3 deletions
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index b744914988e..ea6fbd34813 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -59,7 +59,7 @@ void Corpse::RemoveFromWorld()      WorldObject::RemoveFromWorld();  } -bool Corpse::Create(ObjectGuid::LowType guidlow, Map* map) +bool Corpse::Create(ObjectGuid::LowType guidlow)  {      Object::_Create(guidlow, 0, HighGuid::Corpse);      return true; diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index c135548bee3..7f2608e4bf3 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -55,7 +55,7 @@ class Corpse : public WorldObject, public GridObject<Corpse>          void AddToWorld() override;          void RemoveFromWorld() override; -        bool Create(ObjectGuid::LowType guidlow, Map* map); +        bool Create(ObjectGuid::LowType guidlow);          bool Create(ObjectGuid::LowType guidlow, Player* owner);          void SaveToDB(); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index a9ef590f84e..2b60ae53c9d 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1603,11 +1603,18 @@ void Map::UnloadAll()      }      for (auto& cellCorpsePair : _corpsesByCell) +    {          for (Corpse* corpse : cellCorpsePair.second) +        { +            corpse->RemoveFromWorld(); +            corpse->ResetMap();              delete corpse; +        } +    }      _corpsesByCell.clear();      _corpsesByPlayer.clear(); +    _corpseBones.clear();  }  // ***************************** @@ -3632,7 +3639,7 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*=      {          // Create bones, don't change Corpse          bones = new Corpse(); -        bones->Create(corpse->GetGUID().GetCounter(), this); +        bones->Create(corpse->GetGUID().GetCounter());          for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i)                    // don't overwrite guid and object type              bones->SetUInt32Value(i, corpse->GetUInt32Value(i));  | 
