using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Media;
using Buddy.Coroutines;
using ff14bot;
using ff14bot.Enums;
using ff14bot.Helpers;
using ff14bot.Managers;
using ff14bot.Objects;
using YourRaidingBuddy.Helpers;
using YourRaidingBuddy.Settings;
using TreeSharp;
using System.Collections.Generic;
using YourRaidingBuddy.Books;
using YourRaidingBuddy.Interfaces.Settings;
namespace YourRaidingBuddy.Rotations
{
public class Monk : Root
{
private static LocalPlayer Me { get { return Core.Player; } } //Core.Player.CurrentTarget as BattleCharacter
public override ClassJobType[] Class
{
get { return new[] { ClassJobType.Monk }; }
}
public override void OnInitialize()
{
;
}
#region NewRotation
public static async Task<bool> AutoMode()
{
if (!Me.CurrentTarget.IsViable())
return false;
return await MonkRotation();
}
public static async Task<bool> HotkeyMode()
{
if (!Me.CurrentTarget.IsViable())
return false;
//if (VariableBook.HkmMultiTarget) await MonkAoE();
return await MonkRotation();
}
public static async Task<bool> MonkRotation()
{
await MonkOpener();
await CoolDown();
await TouchofDeath();
await Opo();
await Raptor();
await Cat();
return false;
}
public static async Task<bool> MonkOpener()
{
await Spell.CastSpell("Perfect Balance", Me, () => !Me.HasAura("Perfect Balance"));
await Spell.CastSpell("Demolish", Me.CurrentTarget, () => !Me.CurrentTarget.HasAura("Demolish"));
await Spell.CastSpell("Snap Punch", () => !Me.CurrentTarget.HasAura(112));
await Spell.CastSpell("Snap Punch", () => !Me.CurrentTarget.HasAura(113));
await Spell.CastSpell("Twin Snakes", () => !Me.CurrentTarget.HasAura("Twin Snakes") && Me.CurrentTarget.HasAura(113));
await Spell.CastSpell("Dragon Kick", () => !Me.CurrentTarget.HasAura("Dragon Kick") && Me.CurrentTarget.HasAura(113));
return false;
}
public static async Task<bool> CoolDown()
{
await Spell.NoneGcdCast("Internal Release", Me, () => !Me.HasAura(AuraBook.InternalRelease));
await Spell.NoneGcdCast("Blood for Blood", Me, () => Unit.CombatTime.ElapsedMilliseconds > 2000 && !Me.HasAura("Blood for Blood"));
await Spell.NoneGcdCast("Elixir Field" , Me.CurrentTarget, () => Unit.CombatTime.ElapsedMilliseconds > 4000);
await Spell.NoneGcdCast("Steel Peak", Me.CurrentTarget, () => Unit.CombatTime.ElapsedMilliseconds > 6000);
await Spell.NoneGcdCast("Howling Fist", Me.CurrentTarget, () => Unit.CombatTime.ElapsedMilliseconds > 8000);
await Spell.NoneGcdCast("Mercy Stroke", Me.CurrentTarget, () => true);
return false;
}
public static async Task<bool> TouchofDeath()
{
await Spell.CastSpell("Touch of Death", () => !Me.CurrentTarget.HasAura("Touch of Death"));
return false;
}
public static async Task<bool> Opo()
{
if (!Me.CurrentTarget.HasAura("Dragon Kick") && Me.HasAura("Opo-opo Form"))
{
await Spell.CastSpell("Dragon Kick");
}
if (Me.CurrentTarget.HasAura("Dragon Kick") && Me.HasAura("Opo-opo Form"))
{
await Spell.CastSpell("Bootshine");
}
return false;
}
public static async Task<bool> Raptor()
{
if (!Me.CurrentTarget.HasAura("Twin Snakes") && Me.HasAura("Raptor Form"))
{
await Spell.CastSpell("Twin Snakes");
}
if (Me.CurrentTarget.HasAura("Twin Snakes") && Me.HasAura("Raptor Form"))
{
await Spell.CastSpell("True Strike");
}
return false;
}
public static async Task<bool> Cat()
{
if (!Me.CurrentTarget.HasAura("Demolish") && Me.HasAura("Coeurl Form"))
{
await Spell.CastSpell("Demolish");
}
if (Me.CurrentTarget.HasAura("Demolish") && Me.HasAura("Coeurl Form"))
{
await Spell.CastSpell("Snap Punch");
}
return false;
}
#endregion
}
}