private static async Task <bool> Regen()
        {
            if (!MikotoSettingsModel.Instance.UseRegen || !Me.InCombat)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => (!hm.HasAura(Auras.Regen) && hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.RegenHpPct) ||
                                                    (!hm.HasAura(Auras.Regen, true, 4000) && hm.InCombat &&
                                                     ((hm.IsTank() && MikotoSettingsModel.Instance.KeepRegenOnTanks) ||
                                                      (hm.IsHealer() && MikotoSettingsModel.Instance.KeepRegenOnHealers) ||
                                                      (hm.IsDps() && MikotoSettingsModel.Instance.KeepRegenOnDps))));

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

            if (target.IsTank() && MikotoSettingsModel.Instance.RegenTanks)
            {
                return(await Spells.Regen.CastBuff(target, true, Auras.Regen));
            }

            if (target.IsHealer() && MikotoSettingsModel.Instance.RegenHealers)
            {
                return(await Spells.Regen.CastBuff(target, true, Auras.Regen));
            }

            if (target.IsDps() && MikotoSettingsModel.Instance.RegenDps)
            {
                return(await Spells.Regen.CastBuff(target, true, Auras.Regen));
            }

            return(false);
        }
Exemple #2
0
        private static async Task <bool> Protect()
        {
            if (!SuritoSettingsModel.Instance.UseProtect)
            {
                return(false);
            }

            if (PartyManager.IsInParty)
            {
                if (CombatHelper.LastSpell == Spells.Protect || ActionManager.LastSpell == Spells.Protect ||
                    !SuritoSettingsModel.Instance.UseProtectInCombat && PartyMembers.Any(pm => pm.InCombat) ||
                    PartyMembers.Any(pm => pm.Icon == PlayerIcon.Viewing_Cutscene) ||
                    HealManager.All(hm => hm.HasAura(Auras.Protect)) ||
                    HealManager.Any(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.PhysickHpPct || hm.IsDead))
                {
                    return(false);
                }
            }

            var target = HealManager.FirstOrDefault(hm => !hm.HasAura(Auras.Protect));

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

            return(await Spells.Protect.CastBuff(target, CombatHelper.LastSpell != Spells.Protect, Auras.Protect));
        }
Exemple #3
0
        private static async Task <bool> Adloquium()
        {
            if (!SuritoSettingsModel.Instance.UseAdloquium)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.AdloquiumHpPct && !hm.HasAura(Auras.Adloquium) && ((Me.HasAura(Auras.EmergencyTactics) && !SuritoSettingsModel.Instance.UseEmergencyTacticsOnTankOnly) || !SuritoSettingsModel.Instance.UseAdloquiumOnTankOnly || hm.IsTank()));

            if (target == null && SuritoSettingsModel.Instance.UseDelpoymentTacticsOnBothBuffsOnly)
            {
                target = HealManager.FirstOrDefault(hm => hm.HasAura(Auras.EyeforanEye));
            }

            if (target != null)
            {
                if (target.HasAura(Auras.Adloquium) && !Me.HasAura(Auras.EmergencyTactics))
                {
                    return(false);
                }

                return(await Spells.Adloquium.Use(target, true, true));
            }
            return(false);
        }
Exemple #4
0
        private static async Task <bool> ExProvoke()
        {
            if (Target == null || !Target.CanAttack || !BeatrixSettingsModel.Instance.UseProvoke || CombatHelper.LastSpell == Spells.Flash)
            {
                return(false);
            }

            if (!PartyManager.IsInParty)
            {
                return(false);
            }

            if (BeatrixSettingsModel.Instance.MainTank)
            {
                if (GameObjectManager.Attackers.Count(r => r.Distance(Me) <= 5 && r.TargetGameObject == HealManager.FirstOrDefault(hm => hm.BeingTargeted() && !hm.IsMe) && (!r.TargetGameObject.HasAura(Auras.ShieldOath) && !r.TargetGameObject.HasAura(Auras.Defiance) && !r.TargetGameObject.HasAura(Auras.Grit))) > 1)
                {
                    if (await Ultimatum())
                    {
                        Logger.BeatrixLog(@"====> Ultimatum used to regain Aggro");
                        FlashCount = 0;
                    }
                }
                var provokeTarget = GameObjectManager.Attackers.FirstOrDefault(r => r.Distance(Me) <= 25 && r.TargetGameObject == HealManager.FirstOrDefault(hm => hm.BeingTargeted() && !hm.IsMe) && (!r.TargetGameObject.HasAura(Auras.ShieldOath) && !r.TargetGameObject.HasAura(Auras.Defiance) && !r.TargetGameObject.HasAura(Auras.Grit)));

                if (provokeTarget != null)
                {
                    if (await Spells.Provoke.Use(provokeTarget, true))
                    {
                        Logger.BeatrixLog(@"====> Provoking {0} to Pull Aggro From {1}", provokeTarget.Name, provokeTarget.TargetGameObject.Name);
                        if (provokeTarget?.Distance(Me) > 5 && BeatrixSettingsModel.Instance.UseShieldLob)
                        {
                            Logger.BeatrixLog(@"====> Sheild Lobbing {0} to Pull Aggro From {1}", provokeTarget.Name, provokeTarget.TargetGameObject.Name);
                            return(await Spells.ShieldLob.Use(provokeTarget, true));
                        }
                        return(true);
                    }
                }
            }
            if (!BeatrixSettingsModel.Instance.MainTank)
            {
                var OtherTank = HealManager.FirstOrDefault(hm => hm.IsTank() && !hm.IsMe);

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

                if (await Shirk(OtherTank))
                {
                    Logger.BeatrixLog(@"====> Shirking Aggro from {0} to Main Tank, {1}", Target.Name, OtherTank.SafeName());
                    return(true);
                }
            }
            return(false);
        }
