From 27806eeac9d2588d2f7a3b8a0852d45b15a6a241 Mon Sep 17 00:00:00 2001 From: Treeston Date: Sat, 26 Aug 2017 13:14:25 +0200 Subject: Core/Spawn: Move spawn group state management from sObjectMgr to the Map object, which makes it actually function as intended with instances. Woops. (cherry picked from commit f279207d482b886fc8b049e94b46653325ec4d2d) --- src/server/game/Grids/ObjectGridLoader.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/server/game/Grids/ObjectGridLoader.cpp') diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index 7b2ead0e1cc..bf33abacea5 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -135,13 +135,18 @@ void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager ASSERT(cdata, "Tried to load creature with spawnId " UI64FMTD ", but no such creature exists.", guid); SpawnGroupTemplateData const* const group = cdata->spawnGroupData; // If creature in manual spawn group, don't spawn here, unless group is already active. - if ((group->flags & SPAWNGROUP_FLAG_MANUAL_SPAWN) && !group->isActive) - continue; + if (!(group->flags & SPAWNGROUP_FLAG_SYSTEM)) + if (!map->IsSpawnGroupActive(group->groupId)) + { + delete obj; + continue; + } // If script is blocking spawn, don't spawn but queue for a re-check in a little bit if (!(group->flags & SPAWNGROUP_FLAG_COMPATIBILITY_MODE) && !sScriptMgr->CanSpawn(guid, cdata->id, cdata, map)) { map->SaveRespawnTime(SPAWN_TYPE_CREATURE, guid, cdata->id, time(NULL) + urand(4,7), map->GetZoneId(PhasingHandler::GetEmptyPhaseShift(), cdata->spawnPoint), Trinity::ComputeGridCoord(cdata->spawnPoint.GetPositionX(), cdata->spawnPoint.GetPositionY()).GetId(), false); + delete obj; continue; } } @@ -150,8 +155,12 @@ void LoadHelper(CellGuidSet const& guid_set, CellCoord &cell, GridRefManager // If gameobject in manual spawn group, don't spawn here, unless group is already active. GameObjectData const* godata = sObjectMgr->GetGameObjectData(guid); ASSERT(godata, "Tried to load gameobject with spawnId " UI64FMTD ", but no such object exists.", guid); - if ((godata->spawnGroupData->flags & SPAWNGROUP_FLAG_MANUAL_SPAWN) && !godata->spawnGroupData->isActive) - continue; + if (!(godata->spawnGroupData->flags & SPAWNGROUP_FLAG_SYSTEM)) + if (!map->IsSpawnGroupActive(godata->spawnGroupData->groupId)) + { + delete obj; + continue; + } } if (!obj->LoadFromDB(guid, map, false, false)) -- cgit v1.2.3