diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-10-30 17:53:00 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-10-30 17:53:00 +0100 |
commit | 8c9ea7782a4eb251933f43d57bf8271c11a0e6a6 (patch) | |
tree | 4a748e59226089d8e5598106a997fcedca4c5a9c /src | |
parent | a94bdd00a9f31dcd9e4134987531937ca57975d6 (diff) |
Core/Corpses: Fixed a crash happening when a corpse is added to a grid that was not yet fully loaded
Closes #15684
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2b60ae53c9d..5054ff36bfe 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -299,6 +299,25 @@ void Map::AddToGrid(DynamicObject* obj, Cell const& cell) obj->SetCurrentCell(cell); } +template<> +void Map::AddToGrid(Corpse* obj, Cell const& cell) +{ + NGridType* grid = getNGrid(cell.GridX(), cell.GridY()); + if (obj->IsWorldObject()) + { + // Corpses are a special object type - they can be added to grid via a call to AddToMap + // or loaded through ObjectGridLoader. + // Both corpses loaded from database and these freshly generated by Player::CreateCoprse are added to _corpsesByCell + // ObjectGridLoader loads all corpses from _corpsesByCell even if they were already added to grid before it was loaded + // so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader) + // to avoid failing an assertion in GridObject::AddToGrid + if (grid->isGridObjectDataLoaded()) + grid->GetGridType(cell.CellX(), cell.CellY()).AddWorldObject(obj); + } + else + grid->GetGridType(cell.CellX(), cell.CellY()).AddGridObject(obj); // bones. nothing special here +} + template<class T> void Map::SwitchGridContainers(T* /*obj*/, bool /*on*/) { } |