Exemple #5
0
        private static async Task <bool> SacredSoil()
        {
            if (!SuritoSettingsModel.Instance.UseSacredSoil || ActionResourceManager.Arcanist.Aetherflow.Equals(0))
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.SacredSoilHpPct && HealManager.Count(hm2 => hm2.CurrentHealthPercent <= SuritoSettingsModel.Instance.SacredSoilHpPct && hm2.Distance2D(hm) <= 8) >= SuritoSettingsModel.Instance.SacredSoilPlayerCount);

            return(await Spells.SacredSoil.Use(target, true, true));
        }
        private static async Task <bool> Asylum()
        {
            if (!MikotoSettingsModel.Instance.UseAsylum)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(pm1 => HealManager.Count(pm2 => pm2.CurrentHealthPercent <= MikotoSettingsModel.Instance.AsylumHpPct) >= MikotoSettingsModel.Instance.AsylumPlayerCount);

            if (target != null)
            {
                return(await Spells.Asylum.Use(target, target.AlliesInRange(6) >= MikotoSettingsModel.Instance.AsylumPlayerCount));
            }
            return(false);
        }
        private static async Task <bool> CureIII()
        {
            if (!MikotoSettingsModel.Instance.UseCure3)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(pm1 => HealManager.Count(pm2 => pm1.Distance(pm2) <= 6 && pm2.CurrentHealthPercent <= MikotoSettingsModel.Instance.Cure3HpPct) >= MikotoSettingsModel.Instance.Cure3PlayerCount);

            if (target != null)
            {
                return(await Spells.CureIII.Use(target, true, true));
            }
            return(false);
        }
Exemple #8
0
        private static async Task <bool> Rouse()
        {
            if (!SuritoSettingsModel.Instance.UseRouse)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.RouseHpPct && (hm.IsTank() || !SuritoSettingsModel.Instance.UseRouseTankOnly));

            if (target != null)
            {
                return(await Spells.Rouse.Use(Me, true));
            }
            return(false);
        }
        internal static BattleCharacter HealTarget()
        {
            switch (MainSettingsModel.Instance.CurrentRoutine)
            {
            case "Mikoto":
                return(HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.CureHpPct));

            case "Remiel":
                return(HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= RemielSettingsModel.Instance.BeneficHpPct));

            case "Surito":
                return(HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.PhysickHpPct));
            }
            return(null);
        }
Exemple #10
0
        private static async Task <bool> Physick()
        {
            if (!SuritoSettingsModel.Instance.UsePhysick)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.PhysickHpPct);

            if (target != null)
            {
                return(await Spells.Physick.Use(target, true, true));
            }
            return(false);
        }
Exemple #11
0
        private static async Task <bool> Lustrate()
        {
            if (!SuritoSettingsModel.Instance.UseLustrate || ActionResourceManager.Arcanist.Aetherflow.Equals(0))
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm =>
                                                    hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.LustrateHpPct);

            if (target != null && (target.IsTank() || SuritoSettingsModel.Instance.UseLustrateOnTankOnly))
            {
                return(await Spells.Lustrate.Use(target, true));
            }
            return(false);
        }
        private static async Task <bool> DivineBenison()
        {
            if (!MikotoSettingsModel.Instance.UseDivineBenison)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm =>
                                                    hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.DivineBenisonHpPct);

            if (target != null)
            {
                return(await Spells.DivineBenison.Use(target, true));
            }
            return(false);
        }
        private static async Task <bool> Tetragrammaton()
        {
            if (!MikotoSettingsModel.Instance.UseTetragrammaton)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm =>
                                                    hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.TetragrammatonHpPct);

            if (target != null && (target.IsTank() || !MikotoSettingsModel.Instance.UseTetragrammatonOnTankOnly))
            {
                return(await Spells.Tetragrammaton.Use(target, true));
            }

            return(false);
        }
