Esempio n. 1
0
        private static async Task <bool> ShieldTarget(IEnumerable <ff14bot.Objects.Character> targetBase, bool keepUp)
        {
            var targets = targetBase.Where(r => !r.HasAura(Auras.EukrasianDiagnosis, true));

            ff14bot.Objects.Character target = null;

            if (keepUp)
            {
                if (SageSettings.Instance.ShieldKeepUpUnlessAdderstingFull && ActionResourceManager.Sage.Addersting >= 3)
                {
                    target = null;
                }
                else
                {
                    if (SageSettings.Instance.ShieldKeepUpOnlyOutOfCombat)
                    {
                        if (!Core.Me.InCombat)
                        {
                            target = targets.FirstOrDefault();
                        }
                    }
                    else
                    {
                        target = targets.FirstOrDefault();
                    }
                }
            }

            if (target == null)
            {
                target = targets.FirstOrDefault(r => r.CurrentHealthPercent <= SageSettings.Instance.ShieldHealthPercent);
            }

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

            if (!await Heal.UseEukrasia(targetObject: target))
            {
                return(false);
            }

            return(await Spells.EukrasianDiagnosis.HealAura(target, Auras.EukrasianDiagnosis));
        }
Esempio n. 2
0
        public static async Task <bool> EukrasianDosis()
        {
            if (!SageSettings.Instance.DoDamage)
            {
                return(false);
            }

            if (SageSettings.Instance.UseTTDForDots && Combat.CurrentTargetCombatTimeLeft <= SageSettings.Instance.DontDotIfEnemyDyingWithin)
            {
                return(false);
            }

            if (!SageSettings.Instance.EukrasianDosis)
            {
                return(false);
            }

            if (!Heal.IsEukrasiaReady())
            {
                return(false);
            }

            var targetChar = Core.Me.CurrentTarget as Character;

            if (targetChar != null && targetChar.CharacterAuras.Count() >= 25)
            {
                return(false);
            }

            if (Core.Me.CurrentTarget.HasAnyAura(DotAuras, true, msLeft: SageSettings.Instance.DotRefreshMSeconds))
            {
                return(false);
            }

            if (Core.Me.CurrentTarget.Distance(Core.Me) > 25 + Core.Me.CurrentTarget.CombatReach)
            {
                return(false);
            }

            return(await UseEukrasianDosis(Core.Me.CurrentTarget));
        }
Esempio n. 3
0
        private static async Task <bool> UseEukrasianDosis(GameObject target)
        {
            var spell = Spells.EukrasianDosisIII;
            var aura  = Auras.EukrasianDosisIII;

            if (Core.Me.ClassLevel < 82)
            {
                spell = Spells.EukrasianDosisII;
                aura  = Auras.EukrasianDosisII;
            }
            if (Core.Me.ClassLevel < 72)
            {
                spell = Spells.EukrasianDosis;
                aura  = Auras.EukrasianDosis;
            }

            if (!await Heal.UseEukrasia(spell.Id, target))
            {
                return(false);
            }

            return(await spell.CastAura(target, (uint)aura));
        }
Esempio n. 4
0
        public static async Task <bool> ShieldsUpRedAlert()
        {
            if (!SageSettings.Instance.Shield)
            {
                return(false);
            }

            if (SageSettings.Instance.OnlyShieldWhileMoving && !MovementManager.IsMoving)
            {
                return(false);
            }

            if (Globals.InParty)
            {
                if (await ShieldTanks())
                {
                    return(true);
                }
                if (await ShieldSelf())
                {
                    return(true);
                }
                if (await ShieldHealers())
                {
                    return(true);
                }
                return(await ShieldDps());
            }
            else
            {
                if (Core.Me.HasAura(Auras.EukrasianDiagnosis))
                {
                    return(false);
                }

                var keepUpOnMe = SageSettings.Instance.ShieldKeepUpOnHealers || SageSettings.Instance.ShieldKeepUpOnSelf;
                var useOnMe    = SageSettings.Instance.ShieldOnHealers || SageSettings.Instance.ShieldOnSelf;

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

                if (!keepUpOnMe && Core.Me.CurrentHealthPercent > SageSettings.Instance.ShieldHealthPercent)
                {
                    return(false);
                }

                if (keepUpOnMe && SageSettings.Instance.ShieldKeepUpUnlessAdderstingFull && ActionResourceManager.Sage.Addersting >= 3)
                {
                    return(false);
                }

                if (keepUpOnMe && SageSettings.Instance.ShieldKeepUpOnlyOutOfCombat && Core.Me.InCombat)
                {
                    return(false);
                }

                if (!await Heal.UseEukrasia())
                {
                    return(false);
                }

                return(await Spells.EukrasianDiagnosis.HealAura(Core.Me, Auras.EukrasianDiagnosis));
            }
        }
