aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-10-29 18:46:37 +0100
committerShauren <shauren.trinity@gmail.com>2015-10-29 18:46:37 +0100
commit1d17475791cae66beafda1e2c3198a66d355086f (patch)
tree518034e30a7531dbb98e3d14ffc65edb3ef4e10d /src
parent7dcddd90be6e49281ca04239de5839e757ef3f7a (diff)
Core/Corpses: Fixed map crash happening during map unload when there are corpses inside
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp2
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h2
-rw-r--r--src/server/game/Maps/Map.cpp9
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));