Skip to content

Commit

Permalink
Initialize the SAM
Browse files Browse the repository at this point in the history
  • Loading branch information
Rabalaba committed Jul 13, 2024
1 parent 5a6ba5d commit 6ffe9ab
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 12 deletions.
36 changes: 27 additions & 9 deletions Advanced_Rotations/PVE/Melee/SAM_PVE.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,36 @@
using System.ComponentModel.DataAnnotations;
using FFXIVClientStructs.FFXIV.Client.Game;
using System.ComponentModel.DataAnnotations;

namespace RabbsRotationsNET8.PVE.Melee;

[Rotation("Rabbs Samurai", CombatType.PvE, GameVersion = "6.58")]
[SourceCode(Path = "main/RabbsRotations/Melee/SAM.cs")]
[Api(1)]
[Api(2)]
public sealed class SAM_PVE : SamuraiRotation
{

[RotationSolver.Basic.Attributes.Range(25, 85, ConfigUnitType.None, 5)]


public static IBaseAction GekkoPrepull { get; } = new BaseAction((ActionID)7481);
public static IBaseAction JinpuFix { get; } = new BaseAction((ActionID)7478);

public static void SetGekkoPrepullTargetTypeToBeAttacked()
public static void Jinpufixcombo()
{
GekkoPrepull.Setting.TargetType = TargetType.BeAttacked; // Assuming appropriate access
JinpuFix.Setting.ComboIds = [ActionID.HakazePvE, ActionID.GyofuPvE]; // Assuming appropriate access
}

public static IBaseAction Shifufix { get; } = new BaseAction((ActionID)7479);

public static void Shifufixcombo()
{
Shifufix.Setting.ComboIds = [ActionID.HakazePvE, ActionID.GyofuPvE]; // Assuming appropriate access
}

public static IBaseAction Yukikazefix { get; } = new BaseAction((ActionID)7480);

public static void Yukikazecombo()
{
Yukikazefix.Setting.ComboIds = [ActionID.HakazePvE, ActionID.GyofuPvE]; // Assuming appropriate access
}

public static IBaseAction MeikoPrePull { get; } = new BaseAction((ActionID)7499);
Expand Down Expand Up @@ -133,14 +148,17 @@ protected override bool GeneralGCD(out IAction? act)
}
if ((!HasMoon || IsMoonTimeLessThanFlower || !OkaPvE.EnoughLevel) && MangetsuPvE.CanUse(out act, skipAoeCheck: HaveMeikyoShisui && !HasGetsu)) return true;
if ((!HasFlower || !IsMoonTimeLessThanFlower) && OkaPvE.CanUse(out act, skipAoeCheck: HaveMeikyoShisui && !HasKa)) return true;
if (!HasSetsu && YukikazePvE.CanUse(out act, skipAoeCheck: HaveMeikyoShisui && HasGetsu && HasKa && !HasSetsu)) return true;
Yukikazecombo();
if (!HasSetsu && Yukikazefix.CanUse(out act, skipAoeCheck: HaveMeikyoShisui && HasGetsu && HasKa && !HasSetsu)) return true;
if (GekkoPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasGetsu)) return true;
if (KashaPvE.CanUse(out act, skipComboCheck: HaveMeikyoShisui && !HasKa)) return true;
if ((!HasMoon || IsMoonTimeLessThanFlower || !ShifuPvE.EnoughLevel) && JinpuPvE.CanUse(out act)) return true;
if ((!HasFlower || !IsMoonTimeLessThanFlower) && ShifuPvE.CanUse(out act)) return true;
Jinpufixcombo();
if ((!HasMoon || IsMoonTimeLessThanFlower || !ShifuPvE.EnoughLevel) && JinpuFix.CanUse(out act)) return true;
Shifufixcombo();
if ((!HasFlower || !IsMoonTimeLessThanFlower) && Shifufix.CanUse(out act)) return true;
if (FukoPvE.CanUse(out act)) return true;
if (!FukoPvE.EnoughLevel && FugaPvE.CanUse(out act)) return true;
if (HakazePvE.CanUse(out act)) return true;
if (GyofuPvE.CanUse(out act)) return true;

if (EnpiPvE.CanUse(out act)) return true;

Expand Down
141 changes: 141 additions & 0 deletions Advanced_Rotations/PVP/Melee/SAM.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@


using FFXIVClientStructs.FFXIV.Client.Game.UI;
using static FFXIVClientStructs.FFXIV.Client.UI.Misc.DataCenterHelper;

namespace DefaultRotations.Melee;

