Skip to content

Commit

Permalink
[PUSH] v2.0.1.3 : AST/DNC/MNK/SAM/SMN/SGE/DRG
Browse files Browse the repository at this point in the history
"Added AST's Gravity-only to Arcana feature.",
"Added DNC's Combined Steps secret feature.",
"Fixed MNK's Steeled Meditation when below level 54.",
"Added SAM's Hissatsu: Guren features by @Propagandist1.",
"Added SGE's Eukrasian Dosis/Diagnosis/Prognosis/Dyskria features.",
"Added SMN's Primal Favor Feature by @kaedys.",
"Re-added SAM's Oka Combo as a separate option.",
"Revised DRG's Stardiver to Nastrond and Dragonfire Dive by @kaedys.",
"Happy New Year!"
  • Loading branch information
MKhayle committed Dec 31, 2024
1 parent 08c3d5f commit 4a7ba95
Show file tree
Hide file tree
Showing 9 changed files with 239 additions and 28 deletions.
2 changes: 1 addition & 1 deletion XIVComboExpanded/Combos/AST.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
return OriginalHook(AST.Combust);
}

if (IsEnabled(CustomComboPreset.AstrologianMaleficArcanaFeature) && gauge.DrawnCrownCard == CardType.LORD && level >= AST.Levels.MinorArcana)
if (IsEnabled(CustomComboPreset.AstrologianMaleficArcanaFeature) && !IsEnabled(CustomComboPreset.AstrologianGravityOnlyArcanaFeature) && gauge.DrawnCrownCard == CardType.LORD && level >= AST.Levels.MinorArcana)
return OriginalHook(AST.MinorArcanaDT);

if (IsEnabled(CustomComboPreset.AstrologianDraw1Feature) && IsOriginal(AST.Play1) && (IsCooldownUsable(AST.AstralDraw) || IsCooldownUsable(AST.UmbralDraw)))
Expand Down
37 changes: 37 additions & 0 deletions XIVComboExpanded/Combos/DNC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,43 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
}
}

internal class DancerCombinedStandardStepTechnicalStep : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.DancerCombinedStandardStepTechnicalStep;

protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level)
{
if (actionID is DNC.StandardStep or DNC.TechnicalStep)
{
var gauge = GetJobGauge<DNCGauge>();

if (IsEnabled(CustomComboPreset.DancerPartnerFeature) && level >= DNC.Levels.ClosedPosition && (!HasEffect(DNC.Buffs.ClosedPosition)))
{
if (IsEnabled(CustomComboPreset.DancerChocoboPartnerFeature) && HasCompanionPresent())
{
return DNC.ClosedPosition;
}

if (IsInParty() && IsInInstance())
return DNC.ClosedPosition;
}

if (level >= DNC.Levels.StandardStep && gauge.IsDancing && (HasEffect(DNC.Buffs.StandardStep) || HasEffect(DNC.Buffs.TechnicalStep)))
{
if (gauge.CompletedSteps < 4 && HasEffect(DNC.Buffs.TechnicalStep))
return gauge.NextStep;
else if (gauge.CompletedSteps < 2 && HasEffect(DNC.Buffs.StandardStep))
return gauge.NextStep;

if (HasEffect(DNC.Buffs.TechnicalStep)) return OriginalHook(DNC.TechnicalStep);
else return OriginalHook(DNC.StandardStep);
}
}

return actionID;
}
}

internal class DancerFlourish : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.DncAny;
Expand Down
6 changes: 3 additions & 3 deletions XIVComboExpanded/Combos/MNK.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
if (IsEnabled(CustomComboPreset.MonkBootshineMeditationFeature))
{
if (level >= MNK.Levels.SteeledMeditation && gauge.Chakra < 5 && !InCombat())
return MNK.SteeledMeditation;
return OriginalHook(MNK.SteeledMeditation);
}

if (IsEnabled(CustomComboPreset.MonkBootshineFormShiftFeature))
Expand Down Expand Up @@ -231,7 +231,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
if (IsEnabled(CustomComboPreset.MonkMonkeyMeditationFeature))
{
if (level >= MNK.Levels.SteeledMeditation && gauge.Chakra < 5 && !InCombat())
return MNK.SteeledMeditation;
return OriginalHook(MNK.SteeledMeditation);
}

