diff options
| author | megamage <none@none.none> | 2011-11-10 17:31:45 -0500 |
|---|---|---|
| committer | megamage <none@none.none> | 2011-11-10 17:31:45 -0500 |
| commit | 31a88d4fe5d5dea87f4dad24e4d7c3c1d47fc48c (patch) | |
| tree | 959c67bc2442019a69d37877fc7e7bcb33225ab6 /src/server/game/Grids | |
| parent | 23b3f16f3a4a27b7b24081b725666c5897fdbbee (diff) | |
Fix the crash when removing object from an unloaded grid. Object should always be unlinked from grid no matter if the grid is loaded.
Diffstat (limited to 'src/server/game/Grids')
| -rwxr-xr-x | src/server/game/Grids/Grid.h | 30 | ||||
| -rwxr-xr-x | src/server/game/Grids/ObjectGridLoader.cpp | 2 |
2 files changed, 15 insertions, 17 deletions
diff --git a/src/server/game/Grids/Grid.h b/src/server/game/Grids/Grid.h index cf6eb2471da..448c4cb35fd 100755 --- a/src/server/game/Grids/Grid.h +++ b/src/server/game/Grids/Grid.h @@ -58,20 +58,19 @@ class Grid */ template<class SPECIFIC_OBJECT> void AddWorldObject(SPECIFIC_OBJECT *obj) { - ASSERT(!obj->GetGridRef().isValid()); i_objects.template insert<SPECIFIC_OBJECT>(obj); - ASSERT(obj->GetGridRef().isValid()); + ASSERT(obj->IsInGrid()); } /** an object of interested exits the grid */ //Actually an unlink is enough, no need to go through the container - template<class SPECIFIC_OBJECT> void RemoveWorldObject(SPECIFIC_OBJECT *obj) - { - ASSERT(obj->GetGridRef().isValid()); - i_objects.template remove<SPECIFIC_OBJECT>(obj); - ASSERT(!obj->GetGridRef().isValid()); - } + //template<class SPECIFIC_OBJECT> void RemoveWorldObject(SPECIFIC_OBJECT *obj) + //{ + // ASSERT(obj->GetGridRef().isValid()); + // i_objects.template remove<SPECIFIC_OBJECT>(obj); + // ASSERT(!obj->GetGridRef().isValid()); + //} /** Refreshes/update the grid. This required for remote grids. */ @@ -107,19 +106,18 @@ class Grid */ template<class SPECIFIC_OBJECT> void AddGridObject(SPECIFIC_OBJECT *obj) { - ASSERT(!obj->GetGridRef().isValid()); i_container.template insert<SPECIFIC_OBJECT>(obj); - ASSERT(obj->GetGridRef().isValid()); + ASSERT(obj->IsInGrid()); } /** Removes a containter type object from the grid */ - template<class SPECIFIC_OBJECT> void RemoveGridObject(SPECIFIC_OBJECT *obj) - { - ASSERT(obj->GetGridRef().isValid()); - i_container.template remove<SPECIFIC_OBJECT>(obj); - ASSERT(!obj->GetGridRef().isValid()); - } + //template<class SPECIFIC_OBJECT> void RemoveGridObject(SPECIFIC_OBJECT *obj) + //{ + // ASSERT(obj->GetGridRef().isValid()); + // i_container.template remove<SPECIFIC_OBJECT>(obj); + // ASSERT(!obj->GetGridRef().isValid()); + //} /*bool NoWorldObjectInGrid() const { diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index e38c74dd8e4..1f27aeb4742 100755 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -77,7 +77,7 @@ template<> void ObjectGridLoader::SetObjectCell(Creature* obj, CellCoord const& template <class T> void AddObjectHelper(CellCoord &cell, GridRefManager<T> &m, uint32 &count, Map* map, T *obj) { - obj->GetGridRef().link(&m, obj); + obj->AddToGrid(m); ObjectGridLoader::SetObjectCell(obj, cell); obj->AddToWorld(); if (obj->isActiveObject()) |
