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(); } }