Beispiel #1
0
        private static async Task <bool> EmergencyTacticsSuccor()
        {
            if (!ScholarSettings.Instance.EmergencyTactics || !ScholarSettings.Instance.EmergencyTacticsSuccor)
            {
                return(false);
            }

            if (MovementManager.IsMoving)
            {
                return(false);
            }

            if (!await Buff.EmergencyTactics())
            {
                return(false);
            }

            while (Core.Me.HasAura(Auras.EmergencyTactics))
            {
                // We did a movement check earlier, but the player may have started moving at this point
                // We don't want to waste the Emergency Tactics aura, so we wait until the player stops moving
                if (MovementManager.IsMoving)
                {
                    await Coroutine.Yield();
                }

                if (await Spells.Succor.Heal(Core.Me, false))
                {
                    return(true);
                }
                await Coroutine.Yield();
            }
            return(false);
        }
Beispiel #2
0
        public static async Task <bool> EmergencyTacticsSuccor()
        {
            if (!ScholarSettings.Instance.Succor || !ScholarSettings.Instance.EmergencyTactics || !ScholarSettings.Instance.EmergencyTacticsSuccor)
            {
                return(false);
            }

            if (Spells.EmergencyTactics.Cooldown != TimeSpan.Zero)
            {
                return(false);
            }

            var needSuccor = Group.CastableAlliesWithin15.Count(r => r.IsAlive &&
                                                                r.CurrentHealthPercent <= ScholarSettings.Instance.EmergencyTacticsSuccorHealthPercent) >= ScholarSettings.Instance.SuccorNeedHealing;

            if (!needSuccor)
            {
                return(false);
            }

            if (!await Buff.EmergencyTactics())
            {
                return(false);
            }

            if (await Spells.Succor.Heal(Core.Me))
            {
                return(await Coroutine.Wait(2500, () => Casting.LastSpell == Spells.Succor || MovementManager.IsMoving));
            }

            return(false);
        }
Beispiel #3
0
        public static async Task <bool> Succor()
        {
            if (!ScholarSettings.Instance.Succor)
            {
                return(false);
            }

            if (Casting.LastSpell == Spells.Indomitability)
            {
                return(false);
            }

            if (Casting.LastSpell == Spells.Succor)
            {
                return(false);
            }

            var needSuccor = Group.CastableAlliesWithin15.Count(r => r.IsAlive &&
                                                                r.CurrentHealthPercent <= ScholarSettings.Instance.SuccorHpPercent &&
                                                                !r.HasAura(Auras.Galvanize)) >= ScholarSettings.Instance.SuccorNeedHealing;

            if (!needSuccor)
            {
                return(false);
            }

            if (ScholarSettings.Instance.EmergencyTactics && ScholarSettings.Instance.EmergencyTacticsSuccor)
            {
                if (Group.CastableAlliesWithin15.Count(r => r.CurrentHealthPercent <= ScholarSettings.Instance.EmergencyTacticsSuccorHealthPercent) >= ScholarSettings.Instance.SuccorNeedHealing)
                {
                    await Buff.EmergencyTactics();
                }
            }

            if (await Spells.Succor.Heal(Core.Me))
            {
                return(await Coroutine.Wait(4000, () => Casting.LastSpell == Spells.Succor || MovementManager.IsMoving));
            }

            return(false);
        }
