コード例 #1
0
        private static async Task <bool> JustAoe()
        {
            if (!ScholarSettings.Instance.FightLogicSuccorAoe)
            {
                return(false);
            }

            if (!Spells.Succor.IsKnownAndReady())
            {
                return(false);
            }

            if (Core.Me.TargetCharacter.SpellCastInfo.RemainingCastTime <= Spells.Succor.AdjustedCastTime)
            {
                return(false);
            }

            if (Core.Me.HasAura(Auras.EmergencyTactics))
            {
                return(false);
            }

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

            return(false);
        }
コード例 #2
0
ファイル: Buff.cs プロジェクト: hyskylord/MagitekRoutine
        public static async Task <bool> NeutralSect()
        {
            if (!AstrologianSettings.Instance.NeutralSect)
            {
                return(false);
            }

            if (!Core.Me.InCombat)
            {
                return(false);
            }

            if (!Spells.NeutralSect.IsKnownAndReady())
            {
                return(false);
            }

            if (AstrologianSettings.Instance.FightLogic_NeutralSectAspectedHelios && FightLogic.EnemyIsCastingBigAoe() && (AstrologianSettings.Instance.FightLogic_Macrocosmos && !Spells.Macrocosmos.IsKnownAndReady()) && !Core.Me.HasAnyAura(AstroUtils.ScholarAndSageShieldsNotToOverwrite))
            {
                return(await FightLogic.DoAndBuffer(Spells.NeutralSect.CastAura(Core.Me, Auras.NeutralSect)));
            }

            var neutral = Group.CastableAlliesWithin15.Count(r => r.CurrentHealth > 0 &&
                                                             r.CurrentHealthPercent <= AstrologianSettings.Instance.NeutralSectHealthPercent);

            if (neutral < AstrologianSettings.Instance.NeutralSectAllies)
            {
                return(false);
            }

            return(await Spells.NeutralSect.CastAura(Core.Me, Auras.NeutralSect));
        }
コード例 #3
0
        public static async Task <bool> Tankbuster()
        {
            if (!Globals.InParty)
            {
                return(false);
            }

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

            var target = FightLogic.EnemyIsCastingTankBuster();

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

            if (!target.BeingTargetedBy(Core.Me.CurrentTarget))
            {
                while (Group.CastableTanks.Any(r => !r.HasAura(Auras.Galvanize)))
                {
                    await FightLogic.DoAndBuffer(
                        Spells.Adloquium.Heal(Group.CastableTanks.FirstOrDefault(r => !r.HasAura(Auras.Galvanize))));

                    await Coroutine.Yield();
                }

                return(true);
            }


            if (ScholarSettings.Instance.FightLogicExcogTank &&
                Spells.Excogitation.IsKnownAndReady() &&
                Core.Me.HasAetherflow() &&
                !target.HasAura(Auras.Excogitation))
            {
                return(await FightLogic.DoAndBuffer(Spells.Excogitation.CastAura(target, Auras.Excogitation)));
            }


            if (ScholarSettings.Instance.FightLogicAdloTank &&
                Spells.Adloquium.IsKnownAndReady() &&
                !target.HasAura(Auras.Galvanize))
            {
                return(await FightLogic.DoAndBuffer(Spells.Adloquium.HealAura(target, Auras.Galvanize)));
            }

            return(false);
        }
コード例 #4
0
        public static async Task <bool> Exaltation()
        {
            if (!AstrologianSettings.Instance.Exaltation)
            {
                return(false);
            }

            if (!Core.Me.InCombat)
            {
                return(false);
            }

            if (!Globals.InParty)
            {
                return(false);
            }

            if (!Spells.Exaltation.IsKnownAndReady())
            {
                return(false);
            }

            if (AstrologianSettings.Instance.FightLogic_Exaltation)
            {
                var tankBusterOnPartyMember = FightLogic.EnemyIsCastingTankBuster();

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

                return(await FightLogic.DoAndBuffer(
                           Spells.Exaltation.HealAura(tankBusterOnPartyMember, Auras.Exaltation)));
            }

            var tankToShieldAndHeal = Group.CastableTanks.FirstOrDefault(x =>
                                                                         x.CurrentHealthPercent < AstrologianSettings.Instance.ExaltationHealthPercent &&
                                                                         x.CheckTankImmunity() == TankImmunityCheck.HealThem);

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

            return(await Spells.Exaltation.HealAura(tankToShieldAndHeal, Auras.Exaltation));
        }
