Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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));
        }