if (IsEnabled(CustomComboPreset.MonkMonkeyFormShiftFeature))
Expand Down Expand Up @@ -275,7 +275,7 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
if (IsEnabled(CustomComboPreset.MonkAoEMeditationFeature))
{
if (level >= MNK.Levels.EnlightenedMeditation && gauge.Chakra < 5 && !InCombat())
return MNK.EnlightenedMeditation;
return OriginalHook(MNK.EnlightenedMeditation);
}

if (IsEnabled(CustomComboPreset.MonkAoEFormShiftFeature))
Expand Down
77 changes: 75 additions & 2 deletions XIVComboExpanded/Combos/SAM.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,9 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
}
}

internal class SamuraiMangetsu : CustomCombo
internal class SamuraiAutoAoE : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SamuraiAoECombo;
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SamuraiAutoAoEFeature;

protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level)
{
Expand Down Expand Up @@ -231,6 +231,79 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
}
}

internal class SamuraiAoEGoken : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SamuraiAutoAoEFinaleFeature;

protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level)
{
if (actionID == SAM.Mangetsu || actionID == SAM.Oka)
{
if (level >= SAM.Levels.Mangetsu && level < SAM.Levels.Oka)
return SAM.Mangetsu;

if (level > SAM.Levels.Fuga && level < SAM.Levels.Mangetsu)
return SAM.Fuga;

var iaijutsu = OriginalHook(SAM.Iaijutsu);
var tsubame = OriginalHook(SAM.TsubameGaeshi);

if (level >= SAM.Levels.TsubameGaeshi && IsEnabled(CustomComboPreset.SamuraiAutoAoEFinaleFeature) &&
IsEnabled(CustomComboPreset.SamuraiIaijutsuTsubameGaeshiFeature) &&
(tsubame == SAM.KaeshiGoken || tsubame == SAM.TendoKaeshiGoken))
return tsubame;

if (level >= SAM.Levels.TenkaGoken && IsEnabled(CustomComboPreset.SamuraiAutoAoEFinaleFeature) &&
(iaijutsu == SAM.TenkaGoken || iaijutsu == SAM.TendoGoken))
return iaijutsu;
}

return actionID;
}
}

internal class SamuraiMangetsu : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SamuraiMangetsuCombo;

protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level)
{
if (actionID == SAM.Mangetsu)
{
if (level >= SAM.Levels.MeikyoShisui && HasEffect(SAM.Buffs.MeikyoShisui))
return SAM.Mangetsu;
if ((lastComboMove == SAM.Fuga || lastComboMove == SAM.Fuko) && level >= SAM.Levels.Mangetsu)
return SAM.Mangetsu;

// Fuko/Fuga
return OriginalHook(SAM.Fuga);
}

return actionID;
}
}

internal class SamuraiOka : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SamuraiOkaCombo;

protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level)
{
if (actionID == SAM.Oka)
{
if (level >= SAM.Levels.MeikyoShisui && HasEffect(SAM.Buffs.MeikyoShisui))
return SAM.Oka;
if ((lastComboMove == SAM.Fuga || lastComboMove == SAM.Fuko) && level >= SAM.Levels.Oka)
return SAM.Oka;

// Fuko/Fuga
return OriginalHook(SAM.Fuga);
}

return actionID;
}
}

internal class SamuraiIaijutsu : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SamAny;
Expand Down
49 changes: 48 additions & 1 deletion XIVComboExpanded/Combos/SGE.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Dalamud.Game.ClientState.JobGauge.Types;
using System;

namespace XIVComboExpandedPlugin.Combos;

Expand All @@ -17,6 +18,8 @@ public const uint
Physis = 24288,
Phlegma = 24289,
Eukrasia = 24290,
EukrasianDiagnosis = 24291,
EukrasianPrognosis = 24292,
Soteria = 24294,
Druochole = 24296,
Dyskrasia = 24297,
Expand All @@ -33,9 +36,12 @@ public const uint
Holos = 24310,
Panhaima = 24311,
Phlegma3 = 24313,
EukrasianDosis = 24314,
Dyskrasia2 = 24315,
Krasis = 24317,
Pneuma = 24318,
EukrasianDyskrasia = 37032,
EukrasianPrognosis2 = 37034,
Psyche = 37033;

