aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/framework/GameSystem/Grid.h24
-rw-r--r--src/game/Map.cpp12
-rw-r--r--src/game/Map.h2
-rw-r--r--src/game/Unit.cpp8
4 files changed, 28 insertions, 18 deletions
diff --git a/src/framework/GameSystem/Grid.h b/src/framework/GameSystem/Grid.h
index 06c4dde2ed3..326101d68dd 100644
--- a/src/framework/GameSystem/Grid.h
+++ b/src/framework/GameSystem/Grid.h
@@ -60,16 +60,18 @@ class TRINITY_DLL_DECL Grid
/** an object of interested enters the grid
*/
- template<class SPECIFIC_OBJECT> bool AddWorldObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
+ template<class SPECIFIC_OBJECT> void AddWorldObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
{
- return i_objects.template insert<SPECIFIC_OBJECT>(hdl, obj);
+ if(!i_objects.template insert<SPECIFIC_OBJECT>(hdl, obj))
+ assert(false);
}
/** an object of interested exits the grid
*/
- template<class SPECIFIC_OBJECT> bool RemoveWorldObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
+ template<class SPECIFIC_OBJECT> void RemoveWorldObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
{
- return i_objects.template remove<SPECIFIC_OBJECT>(obj, hdl);
+ if(!i_objects.template remove<SPECIFIC_OBJECT>(obj, hdl))
+ assert(false);
}
/** Accessors: Returns a specific type of object in the WORDL_OBJECT_TYPES
@@ -114,20 +116,18 @@ class TRINITY_DLL_DECL Grid
/** Inserts a container type object into the grid.
*/
- template<class SPECIFIC_OBJECT> bool AddGridObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
+ template<class SPECIFIC_OBJECT> void AddGridObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
{
- //if(obj->isActiveObject())
- // m_activeGridObjects.insert(obj);
- return i_container.template insert<SPECIFIC_OBJECT>(hdl, obj);
+ if(!i_container.template insert<SPECIFIC_OBJECT>(hdl, obj))
+ assert(false);
}
/** Removes a containter type object from the grid
*/
- template<class SPECIFIC_OBJECT> bool RemoveGridObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
+ template<class SPECIFIC_OBJECT> void RemoveGridObject(SPECIFIC_OBJECT *obj, OBJECT_HANDLE hdl)
{
- //if(obj->isActiveObject())
- // m_activeGridObjects.erase(obj);
- return i_container.template remove<SPECIFIC_OBJECT>(obj, hdl);
+ if(!i_container.template remove<SPECIFIC_OBJECT>(obj, hdl))
+ assert(false);
}
/*bool NoWorldObjectInGrid() const
diff --git a/src/game/Map.cpp b/src/game/Map.cpp
index cb472947169..1bb000b6d80 100644
--- a/src/game/Map.cpp
+++ b/src/game/Map.cpp
@@ -339,19 +339,23 @@ void Map::SwitchGridContainers(T* obj, bool on)
if(on)
{
- if(!grid.RemoveGridObject<T>(obj, obj->GetGUID())
+ grid.RemoveGridObject<T>(obj, obj->GetGUID());
+ grid.AddWorldObject<T>(obj, obj->GetGUID());
+ /*if(!grid.RemoveGridObject<T>(obj, obj->GetGUID())
|| !grid.AddWorldObject<T>(obj, obj->GetGUID()))
{
assert(false);
- }
+ }*/
}
else
{
- if(!grid.RemoveWorldObject<T>(obj, obj->GetGUID())
+ grid.RemoveWorldObject<T>(obj, obj->GetGUID());
+ grid.AddGridObject<T>(obj, obj->GetGUID());
+ /*if(!grid.RemoveWorldObject<T>(obj, obj->GetGUID())
|| !grid.AddGridObject<T>(obj, obj->GetGUID()))
{
assert(false);
- }
+ }*/
}
obj->IsTempWorldObject = on;
}
diff --git a/src/game/Map.h b/src/game/Map.h
index 42e66996d3b..d7b3747fb34 100644
--- a/src/game/Map.h
+++ b/src/game/Map.h
@@ -372,6 +372,8 @@ class TRINITY_DLL_SPEC Map : public GridRefManager<NGridType>, public Trinity::O
if(m_activeNonPlayersIter != m_activeNonPlayers.end())
{
ActiveNonPlayers::iterator itr = m_activeNonPlayers.find(obj);
+ if(itr == m_activeNonPlayers.end())
+ return;
if(itr==m_activeNonPlayersIter)
++m_activeNonPlayersIter;
m_activeNonPlayers.erase(itr);
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index cb718546146..c3073251f34 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -8526,19 +8526,23 @@ void Unit::SetCharm(Unit* pet)
void Unit::AddPlayerToVision(Player* plr)
{
- setActive(true);
if(m_sharedVision.empty())
+ {
+ setActive(true);
SetWorldObject(true);
+ }
m_sharedVision.push_back(plr);
plr->SetFarsightTarget(this);
}
void Unit::RemovePlayerFromVision(Player* plr)
{
- setActive(false);
m_sharedVision.remove(plr);
if(m_sharedVision.empty())
+ {
+ setActive(false);
SetWorldObject(false);
+ }
plr->ClearFarsight();
}