diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-10-30 17:51:19 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-10-30 18:05:26 +0100 |
commit | b96bb1504222ddbadbee1df062450502e0dbd8a0 (patch) | |
tree | aec65f0e01cb521b9af10d21e296c386efd022f7 /src/server/game/Grids/ObjectGridLoader.cpp | |
parent | 60370d0c030c079a523fa026def8f780a6e07b28 (diff) |
Core/Corpses: Prevent deleting corpses by ObjectGridUnloader, fixes accessing freed memory in multiple places due to the corpse still being registered in Map containers
Closes #15775
Closes #15781
(cherry picked from commit a94bdd00a9f31dcd9e4134987531937ca57975d6)
Diffstat (limited to 'src/server/game/Grids/ObjectGridLoader.cpp')
-rw-r--r-- | src/server/game/Grids/ObjectGridLoader.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index ac853ada5d2..cd6cec78d56 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -153,7 +153,12 @@ void ObjectWorldLoader::Visit(CorpseMapType& /*m*/) for (Corpse* corpse : *corpses) { corpse->AddToWorld(); - i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()).AddWorldObject(corpse); + GridType& cell = i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()); + if (corpse->IsWorldObject()) + cell.AddWorldObject(corpse); + else + cell.AddGridObject(corpse); + ++i_corpses; } } @@ -231,7 +236,7 @@ void ObjectGridCleaner::Visit(GridRefManager<T> &m) template void ObjectGridUnloader::Visit(CreatureMapType &); template void ObjectGridUnloader::Visit(GameObjectMapType &); template void ObjectGridUnloader::Visit(DynamicObjectMapType &); -template void ObjectGridUnloader::Visit(CorpseMapType &); + template void ObjectGridUnloader::Visit(AreaTriggerMapType &); template void ObjectGridCleaner::Visit(CreatureMapType &); template void ObjectGridCleaner::Visit<GameObject>(GameObjectMapType &); |