From d9e524a657ec149e1ea96922351cff81ac450c3d Mon Sep 17 00:00:00 2001 From: hondacrx Date: Fri, 2 Feb 2024 15:04:43 -0500 Subject: [PATCH] Core/InstanceScript: Refactored door types to reflect its behavior Port From (https://github.com/TrinityCore/TrinityCore/commit/0e2f04172864e3cff2b5559ac89ded23ade5f92e) --- Source/Framework/Constants/MapConst.cs | 9 ++-- Source/Game/Maps/Instances/InstanceScript.cs | 51 ++++++++++--------- .../InstanceAntorusTheBurningThrone.cs | 5 +- .../InstanceAberrusTheShadowedCrucible.cs | 2 +- .../AzureVault/InstanceAzureVault.cs | 4 +- .../RubyLifePools/InstanceRubyLifePools.cs | 2 +- .../BaradinHold/InstanceBaradinHold.cs | 6 +-- .../BlackrockSpire/InstanceBlackrockSpire.cs | 12 ++--- .../BlackwingLair/InstanceBlackwingLair.cs | 16 +++--- .../InstanceMagistersTerrace.cs | 10 ++-- 10 files changed, 61 insertions(+), 56 deletions(-) diff --git a/Source/Framework/Constants/MapConst.cs b/Source/Framework/Constants/MapConst.cs index 549f65bb3..917909dfe 100644 --- a/Source/Framework/Constants/MapConst.cs +++ b/Source/Framework/Constants/MapConst.cs @@ -151,11 +151,12 @@ namespace Framework.Constants ToBeDecided = 5 } - public enum DoorType + public enum EncounterDoorBehavior { - Room = 0, // Door can open if encounter is not in progress - Passage = 1, // Door can open if encounter is done - SpawnHole = 2, // Door can open if encounter is in progress, typically used for spawning places + OpenWhenNotInProgress = 0, // open if encounter is not in progress + OpenWhenDone = 1, // open if encounter is done + OpenWhenInProgress = 2, // open if encounter is in progress, typically used for spawning places + OpenWhenNotDone = 3, // open if encounter is not done Max } diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs index 3e0095cca..3e5d75692 100644 --- a/Source/Game/Maps/Instances/InstanceScript.cs +++ b/Source/Game/Maps/Instances/InstanceScript.cs @@ -103,7 +103,7 @@ namespace Game.Maps continue; if (door.bossId < bosses.Count) - doors.Add(door.entry, new DoorInfo(bosses[door.bossId], door.type)); + doors.Add(door.entry, new DoorInfo(bosses[door.bossId], door.Behavior)); } Log.outDebug(LogFilter.Scripts, "InstanceScript.LoadDoorData: {0} doors loaded.", doors.Count); @@ -154,16 +154,19 @@ namespace Game.Maps if (!open) break; - switch (info.type) + switch (info.Behavior) { - case DoorType.Room: - open = (info.bossInfo.state != EncounterState.InProgress); + case EncounterDoorBehavior.OpenWhenNotInProgress: + open = info.bossInfo.state != EncounterState.InProgress; break; - case DoorType.Passage: - open = (info.bossInfo.state == EncounterState.Done); + case EncounterDoorBehavior.OpenWhenDone: + open = info.bossInfo.state == EncounterState.Done; break; - case DoorType.SpawnHole: - open = (info.bossInfo.state == EncounterState.InProgress); + case EncounterDoorBehavior.OpenWhenInProgress: + open = info.bossInfo.state == EncounterState.InProgress; + break; + case EncounterDoorBehavior.OpenWhenNotDone: + open = info.bossInfo.state != EncounterState.Done; break; default: break; @@ -277,9 +280,9 @@ namespace Game.Maps foreach (var data in range) { if (add) - data.bossInfo.door[(int)data.type].Add(door.GetGUID()); + data.bossInfo.door[(int)data.Behavior].Add(door.GetGUID()); else - data.bossInfo.door[(int)data.type].Remove(door.GetGUID()); + data.bossInfo.door[(int)data.Behavior].Remove(door.GetGUID()); } if (add) @@ -400,11 +403,11 @@ namespace Game.Maps instance.UpdateInstanceLock(new UpdateBossStateSaveDataEvent(dungeonEncounter, id, state)); } - for (uint type = 0; type < (int)DoorType.Max; ++type) + foreach (var doorSet in bossInfo.door) { - foreach (var guid in bossInfo.door[type]) + foreach (ObjectGuid doorGUID in doorSet) { - GameObject door = instance.GetGameObject(guid); + GameObject door = instance.GetGameObject(doorGUID); if (door != null) UpdateDoorState(door); } @@ -705,7 +708,7 @@ namespace Game.Maps return null; } - + public virtual bool CheckAchievementCriteriaMeet(uint criteria_id, Player source, Unit target = null, uint miscvalue1 = 0) { Log.outError(LogFilter.Server, "Achievement system call CheckAchievementCriteriaMeet but instance script for map {0} not have implementation for achievement criteria {1}", @@ -732,7 +735,7 @@ namespace Game.Maps return false; } - + public void SetEntranceLocation(uint worldSafeLocationId) { _entranceId = worldSafeLocationId; @@ -971,16 +974,16 @@ namespace Game.Maps public class DoorData { - public DoorData(uint _entry, uint _bossid, DoorType _type) + public DoorData(uint _entry, uint _bossid, EncounterDoorBehavior behavior) { entry = _entry; bossId = _bossid; - type = _type; + Behavior = behavior; } public uint entry; public uint bossId; - public DoorType type; + public EncounterDoorBehavior Behavior; } public class BossBoundaryEntry @@ -1022,7 +1025,7 @@ namespace Game.Maps public class BossInfo { public EncounterState state; - public List[] door = new List[(int)DoorType.Max]; + public List[] door = new List[(int)EncounterDoorBehavior.Max]; public List minion = new(); public List boundary = new(); public DungeonEncounterRecord[] DungeonEncounters = new DungeonEncounterRecord[MapConst.MaxDungeonEncountersPerBoss]; @@ -1030,7 +1033,7 @@ namespace Game.Maps public BossInfo() { state = EncounterState.ToBeDecided; - for (var i = 0; i < (int)DoorType.Max; ++i) + for (var i = 0; i < (int)EncounterDoorBehavior.Max; ++i) door[i] = new List(); } @@ -1041,14 +1044,14 @@ namespace Game.Maps } class DoorInfo { - public DoorInfo(BossInfo _bossInfo, DoorType _type) + public DoorInfo(BossInfo _bossInfo, EncounterDoorBehavior behavior) { bossInfo = _bossInfo; - type = _type; + Behavior = behavior; } public BossInfo bossInfo; - public DoorType type; + public EncounterDoorBehavior Behavior; } class MinionInfo { @@ -1097,7 +1100,7 @@ namespace Game.Maps _instance = instance; _name = name; _value = value; - + _instance.RegisterPersistentScriptValue(this); } diff --git a/Source/Scripts/Argus/AntorusTheBurningThrone/InstanceAntorusTheBurningThrone.cs b/Source/Scripts/Argus/AntorusTheBurningThrone/InstanceAntorusTheBurningThrone.cs index 8279a4476..e5f456478 100644 --- a/Source/Scripts/Argus/AntorusTheBurningThrone/InstanceAntorusTheBurningThrone.cs +++ b/Source/Scripts/Argus/AntorusTheBurningThrone/InstanceAntorusTheBurningThrone.cs @@ -4,6 +4,7 @@ using Game.Entities; using Game.Maps; using Game.Scripting; +using Framework.Constants; namespace Scripts.Argus.AntorusTheBurningThrone { @@ -57,8 +58,8 @@ namespace Scripts.Argus.AntorusTheBurningThrone public static DoorData[] doorData = { - new(GameObjectIds.Collision, DataTypes.GarothiWorldbreaker, Framework.Constants.DoorType.Passage), - new(GameObjectIds.Rock, DataTypes.GarothiWorldbreaker, Framework.Constants.DoorType.Passage) + new(GameObjectIds.Collision, DataTypes.GarothiWorldbreaker, EncounterDoorBehavior.OpenWhenDone), + new(GameObjectIds.Rock, DataTypes.GarothiWorldbreaker, EncounterDoorBehavior.OpenWhenDone) }; public static DungeonEncounterData[] encounters = diff --git a/Source/Scripts/DragonIsles/AberrusTheShadowedCrucible/InstanceAberrusTheShadowedCrucible.cs b/Source/Scripts/DragonIsles/AberrusTheShadowedCrucible/InstanceAberrusTheShadowedCrucible.cs index 4cca92b22..1e31b7b77 100644 --- a/Source/Scripts/DragonIsles/AberrusTheShadowedCrucible/InstanceAberrusTheShadowedCrucible.cs +++ b/Source/Scripts/DragonIsles/AberrusTheShadowedCrucible/InstanceAberrusTheShadowedCrucible.cs @@ -87,7 +87,7 @@ namespace Scripts.DragonIsles.AberrusTheShadowedCrucible static DoorData[] doorData = { - new (GameObjectIds.KazzaraDoor, DataTypes.KazzaraTheHellforged, DoorType.Room) + new (GameObjectIds.KazzaraDoor, DataTypes.KazzaraTheHellforged, EncounterDoorBehavior.OpenWhenNotInProgress) }; static ObjectData[] objData = diff --git a/Source/Scripts/DragonIsles/AzureVault/InstanceAzureVault.cs b/Source/Scripts/DragonIsles/AzureVault/InstanceAzureVault.cs index b6ab130c0..297dc15e1 100644 --- a/Source/Scripts/DragonIsles/AzureVault/InstanceAzureVault.cs +++ b/Source/Scripts/DragonIsles/AzureVault/InstanceAzureVault.cs @@ -55,8 +55,8 @@ namespace Scripts.DragonIsles.AzureVault static DoorData[] doorData = { - new(GameObjectIds.ArcaneVaultsDoorLeymorEntrance, DataTypes.Leymor, DoorType.Room), - new(GameObjectIds.ArcaneVaultsDoorLeymorExit, DataTypes.Leymor, DoorType.Passage), + new(GameObjectIds.ArcaneVaultsDoorLeymorEntrance, DataTypes.Leymor, EncounterDoorBehavior.OpenWhenNotInProgress), + new(GameObjectIds.ArcaneVaultsDoorLeymorExit, DataTypes.Leymor, EncounterDoorBehavior.OpenWhenDone), }; static DungeonEncounterData[] encounters = diff --git a/Source/Scripts/DragonIsles/RubyLifePools/InstanceRubyLifePools.cs b/Source/Scripts/DragonIsles/RubyLifePools/InstanceRubyLifePools.cs index 2915bf33e..2d67298e4 100644 --- a/Source/Scripts/DragonIsles/RubyLifePools/InstanceRubyLifePools.cs +++ b/Source/Scripts/DragonIsles/RubyLifePools/InstanceRubyLifePools.cs @@ -39,7 +39,7 @@ namespace Scripts.DragonIsles.RubyLifePools static DoorData[] doorData = { - new(GameObjectIds.FireWall, DataTypes.KokiaBlazehoof, DoorType.Passage) + new(GameObjectIds.FireWall, DataTypes.KokiaBlazehoof, EncounterDoorBehavior.OpenWhenDone) }; static DungeonEncounterData[] encounters = diff --git a/Source/Scripts/EasternKingdoms/BaradinHold/InstanceBaradinHold.cs b/Source/Scripts/EasternKingdoms/BaradinHold/InstanceBaradinHold.cs index d8773965a..bb6a4ffa1 100644 --- a/Source/Scripts/EasternKingdoms/BaradinHold/InstanceBaradinHold.cs +++ b/Source/Scripts/EasternKingdoms/BaradinHold/InstanceBaradinHold.cs @@ -41,9 +41,9 @@ namespace Scripts.EasternKingdoms.BaradinHold { static DoorData[] doorData = { - new DoorData(GameObjectIds.ArgalothDoor, DataTypes.Argaloth, DoorType.Room), - new DoorData(GameObjectIds.OccutharDoor, DataTypes.Occuthar, DoorType.Room), - new DoorData(GameObjectIds.AlizabalDoor, DataTypes.Alizabal, DoorType.Room), + new DoorData(GameObjectIds.ArgalothDoor, DataTypes.Argaloth, EncounterDoorBehavior.OpenWhenNotInProgress), + new DoorData(GameObjectIds.OccutharDoor, DataTypes.Occuthar, EncounterDoorBehavior.OpenWhenNotInProgress), + new DoorData(GameObjectIds.AlizabalDoor, DataTypes.Alizabal, EncounterDoorBehavior.OpenWhenNotInProgress), }; static DungeonEncounterData[] encounters = diff --git a/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/InstanceBlackrockSpire.cs b/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/InstanceBlackrockSpire.cs index 912c48fe5..e944a54c5 100644 --- a/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/InstanceBlackrockSpire.cs +++ b/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/InstanceBlackrockSpire.cs @@ -116,12 +116,12 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackrockSpire public static DoorData[] doorData = { - new DoorData(GameObjectsIds.Doors, DataTypes.PyrogaurdEmberseer, DoorType.Passage), - new DoorData(GameObjectsIds.EmberseerOut, DataTypes.PyrogaurdEmberseer, DoorType.Passage), - new DoorData(GameObjectsIds.DrakkisathDoor1, DataTypes.GeneralDrakkisath, DoorType.Passage), - new DoorData(GameObjectsIds.DrakkisathDoor2, DataTypes.GeneralDrakkisath, DoorType.Passage), - new DoorData(GameObjectsIds.PortcullisActive, DataTypes.WarchiefRendBlackhand, DoorType.Passage), - new DoorData(GameObjectsIds.PortcullisTobossrooms, DataTypes.WarchiefRendBlackhand, DoorType.Passage), + new DoorData(GameObjectsIds.Doors, DataTypes.PyrogaurdEmberseer, EncounterDoorBehavior.OpenWhenNotInProgress), + new DoorData(GameObjectsIds.EmberseerOut, DataTypes.PyrogaurdEmberseer, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectsIds.DrakkisathDoor1, DataTypes.GeneralDrakkisath, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectsIds.DrakkisathDoor2, DataTypes.GeneralDrakkisath, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectsIds.PortcullisActive, DataTypes.WarchiefRendBlackhand, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectsIds.PortcullisTobossrooms, DataTypes.WarchiefRendBlackhand, EncounterDoorBehavior.OpenWhenDone), }; } diff --git a/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/InstanceBlackwingLair.cs b/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/InstanceBlackwingLair.cs index 10b03c8e1..6d3efefad 100644 --- a/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/InstanceBlackwingLair.cs +++ b/Source/Scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/InstanceBlackwingLair.cs @@ -78,14 +78,14 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackwingLair public static DoorData[] doorData = { - new DoorData(BWLGameObjectIds.PortcullisRazorgore, DataTypes.RazorgoreTheUntamed, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisVaelastrasz, DataTypes.VaelastrazTheCorrupt, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisBroodlord, DataTypes.BroodlordLashlayer, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisThreedragons, DataTypes.Firemaw, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisThreedragons, DataTypes.Ebonroc, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisThreedragons, DataTypes.Flamegor, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisChromaggus, DataTypes.Chromaggus, DoorType.Passage), - new DoorData(BWLGameObjectIds.PortcullisNefarian, DataTypes.Nefarian, DoorType.Room), + new DoorData(BWLGameObjectIds.PortcullisRazorgore, DataTypes.RazorgoreTheUntamed, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisVaelastrasz, DataTypes.VaelastrazTheCorrupt, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisBroodlord, DataTypes.BroodlordLashlayer, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisThreedragons, DataTypes.Firemaw, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisThreedragons, DataTypes.Ebonroc, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisThreedragons, DataTypes.Flamegor, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisChromaggus, DataTypes.Chromaggus, EncounterDoorBehavior.OpenWhenDone), + new DoorData(BWLGameObjectIds.PortcullisNefarian, DataTypes.Nefarian, EncounterDoorBehavior.OpenWhenNotInProgress), }; public static ObjectData[] creatureData = diff --git a/Source/Scripts/EasternKingdoms/MagistersTerrace/InstanceMagistersTerrace.cs b/Source/Scripts/EasternKingdoms/MagistersTerrace/InstanceMagistersTerrace.cs index c629fb2aa..21e2e2258 100644 --- a/Source/Scripts/EasternKingdoms/MagistersTerrace/InstanceMagistersTerrace.cs +++ b/Source/Scripts/EasternKingdoms/MagistersTerrace/InstanceMagistersTerrace.cs @@ -91,11 +91,11 @@ namespace Scripts.EasternKingdoms.MagistersTerrace public static DoorData[] doorData = { - new DoorData(GameObjectIds.SunwellRaidGate2, DataTypes.SelinFireheart, DoorType.Passage), - new DoorData(GameObjectIds.AssemblyChamberDoor, DataTypes.SelinFireheart, DoorType.Room), - new DoorData(GameObjectIds.SunwellRaidGate5, DataTypes.Vexallus, DoorType.Passage), - new DoorData(GameObjectIds.SunwellRaidGate4, DataTypes.PriestessDelrissa, DoorType.Passage), - new DoorData(GameObjectIds.AsylumDoor, DataTypes.KaelthasSunstrider, DoorType.Room), + new DoorData(GameObjectIds.SunwellRaidGate2, DataTypes.SelinFireheart, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectIds.AssemblyChamberDoor, DataTypes.SelinFireheart, EncounterDoorBehavior.OpenWhenNotInProgress), + new DoorData(GameObjectIds.SunwellRaidGate5, DataTypes.Vexallus, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectIds.SunwellRaidGate4, DataTypes.PriestessDelrissa, EncounterDoorBehavior.OpenWhenDone), + new DoorData(GameObjectIds.AsylumDoor, DataTypes.KaelthasSunstrider, EncounterDoorBehavior.OpenWhenNotInProgress), }; public static Position KalecgosSpawnPos = new Position(164.3747f, -397.1197f, 2.151798f, 1.66219f);