Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vault WIP Modules #452

Merged
merged 3 commits into from
Aug 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
namespace BossMod.Heavensward.Dungeon.D04Vault.D041SerAdelphelBrightblade;

public enum OID : uint
{
Boss = 0x104E, // R0.500, SerAdelphelBrightblade
VaultDeacon = 0x1050, // R0.500, x1
VaultOstiary = 0x104F, // R0.500, x2
SerAdelphel = 0x1051, // R2.200, x1
Brightsphere = 0x1052, // R1.000, x?
Helper2 = 0xD25, // "DawnKnight"?
Helper = 0x233C, // x3
}
public enum AID : uint
{
Attack = 870, // 105A/105B/104F/104E/1051/1060/1069/105F/1053/1054/1068->player, no cast, single-target
HoliestOfHoly = 4126, // 1051->self, 3.0s cast, range 80+R circle
HeavenlySlash = 4125, // 1051->self, no cast, range 8+R ?-degree cone
HolyShieldBash = 4127, // 1051->player, 4.0s cast, single-target
SolidAscension = 4128, // 1051->player, no cast, single-target
SolidAscension2 = 4129, // D25->player, no cast, single-target
Advent = 4979, // 104E/1053->self, no cast, single-target
Advent2 = 4980, // D25->self, no cast, range 80 circle
Advent3 = 4122, // 104E/1053->self, no cast, single-target
ShiningBlade = 4130, // 1051->location, no cast, width 6 rect charge
Execution = 4131, // 1051->location, no cast, range 5 circle

Bloodstain = 1099,
BrightFlare = 4132, // 1052->self, no cast, range 5+R circle
}
public enum IconID : uint
{
HolyShieldBash = 16, // player
Execution = 32, // player
}
class HoliestOfHoly(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.HoliestOfHoly));
class HeavenlySlash(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.HeavenlySlash), new AOEShapeCone(8, 45.Degrees()));
class HolyShieldBash(BossModule module) : Components.SingleTargetCast(module, ActionID.MakeSpell(AID.HolyShieldBash));
class SolidAscension(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.SolidAscension));
class SolidAscension2(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.SolidAscension2));
//class ShiningBlade(BossModule module) : Components.ChargeAOEs(module, ActionID.MakeSpell(AID.ShiningBlade), 3);
class Bloodstain(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Bloodstain), new AOEShapeCircle(5));
class Execution(BossModule module) : Components.SpreadFromIcon(module, (uint)IconID.Execution, ActionID.MakeSpell(AID.Execution), 5, 7.1f)
{
public override void OnEventCast(Actor caster, ActorCastEvent spell)
{
if ((AID)spell.Action.ID is AID.Execution)
{
Spreads.Clear();
}
}
};
class BrightFlare(BossModule module) : Components.GenericAOEs(module)
{
private IEnumerable<Actor> Brightspheres => Module.Enemies(OID.Brightsphere).Where(e => !e.IsDead);
public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor) => Brightspheres.Select(b => new AOEInstance(new AOEShapeCircle(6f), b.Position));
}
class MultiAddsModule(BossModule module) : Components.AddsMulti(module, [(uint)OID.VaultOstiary, (uint)OID.VaultDeacon, (uint)OID.SerAdelphel]);
class D041SerAdelphelBrightbladeStates : StateMachineBuilder
{
public D041SerAdelphelBrightbladeStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<HoliestOfHoly>()
.ActivateOnEnter<HeavenlySlash>()
.ActivateOnEnter<HolyShieldBash>()
.ActivateOnEnter<SolidAscension>()
.ActivateOnEnter<SolidAscension2>()
.ActivateOnEnter<Execution>()
.ActivateOnEnter<BrightFlare>()
.ActivateOnEnter<Bloodstain>()
.ActivateOnEnter<MultiAddsModule>();

}
}
[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "VeraNala", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 34, NameID = 3849)]
public class D041SerAdelphelBrightblade(WorldState ws, Actor primary) : BossModule(ws, primary, new(0, -100), new ArenaBoundsCircle(19.5f));
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
namespace BossMod.Heavensward.Dungeon.D04Vault.D042SerGrinnauxTheBull;

