Skip to content

Commit

Permalink
Merge pull request #461 from FFXIV-CombatReborn/mergeWIP
Browse files Browse the repository at this point in the history
Neyoozoteel updated for 7.1
  • Loading branch information
CarnifexOptimus authored Nov 24, 2024
2 parents d61eb3a + 2130f58 commit df27fe9
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 15 deletions.
4 changes: 4 additions & 0 deletions BossMod/BossModule/AIHints.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ public enum SpecialMode

// 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?)
public (Actor? Target, Positional Pos, bool Imminent, bool Correct) RecommendedPositional;
public void SetPositional(Positional positional)
{
RecommendedPositional = new(RecommendedPositional.Target, positional, RecommendedPositional.Imminent, RecommendedPositional.Correct);
}

// orientation restrictions (e.g. for gaze attacks): a list of forbidden orientation ranges, now or in near future
// AI will rotate to face allowed orientation at last possible moment, potentially losing uptime
Expand Down
4 changes: 4 additions & 0 deletions BossMod/Framework/IPCProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ public IPCProvider(RotationModuleManager autorotation, ActionManagerEx amex, Mov
Register("AI.SetPreset", (string name) =>
ai.SetAIPreset(autorotation.Database.Presets.VisiblePresets.FirstOrDefault(x => x.Name == name)));
Register("AI.GetPreset", () => ai.GetAIPreset);
Register("AI.GetPotentialTargets", () => autorotation.Hints.PotentialTargets);
Register("AI.GetSpecialMode", () => autorotation.Hints.ImminentSpecialMode);
Register("AI.ForcedTarget", () => autorotation.Hints.ForcedTarget);
Register("AI.SetPositional", (Positional positional) => autorotation.Hints.SetPositional(positional));
}

public void Dispose() => _disposeActions?.Invoke();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class TachiGekko(BossModule module) : Components.CastGaze(module, ActionID.MakeS
class TachiKasha(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.TachiKasha), new AOEShapeCircle(4));
class TachiYukikaze(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.TachiYukikaze), new AOEShapeRect(70, 2.5f, 70));
class ConcertedDissolution(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.ConcertedDissolution), new AOEShapeCone(40, 15.Degrees()));
class LightsChain(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.LightsChain), new AOEShapeDonut(6, 60));
class LightsChain(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.LightsChain), new AOEShapeDonut(5, 60));
class Guillotine1(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Guillotine1), new AOEShapeCone(80, 135.Degrees()));
class DominionSlash(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.DominionSlash));
class DivineDominion(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DivineDominion1), new AOEShapeCircle(6));
Expand All @@ -19,11 +19,6 @@ class SpiralFinish2(BossModule module) : Components.KnockbackFromCastTarget(modu
{
protected override void DrawEnemies(int pcSlot, Actor pc)
{
Arena.Actor(PrimaryActor);
Arena.Actors(Enemies(OID.ArkAngelGK));
Arena.Actors(Enemies(OID.ArkAngelHM));
Arena.Actors(Enemies(OID.ArkAngelEV));
Arena.Actors(Enemies(OID.ArkAngelTT));
Arena.Actors(Enemies(OID.ArkShield));
Arena.Actors(WorldState.Actors.Where(x => !x.IsAlly));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ public enum AID : uint

CriticalStrikes = 41090, // ArkAngelHM2->player, no cast, single-target

Dragonfall1 = 41086, // ArkAngelGK->self, 9.0s cast, single-target // Gk tetheres each a healer in each alliance then stackmarkers
Dragonfall1 = 41086, // ArkAngelGK->self, 9.0s cast, single-target, Gk tetheres each a healer in each alliance then stackmarkers
Dragonfall2 = 41087, // ArkAngelGK->players, no cast, range 6 circle

Guillotine1 = 41063, // ArkAngelTT->self, 10.5s cast, range 40 ?-degree cone
Guillotine2 = 41064, // Helper->self, no cast, range 40 ?-degree cone
Guillotine3 = 41065, // Helper->self, no cast, range 40 ?-degree cone
Guillotine1 = 41063, // ArkAngelTT->self, 10.5s cast, range 40 270-degree cone
Guillotine2 = 41064, // Helper->self, no cast, range 40 270-degree cone
Guillotine3 = 41065, // Helper->self, no cast, range 40 270-degree cone

//
DominionSlash = 41093, // ArkAngelEV->self, 5.0s cast, range 100 circle
Expand Down
15 changes: 11 additions & 4 deletions BossMod/Modules/Dawntrail/Hunt/RankS/Neyoozoteel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public enum AID : uint
NoxiousSap4 = 37370, // Boss->self, no cast, range 30 120-degree cone
NoxiousSap5 = 37396, // Boss->self, no cast, range 30 120-degree cone
NoxiousSap6 = 37371, // Boss->self, no cast, range 30 120-degree cone
NoxiousSap7 = 42174, // Boss->self, no cast, range 30 120-degree cone
NoxiousSap8 = 42173, // Boss->self, no cast, range 30 120-degree cone

Neurotoxify = 38331, // Boss->self, 5.0s cast, range 40 circle

Expand Down Expand Up @@ -64,16 +66,21 @@ class SapSpiller(BossModule module) : Components.GenericAOEs(module)
private static readonly Angle a90 = 90.Degrees();
private readonly List<AOEInstance> _aoes = [];
private static readonly HashSet<AID> castEnd = [AID.NoxiousSap2, AID.NoxiousSap3, AID.NoxiousSap4,
AID.NoxiousSap5, AID.NoxiousSap6];
AID.NoxiousSap5, AID.NoxiousSap6, AID.NoxiousSap7, AID.NoxiousSap8];

public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
var count = _aoes.Count;
if (count > 0)
{
yield return _aoes[0] with { Color = Colors.Danger };
foreach (var a in _aoes.Skip(1).Take(count - 1))
yield return a;
for (var i = 0; i < count; ++i)
{
var aoe = _aoes[i];
if (i == 0)
yield return count > 1 ? aoe with { Color = Colors.Danger } : aoe;
else if (i > 0)
yield return aoe;
}
}
}

Expand Down

0 comments on commit df27fe9

Please sign in to comment.