Skip to content

Commit b648fe3

Browse files
Merge pull request #964 from FFXIV-CombatReborn/mergeWIP
more vault oneiron modules
2 parents da15f8d + 1446476 commit b648fe3

File tree

22 files changed

+934
-88
lines changed

22 files changed

+934
-88
lines changed

BossMod/BossModule/AIHints.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ public readonly struct DamagePrediction(BitMask players, DateTime activation, Pr
9292
// other parts of the code can return small (e.g. 0.01) values to slightly (de)prioritize some positions, or large (e.g. 1000) values to effectively soft-override target position (but still utilize pathfinding)
9393
public readonly List<Func<WPos, float>> GoalZones = [];
9494

95+
// AI will treat the pixels inside these shapes as unreachable and not try to pathfind through them (unlike imminent forbidden zones)
96+
public List<Func<WPos, float>> TemporaryObstacles = [];
97+
9598
// positioning: next positional hint (TODO: reconsider, maybe it should be a list prioritized by in-gcds, and imminent should be in-gcds instead? or maybe it should be property of an enemy? do we need correct?)
9699
public (Actor? Target, Positional Pos, bool Imminent, bool Correct) RecommendedPositional;
97100

@@ -140,6 +143,7 @@ public void Clear()
140143
InteractWithTarget = null;
141144
ForbiddenZones.Clear();
142145
GoalZones.Clear();
146+
TemporaryObstacles.Clear();
143147
RecommendedPositional = default;
144148
ForbiddenDirections.Clear();
145149
ImminentSpecialMode = default;

BossMod/BossModule/BossModuleManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void Update()
7272
{
7373
var m = PendingModules[i];
7474
var prim = m.PrimaryActor;
75-
if (prim.IsDestroyed)
75+
if (prim.IsDeadOrDestroyed)
7676
{
7777
PendingModules.RemoveAt(i);
7878
m.Dispose();

BossMod/Components/Voidzone.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
2929
var forbidden = new List<Func<WPos, float>>();
3030
foreach (var s in Sources(Module))
3131
forbidden.Add(ShapeDistance.Circle(s.Position.Quantized(), radius));
32-
hints.AddForbiddenZone(ShapeDistance.Union(forbidden));
32+
hints.TemporaryObstacles.Add(ShapeDistance.Union(forbidden));
3333
}
3434
else
3535
{
@@ -46,7 +46,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
4646
forbiddenFarFarFuture.Add(ShapeDistance.Capsule(s.Position, s.Rotation, 3f * MovementHintLength, radius));
4747
forbiddenImminent.Add(ShapeDistance.Circle(s.Position, radius));
4848
}
49-
hints.AddForbiddenZone(ShapeDistance.Union(forbiddenImminent));
49+
hints.TemporaryObstacles.Add(ShapeDistance.Union(forbiddenImminent));
5050
hints.AddForbiddenZone(ShapeDistance.Union(forbiddenNearFuture), WorldState.FutureTime(1.1d));
5151
hints.AddForbiddenZone(ShapeDistance.Union(forbiddenSoon), WorldState.FutureTime(3d));
5252
hints.AddForbiddenZone(ShapeDistance.Union(forbiddenFarFuture), WorldState.FutureTime(10d));

BossMod/Modules/Dawntrail/Hunt/RankS/Ihnuxokiy.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ public enum AID : uint
2323

2424
public enum SID : uint
2525
{
26-
Aetherstock = 4136, // Boss->Boss, extra=0x0
2726
AboutFace = 2162, // Boss->player, extra=0x0
2827
LeftFace = 2163, // Boss->player, extra=0x0
2928
RightFace = 2164, // Boss->player, extra=0x0
30-
ForwardMarch = 2161, // Boss->player, extra=0x0
31-
ForcedMarch = 1257 // Boss->player, extra=0x1/0x2/0x4/0x8
29+
ForwardMarch = 2161 // Boss->player, extra=0x0
3230
}
3331

3432
sealed class AetherstockAbyssalSmog(BossModule module) : Components.GenericAOEs(module)

BossMod/Modules/Dawntrail/TreasureHunt/VaultOneiron/Fastitocalon.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public enum OID : uint
1111
VaultTomato = 0x48BC, // R0.84, icon 4, needs to be killed in order from 1 to 5 for maximum rewards
1212
VaultQueen = 0x48BD, // R0.84, icon 5, needs to be killed in order from 1 to 5 for maximum rewards
1313
GoldyCat = 0x48B7, // R1.87
14+
Vaultkeeper = 0x48B8, // R2.0
1415
Helper = 0x233C
1516
}
1617

@@ -38,6 +39,9 @@ public enum AID : uint
3839
CanyonVisual = 43671, // Fastitocalon->self, 4.0+1,0s cast, single-target
3940
Canyon = 43672, // Helper->self, 5.0s cast, range 45 circle
4041

42+
AutoAttack3 = 871, // Vaultkeeper->player, no cast, single-target
43+
Thunderlance = 43727, // Vaultkeeper->self, 3.5s cast, range 20 width 3 rect
44+
LanceSwing = 43726, // Vaultkeeper->self, 4.0s cast, range 8 circle
4145
TearyTwirl = 32301, // VaultOnion->self, 3.5s cast, range 7 circle
4246
PluckAndPrune = 32302, // VaultEggplant->self, 3.5s cast, range 7 circle
4347
PungentPirouette = 32303, // VaultGarlic->self, 3.5s cast, range 7 circle
@@ -86,6 +90,8 @@ public override void OnCastFinished(Actor caster, ActorCastInfo spell)
8690
}
8791
}
8892