[Rotation("RabbsPvP", CombatType.PvP, GameVersion = "7.00", Description = "Beta Rotation")]
[SourceCode(Path = "main/DefaultRotations/PVPRotations/Tank/SAM_Default.PvP.cs")]
[Api(2)]
public sealed class SAM_DefaultPvP : SamuraiRotation
{
[RotationConfig(CombatType.PvP, Name = "Sprint")]
public bool UseSprintPvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Recuperate")]
public bool UseRecuperatePvP { get; set; } = false;

[Range(1, 100, ConfigUnitType.Percent, 1)]
[RotationConfig(CombatType.PvP, Name = "RecuperateHP%%?")]
public int RCValue { get; set; } = 75;

[RotationConfig(CombatType.PvP, Name = "Use Purify")]
public bool UsePurifyPvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on Stun")]
public bool Use1343PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on DeepFreeze")]
public bool Use3219PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on HalfAsleep")]
public bool Use3022PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on Sleep")]
public bool Use1348PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on Bind")]
public bool Use1345PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on Heavy")]
public bool Use1344PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Use Purify on Silence")]
public bool Use1347PvP { get; set; } = false;

[RotationConfig(CombatType.PvP, Name = "Stop attacking while in Guard.")]
public bool GuardCancel { get; set; } = false;

public static IBaseAction Zantetsuken { get; } = new BaseAction((ActionID)29537);

public static void ZantetsukenAutoKill()
{
Zantetsuken.Setting.StatusNeed = [StatusID.Kuzushi]; // Assuming appropriate access
}

private bool TryPurify(out IAction? action)
{
action = null;
if (!UsePurifyPvP) return false;

var purifyStatuses = new Dictionary<int, bool>
{
{ 1343, Use1343PvP },
{ 3219, Use3219PvP },
{ 3022, Use3022PvP },
{ 1348, Use1348PvP },
{ 1345, Use1345PvP },
{ 1344, Use1344PvP },
{ 1347, Use1347PvP }
};

foreach (var status in purifyStatuses)
{
if (status.Value && Player.HasStatus(true, (StatusID)status.Key))
{
return PurifyPvP.CanUse(out action);
}
}

return false;
}

protected override bool EmergencyAbility(IAction nextGCD, out IAction? act)
{
act = null;
if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;
if (TryPurify(out act)) return true;
if (UseRecuperatePvP && Player.CurrentHp / Player.MaxHp * 100 < RCValue && RecuperatePvP.CanUse(out act)) return true;

return base.EmergencyAbility(nextGCD, out act);
}

protected override bool AttackAbility(IAction nextGCD, out IAction? act)
{
act = null;
if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;
if (MineuchiPvP.CanUse(out act)) return true;
if (MeikyoShisuiPvP.CanUse(out act)) return true;
return base.AttackAbility(nextGCD, out act);
}
protected override bool GeneralAbility(IAction nextGCD, out IAction? act)
{
act = null;
if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;

return base.GeneralAbility(nextGCD, out act);
}
protected unsafe override bool GeneralGCD(out IAction? act)
{
act = null;
if (UIState.Instance()->LimitBreakController.CurrentUnits >= 4000)
{
if (HissatsuChitenPvP.CanUse(out act)) return true;
if (Zantetsuken.CanUse(out act) && (Zantetsuken.Target.Target?.HasStatus(true, StatusID.Kuzushi) ?? false)) return true;
}
// Early exits for Guard status or Sprint usage
if (GuardCancel && Player.HasStatus(true, StatusID.Guard)) return false;
if (!Player.HasStatus(true, StatusID.Guard) && UseSprintPvP && !Player.HasStatus(true, StatusID.Sprint) && !InCombat && SprintPvP.CanUse(out act)) return true;
if (KaeshiNamikiriPvP.CanUse(out act, skipAoeCheck: true) && OgiNamikiriPvP.AdjustedID == KaeshiNamikiriPvP.ID) return true;
if (OgiNamikiriPvP.CanUse(out act, skipAoeCheck:true)) return true;
if (MidareSetsugekkaPvP.CanUse(out act, skipAoeCheck: true) && Player.HasStatus(true, StatusID.Midare)) return true;



if (KashaPvP.CanUse(out act)) return true;
if (GekkoPvP.CanUse(out act)) return true;
if (YukikazePvP.CanUse(out act)) return true;

return base.GeneralGCD(out act);
}


public unsafe override void DisplayStatus()
{
//motif
ImGui.Text("debuf " + UIState.Instance()->LimitBreakController.CurrentUnits.ToString());

base.DisplayStatus();
}
}
3 changes: 1 addition & 2 deletions Advanced_Rotations/RabbsRotationsNET8.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Authors>Rabbs</Authors>
<Version>1.1.2.7</Version>
<Version>1.1.2.8</Version>
<PlatformTarget>x64</PlatformTarget>
<Platforms>x64</Platforms>

Expand Down Expand Up @@ -83,7 +83,6 @@

<ItemGroup>
<Folder Include="Duty\" />
<Folder Include="PVP\Melee\" />
<Folder Include="PVP\Tank\" />
</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion Advanced_Rotations/RotationInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ internal class RotationInfo
{
internal const string USERNAME = $"Rabbs";

internal const string VERSION = "1.1.2.7";
internal const string VERSION = "1.1.2.8";
}

0 comments on commit 6ffe9ab

Please sign in to comment.