From ad3dc7bcf780fd1f2ebc1d5ea717c77fbb0477a7 Mon Sep 17 00:00:00 2001 From: CarnifexOptimus Date: Thu, 4 Apr 2024 21:06:31 +0200 Subject: [PATCH 1/6] bugfix --- BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs index f699760eb6..67c6f5f4bb 100644 --- a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs +++ b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowStates.cs @@ -10,6 +10,7 @@ public InfernalShadowStates(BossModule module) : base(module) .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() + .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() From 30037ab7f3d2d38987a4e56ba72c933ca1b5deaa Mon Sep 17 00:00:00 2001 From: CarnifexOptimus Date: Thu, 4 Apr 2024 21:12:38 +0200 Subject: [PATCH 2/6] . --- BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs | 2 +- BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs index 5f9bd5b605..9569ca19ec 100644 --- a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs +++ b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadow.cs @@ -52,7 +52,7 @@ class SmolderingClaw : Components.SelfTargetedAOEs class TailStrike : Components.SelfTargetedAOEs { - public TailStrike() : base(ActionID.MakeSpell(AID.SmolderingClawReal), new AOEShapeCone(40, 75.Degrees())) { } + public TailStrike() : base(ActionID.MakeSpell(AID.TailStrikeReal), new AOEShapeCone(40, 75.Degrees())) { } } class FireRampageCleave : Components.GenericAOEs diff --git a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs index 0320631f2c..cc80296dea 100644 --- a/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs +++ b/BossMod/Modules/Global/Quest/FF16Collab/InfernalShadowEnums.cs @@ -54,7 +54,7 @@ public enum AID : uint TailStrikeStartActionCombo = 35047, // Boss->self, 3,5s cast, single-target TailStrikeStartActionCombo2 = 35049, // Helper->self, 0,6s cast, range 40 150-degree cone TailStrikeStartActionCombo3 = 35929, // Helper->self, 4,1s cast, range 40 150-degree cone - TailStrike = 35048, // Helper->self, 4,5s cast, range 40 150-degree cone + TailStrikeReal = 35048, // Helper->self, 4,5s cast, range 40 150-degree cone PyrosaultVisual = 35053, // Boss->location, 4,0s cast, single-target PyrosaultReal = 35054, // Helper->location, 5,0s cast, range 40 circle, damage fall off AOE, seems to be fine after about range 10 From c9f32445f6446ec76b698718fec81ba0f3e1f1be Mon Sep 17 00:00:00 2001 From: Adam Bennett Date: Thu, 4 Apr 2024 13:09:58 -0700 Subject: [PATCH 3/6] Add IPC's: ActiveModuleComponentBaseList ActiveModuleComponentList ActiveModuleHasComponent --- BossMod/Framework/IPCProvider.cs | 8 ++++++-- BossMod/Framework/Plugin.cs | 2 +- .../Dungeon/D10StoneVigil/D101ChudoYudo.cs | 14 +++++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/BossMod/Framework/IPCProvider.cs b/BossMod/Framework/IPCProvider.cs index 4afb2f2b2c..d480455403 100644 --- a/BossMod/Framework/IPCProvider.cs +++ b/BossMod/Framework/IPCProvider.cs @@ -1,4 +1,5 @@ -using Dalamud.Game.ClientState.Objects.Types; +using BossMod.Components; +using Dalamud.Game.ClientState.Objects.Types; namespace BossMod; @@ -6,8 +7,11 @@ class IPCProvider : IDisposable { private List _disposeActions = new(); - public IPCProvider(Autorotation autorotation) + public IPCProvider(Autorotation autorotation, BossModuleManager bossmod) { + Register("ActiveModuleComponentBaseList", () => bossmod.ActiveModule?.Components.Select(c => c.GetType().BaseType?.Name).ToList() ?? default); + Register("ActiveModuleComponentList", () => bossmod.ActiveModule?.Components.Select(c => c.GetType().Name).ToList() ?? default); + Register("ActiveModuleHasComponent", (string name) => bossmod.ActiveModule?.Components.Any(c => c.GetType().Name == name || c.GetType().BaseType?.Name == name) ?? false); Register("HasModule", (GameObject obj) => ModuleRegistry.FindByOID(obj.DataId) != null); Register("IsMoving", () => ActionManagerEx.Instance!.InputOverride.IsMoving()); Register("ForbiddenZonesCount", () => autorotation.Hints.ForbiddenZones.Count); diff --git a/BossMod/Framework/Plugin.cs b/BossMod/Framework/Plugin.cs index 69a4913106..f81b366123 100644 --- a/BossMod/Framework/Plugin.cs +++ b/BossMod/Framework/Plugin.cs @@ -65,7 +65,7 @@ public Plugin( _autorotation = new(_bossmod); _ai = new(_autorotation); _broadcast = new(); - _ipc = new(_autorotation); + _ipc = new(_autorotation, _bossmod); _wndBossmod = new(_bossmod); _wndBossmodPlan = new(_bossmod); diff --git a/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs b/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs index bf28e9d373..b54c8d9944 100644 --- a/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs +++ b/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs @@ -1,4 +1,6 @@ -namespace BossMod.RealmReborn.Dungeon.D10StoneVigil.D101ChudoYudo; +using BossMod.RealmReborn.Dungeon.D11DzemaelDarkhold.D111AllSeeingEye; + +namespace BossMod.RealmReborn.Dungeon.D10StoneVigil.D101ChudoYudo; public enum OID : uint { @@ -24,13 +26,18 @@ class Swinge : Components.SelfTargetedLegacyRotationAOEs } // due to relatively short casts and the fact that boss likes moving across arena to cast swinge, we always want non-tanks to be positioned slightly behind -class Positioning : BossComponent +// I think cleave is better for this so we can still move around. +/*class Positioning : BossComponent { public override void AddAIHints(BossModule module, int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints) { if (actor.Role != Role.Tank) hints.AddForbiddenZone(ShapeDistance.Cone(module.PrimaryActor.Position, 10, module.PrimaryActor.Rotation, 90.Degrees())); } +}*/ +class AutoAttack : Components.Cleave +{ + public AutoAttack() : base(ActionID.MakeSpell(AID.AutoAttack), new AOEShapeCone(40, 30.Degrees())) { } } class D101ChudoYudoStates : StateMachineBuilder @@ -40,7 +47,8 @@ public D101ChudoYudoStates(BossModule module) : base(module) TrivialPhase() .ActivateOnEnter() .ActivateOnEnter() - .ActivateOnEnter(); + .ActivateOnEnter(); + //.ActivateOnEnter(); } } From 5de13af80797e94d54662aec928d02d72ee848b6 Mon Sep 17 00:00:00 2001 From: Andrew Gilewsky Date: Thu, 4 Apr 2024 21:55:25 +0100 Subject: [PATCH 4/6] Fixed DRS duel patterns (presumably) --- .../DRS2StygimolochWarrior/Entrapment.cs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs index c5a47454ee..e53144cb3c 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS2StygimolochWarrior/Entrapment.cs @@ -230,16 +230,11 @@ public EntrapmentNormal() : base(_allowedPatterns) { } class EntrapmentInescapable : Entrapment { - // TODO: don't think these patterns are actually correct... private readonly static Pattern[] _allowedPatterns = [ new() { Normal = BuildMask(3, 4, 5, 8, 20, 25, 38, 43, 46, 49, 52), Toad = BuildMask(10, 50, 54), Ice = BuildMask(40), Mini = BuildMask(29) }, - //new() { Normal = BuildMask(3, 8, 20, 25, 38, 43, 46, 49, 52), Toad = BuildMask(10, 50, 53), Ice = BuildMask(40), Mini = BuildMask(29) }, - new() { Normal = BuildMask(2, 5, 8, 11, 14, 16, 25, 29, 46, 49, 51), Toad = BuildMask(0, 4, 44), Ice = BuildMask(50), Mini = BuildMask(34) }, - //new() { Normal = BuildMask(2, 8, 11, 16, 25, 29, 38, 46), Toad = BuildMask(0, 4, 44), Ice = BuildMask(49), Mini = BuildMask(34) }, - new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask(6, 33, 38), Ice = BuildMask(4), Mini = BuildMask(48) }, - //new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask(6, 33, 38), Ice = BuildMask(4), Mini = BuildMask(48) }, - new() { Normal = BuildMask(5, 6, 8, 11, 25, 30, 32, 38, 43, 46, 50), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask(1) }, - //new() { Normal = BuildMask(5, 8, 11, 25, 30, 32, 38, 43, 50), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask(1) }, + new() { Normal = BuildMask(2, 5, 8, 11, 14, 16, 25, 29, 46, 49, 51), Toad = BuildMask( 0, 4, 44), Ice = BuildMask(50), Mini = BuildMask(34) }, + new() { Normal = BuildMask(5, 8, 11, 16, 18, 22, 24, 29, 43, 49, 53), Toad = BuildMask( 6, 33, 38), Ice = BuildMask( 4), Mini = BuildMask(48) }, + new() { Normal = BuildMask(5, 8, 11, 25, 30, 32, 38, 43, 49, 50, 54), Toad = BuildMask(16, 21, 48), Ice = BuildMask(36), Mini = BuildMask( 1) }, ]; public EntrapmentInescapable() : base(_allowedPatterns) { } From d1abc5e3cd83fbed35abaabf7c974aa53142b20d Mon Sep 17 00:00:00 2001 From: Andrew Gilewsky Date: Thu, 4 Apr 2024 23:14:00 +0100 Subject: [PATCH 5/6] Fixes after merge. --- BossMod/Framework/IPCProvider.cs | 14 ++++++++------ BossMod/Framework/Plugin.cs | 2 +- .../Dungeon/D10StoneVigil/D101ChudoYudo.cs | 14 +++----------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/BossMod/Framework/IPCProvider.cs b/BossMod/Framework/IPCProvider.cs index d480455403..0803cd1ab1 100644 --- a/BossMod/Framework/IPCProvider.cs +++ b/BossMod/Framework/IPCProvider.cs @@ -1,5 +1,4 @@ -using BossMod.Components; -using Dalamud.Game.ClientState.Objects.Types; +using Dalamud.Game.ClientState.Objects.Types; namespace BossMod; @@ -7,11 +6,14 @@ class IPCProvider : IDisposable { private List _disposeActions = new(); - public IPCProvider(Autorotation autorotation, BossModuleManager bossmod) + public IPCProvider(Autorotation autorotation) { - Register("ActiveModuleComponentBaseList", () => bossmod.ActiveModule?.Components.Select(c => c.GetType().BaseType?.Name).ToList() ?? default); - Register("ActiveModuleComponentList", () => bossmod.ActiveModule?.Components.Select(c => c.GetType().Name).ToList() ?? default); - Register("ActiveModuleHasComponent", (string name) => bossmod.ActiveModule?.Components.Any(c => c.GetType().Name == name || c.GetType().BaseType?.Name == name) ?? false); + // TODO: this really needs to be reconsidered, this exposes implementation detail + // for usecase description, see PR 330 - really AI itself should handle heal range + Register("ActiveModuleComponentBaseList", () => autorotation.Bossmods.ActiveModule?.Components.Select(c => c.GetType().BaseType?.Name).ToList() ?? default); + Register("ActiveModuleComponentList", () => autorotation.Bossmods.ActiveModule?.Components.Select(c => c.GetType().Name).ToList() ?? default); + Register("ActiveModuleHasComponent", (string name) => autorotation.Bossmods.ActiveModule?.Components.Any(c => c.GetType().Name == name || c.GetType().BaseType?.Name == name) ?? false); + Register("HasModule", (GameObject obj) => ModuleRegistry.FindByOID(obj.DataId) != null); Register("IsMoving", () => ActionManagerEx.Instance!.InputOverride.IsMoving()); Register("ForbiddenZonesCount", () => autorotation.Hints.ForbiddenZones.Count); diff --git a/BossMod/Framework/Plugin.cs b/BossMod/Framework/Plugin.cs index f81b366123..69a4913106 100644 --- a/BossMod/Framework/Plugin.cs +++ b/BossMod/Framework/Plugin.cs @@ -65,7 +65,7 @@ public Plugin( _autorotation = new(_bossmod); _ai = new(_autorotation); _broadcast = new(); - _ipc = new(_autorotation, _bossmod); + _ipc = new(_autorotation); _wndBossmod = new(_bossmod); _wndBossmodPlan = new(_bossmod); diff --git a/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs b/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs index b54c8d9944..bf28e9d373 100644 --- a/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs +++ b/BossMod/Modules/RealmReborn/Dungeon/D10StoneVigil/D101ChudoYudo.cs @@ -1,6 +1,4 @@ -using BossMod.RealmReborn.Dungeon.D11DzemaelDarkhold.D111AllSeeingEye; - -namespace BossMod.RealmReborn.Dungeon.D10StoneVigil.D101ChudoYudo; +namespace BossMod.RealmReborn.Dungeon.D10StoneVigil.D101ChudoYudo; public enum OID : uint { @@ -26,18 +24,13 @@ class Swinge : Components.SelfTargetedLegacyRotationAOEs } // due to relatively short casts and the fact that boss likes moving across arena to cast swinge, we always want non-tanks to be positioned slightly behind -// I think cleave is better for this so we can still move around. -/*class Positioning : BossComponent +class Positioning : BossComponent { public override void AddAIHints(BossModule module, int slot, Actor actor, PartyRolesConfig.Assignment assignment, AIHints hints) { if (actor.Role != Role.Tank) hints.AddForbiddenZone(ShapeDistance.Cone(module.PrimaryActor.Position, 10, module.PrimaryActor.Rotation, 90.Degrees())); } -}*/ -class AutoAttack : Components.Cleave -{ - public AutoAttack() : base(ActionID.MakeSpell(AID.AutoAttack), new AOEShapeCone(40, 30.Degrees())) { } } class D101ChudoYudoStates : StateMachineBuilder @@ -47,8 +40,7 @@ public D101ChudoYudoStates(BossModule module) : base(module) TrivialPhase() .ActivateOnEnter() .ActivateOnEnter() - .ActivateOnEnter(); - //.ActivateOnEnter(); + .ActivateOnEnter(); } } From 3e73a7fc14fbf315377a9201bca97e27c33f32cb Mon Sep 17 00:00:00 2001 From: Andrew Gilewsky Date: Thu, 4 Apr 2024 23:40:27 +0100 Subject: [PATCH 6/6] Some DRS fixes. --- .../DelubrumReginae/DRS4QueensGuard/DRS4States.cs | 3 ++- .../DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs | 13 ++++++------- .../Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs | 2 +- .../Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs | 2 ++ BossMod/Replay/ReplayUtils.cs | 5 ++++- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs index e70e881c9c..856ad7b32b 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS4QueensGuard/DRS4States.cs @@ -49,7 +49,8 @@ private void Phase2(uint id) P2BloodAndBone(id + 0x30000, 4.2f); P2GunTurret(id + 0x40000, 10.2f); P2DoubleGambit(id + 0x50000, 10.3f); - // TODO: raidwides -> tankbusters -> 4th battery -> raidwides -> tankbusters -> enrage + P2BloodAndBone(id + 0x60000, 5.7f); + // TODO: tankbusters -> 4th battery -> raidwides -> tankbusters -> enrage SimpleState(id + 0xFF0000, 100, "???"); } diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs index 71f99ca944..349aaeb8e2 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS6TrinityAvowed/DRS6States.cs @@ -61,13 +61,12 @@ private void ForkSwordBowStaff(uint id) private void ForkStaffBowSword(uint id) { - // TODO: no idea about timings here - Staff1(id, 8); - Bow1(id + 0x100000, 8); - Sword1(id + 0x200000, 8); - Staff2(id + 0x300000, 8); - Bow2(id + 0x400000, 8); - Sword2(id + 0x500000, 8); + Staff1(id, 5.3f); + Bow1(id + 0x100000, 8.7f); + Sword1(id + 0x200000, 10.4f); + Staff2(id + 0x300000, 7.4f); + Bow2(id + 0x400000, 9.1f); + Sword2(id + 0x500000, 7.9f); Enrage(id + 0x600000, 16); // TODO: timing } diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs index 8188ccaef4..5922df624a 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/AboveBoard.cs @@ -51,7 +51,7 @@ public override void OnEventCast(BossModule module, Actor caster, ActorCastEvent switch ((AID)spell.Action.ID) { case AID.LotsCastBigShort: - //case AID.LotsCastSmallShort: + case AID.LotsCastSmallShort: AdvanceState(State.ShortExplosionsDone); break; case AID.LotsCastLong: diff --git a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs index 602d71b428..3c334d3602 100644 --- a/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs +++ b/BossMod/Modules/Shadowbringers/Foray/DelubrumReginae/DRS8Queen/DRS8Enums.cs @@ -96,6 +96,8 @@ public enum AID : uint AboveBoard = 23051, // QueensWarrior->self, 6.0s cast, range 60 circle, visual (throw up) AboveBoardExtra = 23438, // Helper->self, 6.0s cast, range 60 circle, visual (???) LotsCastBigShort = 23433, // AetherialBurst->location, no cast, range 10 circle + LotsCastSmallShort = 23053, // AetherialBolt->location, no cast, range 10 circle + LotsCastBigLong = 23052, // AetherialBurst->location, no cast, range 10 circle visual LotsCastSmallLong = 23432, // AetherialBolt->location, no cast, range 10 circle visual LotsCastLong = 23478, // Helper->location, 1.2s cast, range 10 circle diff --git a/BossMod/Replay/ReplayUtils.cs b/BossMod/Replay/ReplayUtils.cs index 803c32f281..1ed14ed14c 100644 --- a/BossMod/Replay/ReplayUtils.cs +++ b/BossMod/Replay/ReplayUtils.cs @@ -4,7 +4,10 @@ public static class ReplayUtils { public static string ParticipantString(Replay.Participant? p, DateTime t) { - return p != null ? $"{p.Type} {p.InstanceID:X} ({p.OID:X}) '{p.NameAt(t)}'" : ""; + if (p == null) + return ""; + var name = p.NameAt(t); + return $"{p.Type} {p.InstanceID:X} ({p.OID:X}/{name.id}) '{name.name}'"; } public static string ParticipantPosRotString(Replay.Participant? p, DateTime t)