aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Globals/ObjectAccessor.h34
-rwxr-xr-xsrc/server/game/Maps/Map.cpp1
2 files changed, 14 insertions, 21 deletions
diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h
index 12e50c455ab..25fa20dce70 100755
--- a/src/server/game/Globals/ObjectAccessor.h
+++ b/src/server/game/Globals/ObjectAccessor.h
@@ -84,8 +84,7 @@ class HashMapHolder
class ObjectAccessor
{
- friend class ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>;
- friend class WorldRunnable;
+ friend class ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>;
private:
ObjectAccessor();
~ObjectAccessor();
@@ -93,9 +92,6 @@ class ObjectAccessor
ObjectAccessor& operator=(const ObjectAccessor&);
public:
- typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType;
- typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType;
-
// TODO: override these template functions for each holder type and add assertions
template<class T> static T* GetObjectInOrOutOfWorld(uint64 guid, T* /*typeSpecifier*/)
@@ -196,10 +192,10 @@ class ObjectAccessor
static Pet* FindPet(uint64);
static Player* FindPlayer(uint64);
static Unit* FindUnit(uint64);
- Player* FindPlayerByName(const char* name);
+ static Player* FindPlayerByName(const char* name);
// when using this, you must use the hashmapholder's lock
- HashMapHolder<Player>::MapType const& GetPlayers() const
+ static HashMapHolder<Player>::MapType const& GetPlayers()
{
return HashMapHolder<Player>::GetContainer();
}
@@ -216,24 +212,19 @@ class ObjectAccessor
// return HashMapHolder<GameObject>::GetContainer();
//}
- template<class T> void AddObject(T* object)
+ template<class T> static void AddObject(T* object)
{
HashMapHolder<T>::Insert(object);
}
- template<class T> void RemoveObject(T* object)
+ template<class T> static void RemoveObject(T* object)
{
HashMapHolder<T>::Remove(object);
}
- void RemoveObject(Player* pl)
- {
- HashMapHolder<Player>::Remove(pl);
- RemoveUpdateObject((Object*)pl);
- }
-
- void SaveAllPlayers();
+ static void SaveAllPlayers();
+ //non-static functions
void AddUpdateObject(Object* obj)
{
TRINITY_GUARD(ACE_Thread_Mutex, i_objectLock);
@@ -246,18 +237,16 @@ class ObjectAccessor
i_objects.erase(obj);
}
- void Update(uint32 diff);
-
//Thread safe
Corpse* GetCorpseForPlayerGUID(uint64 guid);
void RemoveCorpse(Corpse* corpse);
void AddCorpse(Corpse* corpse);
void AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid, Map* map);
Corpse* ConvertCorpseForPlayer(uint64 player_guid, bool insignia = false);
+
//Thread unsafe
+ void Update(uint32 diff);
void RemoveOldCorpses();
-
- protected:
void UnloadAll();
private:
@@ -265,6 +254,9 @@ class ObjectAccessor
static void _buildPacket(Player*, Object*, UpdateDataMapType&);
void _update();
+ typedef UNORDERED_MAP<uint64, Corpse*> Player2CorpsesMapType;
+ typedef UNORDERED_MAP<Player*, UpdateData>::value_type UpdateDataValueType;
+
std::set<Object*> i_objects;
Player2CorpsesMapType i_player2corpse;
@@ -272,5 +264,5 @@ class ObjectAccessor
ACE_RW_Thread_Mutex i_corpseLock;
};
-#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Thread_Mutex>::instance()
+#define sObjectAccessor ACE_Singleton<ObjectAccessor, ACE_Null_Mutex>::instance()
#endif
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index ebeac025f1d..c6fafe5446e 100755
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -312,6 +312,7 @@ template<>
void Map::DeleteFromWorld(Player* pl)
{
sObjectAccessor->RemoveObject(pl);
+ sObjectAccessor->RemoveUpdateObject(pl); //TODO: I do not know why we need this, it should be removed in ~Object anyway
delete pl;
}