public static class Buffs
Expand Down Expand Up @@ -76,9 +82,12 @@ public const ushort
Panhaima = 80,
Phlegma3 = 82,
Dosis3 = 82,
Dyskrasia2 = 82,
Toxikon2 = 82,
Krasis = 86,
Pneuma = 90,
Psyche = 92;
Psyche = 92,
Philosophia = 100;
}
}

Expand Down Expand Up @@ -207,6 +216,44 @@ protected override uint Invoke(uint actionID, uint lastComboMove, float comboTim
}
}

internal class SageEukrasia : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SgeAny;

protected override uint Invoke(uint actionID, uint lastComboMove, float comboTime, byte level)
{
if (actionID == SGE.Eukrasia)
{
if(HasEffect(SGE.Buffs.Eukrasia))
{
if (IsEnabled(CustomComboPreset.SageEukrasianDosisFeature))
{
return OriginalHook(SGE.EukrasianDosis);
}

if (IsEnabled(CustomComboPreset.SageEukrasianDiagnosisFeature))
{
return OriginalHook(SGE.EukrasianDiagnosis);
}
if (IsEnabled(CustomComboPreset.SageEukrasianPrognosisFeature))
{
return OriginalHook(SGE.EukrasianPrognosis);
}

if (IsEnabled(CustomComboPreset.SageEukrasianDyskrasiaFeature))
{
if (level >= SGE.Levels.Dyskrasia)
return OriginalHook(SGE.EukrasianDyskrasia);
}
}


}

return actionID;
}
}

