public static async Task <bool> Holy() { if (!WhiteMageSettings.Instance.Holy) { return(false); } if (Core.Me.ClassLevel < Spells.Holy.LevelAcquired) { return(false); } if (Combat.Enemies.Count(r => r.Distance(Core.Me) <= 8 + r.CombatReach) < WhiteMageSettings.Instance.HolyEnemies) { return(false); } if (WhiteMageSettings.Instance.ThinAirBeforeHoly && await Buff.ThinAir(true)) { await Coroutine.Wait(3000, () => Core.Me.HasAura(Auras.ThinAir)); } if (WhiteMageSettings.Instance.PresenceOfMindBeforeHoly) { if (await Spells.PresenceofMind.Cast(Core.Me)) { await Coroutine.Wait(3000, () => Core.Me.HasAura(Auras.PresenceOfMind)); } } return(await Spells.Holy.Cast(Core.Me)); }
public static async Task <bool> Cure3() { if (!WhiteMageSettings.Instance.Cure3) { return(false); } if (!Globals.InParty) { return(false); } if (Casting.LastSpell == Spells.Cure3) { return(false); } var cure3Target = Group.CastableAlliesWithin30.FirstOrDefault(r => r.IsAlive && r.CurrentHealthPercent <= WhiteMageSettings.Instance.Cure3HealthPercent && Group.CastableAlliesWithin30.Count(x => x.Distance(r) <= 6 && x.CurrentHealthPercent <= WhiteMageSettings.Instance.Cure3HealthPercent) >= WhiteMageSettings.Instance.Cure3Allies); if (cure3Target == null) { return(false); } if (WhiteMageSettings.Instance.ThinAirBeforeCure3 && await Buff.ThinAir(true)) { await Coroutine.Wait(3000, () => Core.Me.HasAura(Auras.ThinAir)); } return(await Spells.Cure3.Heal(cure3Target, false)); }
public static async Task <bool> Cure3() { if (!WhiteMageSettings.Instance.Cure3) { return(false); } if (Core.Me.ClassLevel < Spells.Cure3.LevelAcquired) { return(false); } if (!Globals.InParty) { return(false); } if (Casting.LastSpell == Spells.Cure3) { return(false); } //Choose the target that will hit the most in-need recipients. If there's a tie, pick the one where the recipients are missing the most health Character cure3Target = null; int bestTargetCount = 0; long mostHealthDown = 0; foreach (Character ally in Group.CastableAlliesWithin30.Where(r => r.IsAlive)) { List <Character> nearby = Group.CastableAlliesWithin30.Where(r => r.IsAlive && ally.Distance(r) <= 6).ToList(); int nearbyTargets = nearby.Count(r => r.CurrentHealthPercent <= WhiteMageSettings.Instance.Cure3HealthPercent); long totalHealthDown = nearby.Sum(r => r.MaxHealth - r.CurrentHealth); if (nearbyTargets >= WhiteMageSettings.Instance.Cure3Allies && (nearbyTargets > bestTargetCount || (nearbyTargets == bestTargetCount && totalHealthDown > mostHealthDown))) { bestTargetCount = nearbyTargets; mostHealthDown = totalHealthDown; cure3Target = ally; } } if (cure3Target == null) { return(false); } if (WhiteMageSettings.Instance.ThinAirBeforeCure3 && await Buff.ThinAir(true)) { await Coroutine.Wait(3000, () => Core.Me.HasAura(Auras.ThinAir)); } return(await Spells.Cure3.Heal(cure3Target, false)); }
public static async Task <bool> Raise() { return(await Roles.Healer.Raise( Spells.Raise, WhiteMageSettings.Instance.RaiseSwiftcast, WhiteMageSettings.Instance.Raise, WhiteMageSettings.Instance.Raise, ThinAir )); async Task <bool> ThinAir(bool isSwiftcast) { if (isSwiftcast) { if (WhiteMageSettings.Instance.ThinAirBeforeSwiftcastRaise && Spells.ThinAir.IsKnownAndReady() && await Buff.ThinAir(true)) { return(await Coroutine.Wait(3000, () => Core.Me.HasAura(Auras.ThinAir))); } } return(true); } }
public static async Task <bool> Raise() { if (!WhiteMageSettings.Instance.Raise) { return(false); } if (!Globals.InParty) { return(false); } if (Core.Me.CurrentMana < Spells.Raise.Cost) { return(false); } var deadList = Group.DeadAllies.Where(u => !u.HasAura(Auras.Raise) && u.Distance(Core.Me) <= 30 && u.InLineOfSight() && u.IsTargetable) .OrderByDescending(r => r.GetResurrectionWeight()); var deadTarget = deadList.FirstOrDefault(); if (deadTarget == null) { return(false); } if (!deadTarget.IsVisible) { return(false); } if (!deadTarget.IsTargetable) { return(false); } if (Core.Me.InCombat || Core.Me.OnPvpMap()) { if (Core.Me.ClassLevel < 28) { return(false); } if (!WhiteMageSettings.Instance.RaiseSwiftcast) { return(false); } if (!ActionManager.HasSpell(Spells.Swiftcast.Id)) { return(false); } if (Spells.Swiftcast.Cooldown != TimeSpan.Zero) { return(false); } if (await Buff.Swiftcast()) { if (WhiteMageSettings.Instance.ThinAirBeforeSwiftcastRaise && await Buff.ThinAir(true)) { await Coroutine.Wait(3000, () => Core.Me.HasAura(Auras.ThinAir)); } while (Core.Me.HasAura(Auras.Swiftcast)) { if (await Spells.Raise.Cast(deadTarget)) { return(true); } await Coroutine.Yield(); } } } if (Core.Me.InCombat) { return(false); } return(await Spells.Raise.HealAura(deadTarget, Auras.Raise)); }