Beispiel #4
0
        public static async Task <bool> Adloquium()
        {
            if (!ScholarSettings.Instance.Adloquium)
            {
                return(false);
            }

            if (Globals.InParty)
            {
                // If the lowest heal target is higher than Adloquium health, check to see if the user wants us to Galvanize the tank
                if (ScholarSettings.Instance.AdloquiumTankForBuff && Globals.HealTarget?.CurrentHealthPercent > ScholarSettings.Instance.AdloquiumHpPercent)
                {
                    // Pick any tank who doesn't have Galvanize on them
                    var tankAdloTarget = Group.CastableAlliesWithin30.FirstOrDefault(r => r.IsTank() && !r.HasAura(Auras.Galvanize));

                    if (tankAdloTarget == null)
                    {
                        return(false);
                    }

                    if (ScholarSettings.Instance.EmergencyTactics && ScholarSettings.Instance.EmergencyTacticsAdloquium && tankAdloTarget.CurrentHealthPercent <= ScholarSettings.Instance.EmergencyTacticsAdloquiumHealthPercent)
                    {
                        await Buff.EmergencyTactics();
                    }

                    await UseRecitation();

                    return(await Spells.Adloquium.HealAura(tankAdloTarget, Auras.Galvanize, false));
                }

                var adloTarget = Group.CastableAlliesWithin30.FirstOrDefault(CanAdlo);

                if (adloTarget == null)
                {
                    return(false);
                }

                if (ScholarSettings.Instance.EmergencyTactics && ScholarSettings.Instance.EmergencyTacticsAdloquium && adloTarget.CurrentHealthPercent <= ScholarSettings.Instance.EmergencyTacticsAdloquiumHealthPercent)
                {
                    await Buff.EmergencyTactics();
                }

                await UseRecitation();

                return(await Spells.Adloquium.HealAura(adloTarget, Auras.Galvanize));

                bool CanAdlo(Character unit)
                {
                    if (unit == null)
                    {
                        return(false);
                    }

                    if (unit.CurrentHealthPercent > ScholarSettings.Instance.AdloquiumHpPercent)
                    {
                        return(false);
                    }

                    if (unit.HasAura(Auras.Galvanize))
                    {
                        return(false);
                    }

                    if (unit.HasAura(Auras.Exogitation))
                    {
                        return(false);
                    }

                    if (!ScholarSettings.Instance.AdloquiumOnlyHealer && !ScholarSettings.Instance.AdloquiumOnlyTank)
                    {
                        return(true);
                    }

                    if (ScholarSettings.Instance.AdloquiumOnlyHealer && unit.IsHealer())
                    {
                        return(true);
                    }

                    return(ScholarSettings.Instance.AdloquiumOnlyTank && unit.IsTank());
                }
            }

            if (Core.Me.CurrentHealthPercent > ScholarSettings.Instance.AdloquiumHpPercent || Core.Me.HasAura(Auras.Galvanize))
            {
                return(false);
            }

            if (ScholarSettings.Instance.EmergencyTactics && ScholarSettings.Instance.EmergencyTacticsAdloquium && Core.Me.CurrentHealthPercent <= ScholarSettings.Instance.EmergencyTacticsAdloquiumHealthPercent)
            {
                await Buff.EmergencyTactics();
            }

            return(await Spells.Adloquium.HealAura(Core.Me, Auras.Galvanize));

            async Task UseRecitation()
            {
                if (!ScholarSettings.Instance.Recitation)
                {
                    return;
                }

                if (!ScholarSettings.Instance.RecitationWithAdlo)
                {
                    return;
                }

                if (ScholarSettings.Instance.RecitationOnlyNoAetherflow && Core.Me.HasAetherflow())
                {
                    return;
                }

                if (!await Spells.Recitation.Cast(Core.Me))
                {
                    return;
                }

                if (!await Coroutine.Wait(1000, () => Core.Me.HasAura(Auras.Recitation)))
                {
                    return;
                }

                await Coroutine.Wait(1000, () => ActionManager.CanCast(Spells.Adloquium.Id, Core.Me));
            }
        }
Beispiel #5
0
        public static async Task <bool> EmergencyTacticsAdloquium()
        {
            if (!ScholarSettings.Instance.Adloquium || !ScholarSettings.Instance.EmergencyTacticsAdloquium)
            {
                return(false);
            }

            if (Spells.EmergencyTactics.Cooldown != TimeSpan.Zero)
            {
                return(false);
            }

            if (Globals.InParty)
            {
                var adloTarget = Group.CastableAlliesWithin30.Where(CanAdlo).OrderBy(a => a.CurrentHealthPercent).FirstOrDefault();

                if (adloTarget == null)
                {
                    return(false);
                }

                if (!await Buff.EmergencyTactics())
                {
                    return(false);
                }

                return(await Spells.Adloquium.Heal(adloTarget, false));
            }

            if (Core.Me.CurrentHealthPercent > ScholarSettings.Instance.EmergencyTacticsAdloquiumHealthPercent)
            {
                return(false);
            }

            if (!await Buff.EmergencyTactics())
            {
                return(false);
            }

            return(await Spells.Adloquium.Heal(Core.Me, false));

            bool CanAdlo(Character unit)
            {
                if (unit == null)
                {
                    return(false);
                }

                if (unit.CurrentHealthPercent > ScholarSettings.Instance.EmergencyTacticsAdloquiumHealthPercent)
                {
                    return(false);
                }

                if (unit.HasAura(Auras.Excogitation))
                {
                    return(false);
                }

                if (!ScholarSettings.Instance.AdloquiumOnlyHealer && !ScholarSettings.Instance.AdloquiumOnlyTank)
                {
                    return(true);
                }

                if (ScholarSettings.Instance.AdloquiumOnlyHealer && unit.IsHealer())
                {
                    return(true);
                }

                return(ScholarSettings.Instance.AdloquiumOnlyTank && unit.IsTank());
            }
        }