using Buddy.Wildstar.Game.Actors;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Buddy.Wildstar.Game;
namespace Buddy.DefaultRoutine.Classes
{
public class Esper : BaseCombatClass
{
MyGadget Gadget = new MyGadget();
internal override async Task<bool> Pull(Actor target)
{
await PopFlask();
return await Combat();
}
internal override async Task<bool> Heal()
{
if (Me.Buffs.Count(c => c.IsHarmful) > 0 && await Cast("Catharsis"))
return true;
if (await HandleHealSpender())
return true;
if (Me.InnateResource < 3 && await SelfCast("Fixation"))
return true;
var lowestAlly = PartyMembers.OrderBy(p => p.HealthPercent).FirstOrDefault();
if (lowestAlly != null)
{
if (lowestAlly.HealthPercent < 80 && await CastOn("Phantasmal Armor", () => lowestAlly))
return true;
if (lowestAlly.HealthPercent < 80 && await CastOn("Projected Spirit", () => lowestAlly))
return true;
if (lowestAlly.HealthPercent < 80 && await CastOn("Pyrokinetic Flame", () => lowestAlly))
return true;
if (lowestAlly.HealthPercent < 80 && await CastOn("Mirage", () => lowestAlly))
return true;
if (lowestAlly.HealthPercent < 80 && await Cast("Soothe"))
return true;
if (lowestAlly.HealthPercent < 80 && await Cast("Warden"))
return true;
if (lowestAlly.HealthPercent < 80 && await Cast("Bolster"))
return true;
if (lowestAlly.HealthPercent < 80 && await Cast("Mind Over Body"))
return true;
if ((lowestAlly.HealthPercent < 80 || Me.FocusPercent < 30) && await SelfCast("Meditate"))
return true;
}
return false;
}
internal override async Task<bool> Combat()
{
await ChugPotion();
if (Me.GetActiveCCs().Count > 0 && await Cast("Fade Out"))
return true;
if (Target.IsCasting && Target.IsInCombat && await CastAny("Shockwave", "Crush", "Incapacitate"))
return true;
//if (await EnsureCombatBuffs())
// return true;
if (await HandleCombatSpender())
return true;
if (Me.HealthPercent < 85 && await SelfCast("Phantasmal Armor"))
return true;
if (Me.HealthPercent < 85 && await SelfCast("Bolster"))
return true;
if (Me.IsInCombat == true && await CastOn("Power", () => Me)) //Pops DPS gadgets on CD
return true;
if (Me.IsInCombat == true && await CastOn("Spectral Form", () => Me))
return true;
//TODO: Illusionary Blades
if (await CastAny( "Concentrated Blade", "Geist", "Restraint", "Psychic Frenzy", "Telekinetic Strike"))
return true;
return false;
}
private async Task<bool> EnsureCombatBuffs()
{
if (!Target.HasBuff("Expose") && await Cast("Haunt"))
return true;
return false;
}
private async Task<bool> HandleCombatSpender()
{
// Best to cast @ 5 resource for maximum impact
var resource = Me.InnateResource;
// Now combat spenders
if (Me.Buffs.Count <6 && await Cast("Illusionary Blades"))
return true;
if (resource >= 5 && await Cast("Mind Burst"))
return true;
if (resource >= 5 && await Cast("Telekinetic Storm"))
return true;
if (resource >= 5 && await Cast("Blade Dance"))
return true;
if (resource >= 3 && await CastOn("Reap", () => Target))
return true;
if (await CastOn("Haunt", () => Target))
return true;
if (resource >= 3 && await CastOn("Pyrokinetic Flame", () => Target))
return true;
if (Me.IsInCombat == true && await CastOn("Spectral Swarm", () => Me))
return true;
return false;
}
private async Task<bool> HandleHealSpender()
{
var resource = Me.InnateResource;
var hpAverage = PartyMembers.Average(p => p.HealthPercent);
// Heal before Combat
if (resource >= 5 && Me.HealthPercent < 80 && await Cast("Mental Boon"))
return true;
if (resource >= 5 && hpAverage < 70 && await Cast("Reverie"))
return true;
if (resource >= 5 && hpAverage < 70 && await Cast("Mending Banner"))
return true;
return false;
}
}
}