From 6fc6c433c472d3f40cc428505d094265f2d6b511 Mon Sep 17 00:00:00 2001 From: CarnifexOptimus <156172553+CarnifexOptimus@users.noreply.github.com> Date: Sun, 13 Oct 2024 10:13:46 +0200 Subject: [PATCH] bardams mettle ai improvement --- BossMod/Components/BaitAway.cs | 2 +- BossMod/Components/LineOfSightAOE.cs | 17 ++++++++--------- .../Dawntrail/Quest/RoleQuests/AHunterTrue.cs | 2 +- .../Endwalker/Dungeon/D05Aitiascope/D053Amon.cs | 2 +- .../Dungeon/D11LapisManalis/D111Albion.cs | 2 +- .../Endwalker/Savage/P9SKokytos/Charibdys.cs | 2 +- .../V01SS/V013Gladiator/V013Gladiator.cs | 2 +- .../A12IrminsulSawtooth/A12IrminsulSawtooth.cs | 2 +- .../Alliance/A13KingBehemoth/A13KingBehemoth.cs | 2 +- .../RealmReborn/Alliance/A23Amon/A23Amon.cs | 2 +- .../Dungeon/D26Snowcloak/D263Fenrir.cs | 2 +- .../Dungeon/D06Amaurot/D061TheFirstBeast.cs | 2 +- .../CE41WithDiremiteAndMain.cs | 4 ++-- .../CriticalEngagement/CE54NeverCryWolf.cs | 2 +- .../Modules/Shadowbringers/Ultimate/TEA/TEA.cs | 2 +- .../Dungeon/D03BardamsMettle/D031Garula.cs | 5 ++--- .../D03BardamsMettle/D032HunterOfBardam.cs | 2 +- .../Stormblood/Dungeon/D13Burn/D131Hedetet.cs | 2 +- 18 files changed, 27 insertions(+), 29 deletions(-) diff --git a/BossMod/Components/BaitAway.cs b/BossMod/Components/BaitAway.cs index 077b3e28f6..7252482186 100644 --- a/BossMod/Components/BaitAway.cs +++ b/BossMod/Components/BaitAway.cs @@ -265,7 +265,7 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell) } // a variation of baits with tethers for charges that end at target -public class BaitAwayChargeTether(BossModule module, float halfWidth, float activationDelay, uint tetherIDBad, uint tetherIDGood, ActionID aidGood, ActionID aidBad = default, uint enemyOID = default, float minimumDistance = default) +public class BaitAwayChargeTether(BossModule module, float halfWidth, float activationDelay, ActionID aidGood, ActionID aidBad = default, uint tetherIDBad = 57, uint tetherIDGood = 1, uint enemyOID = default, float minimumDistance = default) : StretchTetherDuo(module, minimumDistance, activationDelay, tetherIDBad, tetherIDGood, new AOEShapeRect(default, halfWidth), default, enemyOID) { public ActionID AidGood = aidGood; diff --git a/BossMod/Components/LineOfSightAOE.cs b/BossMod/Components/LineOfSightAOE.cs index 8d9255f838..c4460d2fca 100644 --- a/BossMod/Components/LineOfSightAOE.cs +++ b/BossMod/Components/LineOfSightAOE.cs @@ -3,10 +3,11 @@ // generic component that shows line-of-sight cones for arbitrary origin and blocking shapes // TODO: add support for multiple AOE sources at the same time (I simplified Hermes from 4 AOEs into one) // add support for blockers that spawn or get destroyed after cast already started (Hermes: again a cheat here by only using that meteor that exists for the whole mechanic) -public abstract class GenericLineOfSightAOE(BossModule module, ActionID aid, float maxRange, bool blockersImpassable, bool rect = false) : GenericAOEs(module, aid, "Hide behind obstacle!") +public abstract class GenericLineOfSightAOE(BossModule module, ActionID aid, float maxRange, bool blockersImpassable = false, bool rect = false, bool safeInsideHitbox = true) : GenericAOEs(module, aid, "Hide behind obstacle!") { public DateTime NextExplosion; public bool BlockersImpassable = blockersImpassable; + public bool SafeInsideHitbox = safeInsideHitbox; public float MaxRange { get; private set; } = maxRange; public bool Rect { get; private set; } = rect; // if the AOE is a rectangle instead of a circle public WPos? Origin { get; private set; } // inactive if null @@ -15,7 +16,6 @@ public abstract class GenericLineOfSightAOE(BossModule module, ActionID aid, flo public List Safezones = []; public List UnionShapes = []; public List DifferenceShapes = []; - private const float PCHitBoxRadius = 0.5f; public override IEnumerable ActiveAOEs(int slot, Actor actor) => Safezones.Take(1); public void Modify(WPos? origin, IEnumerable<(WPos Center, float Radius)> blockers, DateTime nextExplosion = default) @@ -56,19 +56,18 @@ public void AddSafezone(DateTime activation, Angle rotation = default) { foreach (var v in Visibility) UnionShapes.Add(new DonutSegmentHA(Origin.Value, v.Distance + 0.2f, MaxRange, v.Dir, v.HalfWidth)); - if (BlockersImpassable) - foreach (var b in Blockers) - DifferenceShapes.Add(new Circle(b.Center, b.Radius + PCHitBoxRadius)); } else if (Rect) { foreach (var b in Blockers) { - UnionShapes.Add(new RectangleSE(b.Center, b.Center + MaxRange * rotation.ToDirection(), b.Radius)); - if (BlockersImpassable) - DifferenceShapes.Add(new Circle(b.Center, b.Radius + PCHitBoxRadius)); + var dir = rotation.ToDirection(); + UnionShapes.Add(new RectangleSE(b.Center + 0.2f * dir, b.Center + MaxRange * dir, b.Radius)); } } + if (BlockersImpassable || !SafeInsideHitbox) + foreach (var b in Blockers) + DifferenceShapes.Add(new Circle(b.Center, !SafeInsideHitbox ? b.Radius : b.Radius + 0.5f)); Safezones.Add(new(new AOEShapeCustom(CopyShapes(UnionShapes), CopyShapes(DifferenceShapes), InvertForbiddenZone: true), Arena.Center, default, activation, Colors.SafeFromAOE)); UnionShapes.Clear(); } @@ -94,7 +93,7 @@ public abstract class CastLineOfSightAOE : GenericLineOfSightAOE public readonly List Casters = []; public Actor? ActiveCaster => Casters.MinBy(c => c.CastInfo!.RemainingTime); - protected CastLineOfSightAOE(BossModule module, ActionID aid, float maxRange, bool blockersImpassable, bool rect = false) : base(module, aid, maxRange, blockersImpassable, rect) + protected CastLineOfSightAOE(BossModule module, ActionID aid, float maxRange, bool blockersImpassable = false, bool rect = false, bool safeInsideHitbox = true) : base(module, aid, maxRange, blockersImpassable, rect, safeInsideHitbox) { Refresh(); } diff --git a/BossMod/Modules/Dawntrail/Quest/RoleQuests/AHunterTrue.cs b/BossMod/Modules/Dawntrail/Quest/RoleQuests/AHunterTrue.cs index e596eb0e1d..80c4d81b63 100644 --- a/BossMod/Modules/Dawntrail/Quest/RoleQuests/AHunterTrue.cs +++ b/BossMod/Modules/Dawntrail/Quest/RoleQuests/AHunterTrue.cs @@ -82,7 +82,7 @@ class NinefoldCurse(BossModule module) : Components.RaidwideCastDelay(module, Ac class NinetyNinefoldCurse(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.NinetyNinefoldCurse)); class Roar(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Roar)); class SonicStorm(BossModule module) : Components.SpreadFromCastTargets(module, ActionID.MakeSpell(AID.SonicStorm), 6); -class RushBait(BossModule module) : Components.BaitAwayChargeTether(module, 4, 8.3f, (uint)TetherID.TetherBad, (uint)TetherID.TetherGood, ActionID.MakeSpell(AID.RushBait), ActionID.MakeSpell(AID.RushBaitFail), (uint)OID.Dzo, 30); +class RushBait(BossModule module) : Components.BaitAwayChargeTether(module, 4, 8.3f, ActionID.MakeSpell(AID.RushBait), ActionID.MakeSpell(AID.RushBaitFail), (uint)TetherID.TetherBad, (uint)TetherID.TetherGood, (uint)OID.Dzo, 30); class RushLineStack(BossModule module) : Components.LineStack(module, ActionID.MakeSpell(AID.RushLineStackMarker), ActionID.MakeSpell(AID.RushLineStack), 4.9f, markerIsFinalTarget: false); class Trample(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Trample), new AOEShapeCircle(15)); diff --git a/BossMod/Modules/Endwalker/Dungeon/D05Aitiascope/D053Amon.cs b/BossMod/Modules/Endwalker/Dungeon/D05Aitiascope/D053Amon.cs index 4fe2b0b384..fe65cefe9a 100644 --- a/BossMod/Modules/Endwalker/Dungeon/D05Aitiascope/D053Amon.cs +++ b/BossMod/Modules/Endwalker/Dungeon/D05Aitiascope/D053Amon.cs @@ -63,7 +63,7 @@ class DarkForte(BossModule module) : Components.SingleTargetCast(module, ActionI class Entracte(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.Entracte)); class DreamsOfIce(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DreamsOfIce), new AOEShapeCircle(6)); -class CurtainCall(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.CurtainCall), 60, false) +class CurtainCall(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.CurtainCall), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.Ice); public override IEnumerable ActiveAOEs(int slot, Actor actor) diff --git a/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D111Albion.cs b/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D111Albion.cs index 844fc2cc16..c58474cd66 100644 --- a/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D111Albion.cs +++ b/BossMod/Modules/Endwalker/Dungeon/D11LapisManalis/D111Albion.cs @@ -199,7 +199,7 @@ class IcyThroesSpread(BossModule module) : Components.SpreadFromCastTargets(modu class LeftSlam(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.LeftSlam), new AOEShapeRect(20, 80, 0, 90.Degrees())); // full width = half width in this case + angle is detected incorrectly, length and width are also switched class AlbionsEmbrace(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.AlbionsEmbrace)); -class RoarOfAlbion(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.RoarOfAlbion), 60, false) +class RoarOfAlbion(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.RoarOfAlbion), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.IcyCrystal); } diff --git a/BossMod/Modules/Endwalker/Savage/P9SKokytos/Charibdys.cs b/BossMod/Modules/Endwalker/Savage/P9SKokytos/Charibdys.cs index 43fcf09ebf..277c378a13 100644 --- a/BossMod/Modules/Endwalker/Savage/P9SKokytos/Charibdys.cs +++ b/BossMod/Modules/Endwalker/Savage/P9SKokytos/Charibdys.cs @@ -91,7 +91,7 @@ public override void OnEventCast(Actor caster, ActorCastEvent spell) } } -class EclipticMeteor(BossModule module) : Components.GenericLineOfSightAOE(module, ActionID.MakeSpell(AID.EclipticMeteorAOE), 60, false) +class EclipticMeteor(BossModule module) : Components.GenericLineOfSightAOE(module, ActionID.MakeSpell(AID.EclipticMeteorAOE), 60, safeInsideHitbox: false) { public override void OnEventIcon(Actor actor, uint iconID) { diff --git a/BossMod/Modules/Endwalker/Variant/V01SS/V013Gladiator/V013Gladiator.cs b/BossMod/Modules/Endwalker/Variant/V01SS/V013Gladiator/V013Gladiator.cs index c1ffd0c98f..f9913afde7 100644 --- a/BossMod/Modules/Endwalker/Variant/V01SS/V013Gladiator/V013Gladiator.cs +++ b/BossMod/Modules/Endwalker/Variant/V01SS/V013Gladiator/V013Gladiator.cs @@ -150,7 +150,7 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell) class FlashOfSteel1(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.FlashOfSteel1), "Raidwide"); class FlashOfSteel2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.FlashOfSteel2), "Raidwide"); -class ShatteringSteelMeteor(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.ShatteringSteel), 60, false) +class ShatteringSteelMeteor(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.ShatteringSteel), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.AntiqueBoulder).Where(a => !a.IsDead); } diff --git a/BossMod/Modules/Heavensward/Alliance/A12IrminsulSawtooth/A12IrminsulSawtooth.cs b/BossMod/Modules/Heavensward/Alliance/A12IrminsulSawtooth/A12IrminsulSawtooth.cs index a0d33984eb..c009e00fa3 100644 --- a/BossMod/Modules/Heavensward/Alliance/A12IrminsulSawtooth/A12IrminsulSawtooth.cs +++ b/BossMod/Modules/Heavensward/Alliance/A12IrminsulSawtooth/A12IrminsulSawtooth.cs @@ -9,7 +9,7 @@ class Rootstorm(BossModule module) : Components.RaidwideCast(module, ActionID.Ma class Ambush(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Ambush), new AOEShapeCircle(9)); class AmbushKnockback(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.Ambush), 30, stopAtWall: true, kind: Kind.TowardsOrigin); -class ShockwaveStomp(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.ShockwaveStomp), 70, false) +class ShockwaveStomp(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.ShockwaveStomp), 70) { public override IEnumerable BlockerActors() => Module.Enemies(OID.Irminsul).Where(a => !a.IsDead); } diff --git a/BossMod/Modules/RealmReborn/Alliance/A13KingBehemoth/A13KingBehemoth.cs b/BossMod/Modules/RealmReborn/Alliance/A13KingBehemoth/A13KingBehemoth.cs index d0bd1e1bb4..43280b5bb4 100644 --- a/BossMod/Modules/RealmReborn/Alliance/A13KingBehemoth/A13KingBehemoth.cs +++ b/BossMod/Modules/RealmReborn/Alliance/A13KingBehemoth/A13KingBehemoth.cs @@ -1,6 +1,6 @@ namespace BossMod.RealmReborn.Alliance.A13KingBehemoth; -class EclipticMeteor(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.EclipticMeteor), 60, false) +class EclipticMeteor(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.EclipticMeteor), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.Comet).Where(a => !a.IsDead); } diff --git a/BossMod/Modules/RealmReborn/Alliance/A23Amon/A23Amon.cs b/BossMod/Modules/RealmReborn/Alliance/A23Amon/A23Amon.cs index c85e13eba2..f05eb04e8a 100644 --- a/BossMod/Modules/RealmReborn/Alliance/A23Amon/A23Amon.cs +++ b/BossMod/Modules/RealmReborn/Alliance/A23Amon/A23Amon.cs @@ -3,7 +3,7 @@ class BlizzagaForte(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BlizzagaForte), new AOEShapeCircle(10)); class Darkness(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Darkness), new AOEShapeCone(6, 22.5f.Degrees())); -class CurtainCall(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.CurtainCall), 60, false) +class CurtainCall(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.CurtainCall), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.IceCage).Where(a => !a.IsDead); } diff --git a/BossMod/Modules/RealmReborn/Dungeon/D26Snowcloak/D263Fenrir.cs b/BossMod/Modules/RealmReborn/Dungeon/D26Snowcloak/D263Fenrir.cs index eefb2c1cd4..272f435e2f 100644 --- a/BossMod/Modules/RealmReborn/Dungeon/D26Snowcloak/D263Fenrir.cs +++ b/BossMod/Modules/RealmReborn/Dungeon/D26Snowcloak/D263Fenrir.cs @@ -24,7 +24,7 @@ public enum AID : uint HeavenswardRoar = 29593, // Boss->self, 5.0s cast, range 50 60-degree cone } -class LunarCry(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.LunarCry), 80, false) +class LunarCry(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.LunarCry), 80) { public override IEnumerable BlockerActors() => Module.Enemies(OID.Icicle).Where(x => x.ModelState.AnimState1 != 1); } diff --git a/BossMod/Modules/Shadowbringers/Dungeon/D06Amaurot/D061TheFirstBeast.cs b/BossMod/Modules/Shadowbringers/Dungeon/D06Amaurot/D061TheFirstBeast.cs index f7f78bf614..6a99d82653 100644 --- a/BossMod/Modules/Shadowbringers/Dungeon/D06Amaurot/D061TheFirstBeast.cs +++ b/BossMod/Modules/Shadowbringers/Dungeon/D06Amaurot/D061TheFirstBeast.cs @@ -75,7 +75,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme } } -class TheFinalSky(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.TheFinalSky), 70, false) +class TheFinalSky(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.TheFinalSky), 70, safeInsideHitbox: false) { public override IEnumerable BlockerActors() => Module.Enemies(OID.FallenStar); } diff --git a/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE41WithDiremiteAndMain.cs b/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE41WithDiremiteAndMain.cs index e0c8dc4368..e61f9c778f 100644 --- a/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE41WithDiremiteAndMain.cs +++ b/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE41WithDiremiteAndMain.cs @@ -49,12 +49,12 @@ public enum IconID : uint class ResonantFrequencyDim(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ResonantFrequencyDim), new AOEShapeCircle(6)); class ResonantFrequencyCorrupted(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ResonantFrequencyCorrupted), new AOEShapeCircle(6)); -class CrystallineStingers(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.CrystallineStingers), 60, false) +class CrystallineStingers(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.CrystallineStingers), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.DimCrystal).Where(a => !a.IsDead); } -class AetherialStingers(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.AetherialStingers), 60, false) +class AetherialStingers(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.AetherialStingers), 60) { public override IEnumerable BlockerActors() => Module.Enemies(OID.CorruptedCrystal).Where(a => !a.IsDead); } diff --git a/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE54NeverCryWolf.cs b/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE54NeverCryWolf.cs index 45785e3cea..5a56a5e544 100644 --- a/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE54NeverCryWolf.cs +++ b/BossMod/Modules/Shadowbringers/Foray/CriticalEngagement/CE54NeverCryWolf.cs @@ -61,7 +61,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme } } -class LunarCry(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.LunarCry), 80, false) +class LunarCry(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.LunarCry), 80) { private readonly List _safePillars = []; private readonly BracingWind? _knockback = module.FindComponent(); diff --git a/BossMod/Modules/Shadowbringers/Ultimate/TEA/TEA.cs b/BossMod/Modules/Shadowbringers/Ultimate/TEA/TEA.cs index b1009a49fa..d5533bf1ca 100644 --- a/BossMod/Modules/Shadowbringers/Ultimate/TEA/TEA.cs +++ b/BossMod/Modules/Shadowbringers/Ultimate/TEA/TEA.cs @@ -12,7 +12,7 @@ class P2Photon(BossModule module) : Components.CastCounter(module, ActionID.Make class P2SpinCrusher(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.SpinCrusher), new AOEShapeCone(10, 45.Degrees())); class P2Drainage(BossModule module) : Components.PersistentVoidzone(module, 8, m => m.Enemies(OID.LiquidRage)); // TODO: verify distance -class P2PropellerWind(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.PropellerWind), 50, false) +class P2PropellerWind(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.PropellerWind), 50) { public override IEnumerable BlockerActors() => Module.Enemies(OID.GelidGaol); } diff --git a/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D031Garula.cs b/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D031Garula.cs index f9ebfd2600..4622146e6e 100644 --- a/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D031Garula.cs +++ b/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D031Garula.cs @@ -28,11 +28,11 @@ public enum AID : uint class CrumblingCrust(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.CrumblingCrust), 3); class Heave(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Heave), new AOEShapeCone(13, 60.Degrees())); class WideBlaster(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.WideBlaster), new AOEShapeCone(29.15f, 60.Degrees())); -class Rush(BossModule module) : Components.BaitAwayChargeCast(module, ActionID.MakeSpell(AID.Rush), 4); -class RushTether(BossModule module) : Components.StretchTetherDuo(module, 16, 10.1f) +class Rush(BossModule module) : Components.BaitAwayChargeTether(module, 4, 10.1f, ActionID.MakeSpell(AID.Rush), minimumDistance: 23) { public override void Update() { + base.Update(); if (Module.PrimaryActor.CastInfo == null) CurrentBaits.Clear(); } @@ -50,7 +50,6 @@ public D031GarulaStates(BossModule module) : base(module) .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter() - .ActivateOnEnter() .ActivateOnEnter() .ActivateOnEnter(); } diff --git a/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D032HunterOfBardam.cs b/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D032HunterOfBardam.cs index fa6134030d..3269f6e8b5 100644 --- a/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D032HunterOfBardam.cs +++ b/BossMod/Modules/Stormblood/Dungeon/D03BardamsMettle/D032HunterOfBardam.cs @@ -54,7 +54,7 @@ public enum IconID : uint class CometFirst(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.CometFirst), 4); class CometRest(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.CometRest), 4); -class MeteorImpact(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.MeteorImpact), 50, false) +class MeteorImpact(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.MeteorImpact), 50, safeInsideHitbox: false) { private DateTime activation; diff --git a/BossMod/Modules/Stormblood/Dungeon/D13Burn/D131Hedetet.cs b/BossMod/Modules/Stormblood/Dungeon/D13Burn/D131Hedetet.cs index e14d10dcb4..078c56b313 100644 --- a/BossMod/Modules/Stormblood/Dungeon/D13Burn/D131Hedetet.cs +++ b/BossMod/Modules/Stormblood/Dungeon/D13Burn/D131Hedetet.cs @@ -102,7 +102,7 @@ public override void AddHints(int slot, Actor actor, TextHints hints) } class CrystalNeedle(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.CrystalNeedle)); -class Shardfall(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.Shardfall), 40, false) +class Shardfall(BossModule module) : Components.CastLineOfSightAOE(module, ActionID.MakeSpell(AID.Shardfall), 40) { public override IEnumerable BlockerActors() => Module.Enemies(OID.DimCrystal).Where(e => !e.IsDead); }