internal class SageDruochole : CustomCombo
{
protected internal override CustomComboPreset Preset { get; } = CustomComboPreset.SgeAny;
Expand Down
72 changes: 57 additions & 15 deletions XIVComboExpanded/CustomComboPreset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -200,11 +200,18 @@ public enum CustomComboPreset
AstrologianHeliosArcanaFeature = 3324,

[SectionCombo("Minor Arcanas")]
[IconsCombo([AST.Malefic, UTL.ArrowLeft, AST.LordOfCrowns])]
[IconsCombo([AST.Malefic, AST.Gravity, UTL.ArrowLeft, AST.LordOfCrowns])]
[ExpandedCustomCombo]
[CustomComboInfo("Malefic/Gravity to Arcana", "Replace Malefic & Gravity by Lord of Crowns when drawn.", AST.JobID)]
AstrologianMaleficArcanaFeature = 3325,

[SectionCombo("Minor Arcanas")]
[IconsCombo([AST.Gravity, UTL.ArrowLeft, AST.LordOfCrowns])]
[ExpandedCustomCombo]
[ParentCombo(AstrologianMaleficArcanaFeature)]
[CustomComboInfo("Gravity-only to Arcana", "Only replace Gravity by Lord of Crowns when drawn.", AST.JobID)]
AstrologianGravityOnlyArcanaFeature = 3328,

[SectionCombo("Level Synchronization")]
[IconsCombo([AST.Benefic, UTL.ArrowLeft, AST.Benefic2])]
[ExpandedCustomCombo]
Expand Down Expand Up @@ -653,6 +660,20 @@ public enum CustomComboPreset
//[CustomComboInfo("Devilment Feature", "Replace Devilment with Starfall Dance when active.", DNC.JobID)]
//DancerDevilmentFeature = 3807,

[IconsCombo([DNC.StandardStep, DNC.TechnicalStep, UTL.ArrowLeft, DNC.Emboite, UTL.Cycle, DNC.Entrechat, UTL.Cycle, DNC.Jete, UTL.Cycle, DNC.Pirouette])]
[SectionCombo("Dances features")]
[ConflictingCombos(DancerDanceComboCompatibility)]
[AccessibilityCustomCombo]
[CustomComboInfo("Dance Step Combo", "Replace Standard Step and Technical Step with each dance step while dancing.", DNC.JobID)]
DancerDanceStepCombo = 3802,

[IconsCombo([DNC.StandardStep, UTL.Plus, DNC.TechnicalStep])]
[SectionCombo("Dances features")]
[SecretCustomCombo]
[ParentCombo(DancerDanceStepCombo)]
[CustomComboInfo("Combined Steps", "Puts the dance step on both buttons.\nPlease be careful as it will hide the other dance's cooldown while you're dancing.", DNC.JobID)]
DancerCombinedStandardStepTechnicalStep = 3830,

[IconsCombo([DNC.StandardStep, UTL.ArrowLeft, DNC.LastDance, UTL.Blank, DNC.Buffs.LastDanceReady, UTL.Checkmark])]
[SectionCombo("Dances features")]
[CustomComboInfo("Last Dance Feature", "Replace Standard Step by Last Dance if available.", DNC.JobID)]
Expand All @@ -665,13 +686,6 @@ public enum CustomComboPreset
[CustomComboInfo("Finishing Move Priority", "Priorize Finishing Move over Last Dance when replacing Standard Step.\n\nNOTE: This is strongly discouraged, as Finishing Move will overwrite and waste the Last Dance buff.", DNC.JobID)]
DancerFinishingMovePriorityFeature = 3814,

[IconsCombo([DNC.StandardStep, DNC.TechnicalStep, UTL.ArrowLeft, DNC.Emboite, UTL.Cycle, DNC.Entrechat, UTL.Cycle, DNC.Jete, UTL.Cycle, DNC.Pirouette])]
[SectionCombo("Dances features")]
[ConflictingCombos(DancerDanceComboCompatibility)]
[AccessibilityCustomCombo]
[CustomComboInfo("Dance Step Combo", "Replace Standard Step and Technical Step with each dance step while dancing.", DNC.JobID)]
DancerDanceStepCombo = 3802,

[IconsCombo([DNC.Emboite, DNC.Entrechat, DNC.Jete, DNC.Pirouette])]
[SectionCombo("Dances features")]
[ConflictingCombos(DancerDanceStepCombo)]
Expand Down Expand Up @@ -2020,7 +2034,31 @@ public enum CustomComboPreset
[CustomComboInfo("Soteria Kardia Feature", "Replace Soteria with Kardia when off cooldown and missing Kardion.", SGE.JobID)]
SageSoteriaKardionFeature = 4006,

[IconsCombo([SGE.Druochole, UTL.ArrowLeft, SGE.Taurochole, UTL.Blank, SGE.Druochole, UTL.Checkmark])]
[IconsCombo([SGE.Eukrasia, UTL.ArrowLeft, SGE.Dosis, UTL.Blank, SGE.Buffs.Eukrasia, UTL.Checkmark])]
[SectionCombo("Eukrasia")]
[AccessibilityCustomCombo]
[CustomComboInfo("Eukrasian Dosis", "Replace Eukrasia with Dosis when Eukrasia is active. Conflicts with the other Eukrasian options.", SGE.JobID)]
SageEukrasianDosisFeature = 4020,

[IconsCombo([SGE.Eukrasia, UTL.ArrowLeft, SGE.Diagnosis, UTL.Blank, SGE.Buffs.Eukrasia, UTL.Checkmark])]
[SectionCombo("Eukrasia")]
[AccessibilityCustomCombo]
[CustomComboInfo("Eukrasian Diagnosis", "Replace Eukrasia with Diagnosis when Eukrasia is active. Conflicts with the other Eukrasian options.", SGE.JobID)]
SageEukrasianDiagnosisFeature = 4017,

[IconsCombo([SGE.Eukrasia, UTL.ArrowLeft, SGE.Prognosis, UTL.Blank, SGE.Buffs.Eukrasia, UTL.Checkmark])]
[SectionCombo("Eukrasia")]
[AccessibilityCustomCombo]
[CustomComboInfo("Eukrasian Prognosis", "Replace Eukrasia with Prognosis when Eukrasia is active. Conflicts with the other Eukrasian options.", SGE.JobID)]
SageEukrasianPrognosisFeature = 4018,

[IconsCombo([SGE.Eukrasia, UTL.ArrowLeft, SGE.Dyskrasia, UTL.Blank, SGE.Buffs.Eukrasia, UTL.Checkmark])]
[SectionCombo("Eukrasia")]
[AccessibilityCustomCombo]
[CustomComboInfo("Eukrasian Dyskrasia", "Replace Eukrasia with Dyskrasia when Eukrasia is active. Conflicts with the other Eukrasian options.", SGE.JobID)]
SageEukrasianDyskrasiaFeature = 4019,

[IconsCombo([SGE.Druochole, UTL.ArrowLeft, SGE.Taurochole, UTL.Blank, SGE.Druochole, UTL.Checkmark])]
[SectionCombo("Addersgall")]
[ExpandedCustomCombo]
[CustomComboInfo("Druochole into Taurochole Feature", "Replace Druochole with Taurochole when off cooldown.\nWarning: This will limit your abiility to use Druochole.", SGE.JobID)]
Expand Down Expand Up @@ -2089,15 +2127,20 @@ public enum CustomComboPreset
[CustomComboInfo("Kasha Combo Option", "Start the Kasha combo chain with Shifu instead of Hakaze.", SAM.JobID)]
SamuraiKashaOption = 3417,

[IconsCombo([SAM.Mangetsu, SAM.Oka, UTL.ArrowLeft, SAM.Fuga, SAM.Fuko])]
[IconsCombo([SAM.Mangetsu, UTL.ArrowLeft, SAM.Fuga, SAM.Fuko])]
[SectionCombo("Area of Effect")]
[CustomComboInfo("Oka/Mangetsu Combo", "Replace Oka and Mangetsu with their combo chain.", SAM.JobID)]
SamuraiAoECombo = 3404,
[CustomComboInfo("Mangetsu Combo", "Replace Mangetsu with its own combo chain.", SAM.JobID)]
SamuraiMangetsuCombo = 3404,

[IconsCombo([SAM.Oka, UTL.ArrowLeft, SAM.Fuga, SAM.Fuko])]
[SectionCombo("Area of Effect")]
[CustomComboInfo("Oka Combo", "Replace Oka with its own combo chain.", SAM.JobID)]
SamuraiOkaCombo = 3405,

[IconsCombo([SAM.Oka, SAM.Mangetsu, UTL.Blank, UTL.Blank2, UTL.Idea])]
[SectionCombo("Area of Effect")]
[AccessibilityCustomCombo]
[CustomComboInfo("Auto-AoE", "Replace Oka and Mangetsu with whichever one you don't have the Sen for yet. If you have both or neither Sen, neither one will be replaced.", SAM.JobID)]
[CustomComboInfo("Auto-AoE", "Condense both Oka and Mangetsu with whichever one you don't have the Sen for yet. If you have both or neither Sen, neither one will be replaced.", SAM.JobID)]
SamuraiAutoAoEFeature = 3423,

[IconsCombo([SAM.Oka, SAM.Mangetsu, UTL.Blank, SAM.Buffs.Fugetsu, SAM.Buffs.Fuka])]
Expand All @@ -2110,8 +2153,7 @@ public enum CustomComboPreset
[IconsCombo([SAM.Oka, SAM.Mangetsu, UTL.ArrowLeft, SAM.TenkaGoken, SAM.TendoGoken])]
[SectionCombo("Area of Effect")]
[AccessibilityCustomCombo]
[ParentCombo(SamuraiAutoAoEFeature)]
[CustomComboInfo("Auto-AoE Goken Finale", "Also replace Oka and Mangetsu with Iaijutsu (Tenka Goken) when you have both Sen. Obeys the 'Iaijutsu to Tsubame-gaeshi' feature as well: if that feature is enabled, this will also include the follow-up Kaeshi: Goken when available.", SAM.JobID)]
[CustomComboInfo("AoE Goken Finale", "Replace Oka and Mangetsu with Iaijutsu (Tenka Goken) when you have both Sen. Obeys the 'Iaijutsu to Tsubame-gaeshi' feature as well: if that feature is enabled, this will also include the follow-up Kaeshi: Goken when available.", SAM.JobID)]
SamuraiAutoAoEFinaleFeature = 3425,

[IconsCombo([SAM.Iaijutsu, UTL.ArrowLeft, SAM.TsubameGaeshi])]
Expand Down
Loading

0 comments on commit 4a7ba95

Please sign in to comment.