Esempio n. 5
0
        public static async Task <bool> Aoe()
        {
            if (!Globals.InParty)
            {
                return(false);
            }

            if (!FightLogic.ZoneHasFightLogic())
            {
                return(false);
            }

            if (!FightLogic.EnemyIsCastingBigAoe() && !FightLogic.EnemyIsCastingAoe())
            {
                return(false);
            }

            var useAoEBuffs = Heal.UseAoEHealingBuff(Group.CastableAlliesWithin15);

            if (SageSettings.Instance.FightLogic_Kerachole &&
                Spells.Kerachole.IsKnownAndReady() &&
                Addersgall >= 1 &&
                useAoEBuffs)
            {
                var targets   = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.Kerachole) && !r.HasAura(Auras.Taurochole));
                var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank ||
                                !SageSettings.Instance.KeracholeOnlyWithTank ||
                                targets.Any(r => r.IsTank(SageSettings.Instance.KeracholeOnlyWithMainTank));

                if (targets.Count() >= Heal.AoeNeedHealing &&
                    tankCheck)
                {
                    if (BaseSettings.Instance.DebugFightLogic)
                    {
                        Logger.WriteInfo($"[AOE Response] Cast Kerachole");
                    }
                    return(await FightLogic.DoAndBuffer(Spells.Kerachole.CastAura(Core.Me, Auras.Kerachole)));
                }
            }

            if (SageSettings.Instance.FightLogic_Panhaima &&
                Spells.Panhaima.IsKnownAndReady() &&
                useAoEBuffs)
            {
                var targets   = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.Panhaimatinon));
                var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank ||
                                !SageSettings.Instance.PanhaimaOnlyWithTank ||
                                targets.Any(r => r.IsTank(SageSettings.Instance.PanhaimaOnlyWithMainTank));

                if (targets.Count() >= Heal.AoeNeedHealing &&
                    tankCheck)
                {
                    if (BaseSettings.Instance.DebugFightLogic)
                    {
                        Logger.WriteInfo($"[AOE Response] Cast Panhaima");
                    }
                    return(await FightLogic.DoAndBuffer(Spells.Panhaima.CastAura(Core.Me, Auras.Panhaimatinon)));
                }
            }

            if (SageSettings.Instance.FightLogic_Holos &&
                Spells.Holos.IsKnownAndReady() &&
                useAoEBuffs)
            {
                var targets   = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.Holos));
                var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank ||
                                !SageSettings.Instance.HolosTankOnly ||
                                targets.Any(r => r.IsTank(SageSettings.Instance.HolosMainTankOnly));

                if (targets.Count() >= Heal.AoeNeedHealing &&
                    tankCheck)
                {
                    if (BaseSettings.Instance.DebugFightLogic)
                    {
                        Logger.WriteInfo($"[AOE Response] Cast Holos");
                    }
                    return(await FightLogic.DoAndBuffer(Spells.Holos.CastAura(Core.Me, Auras.Holos)));
                }
            }

            if (SageSettings.Instance.FightLogic_EukrasianPrognosis &&
                Core.Me.ClassLevel >= Spells.Eukrasia.LevelAcquired &&
                Heal.IsEukrasiaReady())
            {
                var targets = Group.CastableAlliesWithin15.Where(r => !r.HasAura(Auras.EukrasianDiagnosis) &&
                                                                 !r.HasAura(Auras.EukrasianPrognosis) &&
                                                                 !r.HasAura(Auras.Galvanize));
                var tankCheck = !SageSettings.Instance.FightLogic_RespectOnlyTank ||
                                targets.Any(r => r.IsTank());

                if (targets.Count() >= Heal.AoeNeedHealing &&
                    tankCheck)
                {
                    if (BaseSettings.Instance.DebugFightLogic)
                    {
                        Logger.WriteInfo($"[AOE Response] Cast Eukrasian Prognosis");
                    }
                    if (await Heal.UseEukrasia(Spells.EukrasianPrognosis.Id))
                    {
                        return(await FightLogic.DoAndBuffer(Spells.EukrasianPrognosis.HealAura(Core.Me, Auras.EukrasianPrognosis)));
                    }
                }
            }

            return(false);
        }
