public static async Task <bool> AstroDyne() { if (!AstrologianSettings.Instance.Play || !AstrologianSettings.Instance.AstroDyne) { return(false); } if (!Core.Me.InCombat) { return(false); } if (!Spells.Astrodyne.IsKnownAndReady()) { return(false); } if (Combat.CombatTotalTimeLeft <= AstrologianSettings.Instance.DontPlayWhenCombatTimeIsLessThan) { return(false); } if (DivinationSeals.All(seal => seal == 0)) { return(false); } //1 = MP Regen if (DivinationSeals.Count(seal => seal != 0) == 1 && (Core.Me.CurrentManaPercent > AstrologianSettings.Instance.LucidDreamingManaPercent || Spells.LucidDreaming.IsReady() || Core.Me.HasAura(Auras.LucidDreaming))) { return(false); } //2 = MP Regen + Haste var hasteThreshold = PartyManager.NumMembers == 4 ? 2 : 3; if (DivinationSeals.Count(seal => seal != 0) == 2 && (Spells.EssentialDignity.Charges > 0 || Group.CastableAlliesWithin30.Count(r => r.CurrentManaPercent <= 60) <= hasteThreshold || Spells.Lightspeed.IsReady())) { return(false); } if (Core.Me.HasAura(Auras.Lightspeed)) { return(false); } //3 = MP Regen + Haste + Dmg (or shortcut from above logic) return(await Spells.Astrodyne.Cast(Core.Me)); }
public static async Task <bool> SleeveDraw() { if (Core.Me.ClassLevel < Spells.SleeveDraw.LevelAcquired) { return(false); } if (Spells.SleeveDraw.Cooldown != TimeSpan.Zero) { return(false); } if (DivinationSeals.All(c => c == 0)) { return(false); } var cardDrawn = Arcana != AstrologianCard.None; if (cardDrawn) { return(false); } if (!AstrologianSettings.Instance.Play) { return(false); } if (DivinationSeals.Count(c => c == 0) == 1) { return(await Spells.SleeveDraw.Cast(Core.Me)); } return(false); }
public static async Task <bool> PlayCards() { if (!AstrologianSettings.Instance.UseDraw) { return(false); } var cardDrawn = Arcana != AstrologianCard.None; if (!cardDrawn) { if (ActionManager.CanCast(Spells.Draw, Core.Me) && AstrologianSettings.Instance.UseDraw) { if (await Spells.Draw.Cast(Core.Me)) { await Coroutine.Wait(750, () => Arcana != AstrologianCard.None); } } } if (Combat.CombatTotalTimeLeft <= AstrologianSettings.Instance.DontPlayWhenCombatTimeIsLessThan) { return(false); } if (AstrologianSettings.Instance.UseReDraw) { if (DivinationSeals.Any(c => c == 0)) { // See if this fixes the thing if (Spells.Redraw.Charges >= 1) { switch (Arcana) { //Solar Seal case AstrologianCard.Balance: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Bole: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; //Lunar Seal case AstrologianCard.Arrow: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Ewer: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; //Celestial Seal case AstrologianCard.Spear: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Spire: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; } } //Redundant case for if 0 redraw but seal matches switch (Arcana) { //Solar Seal case AstrologianCard.Balance: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await MeleeDpsOrTank(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Bole: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await RangedDpsOrHealer(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; //Lunar Seal case AstrologianCard.Arrow: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await MeleeDpsOrTank(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Ewer: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await RangedDpsOrHealer(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; //Celestial Seal case AstrologianCard.Spear: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await MeleeDpsOrTank(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Spire: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await RangedDpsOrHealer(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; } // Minor Arcana switch (Arcana) { //Solar Seal case AstrologianCard.Balance: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(true)); } break; case AstrologianCard.Bole: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(true)); } break; //Lunar Seal case AstrologianCard.Arrow: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(true)); } break; case AstrologianCard.Ewer: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(true)); } break; //Celestial Seal case AstrologianCard.Spear: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(true)); } break; case AstrologianCard.Spire: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(true)); } break; } } // Minor Arcana if seals are full switch (Arcana) { //Solar Seal case AstrologianCard.Balance: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(true)); } break; case AstrologianCard.Bole: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(true)); } break; //Lunar Seal case AstrologianCard.Arrow: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(true)); } break; case AstrologianCard.Ewer: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(true)); } break; //Celestial Seal case AstrologianCard.Spear: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(true)); } break; case AstrologianCard.Spire: if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(true)); } break; } return(false); } // Regular case if no redraw is enabled if (Globals.InParty) { switch (Arcana) { //Solar Seal case AstrologianCard.Balance: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await MeleeDpsOrTank(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Bole: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await RangedDpsOrHealer(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; //Lunar Seal case AstrologianCard.Arrow: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await MeleeDpsOrTank(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Ewer: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await RangedDpsOrHealer(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; //Celestial Seal case AstrologianCard.Spear: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await MeleeDpsOrTank(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await MeleeDpsOrTank(false)); } break; case AstrologianCard.Spire: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await RangedDpsOrHealer(true)); } if (Core.Me.InCombat && AstrologianSettings.Instance.Play) { return(await RangedDpsOrHealer(false)); } break; } } if (Combat.CombatTotalTimeLeft <= AstrologianSettings.Instance.DontPlayWhenCombatTimeIsLessThan) { return(false); } if (!AstrologianSettings.Instance.Play) { return(false); } return(await Spells.Play.Cast(Core.Me)); }
public static async Task <bool> PlayCards() { if (!AstrologianSettings.Instance.UseDraw) { return(false); } var cardDrawn = Arcana != AstrologianCard.None; if (!cardDrawn) { if (ActionManager.CanCast(Spells.Draw, Core.Me) && AstrologianSettings.Instance.UseDraw) { if (await Spells.Draw.Cast(Core.Me)) { await Coroutine.Wait(750, () => Arcana != AstrologianCard.None); } } } if (Combat.CombatTotalTimeLeft <= AstrologianSettings.Instance.DontPlayWhenCombatTimeIsLessThan) { return(false); } if (AstrologianSettings.Instance.UseReDraw) { if (DivinationSeals.Any(c => c == 0)) { if (Spells.Redraw.Charges > 1) { switch (Arcana) { //Solar Seal case AstrologianCard.Balance: case AstrologianCard.Bole: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } break; //Lunar Seal case AstrologianCard.Arrow: case AstrologianCard.Ewer: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } break; //Celestial Seal case AstrologianCard.Spear: case AstrologianCard.Spire: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } break; } } } } if (Combat.CombatTotalTimeLeft <= AstrologianSettings.Instance.DontPlayWhenCombatTimeIsLessThan) { return(false); } if (DivinationSeals.All(c => c != 0) && AstrologianSettings.Instance.Divination) { await Spells.Divination.Cast(Core.Me); } if (!AstrologianSettings.Instance.Play) { return(false); } if (Globals.InParty) { switch (Arcana) { case AstrologianCard.Balance: case AstrologianCard.Arrow: case AstrologianCard.Spear: case AstrologianCard.LordofCrowns: return(await MeleeDpsOrTank(false)); case AstrologianCard.Bole: case AstrologianCard.Ewer: case AstrologianCard.Spire: case AstrologianCard.LadyofCrowns: return(await RangedDpsOrHealer(false)); } } return(await Spells.Play.Cast(Core.Me)); }
public static async Task <bool> PlayCards() { if (!AstrologianSettings.Instance.UseDraw) { return(false); } var cardDrawn = Arcana != AstrologianCard.None; if (!cardDrawn) { if (await Spells.Draw.Cast(Core.Me)) { await Coroutine.Wait(750, () => Core.Me.HasAnyCardAura()); } } if (DivinationSeals.Any(c => c == 0)) { if (Spells.Redraw.Charges > 1) { switch (Arcana) { //Solar Seal case AstrologianCard.Balance: case AstrologianCard.Bole: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } break; //Lunar Seal case AstrologianCard.Arrow: case AstrologianCard.Ewer: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } break; //Celestial Seal case AstrologianCard.Spear: case AstrologianCard.Spire: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { return(await Spells.Redraw.Cast(Core.Me)); } break; } } } if (DivinationSeals.All(c => c != 0)) { await Spells.Divination.Cast(Core.Me); } if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal || c == AstrologianSeal.Lunar_Seal || c == AstrologianSeal.Celestial_Seal)) { switch (Arcana) { //Solar Seal case AstrologianCard.Balance: case AstrologianCard.Bole: if (DivinationSeals.Any(c => c == AstrologianSeal.Solar_Seal)) { await Spells.MinorArcana.Cast(Core.Me); } break; //Lunar Seal case AstrologianCard.Arrow: case AstrologianCard.Ewer: if (DivinationSeals.Any(c => c == AstrologianSeal.Lunar_Seal)) { await Spells.MinorArcana.Cast(Core.Me); } break; //Celestial Seal case AstrologianCard.Spear: case AstrologianCard.Spire: if (DivinationSeals.Any(c => c == AstrologianSeal.Celestial_Seal)) { await Spells.MinorArcana.Cast(Core.Me); } break; } } if (PartyManager.IsInParty) { switch (Arcana) { case AstrologianCard.Balance: case AstrologianCard.Arrow: case AstrologianCard.Spear: case AstrologianCard.LordofCrowns: return(await MeleeDpsOrTank()); case AstrologianCard.Bole: case AstrologianCard.Ewer: case AstrologianCard.Spire: case AstrologianCard.LadyofCrowns: return(await RangedDpsOrHealer()); } } return(await Spells.Play.Cast(Core.Me)); }
public static async Task <bool> PlayCards() { var drawnCard = GetDrawnCard(); var cardDrawn = drawnCard != NewAstroCards.None; /* * Looks like Arcana is now filled with either the Crown Draw, Or the Arcana Draw with Arcana Draw taking priority. * * The Card ID's have changed... but there's some goof with Reborn where whether or not you have Lord, Lady, or nothing, the Card ID drawn changes: * Balance = 1, 113, 129. * Bole = 2, 114, 130. * Arrow = 3, 115, 131. * Spear = 4, 116, 132. * Ewer = 5, 117, 133. * Spire = 6, 118, 134. * * There's some temporary workarounds above until reborn has this fixed. * */ if (ActionManager.CanCast(Spells.Draw, Core.Me) && AstrologianSettings.Instance.UseDraw && !cardDrawn) { if (await Spells.Draw.Cast(Core.Me)) { await Coroutine.Wait(750, () => GetDrawnCard() != NewAstroCards.None); } } if (!cardDrawn) { return(false); } if (Core.Me.InCombat && Spells.MinorArcana.IsKnownAndReady()) { if (!Core.Me.HasAnyAura(new uint[] { Auras.LadyOfCrownsDrawn, Auras.LordOfCrownsDrawn })) { return(await Spells.MinorArcana.Cast(Core.Me)); } } if (Combat.CombatTotalTimeLeft <= AstrologianSettings.Instance.DontPlayWhenCombatTimeIsLessThan) { return(false); } if (await RedrawOrDrawAgain(drawnCard)) { return(true); } if (Globals.InParty && Core.Me.InCombat && AstrologianSettings.Instance.Play) { switch (drawnCard) { //Solar Seal case NewAstroCards.Balance: if (DivinationSeals.All(seal => seal != AstrologianSeal.Solar_Seal)) { return(await MeleeDpsOrTank()); } break; case NewAstroCards.Bole: if (DivinationSeals.All(seal => seal != AstrologianSeal.Solar_Seal)) { return(await RangedDpsOrHealer()); } break; //Lunar Seal case NewAstroCards.Arrow: if (DivinationSeals.All(seal => seal != AstrologianSeal.Lunar_Seal)) { return(await MeleeDpsOrTank()); } break; case NewAstroCards.Ewer: if (DivinationSeals.All(seal => seal != AstrologianSeal.Lunar_Seal)) { return(await RangedDpsOrHealer()); } break; //Celestial Seal case NewAstroCards.Spear: if (DivinationSeals.All(seal => seal != AstrologianSeal.Celestial_Seal)) { return(await MeleeDpsOrTank()); } break; case NewAstroCards.Spire: if (DivinationSeals.All(seal => seal != AstrologianSeal.Celestial_Seal)) { return(await RangedDpsOrHealer()); } break; } } if (!AstrologianSettings.Instance.Play) { return(false); } if (!Globals.InParty && Core.Me.InCombat) { return(await Spells.Play.Cast(Core.Me)); } return(false); }
public static async Task <bool> RedrawOrDrawAgain(NewAstroCards drawnCard) { if (!AstrologianSettings.Instance.UseReDraw) { return(false); } if (!Core.Me.InCombat) { return(false); } if (DivinationSeals.All(seal => seal == 0)) { return(false); } if (Group.CastableAlliesWithin30.All(r => r.HasAnyCardAura())) { return(false); } if (drawnCard == NewAstroCards.Balance && DivinationSeals.All(seal => seal != AstrologianSeal.Solar_Seal)) { return(false); } if (drawnCard == NewAstroCards.Bole && DivinationSeals.All(seal => seal != AstrologianSeal.Solar_Seal)) { return(false); } if (drawnCard == NewAstroCards.Arrow && DivinationSeals.All(seal => seal != AstrologianSeal.Lunar_Seal)) { return(false); } if (drawnCard == NewAstroCards.Ewer && DivinationSeals.All(seal => seal != AstrologianSeal.Lunar_Seal)) { return(false); } if (drawnCard == NewAstroCards.Spear && DivinationSeals.All(seal => seal != AstrologianSeal.Celestial_Seal)) { return(false); } if (drawnCard == NewAstroCards.Spire && DivinationSeals.All(seal => seal != AstrologianSeal.Celestial_Seal)) { return(false); } if (Spells.Redraw.IsKnownAndReady() && Spells.Redraw.Charges >= 1 && Core.Me.HasAura(Auras.ClarifyingDraw)) { return(await Spells.Redraw.Cast(Core.Me)); } if (Spells.Draw.Charges >= 1) { return(await Spells.Draw.Cast(Core.Me)); } return(false); }