diff options
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 6 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index c900c4f0ed9..9c1db9e87d7 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2718,6 +2718,12 @@ void ObjectMgr::LoadInstanceSpawnGroups() else info.Flags = flags; + if ((flags & InstanceSpawnGroupInfo::FLAG_ALLIANCE_ONLY) && (flags & InstanceSpawnGroupInfo::FLAG_HORDE_ONLY)) + { + info.Flags = flags & ~(InstanceSpawnGroupInfo::FLAG_ALLIANCE_ONLY | InstanceSpawnGroupInfo::FLAG_HORDE_ONLY); + TC_LOG_ERROR("sql.sql", "Instance spawn group (%u,%u) FLAG_ALLIANCE_ONLY and FLAG_HORDE_ONLY may not be used together in a single entry - truncated to %u.", instanceMapId, spawnGroupId, info.Flags); + } + ++n; } while (result->NextRow()); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index c06cfa1bf61..2c611d58aa4 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -428,9 +428,11 @@ struct TC_GAME_API InstanceSpawnGroupInfo enum { FLAG_ACTIVATE_SPAWN = 0x01, - FLAG_BLOCK_SPAWN = 0x02, + FLAG_BLOCK_SPAWN = 0x02, + FLAG_ALLIANCE_ONLY = 0x04, + FLAG_HORDE_ONLY = 0x08, - FLAG_ALL = (FLAG_ACTIVATE_SPAWN | FLAG_BLOCK_SPAWN) + FLAG_ALL = (FLAG_ACTIVATE_SPAWN | FLAG_BLOCK_SPAWN | FLAG_ALLIANCE_ONLY | FLAG_HORDE_ONLY) }; uint8 BossStateId; uint8 BossStates; diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 695bd33a52c..5d207925ece 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -249,6 +249,9 @@ void InstanceScript::UpdateSpawnGroups() continue; if (!((1 << GetBossState(info.BossStateId)) & info.BossStates)) continue; + if (((instance->GetTeamIdInInstance() == TEAM_ALLIANCE) && (info.Flags & InstanceSpawnGroupInfo::FLAG_HORDE_ONLY)) + || ((instance->GetTeamIdInInstance() == TEAM_HORDE) && (info.Flags & InstanceSpawnGroupInfo::FLAG_ALLIANCE_ONLY))) + continue; if (info.Flags & InstanceSpawnGroupInfo::FLAG_BLOCK_SPAWN) curValue = FORCEBLOCK; else if (info.Flags & InstanceSpawnGroupInfo::FLAG_ACTIVATE_SPAWN) |