Esempio n. 6
0
        public static async Task <bool> Tankbuster()
        {
            if (!Globals.InParty)
            {
                return(false);
            }

            if (!FightLogic.ZoneHasFightLogic())
            {
                return(false);
            }

            var target = FightLogic.EnemyIsCastingTankBuster();

            if (target == null)
            {
                target = FightLogic.EnemyIsCastingSharedTankBuster();

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

            if (SageSettings.Instance.FightLogic_Haima &&
                Spells.Haima.IsKnownAndReady() &&
                !target.HasAura(Auras.Haimatinon) &&
                !target.HasAura(Auras.Panhaimatinon) &&
                Spells.Haima.CanCast(target))
            {
                if (BaseSettings.Instance.DebugFightLogic)
                {
                    Logger.WriteInfo($"[TankBuster Response] Cast Haima on {target.Name}");
                }
                return(await FightLogic.DoAndBuffer(Spells.Haima.CastAura(target, Auras.Haimatinon)));
            }

            if (SageSettings.Instance.FightLogic_Taurochole &&
                Spells.Taurochole.IsKnownAndReady() &&
                !target.HasAura(Auras.Taurochole) &&
                Spells.Taurochole.CanCast(target))
            {
                if (BaseSettings.Instance.DebugFightLogic)
                {
                    Logger.WriteInfo($"[TankBuster Response] Cast Taurochole on {target.Name}");
                }
                return(await FightLogic.DoAndBuffer(Spells.Taurochole.HealAura(target, Auras.Taurochole)));
            }

            if (SageSettings.Instance.FightLogic_EukrasianDiagnosis &&
                Core.Me.ClassLevel >= Spells.Eukrasia.LevelAcquired &&
                !target.HasAura(Auras.EukrasianDiagnosis) &&
                !target.HasAura(Auras.Galvanize) &&
                !target.HasAura(Auras.EukrasianPrognosis) &&
                Heal.IsEukrasiaReady())
            {
                if (BaseSettings.Instance.DebugFightLogic)
                {
                    Logger.WriteInfo($"[TankBuster Response] Cast Eukrasian Diagnosis on {target.Name}");
                }
                if (await Heal.UseEukrasia(targetObject: target))
                {
                    return(await FightLogic.DoAndBuffer(Spells.EukrasianDiagnosis.HealAura(target, Auras.EukrasianDiagnosis)));
                }
            }

            return(false);
        }
Esempio n. 7
0
        public static async Task <bool> DotMultipleTargets()
        {
            if (!SageSettings.Instance.DoDamage)
            {
                return(false);
            }

            if (!SageSettings.Instance.EukrasianDosis)
            {
                return(false);
            }

            if (!SageSettings.Instance.DotMultipleTargets)
            {
                return(false);
            }

            if (!Heal.IsEukrasiaReady())
            {
                return(false);
            }

            if (Combat.Enemies.Count < 2)
            {
                return(false);
            }

            var DotTarget = Combat.Enemies.Where(NeedsDot).Where(CanDot).FirstOrDefault();

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

            return(await UseEukrasianDosis(DotTarget));

            bool NeedsDot(BattleCharacter unit)
            {
                if (unit.CharacterAuras.Count() >= 25)
                {
                    return(false);
                }
                return(!unit.HasAnyAura(DotAuras, true, msLeft: SageSettings.Instance.DotRefreshMSeconds));
            }

            bool CanDot(GameObject unit)
            {
                // Check dosis since no eukrasia buff yet.
                if (!Spells.Dosis.CanCast(unit))
                {
                    return(false);
                }
                if (unit.Distance(Core.Me) > 25 + unit.CombatReach)
                {
                    return(false);
                }
                if (!SageSettings.Instance.UseTTDForDots)
                {
                    return(true);
                }
                return(unit.CombatTimeLeft() >= SageSettings.Instance.DontDotIfEnemyDyingWithin);
            }
        }