using System.Threading.Tasks;
using ff14bot;
using ff14bot.Enums;
using ff14bot.Managers;
using ff14bot.Objects;
using YourRaidingBuddy.Books;
using YourRaidingBuddy.Helpers;
using YourRaidingBuddy.Interfaces.Settings;
using YourRaidingBuddy.Settings;
namespace YourRaidingBuddy.Rotations
{
public class Ninja : Root
{
public static LocalPlayer Me
{
get { return Core.Player; }
}
public static SettingsG GeneralSettings
{
get { return InternalSettings.Instance.General; }
}
public static NinjaSetting NinjaSettings
{
get { return InternalSettings.Instance.Ninja; }
}
public override ClassJobType[] Class
{
get { return new[] {ClassJobType.Ninja}; }
}
public override void OnInitialize()
{
;
}
public static async Task<bool> AutoMode()
{
if (!Me.CurrentTarget.IsViable())
return false;
if (Actionmanager.CanCastOrQueue(Spell.GetSpellData("Jin"), null))
await NinjaNinjutsu();
if (GeneralSettings.Aoe && VariableBook.HostileUnitsCount >= GeneralSettings.AoeCount)
await NinjaMultipleTarget();
await NinjaSingleTarget();
if (GeneralSettings.Cooldowns == CooldownUse.Always)
await NinjaWeave();
return false;
}
public static async Task<bool> HotkeyMode()
{
if (!Me.CurrentTarget.IsViable())
return false;
if (VariableBook.HkmMultiTarget)
await NinjaMultipleTarget();
if (VariableBook.HkmCooldowns)
await NinjaWeave();
if (VariableBook.HkmSpecialKey)
await NinjaNinjutsu();
await NinjaSingleTarget();
return false;
}
public static async Task<bool> NinjaMultipleTarget()
{
await Spell.CastSpell("Death Blossom", null, () =>
true);
return false;
}
public static async Task<bool> NinjaSingleTarget()
{
await Spell.CastSpell("Armor Crush", () =>
Actionmanager.LastSpell.Name == "Gust Slash" &&
Me.HasAura("Huton") &&
!Me.HasAura("Huton", true, 40000) &&
!Me.HasAura("Duality"));
await Spell.ApplyCast("Dancing Edge", Me.CurrentTarget, () =>
Actionmanager.LastSpell.Name == "Gust Slash" &&
!Me.CurrentTarget.HasAura("Dancing Edge", true, 6000) &&
!Me.HasAura("Duality"));
await Spell.CastSpell("Aeolian Edge", () =>
Actionmanager.LastSpell.Name == "Gust Slash");
await Spell.CastSpell("Shadow Fang", () =>
Actionmanager.LastSpell.Name == "Spinning Edge" &&
!Me.CurrentTarget.HasAura("Shadow Fang", true, 6000) &&
Me.CurrentTarget.HasAura("Dancing Edge"));
await Spell.CastSpell("Gust Slash", () =>
Actionmanager.LastSpell.Name == "Spinning Edge");
await Spell.CastSpell("Mutilate", () =>
!Me.CurrentTarget.HasAura("Mutilation", true, 6000) &&
Me.CurrentTarget.HasAura("Dancing Edge"));
await Spell.CastSpell("Spinning Edge", () =>
true);
return false;
}
public static async Task<bool> NinjaWeave()
{
await Spell.CastSpell("Duality", () =>
Actionmanager.LastSpell.Name == "Gust Slash" &&
Me.HasAura("Huton") &&
Me.CurrentTarget.HasAura("Dancing Edge"));
await Spell.CastSpell("Trick Attack", () =>
Me.CurrentTarget != null &&
Me.CurrentTarget.IsBehind &&
Me.HasAura("Suiton"));
await Spell.CastSpell("Kassatsu", Me, () =>
Me.CurrentTarget.HasAura("Vulnerability Up"));
await Spell.CastSpell("Invigorate", Me, () =>
Me.CurrentTP <= 540);
await Spell.CastSpell("Blood for Blood", Me, () =>
Me.CurrentTarget != null);
await Spell.CastSpell("Internal Release", Me, () =>
Me.CurrentTarget != null);
await Spell.CastSpell("Dream Within a Dream", () =>
Me.CurrentTarget.HasAura("Dancing Edge"));
await Spell.CastSpell("Mug", () =>
Me.CurrentTarget.HasAura("Dancing Edge"));
await Spell.CastSpell("Jugulate", () =>
Me.CurrentTarget.HasAura("Dancing Edge"));
await Spell.CastSpell("Assassinate", () =>
true);
return false;
}
public static async Task<bool> NinjaNinjutsu()
{
if (!Me.HasAura("Huton"))
await NinjaCastHuton();
if (!Me.CurrentTarget.HasAura("Vulnerability Up", true, 3000) &&
!Me.CurrentTarget.HasAura("Vulnerability Up", false, 3000) &&
Spell.CanCast(Spell.GetSpellData("Trick Attack"), Me.CurrentTarget) &&
Me.CurrentTarget != null)
await NinjaCastSuiton();
if (Me.CurrentTarget != null)
await NinjaCastRaiton();
return false;
}
private static async Task<bool> NinjaCastHuton()
{
await Spell.CastQueue(2263, null, () => true, false, true);
await Spell.CastQueue(2261, null, () => true, false, true);
await Spell.CastQueue(2259, null, () => true, false, true);
return await Spell.CastQueue(2260, null, () => true, false, true);
}
private static async Task<bool> NinjaCastSuiton()
{
await Spell.CastQueue(2259, null, () => true, false, true);
await Spell.CastQueue(2261, null, () => true, false, true);
await Spell.CastQueue(2263, null, () => true, false, true);
return await Spell.CastQueue(2260, Me.CurrentTarget, () => true, false, true);
}
private static async Task<bool> NinjaCastRaiton()
{
await Spell.CastQueue(2259, null, () => true, false, true);
await Spell.CastQueue(2261, null, () => true, false, true);
return await Spell.CastQueue(2260, Me.CurrentTarget, () => true, false, true);
}
}
}