diff options
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 12 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 9935969706b..4f80e811e03 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2175,9 +2175,9 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const TC_LOG_ERROR("sql.sql", "{} SourceEntry in `condition` table, does not exist in `spawn_group_template`, ignoring.", cond->ToString()); return false; } - if (spawnGroup->flags & (SPAWNGROUP_FLAG_SYSTEM | SPAWNGROUP_FLAG_MANUAL_SPAWN)) + if (spawnGroup->flags & (SPAWNGROUP_FLAG_SYSTEM)) { - TC_LOG_ERROR("sql.sql", "{} in `spawn_group_template` table cannot have SPAWNGROUP_FLAG_SYSTEM or SPAWNGROUP_FLAG_MANUAL_SPAWN flags, ignoring.", cond->ToString()); + TC_LOG_ERROR("sql.sql", "{} in `spawn_group_template` table cannot have SPAWNGROUP_FLAG_SYSTEM flags, ignoring.", cond->ToString()); return false; } break; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 2836fc423d8..d215693c4cc 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2459,11 +2459,19 @@ void Map::UpdateSpawnGroupConditions() for (uint32 spawnGroupId : *spawnGroups) { SpawnGroupTemplateData const* spawnGroupTemplate = ASSERT_NOTNULL(GetSpawnGroupData(spawnGroupId)); - if (spawnGroupTemplate->flags & SPAWNGROUP_FLAG_MANUAL_SPAWN) - continue; bool isActive = IsSpawnGroupActive(spawnGroupId); bool shouldBeActive = sConditionMgr->IsMapMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_SPAWN_GROUP, spawnGroupId, this); + + if (spawnGroupTemplate->flags & SPAWNGROUP_FLAG_MANUAL_SPAWN) + { + // Only despawn the group if it isn't meeting conditions + if (isActive && !shouldBeActive && spawnGroupTemplate->flags & SPAWNGROUP_FLAG_DESPAWN_ON_CONDITION_FAILURE) + SpawnGroupDespawn(spawnGroupId, true); + + continue; + } + if (isActive == shouldBeActive) continue; |