diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/GameEventMgr.cpp | 18 | ||||
-rw-r--r-- | src/game/Map.h | 6 | ||||
-rw-r--r-- | src/game/ObjectMgr.cpp | 4 | ||||
-rw-r--r-- | src/game/PoolHandler.cpp | 16 | ||||
-rw-r--r-- | src/shared/Database/DBCFileLoader.h | 6 |
5 files changed, 20 insertions, 30 deletions
diff --git a/src/game/GameEventMgr.cpp b/src/game/GameEventMgr.cpp index 3d19b8197cb..7c879d86e7f 100644 --- a/src/game/GameEventMgr.cpp +++ b/src/game/GameEventMgr.cpp @@ -1221,26 +1221,21 @@ void GameEventMgr::GameEventSpawn(int16 event_id) for (GuidList::iterator itr = mGameEventCreatureGuids[internal_event_id].begin(); itr != mGameEventCreatureGuids[internal_event_id].end(); ++itr) { // Add to correct cell - CreatureData const* data = objmgr.GetCreatureData(*itr); - if (data) + if (CreatureData const* data = objmgr.GetCreatureData(*itr)) { objmgr.AddCreatureToGrid(*itr, data); // Spawn if necessary (loaded grids only) Map* map = const_cast<Map*>(MapManager::Instance().CreateBaseMap(data->mapid)); // We use spawn coords to spawn - if(!map->Instanceable() && !map->IsRemovalGrid(data->posX,data->posY)) + if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY)) { Creature* pCreature = new Creature; //sLog.outDebug("Spawning creature %u",*itr); if (!pCreature->LoadFromDB(*itr, map)) - { delete pCreature; - } else - { map->Add(pCreature); - } } } } @@ -1254,25 +1249,22 @@ void GameEventMgr::GameEventSpawn(int16 event_id) for (GuidList::iterator itr = mGameEventGameobjectGuids[internal_event_id].begin(); itr != mGameEventGameobjectGuids[internal_event_id].end(); ++itr) { // Add to correct cell - GameObjectData const* data = objmgr.GetGOData(*itr); - if (data) + if (GameObjectData const* data = objmgr.GetGOData(*itr)) { objmgr.AddGameobjectToGrid(*itr, data); // Spawn if necessary (loaded grids only) // this base map checked as non-instanced and then only existed Map* map = const_cast<Map*>(MapManager::Instance().CreateBaseMap(data->mapid)); // We use current coords to unspawn, not spawn coords since creature can have changed grid - if(!map->Instanceable() && !map->IsRemovalGrid(data->posX, data->posY)) + if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY)) { GameObject* pGameobject = new GameObject; //sLog.outDebug("Spawning gameobject %u", *itr); if (!pGameobject->LoadFromDB(*itr, map)) - { delete pGameobject; - } else { - if(pGameobject->isSpawnedByDefault()) + if (pGameobject->isSpawnedByDefault()) map->Add(pGameobject); } } diff --git a/src/game/Map.h b/src/game/Map.h index 783683d6d75..fa4e7a03468 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -304,6 +304,12 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj return !getNGrid(p.x_coord, p.y_coord) || getNGrid(p.x_coord, p.y_coord)->GetGridState() == GRID_STATE_REMOVAL; } + bool IsLoaded(float x, float y) const + { + GridPair p = Trinity::ComputeGridPair(x, y); + return loaded(p); + } + bool GetUnloadLock(const GridPair &p) const { return getNGrid(p.x_coord, p.y_coord)->getUnloadLock(); } void SetUnloadLock(const GridPair &p, bool on) { getNGrid(p.x_coord, p.y_coord)->setUnloadExplicitLock(on); } void LoadGrid(float x, float y); diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index f8b915c0189..43a59c3aa61 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1447,10 +1447,10 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float // Spawn if necessary (loaded grids only) // We use spawn coords to spawn - if(!map->Instanceable() && !map->IsRemovalGrid(x, y)) + if(!map->Instanceable() && map->IsLoaded(x, y)) { GameObject *go = new GameObject; - if(!go->LoadFromDB(guid, map)) + if (!go->LoadFromDB(guid, map)) { sLog.outError("AddGOData: cannot add gameobject entry %u to map", entry); delete go; diff --git a/src/game/PoolHandler.cpp b/src/game/PoolHandler.cpp index e12fc048e97..ff7d0146b3d 100644 --- a/src/game/PoolHandler.cpp +++ b/src/game/PoolHandler.cpp @@ -229,26 +229,21 @@ void PoolGroup<T>::SpawnObject(uint32 limit, bool cache) template <> bool PoolGroup<Creature>::Spawn1Object(uint32 guid) { - CreatureData const* data = objmgr.GetCreatureData(guid); - if (data) + if (CreatureData const* data = objmgr.GetCreatureData(guid)) { objmgr.AddCreatureToGrid(guid, data); // Spawn if necessary (loaded grids only) Map* map = const_cast<Map*>(MapManager::Instance().CreateBaseMap(data->mapid)); // We use spawn coords to spawn - if (!map->Instanceable() && !map->IsRemovalGrid(data->posX, data->posY)) + if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY)) { Creature* pCreature = new Creature; //sLog.outDebug("Spawning creature %u",guid); if (!pCreature->LoadFromDB(guid, map)) - { delete pCreature; - } else - { map->Add(pCreature); - } } return true; } @@ -259,22 +254,19 @@ bool PoolGroup<Creature>::Spawn1Object(uint32 guid) template <> bool PoolGroup<GameObject>::Spawn1Object(uint32 guid) { - GameObjectData const* data = objmgr.GetGOData(guid); - if (data) + if (GameObjectData const* data = objmgr.GetGOData(guid)) { objmgr.AddGameobjectToGrid(guid, data); // Spawn if necessary (loaded grids only) // this base map checked as non-instanced and then only existed Map* map = const_cast<Map*>(MapManager::Instance().CreateBaseMap(data->mapid)); // We use current coords to unspawn, not spawn coords since creature can have changed grid - if (!map->Instanceable() && !map->IsRemovalGrid(data->posX, data->posY)) + if (!map->Instanceable() && map->IsLoaded(data->posX, data->posY)) { GameObject* pGameobject = new GameObject; //sLog.outDebug("Spawning gameobject %u", guid); if (!pGameobject->LoadFromDB(guid, map)) - { delete pGameobject; - } else { if (pGameobject->isSpawnedByDefault()) diff --git a/src/shared/Database/DBCFileLoader.h b/src/shared/Database/DBCFileLoader.h index ef29af84bc1..a97ab4d60fa 100644 --- a/src/shared/Database/DBCFileLoader.h +++ b/src/shared/Database/DBCFileLoader.h @@ -89,11 +89,11 @@ class DBCFileLoader Record getRecord(size_t id); /// Get begin iterator over records - uint32 GetNumRows() const { return recordCount;} - uint32 GetRowSize() const { return recordSize;} + uint32 GetNumRows() const { return recordCount; } + uint32 GetRowSize() const { return recordSize; } uint32 GetCols() const { return fieldCount; } uint32 GetOffset(size_t id) const { return (fieldsOffset != NULL && id < fieldCount) ? fieldsOffset[id] : 0; } - bool IsLoaded() {return (data!=NULL);} + bool IsLoaded() { return data != NULL; } char* AutoProduceData(const char* fmt, uint32& count, char**& indexTable, uint32 sqlRecordCount, uint32 sqlHighestIndex, char *& sqlDataTable); char* AutoProduceStrings(const char* fmt, char* dataTable); static uint32 GetFormatRecordSize(const char * format, int32 * index_pos = NULL); |