Skip to content

Commit 38aa0a2

Browse files
committed
Sweeping rework to all PvP rotations, new Raise type for out of duty raising, misc fixes
- Changed rotation logic to using proper returns - Updated all PvP rotations, various fixes for RDM, BRD, PCT, and WHM - Updated PurifyPvP and related PvP esuna skills - Added new Raise type for out of duty raising
1 parent c67ff2f commit 38aa0a2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+394
-903
lines changed

RotationSolver.Basic/Actions/ActionBasicInfo.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,6 @@ public readonly unsafe uint MPNeed
117117
{
118118
get
119119
{
120-
if (IsPvP && ID != 29711)
121-
{
122-
return 0;
123-
}
124-
125120
uint? mpOver = _action.Setting.MPOverride?.Invoke();
126121
if (mpOver.HasValue)
127122
{

RotationSolver.Basic/Data/RaiseType.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,15 @@ public enum RaiseType : byte
2323
[Description("Raise party members and alliance healers.")]
2424
PartyAndAllianceHealers,
2525

26+
/// <summary>
27+
/// Raise All In Duty.
28+
/// </summary>
29+
[Description("Raise All In Duty.")]
30+
All,
31+
2632
/// <summary>
2733
/// Raise all.
2834
/// </summary>
2935
[Description("Raise All.")]
30-
All,
36+
AllOutOfDuty,
3137
}

RotationSolver.Basic/Helpers/ObjectHelper.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,14 @@ internal static unsafe bool IsAllianceMember(this ICharacter obj)
440440
|| ActionManager.CanUseActionOnTarget((uint)ActionID.CurePvE, (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)obj.Struct()));
441441
}
442442

443+
internal static unsafe bool IsOtherPlayerOutOfDuty(this ICharacter obj)
444+
{
445+
return obj.GameObjectId is not 0
446+
&& !DataCenter.IsPvP && obj is IPlayerCharacter
447+
&& (ActionManager.CanUseActionOnTarget((uint)ActionID.RaisePvE, (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)obj.Struct())
448+
|| ActionManager.CanUseActionOnTarget((uint)ActionID.CurePvE, (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)obj.Struct()));
449+
}
450+
443451
internal static unsafe bool CanBeRaised(this IBattleChara battleChara)
444452
{
445453
if (battleChara == null)

RotationSolver.Basic/Helpers/StatusHelper.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,19 @@ public static class StatusHelper
185185
StatusID.DarkDefenses
186186
];
187187

188+
/// <summary>
189+
///
190+
/// </summary>
191+
public static StatusID[] PurifyPvPStatuses { get; } =
192+
[
193+
StatusID.Stun_1343,
194+
StatusID.Heavy_1344,
195+
StatusID.Bind_1345,
196+
StatusID.Silence_1347,
197+
StatusID.DeepFreeze_3219,
198+
StatusID.MiracleOfNature,
199+
];
200+
188201
/// <summary>
189202
/// Determines if the specified battle character has reached the maximum number of status effects.
190203
/// </summary>

