public static async Task <bool> EnergyDrain()
        {
            if (!SummonerSettings.Instance.EnergyDrain)
            {
                return(false);
            }

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

            if (SmnResources.Aetherflow + ArcResources.Aetherflow != 0)
            {
                return(false);
            }

            if (ArcResources.TranceTimer + SmnResources.TranceTimer == 0)
            {
                return(false);
            }

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            return(await Spells.EnergyDrain.Cast(Core.Me.CurrentTarget));
        }
Exemple #2
0
        public static async Task <bool> Rekindle()
        {
            if (!SummonerSettings.Instance.Rekindle)
            {
                return(false);
            }

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

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            var targetNeedsHealing = Group.CastableAlliesWithin30
                                     .FirstOrDefault(x => x.CurrentHealthPercent < SummonerSettings.Instance.RekindleHPThreshold);

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

            return(await Spells.Rekindle.Heal(targetNeedsHealing, false));
        }
Exemple #3
0
        public static async Task <bool> Deathflare()
        {
            if (!SummonerSettings.Instance.Deathflare)
            {
                return(false);
            }

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

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            var target = Combat.SmartAoeTarget(Spells.Deathflare, SummonerSettings.Instance.SmartAoe);

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

            return(await Spells.Deathflare.Cast(target));
        }
Exemple #4
0
 public void Update(Unit unit, ArenaManager world)
 {
     SpellCast.Update(world);
     Spells.Update();
     for (int i = 0; i < PeriodicEffects.Count; i++)
     {
         PeriodicEffects[i].Update(unit, world);
     }
     Buffs.Update(world);
     GlobalCooldown.Update();
 }
Exemple #5
0
        public void TestGlobalCooldown()
        {
            Instant t1        = Instant.FromUnixTimeSeconds(1);
            Instant t2        = Instant.FromUnixTimeSeconds(2);
            Instant t3        = Instant.FromUnixTimeSeconds(3);
            var     clockMock = new Mock <IClock>();
            var     cooldown  = new GlobalCooldown(clockMock.Object, Duration.FromSeconds(2));

            clockMock.Setup(clock => clock.GetCurrentInstant()).Returns(t1);
            Assert.IsTrue(cooldown.CheckLapsedThenReset());
            Assert.IsFalse(cooldown.CheckLapsedThenReset());

            clockMock.Setup(clock => clock.GetCurrentInstant()).Returns(t2);
            Assert.IsFalse(cooldown.CheckLapsedThenReset());

            clockMock.Setup(clock => clock.GetCurrentInstant()).Returns(t3);
            Assert.IsTrue(cooldown.CheckLapsedThenReset());
            Assert.IsFalse(cooldown.CheckLapsedThenReset());
        }
Exemple #6
0
        public static async Task <bool> LucidDreaming()
        {
            if (!Spells.LucidDreaming.IsKnownAndReady())
            {
                return(false);
            }

            if (Core.Me.CurrentManaPercent > SummonerSettings.Instance.LucidDreamingManaPercent)
            {
                return(false);
            }

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            return(await Spells.LucidDreaming.Cast(Core.Me));
        }
        public static async Task <bool> EnkindlePhoenix()
        {
            if (!SummonerSettings.Instance.EnkindlePhoenix)
            {
                return(false);
            }

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

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            return(await Spells.EnkindlePhoenix.Cast(Core.Me.CurrentTarget));
        }
Exemple #8
0
        public static async Task <bool> EnergySiphon()
        {
            if (!SummonerSettings.Instance.EnergySiphon)
            {
                return(false);
            }

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

            if (SmnResources.Aetherflow + ArcResources.Aetherflow != 0)
            {
                return(false);
            }

            if (ArcResources.TranceTimer + SmnResources.TranceTimer == 0)
            {
                return(false);
            }

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            if (Core.Me.CurrentTarget.EnemiesNearby(5).Count() < 3)
            {
                return(false);
            }

            var target = Combat.SmartAoeTarget(Spells.EnergySiphon, SummonerSettings.Instance.SmartAoe);

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

            return(await Spells.EnergySiphon.Cast(target));
        }