コード例 #5
0
        public static async Task <bool> FightLogic_ArcaneCrest()
        {
            if (!Spells.ArcaneCrest.IsKnownAndReady())
            {
                return(false);
            }

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

            if (FightLogic.EnemyIsCastingAoe() || FightLogic.EnemyIsCastingBigAoe())
            {
                return(await FightLogic.DoAndBuffer(Spells.ArcaneCrest.CastAura(Core.Me, Auras.CrestOfTimeBorrowed)));
            }

            return(false);
        }
コード例 #6
0
        public static async Task <bool> FightLogic_Feint()
        {
            if (!Spells.Feint.IsKnownAndReady())
            {
                return(false);
            }

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

            if (FightLogic.EnemyIsCastingAoe() ||
                FightLogic.EnemyIsCastingBigAoe() ||
                FightLogic.EnemyIsCastingTankBuster() != null ||
                FightLogic.EnemyIsCastingSharedTankBuster() != null)
            {
                return(await FightLogic.DoAndBuffer(Spells.Feint.CastAura(Core.Me.CurrentTarget, Auras.Feint)));
            }

            return(false);
        }
コード例 #7
0
        public static async Task <bool> CollectiveUnconscious()
        {
            if (!AstrologianSettings.Instance.CollectiveUnconscious)
            {
                return(false);
            }

            if (!Core.Me.InCombat)
            {
                return(false);
            }

            if (!Spells.CollectiveUnconscious.IsKnownAndReady())
            {
                return(false);
            }

            if (AstrologianSettings.Instance.FightLogic_CollectiveUnconscious && FightLogic.EnemyIsCastingAoe() &&
                Group.CastableAlliesWithin15.Count(x => x.WithinSpellRange(Spells.CollectiveUnconscious.Radius)) >
                AoeThreshold)
            {
                return(await FightLogic.DoAndBuffer(
                           Spells.CollectiveUnconscious.HealAura(Core.Me, Auras.CollectiveUnconsciousMitigation)));
            }


            if (Group.CastableAlliesWithin10.Count(r => r.Distance() < 6 &&
                                                   r.IsAlive &&
                                                   r.CurrentHealthPercent <= AstrologianSettings.Instance.CollectiveUnconsciousHealth)
                < AstrologianSettings.Instance.CollectiveUnconsciousAllies)
            {
                return(false);
            }

            return(await Spells.CollectiveUnconscious.HealAura(Core.Me, Auras.WheelOfFortune, false));
        }
コード例 #8
0
ファイル: Buff.cs プロジェクト: hyskylord/MagitekRoutine
        public static async Task <bool> Lightspeed()
        {
            if (!AstrologianSettings.Instance.Lightspeed)
            {
                return(false);
            }

            if (!Core.Me.InCombat)
            {
                return(false);
            }

            if (Combat.CombatTotalTimeLeft <= 25)
            {
                return(false);
            }

            if (!Spells.Lightspeed.IsKnownAndReady())
            {
                return(false);
            }

            if (Spells.EssentialDignity.Charges > 0)
            {
                return(false);
            }

            if (Globals.InParty)
            {
                if (AstrologianSettings.Instance.FightLogic_Lightspeed && FightLogic.EnemyIsCastingBigAoe() && !Spells.NeutralSect.IsKnownAndReady() && !Spells.Macrocosmos.IsKnownAndReady())
                {
                    return(await FightLogic.DoAndBuffer(Spells.Lightspeed.CastAura(Core.Me, Auras.Lightspeed)));
                }

                if (AstrologianSettings.Instance.LightspeedTankOnly && Group.CastableTanks.All(r => r.CurrentHealthPercent >= AstrologianSettings.Instance.LightspeedHealthPercent))
                {
                    return(false);
                }

                if (!Spells.Horoscope.IsReady())
                {
                    return(false);
                }

                if (!Spells.CelestialOpposition.IsReady())
                {
                    return(false);
                }

                if (Core.Me.HasAura(Auras.LadyOfCrownsDrawn))
                {
                    return(false);
                }

                if (Group.CastableAlliesWithin15.Count(r => r.CurrentHealthPercent <= AstrologianSettings.Instance.LightspeedHealthPercent) > Heals.AoeThreshold)
                {
                    return(await Spells.Lightspeed.CastAura(Core.Me, Auras.Lightspeed));
                }
            }

            if (Core.Me.CurrentHealthPercent >= 40f)
            {
                return(false);
            }

            return(await Spells.Lightspeed.CastAura(Core.Me, Auras.Lightspeed));
        }
