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)); }
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)); }
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)); }
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(); }
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()); }
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)); }
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)); }
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; }
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)); }
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)); }
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)); }
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); }
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()); }