Exemple #9
0
    public void Dispose()
    {
        target = null;

        health       = null;
        mainResourse = null;
        parameters   = null;
        states       = null;

        GlobalCooldown.Dispose();
        GlobalCooldown = null;

        SpellCast.Dispose();
        SpellCast = null;

        Buffs.Dispose();
        Buffs = null;

        Spells.Dispose();
        Spells = null;

        AbsorbEffects.Clear();
        AbsorbEffects = null;

        PeriodicEffects.Clear();
        PeriodicEffects = null;

        PreviousTargets.Clear();
        PreviousTargets = null;

        for (int i = 0; i < CharacterEventTypes.Count; i++)
        {
            CharacterEvents[i].Clear();
        }

        CharacterEvents.Clear();
        CharacterEvents = null;
    }
Exemple #10
0
        public void Update(TimeSpan elapsedGameTime, bool maybeBuffChanged)
        {
            Entity.Update(elapsedGameTime, maybeBuffChanged);
            if (SpellCast != null)
            {
                if (!SpellCast.Update(Entity, elapsedGameTime))
                {
                    SpellCast.Dispose();
                    SpellCast = null;
                }
            }

            if (Entity.IsModelChanged && Entity.CurrentReplacedModel != null)
            {
                Entity.CurrentReplacedModel.Update(elapsedGameTime);
            }
            else
            {
                Sprite.Update(elapsedGameTime);
            }

            GlobalCooldown.Update(elapsedGameTime);
        }
        public static async Task <bool> Fester()
        {
            if (!SummonerSettings.Instance.Fester)
            {
                return(false);
            }

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

            if (SmnResources.Aetherflow + ArcResources.Aetherflow == 0)
            {
                return(false);
            }

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            return(await Spells.Fester.Cast(Core.Me.CurrentTarget));
        }
Exemple #12
0
        public static async Task <bool> Painflare()
        {
            if (!SummonerSettings.Instance.Painflare)
            {
                return(false);
            }

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

            if (SmnResources.Aetherflow + ArcResources.Aetherflow == 0)
            {
                return(false);
            }

            if (Core.Me.CurrentTarget.EnemiesNearby(5).Count() < 2)
            {
                return(false);
            }

            if (!GlobalCooldown.CanWeave())
            {
                return(false);
            }

            var target = Combat.SmartAoeTarget(Spells.Painflare, SummonerSettings.Instance.SmartAoe);

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

            return(await Spells.Painflare.Cast(target));
        }
Exemple #13
0
        public static async Task <bool> SummonBahamut()
        {
            if (!SummonerSettings.Instance.SummonBahamut)
            {
                return(false);
            }

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

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

            if (SmnResources.AvailablePets.HasFlag(SmnResources.AvailablePetFlags.Phoenix))
            {
                return(false);
            }

            if ((SmnResources.PetTimer + SmnResources.TranceTimer) > 0)
            {
                return(false);
            }

            if (SmnResources.AvailablePets.HasFlag(SmnResources.AvailablePetFlags.Ifrit) ||
                SmnResources.AvailablePets.HasFlag(SmnResources.AvailablePetFlags.Titan) ||
                SmnResources.AvailablePets.HasFlag(SmnResources.AvailablePetFlags.Garuda) ||
                ArcResources.AvailablePets.HasFlag(ArcResources.AvailablePetFlags.Ruby) ||
                ArcResources.AvailablePets.HasFlag(ArcResources.AvailablePetFlags.Topaz) ||
                ArcResources.AvailablePets.HasFlag(ArcResources.AvailablePetFlags.Emerald))
            {
                return(false);
            }

            if (Core.Me.SummonedPet() != SmnPets.Carbuncle)
            {
                return(false);
            }

            if (SummonerSettings.Instance.ThrottleTranceSummonsWithTTL && Combat.CombatTotalTimeLeft < 15)
            {
                return(false);
            }

            if (!SummonerSettings.Instance.SearingLight)
            {
                return(await Spells.SummonBahamut.Cast(Core.Me.CurrentTarget));
            }

            if (!Spells.SearingLight.IsReady() && !Core.Me.HasAura(Auras.SearingLight))
            {
                return(await Spells.SummonBahamut.Cast(Core.Me.CurrentTarget));
            }

            if (Spells.SearingLight.IsReady() && GlobalCooldown.CanWeave())
            {
                return(await Buff.SearingLight());
            }

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

            return(await Spells.SummonBahamut.Cast(Core.Me.CurrentTarget));
        }