public enum OID : uint
{
Boss = 0x1053, // R0.500, SerGrinnauxTheBull
SerGrinnaux = 0x1054, // R2.200, x?
AetherialTear = 0x1055, // R2.000, x?
Helper2 = 0xD25, // "DawnKnight"?
Helper = 0x233C, // x3
DimensionalRipVoidzone = 0x1E91C1,
}
public enum AID : uint
{
Attack = 870, // 105A/105B/104F/104E/1051/1060/1069/105F/1053/1054/1068->player, no cast, single-target
DimensionalCollapse = 4136, // 1054->self, 2.5s cast, single-target
DimensionalCollapse2 = 4137, // D25->self, 3.0s cast, range 7+R ?-degree cone - Used in 2xDonut Pattern & Inward Pattern
DimensionalCollapse3 = 4138, // D25->self, 3.0s cast, range 12+R ?-degree cone - Used in Inward Pattern
DimensionalCollapse4 = 4139, // D25->self, 3.0s cast, range 17+R ?-degree cone - Used in 2xDonut Pattern
HeavySwing = 4133, // 1054->players, no cast, range 8+R ?-degree cone
HyperdimensionalSlash = 4134, // 1054->self, 3.0s cast, range 45+R width 8 rect
FaithUnmoving = 4135, // 1054->self, 3.0s cast, range 80+R circle
DimensionalRip = 4140, // 1054->location, 3.0s cast, range 5 circle
Rive = 1135, // 1053->self, 2.5s cast, range 30+R width 2 rect
Advent = 4979, // 104E/1053->self, no cast, single-target
Advent2 = 4980, // D25->self, no cast, range 80 circle
Advent3 = 4122, // 104E/1053->self, no cast, single-target

DimensionalTorsion = 4142, // 1055->player, no cast, single-target
StellarImplosion = 4141, // D25->location, no cast, range 5 circle
}
public enum TetherID : uint
{
DimensionalTorsion = 9,
}

class DimensionalCollapse2(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DimensionalCollapse2), new AOEShapeDonutSector(3, 7.5f, 90.Degrees()));
class DimensionalCollapse3(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DimensionalCollapse3), new AOEShapeDonutSector(8, 12.5f, 90.Degrees()));
class DimensionalCollapse4(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.DimensionalCollapse4), new AOEShapeDonutSector(13, 17.5f, 90.Degrees()));
//class HeavySwing(BossModule module) : Components.Cleave(module, ActionID.MakeSpell(AID.HeavySwing), new AOEShapeCone(8.5f, 45.Degrees()));
class HyperdimensionalSlash(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.HyperdimensionalSlash), new AOEShapeRect(45, 4));
class FaithUnmoving(BossModule module) : Components.KnockbackFromCastTarget(module, ActionID.MakeSpell(AID.FaithUnmoving), 13, stopAtWall: true);
class DimensionalRip(BossModule module) : Components.PersistentVoidzoneAtCastTarget(module, 5, ActionID.MakeSpell(AID.DimensionalRip), m => m.Enemies(OID.DimensionalRipVoidzone).Where(x => x.EventState != 7), 0.8f);
class Rive(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.Rive), new AOEShapeRect(30, 1));
class AetherialTear(BossModule module) : Components.GenericAOEs(module)
{
private IEnumerable<Actor> AetherialTears => Module.Enemies(OID.AetherialTear).Where(e => !e.IsDead);
public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor) => AetherialTears.Select(b => new AOEInstance(new AOEShapeCircle(7f), b.Position) with { Color = ArenaColor.Danger });
}
class AddsModule(BossModule module) : Components.Adds(module, (uint)OID.SerGrinnaux);
class D042SerGrinnauxTheBullStates : StateMachineBuilder
{
public D042SerGrinnauxTheBullStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<DimensionalCollapse2>()
.ActivateOnEnter<DimensionalCollapse3>()
.ActivateOnEnter<DimensionalCollapse4>()
.ActivateOnEnter<HyperdimensionalSlash>()
.ActivateOnEnter<FaithUnmoving>()
.ActivateOnEnter<DimensionalRip>()
.ActivateOnEnter<Rive>()
.ActivateOnEnter<AetherialTear>()
.ActivateOnEnter<AddsModule>();

}
}

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "VeraNala", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 34, NameID = 3850)]
public class D042SerGrinnauxTheBull(WorldState ws, Actor primary) : BossModule(ws, primary, new(-0.01f, 71.9f), new ArenaBoundsCircle(20));
94 changes: 94 additions & 0 deletions BossMod/Modules/Heavensward/Dungeon/D04Vault/D043SerCharibert.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
namespace BossMod.Heavensward.Dungeon.D04Vault.D043SerCharibert;