Exemple #14
0
        private static async Task <bool> Excogitation()
        {
            if (!SuritoSettingsModel.Instance.UseExcogitation || ActionResourceManager.Arcanist.Aetherflow.Equals(0))
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => !hm.IsMe &&
                                                    hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.ExcogitationHpPct &&
                                                    (hm.IsTank() || !SuritoSettingsModel.Instance.UseExcogitationOnTankOnly));

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

            return(await Spells.Excogitation.CastBuff(target, true, Auras.Excogitation));
        }
Exemple #15
0
        private static async Task <bool> EyeForAnEye()
        {
            if (!SuritoSettingsModel.Instance.UseEyeforanEye)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.IsTank() && (!SuritoSettingsModel.Instance.UseEyeforanEyeOnlyAfterAdloquium || hm.HasAura(Auras.Adloquium, true)));

            if (target == null)
            {
                target = HealManager.FirstOrDefault(hm => !hm.IsMe && (!SuritoSettingsModel.Instance.UseEyeforanEyeOnlyAfterAdloquium || hm.HasAura(Auras.Adloquium, true)));
            }

            if (target != null)
            {
                return(await Spells.EyeforanEye.Use(target, !target.HasAura(Auras.EyeforanEye)));
            }
            return(false);
        }
        private static async Task <bool> CureII()
        {
            if (!MikotoSettingsModel.Instance.UseCure2)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.Cure2HpPct);

            if (Me.HasAura(Auras.Freecure))
            {
                target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent < (MikotoSettingsModel.Instance.CureHpPct));
            }

            if (target != null)
            {
                return(await Spells.CureII.Use(target, true, true));
            }
            return(false);
        }
        private static async Task <bool> Cure()
        {
            var target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.CureHpPct);

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

            if (target.IsTank())
            {
                if (MikotoSettingsModel.Instance.RegenCureFloorTanks && target.HasAura(Auras.Regen) && target.CurrentHealthPercent > MikotoSettingsModel.Instance.RegenCureFloorPct)
                {
                    return(false);
                }

                return(await Spells.Cure.Use(target, true, true));
            }

            if (target.IsHealer())
            {
                if (MikotoSettingsModel.Instance.RegenCureFloorHealers && target.HasAura(Auras.Regen) && target.CurrentHealthPercent > MikotoSettingsModel.Instance.RegenCureFloorPct)
                {
                    return(false);
                }

                return(await Spells.Cure.Use(target, true, true));
            }

            if (!target.IsDps())
            {
                return(false);
            }

            if (MikotoSettingsModel.Instance.RegenCureFloorDps && target.HasAura(Auras.Regen) && target.CurrentHealthPercent > MikotoSettingsModel.Instance.RegenCureFloorPct)
            {
                return(false);
            }

            return(await Spells.Cure.Use(target, true, true));
        }
Exemple #18
0
        private static async Task <bool> EmergencyTactics()
        {
            if (!SuritoSettingsModel.Instance.UseEmergencyTactics)
            {
                return(false);
            }

            if (!SuritoSettingsModel.Instance.UseEmergencyTacticsOnTankOnly && HealManager.Count(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.EmergencyTacticsSuccorHpPct) >= SuritoSettingsModel.Instance.SuccorPlayerCount)
            {
                return(await Spells.EmergencyTactics.CastBuff(Me, true, Auras.EmergencyTactics));
            }
            var target = HealManager.FirstOrDefault(hm =>
                                                    hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.EmergencyTacticsAdloquiumHpPct);

            if (target != null && (target.IsTank() || !SuritoSettingsModel.Instance.UseEmergencyTacticsOnTankOnly))
            {
                return(await Spells.EmergencyTactics.CastBuff(Me, true, Auras.EmergencyTactics));
            }

            return(false);
        }
        private static async Task <bool> EyeForAnEye()
        {
            if (!MikotoSettingsModel.Instance.UseEyeforanEye)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.IsTank() && !hm.HasAura(Auras.EyeforanEye) && hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.EyeforanEyeHpPct);

            if (target == null)
            {
                target = HealManager.FirstOrDefault(hm => !hm.IsMe && !hm.HasAura(Auras.EyeforanEye) && hm.CurrentHealthPercent <= MikotoSettingsModel.Instance.EyeforanEyeHpPct);
            }

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

            return(await Spells.EyeforanEye.Use(target, true));
        }
Exemple #20
0
        private static async Task <bool> Aetherpact()
        {
            if (!SuritoSettingsModel.Instance.UseAetherpact || Me.Pet == null)
            {
                return(false);
            }

            if (ActionResourceManager.Scholar.FaerieGauge < SuritoSettingsModel.Instance.AetherpactMinGuage)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.Distance(Me.Pet) <= 12 &&
                                                    hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.AetherpactHpPct &&
                                                    (hm.IsTank() || !SuritoSettingsModel.Instance.UseAetherpactOnTankOnly));

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

            return(await Spells.Aetherpact2.CastBuff(target, true, Auras.FeyUnion));
        }