Exemple #14
0
        public override string ToString()
        {
            string retval = String.Format("Cast Time: {0} seconds", (IsInstant) ? String.Format("Instant {0}", GlobalCooldown.ToString("0.00")) : CastTime.ToString("0.00"));

            if (ManaCost > 0)
            {
                retval += String.Format("\nMana Cost: {0}", ManaCost.ToString("0"));
            }
            if (CritChance > 0)
            {
                retval += String.Format("\nCrit Chance: {0}%", (CritChance * 100f).ToString("0.00"));
            }
            if (Cooldown > 0)
            {
                retval += String.Format("\nCooldown: {0} seconds", Cooldown.ToString("0"));
            }
            if (Targets > 0)
            {
                retval += String.Format("\nTargets hit: {0}", Targets);
            }
            if (HasDirectDamage)
            {
                retval += ToStringDirectDamage();
            }
            if (HasOverTimeDamage)
            {
                retval += ToStringOverTimeDamage();
            }
            if (HasDirectHeal)
            {
                retval += ToStringDirectHeal();
            }
            if (HasOverTimeHeal)
            {
                retval += ToStringOverTimeHeal();
            }
            if (HasAbsorb)
            {
                retval += ToStringAbsorb();
            }
            return(retval);
        }
Exemple #15
0
        public static async Task <bool> Heal()
        {
            if (WorldManager.InSanctuary)
            {
                return(false);
            }

            if (Core.Me.IsMounted)
            {
                return(false);
            }

            if (await Casting.TrackSpellCast())
            {
                return(true);
            }

            await Casting.CheckForSuccessfulCast();

            Casting.DoHealthChecks = false;

            if (await GambitLogic.Gambit())
            {
                return(true);
            }

            if (await Heals.Ascend())
            {
                return(true);
            }
            if (await Dispel.Execute())
            {
                return(true);
            }

            if ((AstrologianSettings.Instance.WeaveOGCDHeals && GlobalCooldown.CanWeave(1)) || Casting.LastSpellTimeFinishAge.ElapsedMilliseconds > Spells.Malefic.AdjustedCooldown.TotalMilliseconds || !Casting.LastSpellTimeFinishAge.IsRunning)
            {
                if (await Heals.EssentialDignity())
                {
                    return(true);
                }
                if (await Buff.LucidDreaming())
                {
                    return(true);
                }
                if (await Buff.Lightspeed())
                {
                    return(true);
                }
                if (await Buff.NeutralSect())
                {
                    return(true);
                }
            }

            if (Globals.InActiveDuty || Core.Me.InCombat)
            {
                if ((AstrologianSettings.Instance.WeaveOGCDHeals && GlobalCooldown.CanWeave(1)) || Casting.LastSpellTimeFinishAge.ElapsedMilliseconds > Spells.Malefic.AdjustedCooldown.TotalMilliseconds || !Casting.LastSpellTimeFinishAge.IsRunning)
                {
                    if (await Heals.EssentialDignity())
                    {
                        return(true);
                    }
                    if (await Heals.CelestialIntersection())
                    {
                        return(true);
                    }
                    if (await Heals.Macrocosmos())
                    {
                        return(true);
                    }
                    if (await Heals.CelestialOpposition())
                    {
                        return(true);
                    }
                    if (await Heals.LadyOfCrowns())
                    {
                        return(true);
                    }
                    if (await Heals.Horoscope())
                    {
                        return(true);
                    }
                    if (await Heals.HoroscopePop())
                    {
                        return(true);
                    }
                    if (await Heals.Exaltation())
                    {
                        return(true);
                    }
                    if (await Heals.CollectiveUnconscious())
                    {
                        return(true);
                    }
                    if (await Buff.Synastry())
                    {
                        return(true);
                    }
                }

                if (await Heals.AspectedHelios())
                {
                    return(true);
                }
                if (await Heals.Helios())
                {
                    return(true);
                }
                if (await Heals.Benefic2())
                {
                    return(true);
                }
                if (await Heals.Benefic())
                {
                    return(true);
                }
                if (await Heals.AspectedBenefic())
                {
                    return(true);
                }
                if (await Heals.EarthlyStar())
                {
                    return(true);
                }
                if (await Heals.DontLetTheDrkDie())
                {
                    return(true);
                }
            }

            return(await HealAlliance());
        }