aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Grids/ObjectGridLoader.cpp
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-08-26 13:14:25 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-23 17:00:59 +0200
commit27806eeac9d2588d2f7a3b8a0852d45b15a6a241 (patch)
tree21efaf592786e3c07fafdd1d7ff4b7bacf597081 /src/server/game/Grids/ObjectGridLoader.cpp
parent5d61618955ec3e0efe13fe01899b7dcf9fd13e56 (diff)
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)
Diffstat (limited to 'src/server/game/Grids/ObjectGridLoader.cpp')
-rw-r--r--src/server/game/Grids/ObjectGridLoader.cpp17
1 files changed, 13 insertions, 4 deletions
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<T>
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<T>
// 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))