RotationSolver.Basic/Helpers/TargetFilter.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,18 @@ public static IEnumerable<IBattleChara> GetDeath(this IEnumerable<IBattleChara>
2626
continue;
2727
if (item.CurrentHp != 0 || !item.IsTargetable || item.IsTargetMoving() || item.IsEnemy())
2828
continue;
29-
if (!item.IsParty() && !item.IsAllianceMember())
30-
continue;
29+
RaiseType raisetype = Service.Config.RaiseType;
30+
31+
if (raisetype == RaiseType.AllOutOfDuty)
32+
{
33+
if (!item.IsParty() && !item.IsOtherPlayerOutOfDuty())
34+
continue;
35+
}
36+
if (raisetype != RaiseType.AllOutOfDuty)
37+
{
38+
if (!item.IsParty() && !item.IsAllianceMember())
39+
continue;
40+
}
3141
if (item.DistanceToPlayer() > 30)
3242
continue;
3343
if (!item.CanSee())

RotationSolver.Basic/Rotations/Basic/AstrologianRotation.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@ static partial void ModifyLadyOfCrownsPvP(ref ActionSetting setting)
575575
{
576576
setting.ActionCheck = () => Service.GetAdjustedActionId(ActionID.MinorArcanaPvP) == ActionID.LadyOfCrownsPvP;
577577
setting.IsFriendly = true;
578+
setting.MPOverride = () => 0;
578579
setting.CreateConfig = () => new ActionConfig()
579580
{
580581
AoeCount = 1,
@@ -585,6 +586,7 @@ static partial void ModifyLordOfCrownsPvP(ref ActionSetting setting)
585586
{
586587
setting.ActionCheck = () => Service.GetAdjustedActionId(ActionID.MinorArcanaPvP) == ActionID.LordOfCrownsPvP;
587588
setting.IsFriendly = false;
589+
setting.MPOverride = () => 0;
588590
setting.CreateConfig = () => new ActionConfig()
589591
{
590592
AoeCount = 1,
@@ -611,6 +613,7 @@ static partial void ModifyRetrogradePvP(ref ActionSetting setting)
611613
{
612614
setting.ActionCheck = () => Player.HasStatus(true, StatusID.RetrogradeReady);
613615
setting.IsFriendly = true;
616+
setting.MPOverride = () => 0;
614617
setting.SpecialType = SpecialActionType.MovingBackward;
615618
}
616619
#endregion

RotationSolver.Basic/Rotations/Basic/BardRotation.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,8 +452,8 @@ static partial void ModifyEncoreOfLightPvP(ref ActionSetting setting)
452452

453453
static partial void ModifyTheWardensPaeanPvP(ref ActionSetting setting)
454454
{
455-
setting.TargetStatusProvide = [StatusID.WardensGrace];
456-
setting.TargetType = TargetType.Dispel;
455+
setting.TargetStatusNeed = StatusHelper.PurifyPvPStatuses;
456+
setting.IsFriendly = true;
457457
}
458458

459459
#endregion

RotationSolver.Basic/Rotations/Basic/DarkKnightRotation.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ public static byte LowDeliriumStacks
121121
return stacks == byte.MaxValue ? (byte)3 : stacks;
122122
}
123123
}
124+
125+
/// <summary>
126+
///
127+
/// </summary>
128+
protected static bool HasDarkArtsPvP => Player.HasStatus(true, StatusID.DarkArts_3034);
124129
#endregion
125130

126131
#region PvE Actions Unassignable
@@ -470,6 +475,7 @@ protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
470475
static partial void ModifyShadowbringerPvP(ref ActionSetting setting)
471476
{
472477
setting.ActionCheck = () => Player.CurrentHp > 12000 || Player.HasStatus(true, StatusID.DarkArts_3034);
478+
setting.MPOverride = () => 0;
473479
setting.CreateConfig = () => new ActionConfig()
474480
{
475481
AoeCount = 1,
@@ -483,21 +489,25 @@ static partial void ModifyPlungePvP(ref ActionSetting setting)
483489
static partial void ModifyScarletDeliriumPvP(ref ActionSetting setting)
484490
{
485491
setting.ActionCheck = () => ScarletDeliriumPvPReady;
492+
setting.MPOverride = () => 0;
486493
}
487494

488495
static partial void ModifyComeuppancePvP(ref ActionSetting setting)
489496
{
490497
setting.ActionCheck = () => ComeuppancePvPReady;
498+
setting.MPOverride = () => 0;
491499
}
492500

493501
static partial void ModifyTorcleaverPvP(ref ActionSetting setting)
494502
{
495503
setting.ActionCheck = () => TorcleaverPvPReady;
504+
setting.MPOverride = () => 0;
496505
}
497506

498507
static partial void ModifyDisesteemPvP(ref ActionSetting setting)
499508
{
500509
setting.StatusNeed = [StatusID.Scorn_4290];
510+
setting.MPOverride = () => 0;
501511
setting.CreateConfig = () => new ActionConfig()
502512
{
503513
AoeCount = 1,

RotationSolver.Basic/Rotations/Basic/PaladinRotation.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,16 +451,19 @@ static partial void ModifyRoyalAuthorityPvP(ref ActionSetting setting)
451451
static partial void ModifyAtonementPvP(ref ActionSetting setting)
452452
{
453453
setting.StatusNeed = [StatusID.AtonementReady_2015];
454+
setting.MPOverride = () => 0;
454455
}
455456

456457
static partial void ModifySupplicationPvP(ref ActionSetting setting)
457458
{
458459
setting.StatusNeed = [StatusID.SupplicationReady_4281];
460+
setting.MPOverride = () => 0;
459461
}
460462

461463
static partial void ModifySepulchrePvP(ref ActionSetting setting)
462464
{
463465
setting.StatusNeed = [StatusID.SepulchreReady_4282];
466+
setting.MPOverride = () => 0;
464467
}
465468

466469
static partial void ModifyHolySpiritPvP(ref ActionSetting setting)
@@ -506,6 +509,7 @@ static partial void ModifyIntervenePvP(ref ActionSetting setting)
506509
static partial void ModifyBladeOfFaithPvP(ref ActionSetting setting)
507510
{
508511
setting.StatusNeed = [StatusID.BladeOfFaithReady];
512+
setting.MPOverride = () => 0;
509513
setting.CreateConfig = () => new ActionConfig()
510514
{
511515
AoeCount = 1

RotationSolver.Basic/Rotations/Basic/PictomancerRotation.cs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -743,28 +743,18 @@ static partial void ModifyHolyInWhitePvP(ref ActionSetting setting)
743743
};
744744
}
745745

746-
static partial void ModifyCreatureMotifPvP(ref ActionSetting setting)
747-
{
748-
setting.ActionCheck = () => Service.GetAdjustedActionId(ActionID.CreatureMotifPvP) != ActionID.CreatureMotifPvP;
749-
setting.CreateConfig = () => new ActionConfig()
750-
{
751-
AoeCount = 1,
752-
};
753-
setting.IsFriendly = true;
754-
}
755-
756746
static partial void ModifyLivingMusePvP(ref ActionSetting setting)
757747
{
758-
setting.ActionCheck = () => Service.GetAdjustedActionId(ActionID.LivingMusePvP) != ActionID.LivingMusePvP;
759748
setting.CreateConfig = () => new ActionConfig()
760749
{
761-
AoeCount = 1,
750+
IsEnabled = false,
762751
};
763752
}
764753

765754
static partial void ModifyMogOfTheAgesPvP(ref ActionSetting setting)
766755
{
767756
setting.StatusNeed = [StatusID.MooglePortrait];
757+
setting.MPOverride = () => 0;
768758
setting.TargetStatusProvide = [StatusID.Silence_1347];
769759
setting.CreateConfig = () => new ActionConfig()
770760
{
@@ -871,6 +861,7 @@ static partial void ModifyCometInBlackPvP(ref ActionSetting setting)
871861
static partial void ModifyPomMotifPvP(ref ActionSetting setting)
872862
{
873863
setting.StatusNeed = [StatusID.PomSketch];
864+
setting.MPOverride = () => 0;
874865
setting.StatusProvide = [StatusID.PomMotif];
875866
setting.CreateConfig = () => new ActionConfig()
876867
{
@@ -882,6 +873,7 @@ static partial void ModifyPomMotifPvP(ref ActionSetting setting)
882873
static partial void ModifyWingMotifPvP(ref ActionSetting setting)
883874
{
884875
setting.StatusNeed = [StatusID.WingSketch];
876+
setting.MPOverride = () => 0;
885877
setting.StatusProvide = [StatusID.WingMotif];
886878
setting.CreateConfig = () => new ActionConfig()
887879
{
@@ -893,6 +885,7 @@ static partial void ModifyWingMotifPvP(ref ActionSetting setting)
893885
static partial void ModifyClawMotifPvP(ref ActionSetting setting)
894886
{
895887
setting.StatusNeed = [StatusID.ClawSketch];
888+
setting.MPOverride = () => 0;
896889
setting.StatusProvide = [StatusID.ClawMotif];
897890
setting.CreateConfig = () => new ActionConfig()
898891
{
@@ -904,6 +897,7 @@ static partial void ModifyClawMotifPvP(ref ActionSetting setting)
904897
static partial void ModifyMawMotifPvP(ref ActionSetting setting)
905898
{
906899
setting.StatusNeed = [StatusID.MawSketch];
900+
setting.MPOverride = () => 0;
907901
setting.StatusProvide = [StatusID.MawMotif];
908902
setting.CreateConfig = () => new ActionConfig()
909903
{
@@ -912,9 +906,18 @@ static partial void ModifyMawMotifPvP(ref ActionSetting setting)
912906
setting.IsFriendly = true;
913907
}
914908

909+
static partial void ModifyCreatureMotifPvP(ref ActionSetting setting)
910+
{
911+
setting.CreateConfig = () => new ActionConfig()
912+
{
913+
IsEnabled = false,
914+
};
915+
}
916+
915917
static partial void ModifyPomMusePvP(ref ActionSetting setting)
916918
{
917919
setting.StatusNeed = [StatusID.PomMotif];
920+
setting.MPOverride = () => 0;
918921
setting.StatusProvide = [StatusID.WingSketch];
919922
setting.CreateConfig = () => new ActionConfig()
920923
{
@@ -925,6 +928,7 @@ static partial void ModifyPomMusePvP(ref ActionSetting setting)
925928
static partial void ModifyWingedMusePvP(ref ActionSetting setting)
926929
{
927930
setting.StatusNeed = [StatusID.WingMotif];
931+
setting.MPOverride = () => 0;
928932
setting.StatusProvide = [StatusID.ClawSketch];
929933
setting.CreateConfig = () => new ActionConfig()
930934
{
@@ -935,6 +939,7 @@ static partial void ModifyWingedMusePvP(ref ActionSetting setting)
935939
static partial void ModifyClawedMusePvP(ref ActionSetting setting)
936940
{
937941
setting.StatusNeed = [StatusID.ClawMotif];
942+
setting.MPOverride = () => 0;
938943
setting.StatusProvide = [StatusID.MawSketch];
939944
setting.CreateConfig = () => new ActionConfig()
940945
{
@@ -945,6 +950,7 @@ static partial void ModifyClawedMusePvP(ref ActionSetting setting)
945950
static partial void ModifyFangedMusePvP(ref ActionSetting setting)
946951
{
947952
setting.StatusNeed = [StatusID.MawMotif];
953+
setting.MPOverride = () => 0;
948954
setting.StatusProvide = [StatusID.PomSketch, StatusID.MadeenPortrait];
949955
setting.CreateConfig = () => new ActionConfig()
950956
{
@@ -955,6 +961,7 @@ static partial void ModifyFangedMusePvP(ref ActionSetting setting)
955961
static partial void ModifyRetributionOfTheMadeenPvP(ref ActionSetting setting)
956962
{
957963
setting.StatusNeed = [StatusID.MadeenPortrait];
964+
setting.MPOverride = () => 0;
958965
setting.CreateConfig = () => new ActionConfig()
959966
{
960967
AoeCount = 1,
@@ -974,6 +981,7 @@ static partial void ModifyTemperaGrassaPvP(ref ActionSetting setting)
974981
static partial void ModifyStarPrismPvP(ref ActionSetting setting)
975982
{
976983
setting.StatusNeed = [StatusID.StarPrism];
984+
setting.MPOverride = () => 0;
977985
setting.StatusProvide = [StatusID.StarPrism];
978986
setting.CreateConfig = () => new ActionConfig()
979987
{

0 commit comments

Comments
 (0)