93+
sealed class Thunderlance(BossModule module) : Components.SimpleAOEs(module, (uint)AID.Thunderlance, new AOEShapeRect(20f, 1.5f));
94+
sealed class LanceSwing(BossModule module) : Components.SimpleAOEs(module, (uint)AID.LanceSwing, 8f);
8995
sealed class MandragoraAOEs(BossModule module) : Components.SimpleAOEGroups(module, [(uint)AID.PluckAndPrune, (uint)AID.TearyTwirl,
9096
(uint)AID.HeirloomScream, (uint)AID.PungentPirouette, (uint)AID.Pollen], 7f);
9197

@@ -100,6 +106,8 @@ public FastitocalonStates(BossModule module) : base(module)
100106
.ActivateOnEnter<Earthshake>()
101107
.ActivateOnEnter<Canyon>()
102108
.ActivateOnEnter<MandragoraAOEs>()
109+
.ActivateOnEnter<Thunderlance>()
110+
.ActivateOnEnter<LanceSwing>()
103111
.Raw.Update = () => AllDeadOrDestroyed(Fastitocalon.All);
104112
}
105113
}
@@ -112,7 +120,7 @@ public Fastitocalon(WorldState ws, Actor primary) : base(ws, primary)
112120
lasercannons = Enemies((uint)OID.VaultLaserCannon);
113121
}
114122

115-
private static readonly uint[] bonusAdds = [(uint)OID.VaultOnion, (uint)OID.VaultTomato, (uint)OID.VaultGarlic, (uint)OID.VaultEggplant, (uint)OID.VaultQueen, (uint)OID.GoldyCat];
123+
private static readonly uint[] bonusAdds = [(uint)OID.VaultOnion, (uint)OID.VaultTomato, (uint)OID.VaultGarlic, (uint)OID.VaultEggplant, (uint)OID.VaultQueen, (uint)OID.Vaultkeeper, (uint)OID.GoldyCat];
116124
public static readonly uint[] All = [(uint)OID.Fastitocalon, (uint)OID.VaultLaserCannon, .. bonusAdds];
117125
private readonly List<Actor> lasercannons;
118126

@@ -131,11 +139,12 @@ protected override void CalculateModuleAIHints(int slot, Actor actor, PartyRoles
131139
var e = hints.PotentialTargets[i];
132140
e.Priority = e.Actor.OID switch
133141
{
134-
(uint)OID.VaultOnion => 6,
135-
(uint)OID.VaultEggplant => 5,
136-
(uint)OID.VaultGarlic => 4,
137-
(uint)OID.VaultTomato => 3,
138-
(uint)OID.VaultQueen or (uint)OID.GoldyCat => 2,
142+
(uint)OID.VaultOnion => 7,
143+
(uint)OID.VaultEggplant => 6,
144+
(uint)OID.VaultGarlic => 5,
145+
(uint)OID.VaultTomato => 4,
146+
(uint)OID.VaultQueen or (uint)OID.GoldyCat => 3,
147+
(uint)OID.Vaultkeeper => 2,
139148
(uint)OID.VaultLaserCannon => 1,
140149
_ => 0
141150
};

BossMod/Modules/Dawntrail/TreasureHunt/VaultOneiron/GildedSentry.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public enum AID : uint
2020
AlexandrianThunderVisual = 43720, // GildedSentry->self, 2.5+0,5s cast, single-target
2121
AlexandrianThunder = 43721, // Helper->location, 3.0s cast, range 6 circle
2222
SkeweringLance = 43725, // GildedSentry->player, 5.0s cast, single-target, tankbuster
23+
AlexandrianThunderIIIVisual = 43722, // GildedSentry->self, 4.5+0,5s cast, single-target
24+
AlexandrianThunderIII = 43723, // Helper->location, 5.0s cast, range 35 circle, raidwide
2325

2426
Thunderlance = 43727, // Vaultkeeper->self, 3.5s cast, range 20 width 3 rect
2527
LanceSwing = 43726, // Vaultkeeper->self, 4.0s cast, range 8 circle
@@ -30,6 +32,7 @@ sealed class AlexandrianThunder(BossModule module) : Components.SimpleAOEs(modul
3032
sealed class CrossLightning(BossModule module) : Components.SimpleAOEs(module, (uint)AID.CrossLightning, new AOEShapeCross(50f, 5f));
3133
sealed class Electray(BossModule module) : Components.SimpleAOEs(module, (uint)AID.Electray, new AOEShapeRect(75f, 2f));
3234
sealed class SkeweringLance(BossModule module) : Components.SingleTargetCast(module, (uint)AID.SkeweringLance);
35+
sealed class AlexandrianThunderIII(BossModule module) : Components.RaidwideCast(module, (uint)AID.AlexandrianThunderIII);
3336

3437
sealed class Thunderlance(BossModule module) : Components.SimpleAOEs(module, (uint)AID.Thunderlance, new AOEShapeRect(20f, 1.5f));
3538
sealed class LanceSwing(BossModule module) : Components.SimpleAOEs(module, (uint)AID.LanceSwing, 8f);
@@ -43,6 +46,7 @@ public GildedSentryStates(BossModule module) : base(module)
4346
.ActivateOnEnter<CrossLightning>()
4447
.ActivateOnEnter<Electray>()
4548
.ActivateOnEnter<SkeweringLance>()
49+
.ActivateOnEnter<AlexandrianThunderIII>()
4650
.ActivateOnEnter<Thunderlance>()
4751
.ActivateOnEnter<LanceSwing>()
4852
.Raw.Update = () => AllDeadOrDestroyed(GildedSentry.All);

0 commit comments

Comments
 (0)