public enum OID : uint
{
Boss = 0x1056, // R2.200, SerCharibert
DuskKnight = 0x1058, // R2.000, x?
DawnKnight = 0x1057, // R2.000, x?
HolyFlame = 0x1059, // R1.500, x?
Charibert = 0xF71EE, // R0.500, x?, EventNpc type
Helper2 = 0xD25, // "DawnKnight"?
Helper = 0x233C, // x3
}
public enum AID : uint
{
Fire = 4143, // 1056->player, no cast, single-target
AltarCandle = 4144, // 1056->player, no cast, single-target
Heavensflame2 = 4145, // 1056->self, 2.5s cast, single-target
Heavensflame = 4146, // D25->location, 3.0s cast, range 5 circle
HolyChain = 4147, // 1056->self, 2.0s cast, single-target
HolyChain2 = 4148, // D25->self, no cast, ???
AltarPyre = 4149, // 1056->location, 3.0s cast, range 80 circle
BlackKnightsTour = 4153, // 1058->self, 3.0s cast, range 40+R width 4 rect
WhiteKnightsTour = 4152, // 1057->self, 3.0s cast, range 40+R width 4 rect
PureOfHeart = 4151, // 1056->location, no cast, range 80 circle
TurretCharge = 4155, // D25->player, no cast, single-target
TurretCharge2 = 4154, // D25->player, no cast, single-target
SacredFlame = 4156, // 1059->self, no cast, range 80+R circle
}
public enum GID : uint
{
BurningChains = 769,
}
public enum TetherID : uint
{
HolyChain = 9,
}

class Heavensflame(BossModule module) : Components.LocationTargetedAOEs(module, ActionID.MakeSpell(AID.Heavensflame), 5);
class HolyChain(BossModule module) : Components.Chains(module, (uint)TetherID.HolyChain, ActionID.MakeSpell(AID.HolyChain2), 13);

Check failure on line 39 in BossMod/Modules/Heavensward/Dungeon/D04Vault/D043SerCharibert.cs

View workflow job for this annotation

GitHub Actions / Build

'Chains' does not contain a constructor that takes 4 arguments

Check failure on line 39 in BossMod/Modules/Heavensward/Dungeon/D04Vault/D043SerCharibert.cs

View workflow job for this annotation

GitHub Actions / Build

'Chains' does not contain a constructor that takes 4 arguments

Check failure on line 39 in BossMod/Modules/Heavensward/Dungeon/D04Vault/D043SerCharibert.cs

View workflow job for this annotation

GitHub Actions / Build

'Chains' does not contain a constructor that takes 4 arguments

Check failure on line 39 in BossMod/Modules/Heavensward/Dungeon/D04Vault/D043SerCharibert.cs

View workflow job for this annotation

GitHub Actions / Build

'Chains' does not contain a constructor that takes 4 arguments
class AltarPyre(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.AltarPyre));
class BlackKnightsTour(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.BlackKnightsTour), new AOEShapeRect(40, 2));
class WhiteKnightsTour(BossModule module) : Components.SelfTargetedAOEs(module, ActionID.MakeSpell(AID.WhiteKnightsTour), new AOEShapeRect(40, 2));
class PureOfHeart(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.PureOfHeart));
class SacredFlame(BossModule module) : Components.RaidwideCast(module, ActionID.MakeSpell(AID.SacredFlame));
class March(BossModule module) : Components.GenericAOEs(module)
{
private readonly List<Actor> _knights = [];
private static readonly AOEShapeRect rect = new(8, 2, -1);
private static readonly AOEShapeCircle circ = new(2);
public override IEnumerable<AOEInstance> ActiveAOEs(int slot, Actor actor)
{
foreach (var b in _knights)
{
yield return new AOEInstance(rect, b.Position);
yield return new AOEInstance(circ, b.Position) with { Color = ArenaColor.Danger };
}
}
public override void OnActorCreated(Actor actor)
{
if ((OID)actor.OID is OID.DawnKnight or OID.DuskKnight && !actor.Position.AlmostEqual(Module.Center, 5))
{
_knights.Add(actor);
}
}
public override void OnActorDestroyed(Actor actor)
{
if ((OID)actor.OID is OID.DawnKnight or OID.DuskKnight)
{
_knights.Remove(actor);
}
}
};
class AddsModule(BossModule module) : Components.Adds(module, (uint)OID.HolyFlame);

class D043SerCharibertStates : StateMachineBuilder
{
public D043SerCharibertStates(BossModule module) : base(module)
{
TrivialPhase()
.ActivateOnEnter<AltarPyre>()
.ActivateOnEnter<Heavensflame>()
.ActivateOnEnter<HolyChain>()
.ActivateOnEnter<BlackKnightsTour>()
.ActivateOnEnter<WhiteKnightsTour>()
.ActivateOnEnter<PureOfHeart>()
.ActivateOnEnter<SacredFlame>()
.ActivateOnEnter<March>()
.ActivateOnEnter<AddsModule>();

}
}

[ModuleInfo(BossModuleInfo.Maturity.WIP, Contributors = "VeraNala", GroupType = BossModuleInfo.GroupType.CFC, GroupID = 34, NameID = 4142)]
public class D043SerCharibert(WorldState ws, Actor primary) : BossModule(ws, primary, new(0, 4), new ArenaBoundsRect(20, 20));
Loading