From 3c8c31ecd7becd204a3e4d4129385839c5af64a4 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 24 May 2022 13:19:48 -0400 Subject: [PATCH] Core/Maps: add new FLAG_ALLIANCE_ONLY and FLAG_HORDE_ONLY for instance spawn groups Port From (https://github.com/TrinityCore/TrinityCore/commit/203dfec2a1d1d628469ed0d68fefac33c15e65d6) --- Source/Framework/Constants/MapConst.cs | 4 +++- Source/Game/Globals/ObjectManager.cs | 6 ++++++ Source/Game/Maps/Instances/InstanceScript.cs | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Source/Framework/Constants/MapConst.cs b/Source/Framework/Constants/MapConst.cs index 43c657960..bb7afa0f9 100644 --- a/Source/Framework/Constants/MapConst.cs +++ b/Source/Framework/Constants/MapConst.cs @@ -239,8 +239,10 @@ namespace Framework.Constants { ActivateSpawn = 0x01, BlockSpawn = 0x02, + AllianceOnly = 0x04, + HordeOnly = 0x08, - All = (ActivateSpawn | BlockSpawn) + All = ActivateSpawn | BlockSpawn | AllianceOnly | HordeOnly } public enum AreaHeaderFlags : ushort diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 529e97b86..fb98e6c55 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -5677,6 +5677,12 @@ namespace Game else info.Flags = flags; + if (flags.HasFlag(InstanceSpawnGroupFlags.AllianceOnly) && flags.HasFlag(InstanceSpawnGroupFlags.HordeOnly)) + { + info.Flags = flags & ~(InstanceSpawnGroupFlags.AllianceOnly | InstanceSpawnGroupFlags.HordeOnly); + Log.outError(LogFilter.Sql, $"Instance spawn group ({instanceMapId},{spawnGroupId}) FLAG_ALLIANCE_ONLY and FLAG_HORDE_ONLY may not be used together in a single entry - truncated to {info.Flags}."); + } + _instanceSpawnGroupStorage.Add(instanceMapId, info); ++count; diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs index 23b51f5b8..456c4f669 100644 --- a/Source/Game/Maps/Instances/InstanceScript.cs +++ b/Source/Game/Maps/Instances/InstanceScript.cs @@ -217,6 +217,7 @@ namespace Game.Maps } enum states { Block, Spawn, ForceBlock }; + void UpdateSpawnGroups() { if (_instanceSpawnGroups.Empty()) @@ -234,8 +235,13 @@ namespace Game.Maps if (((1 << (int)GetBossState(info.BossStateId)) & info.BossStates) == 0) continue; + if (((instance.GetTeamIdInInstance() == TeamId.Alliance) && info.Flags.HasFlag(InstanceSpawnGroupFlags.HordeOnly)) + || ((instance.GetTeamIdInInstance() == TeamId.Horde) && info.Flags.HasFlag(InstanceSpawnGroupFlags.AllianceOnly))) + continue; + if (info.Flags.HasAnyFlag(InstanceSpawnGroupFlags.BlockSpawn)) newStates[info.SpawnGroupId] = states.ForceBlock; + else if (info.Flags.HasAnyFlag(InstanceSpawnGroupFlags.ActivateSpawn)) newStates[info.SpawnGroupId] = states.Spawn; }