Exemple #21
0
        private static async Task <bool> PetAction()
        {
            if (Me.HasAura(Auras.Dissipation) || Me.Pet == null || HealManager.Any(hm => hm.HasAura(Auras.FeyUnion)) || CombatHelper.GcdTimeRemaining < 10)
            {
                return(false);
            }

            var target = HealManager.FirstOrDefault(hm => hm.InCombat);

            switch (SuritoSettingsModel.Instance.SelectedSuritoSummon)
            {
            case SuritoSummonMode.Eos:
                if (SuritoSettingsModel.Instance.UseWhisperingDawn &&
                    PetManager.CanCast(Spells.WhisperingDawn.LocalizedName, Me.Pet) &&
                    HealManager.Count(hm => hm.Distance2D(Me.Pet) <= 15 && hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.WhisperingDawnHpPct) >= SuritoSettingsModel.Instance.PetAoEPlayerCount)
                {
                    return(PetManager.DoAction(Spells.WhisperingDawn.LocalizedName, Me.Pet));
                }

                if (SuritoSettingsModel.Instance.UseFeyCovenant &&
                    PetManager.CanCast(Spells.FeyCovenant.LocalizedName, Me.Pet) &&
                    HealManager.Count(hm => hm.Distance2D(Me.Pet) <= 15 && hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.FeyCovenantHpPct) >= SuritoSettingsModel.Instance.PetAoEPlayerCount)
                {
                    return(PetManager.DoAction(Spells.FeyCovenant.LocalizedName, Me.Pet));
                }

                if (SuritoSettingsModel.Instance.UseFeyIllumination &&
                    PetManager.CanCast(Spells.FeyIllumination.LocalizedName, Me.Pet) &&
                    HealManager.Count(hm => hm.Distance2D(Me.Pet) <= 15 && hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.FeyIlluninationHpPct) >= SuritoSettingsModel.Instance.PetAoEPlayerCount)
                {
                    return(PetManager.DoAction(Spells.FeyIllumination.LocalizedName, Me.Pet));
                }

                if (SuritoSettingsModel.Instance.UseEmbrace)
                {
                    target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.EmbraceHpPct);
                    if (target != null && PetManager.CanCast(Spells.Embrace.LocalizedName, target))
                    {
                        return(PetManager.DoAction(Spells.Embrace.LocalizedName, target));
                    }
                }
                break;

            case SuritoSummonMode.Selene:
                if (SuritoSettingsModel.Instance.UseEmbrace)
                {
                    target = HealManager.FirstOrDefault(hm => hm.CurrentHealthPercent <= SuritoSettingsModel.Instance.EmbraceHpPct);
                    if (target != null && PetManager.CanCast(Spells.Embrace.LocalizedName, target))
                    {
                        return(PetManager.DoAction(Spells.Embrace.LocalizedName, target));
                    }
                }

                if (SuritoSettingsModel.Instance.UseSilentDusk)
                {
                    target = HealManager.FirstOrDefault(hm => hm.CanSilence());
                    if (target != null && PetManager.CanCast(Spells.SilentDusk.LocalizedName, target))
                    {
                        return(PetManager.DoAction(Spells.SilentDusk.LocalizedName, target));
                    }
                }

                if (SuritoSettingsModel.Instance.UseFeyCaress &&
                    PetManager.CanCast(Spells.FeyCaress.LocalizedName, Me.Pet) &&
                    HealManager.Count(hm => hm.Distance2D(Me.Pet) <= 20) >= SuritoSettingsModel.Instance.PetAoEPlayerCount)
                {
                    return(await CleanseManager.PetCleanse());
                }

                if (SuritoSettingsModel.Instance.UseFeyWind &&
                    PetManager.CanCast(Spells.FeyWind.LocalizedName, Me.Pet) &&
                    HealManager.Count(hm => hm.IsDps() && hm.Distance2D(Me.Pet) <= 20) >= SuritoSettingsModel.Instance.PetAoEPlayerCount)
                {
                    return(PetManager.DoAction(Spells.FeyWind.LocalizedName, Me.Pet));
                }
                break;
            }
            return(false);
        }
Exemple #22
0
        private static async Task <bool> Intervention()
        {
            var target = HealManager.FirstOrDefault(hm => hm.Distance2D(Me) <= 30 && hm.CurrentHealthPercent <= BeatrixSettingsModel.Instance.InterventionHpPct);

            return(await Spells.Intervention.CastDot(Target, true, Auras.Intervention));
        }