コード例 #9
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);
        }
コード例 #10
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);
        }
コード例 #11
0
        public static async Task <bool> Macrocosmos()
        {
            if (!AstrologianSettings.Instance.Macrocosmos)
            {
                return(false);
            }

            if (!Core.Me.InCombat)
            {
                return(false);
            }

            if (!Globals.InParty)
            {
                return(false);
            }

            if (!Spells.Macrocosmos.IsKnown())
            {
                return(false);
            }

            if (Core.Me.HasMyAura(Auras.Macrocosmos))
            {
                return(await Microcosmos());
            }

            if (!Spells.Macrocosmos.IsReady())
            {
                return(false);
            }

            if (Group.CastableAlliesWithin20.Any(x => x.HasAura(Auras.Macrocosmos)))
            {
                return(false);
            }

            if (AstrologianSettings.Instance.FightLogic_Macrocosmos && FightLogic.EnemyIsCastingBigAoe())
            {
                return(await FightLogic.DoAndBuffer(Spells.Macrocosmos.HealAura(Core.Me, Auras.Macrocosmos)));
            }

            var enemyCount = Combat.Enemies.Count();

            if (enemyCount == 0)
            {
                return(false);
            }

            if (enemyCount > PartyManager.NumMembers)
            {
                if (Combat.Enemies.All(x => x.WithinSpellRange(Spells.Macrocosmos.Radius) && Group.CastableAlliesWithin20.Count() == PartyManager.NumMembers))
                {
                    return(await Spells.Macrocosmos.HealAura(Core.Me, Auras.Macrocosmos));
                }
            }

            var isThereABoss = Combat.Enemies.Any(x => x.IsBoss());

            if (isThereABoss || !Group.CastableTanks.All(x =>
                                                         x.Distance() <= Spells.Macrocosmos.Radius && x.CurrentHealthPercent < 30f) ||
                enemyCount <= AoeThreshold)
            {
                return(false);
            }

            return(await Spells.Macrocosmos.HealAura(Core.Me, Auras.Macrocosmos));
        }
コード例 #12
0
        private static async Task <bool> BigAoe()
        {
            if (!Spells.Succor.IsKnownAndReady())
            {
                return(false);
            }

            if (Core.Me.TargetCharacter.SpellCastInfo.RemainingCastTime <= Spells.Succor.AdjustedCastTime)
            {
                return(false);
            }

            if (ScholarSettings.Instance.FightLogicAdloDeployBigAoe &&
                Spells.DeploymentTactics.IsKnownAndReady())
            {
                var target = Group.CastableParty.FirstOrDefault(x => x.HasAura(Auras.Catalyze));

                if (target == null)
                {
                    target = Group.CastableParty.FirstOrDefault(x => x.HasAura(Auras.Galvanize));
                }

                if (target == null)
                {
                    target = Core.Me;
                    if (!await Spells.Adloquium.Cast(target))
                    {
                        return(false);
                    }
                }

                return(await FightLogic.DoAndBuffer(Spells.DeploymentTactics.Cast(target)));
            }

            if (ScholarSettings.Instance.FightLogicRecitSuccorBigAoe &&
                Spells.Recitation.IsKnownAndReady() &&
                !Core.Me.HasAura(Auras.EmergencyTactics) &&
                Group.CastableParty.Count(x => x.HasAura(Auras.Galvanize)) < AoeThreshold)
            {
                if (!await Spells.Recitation.Cast(Core.Me))
                {
                    return(false);
                }

                return(await FightLogic.DoAndBuffer(Spells.Succor.Cast(Core.Me)));
            }

            if (ScholarSettings.Instance.FightLogicSoilBigAoe &&
                Spells.SacredSoil.IsKnownAndReady() &&
                Core.Me.HasAetherflow())
            {
                return(await FightLogic.DoAndBuffer(Spells.SacredSoil.Cast(Core.Me)));
            }

            if (ScholarSettings.Instance.FightLogicSuccorAoe &&
                Spells.Succor.IsKnownAndReady() &&
                Group.CastableParty.Count(x => x.HasAura(Auras.Galvanize)) < AoeThreshold)
            {
                return(await FightLogic.DoAndBuffer(Spells.Succor.Cast(Core.Me)));
            }

            return(false);
        }