private static void updateTalentManager(object sender, LuaEventArgs args) { L.infoLog("------------------", C.InfoColor); L.infoLog("Talents changed...", C.InfoColor); initTalents(); printTalents(); }
public static async Task <bool> FaceTarget(WoWUnit target) { if (target == null || Me.IsSafelyFacing(target) || !target.IsValidCombatUnit() || HK.RotationOnlyOn || !GeneralSettings.Instance.GeneralFacing) { return(false); } if (!lastTimeFaced.IsRunning || (target.Guid == lastUnitGuid && lastTimeFaced.ElapsedMilliseconds > 500)) { L.infoLog("Not facing target; will attempt to", InfoColor); } target.Face(); lastUnitGuid = target.Guid; if (Me.IsWithinMeleeRangeOf(target) && Me.IsMoving && GeneralSettings.Instance.GeneralMovement && !Managers.Hotkeys.RotationOnlyOn) { return(await CommonCoroutines.StopMoving()); } if (!lastTimeFaced.IsRunning) { lastTimeFaced.Start(); } else { lastTimeFaced.Restart(); } await Coroutine.Yield(); return(true); }
private static void initializeTalents(object sender, LuaEventArgs args) { L.infoLog("Event triggered: " + args.EventName, C.InfoColor); //WriteDebugLuaEvents(args); setTalents(); //printTalents(); }
public static async Task <bool> EnsureMeleeRange(WoWUnit target) { if (target == null || Me.IsWithinMeleeRangeOf(target) || !target.IsValidCombatUnit() || Me.IsCasting || Me.IsChanneling || HK.RotationOnlyOn || !GeneralSettings.Instance.GeneralMovement) { return(false); } L.infoLog("Getting in melee range", InfoColor); if (Me.IsWithinMeleeRangeOf(target)) { return(await CommonCoroutines.StopMoving()); } if (!Me.IsWithinMeleeRangeOf(target)) { if (await Spell.Cast(Spell_Book.Glide, CombatColor, ShouldGlideForVengefulRetreat, "May have jumped too far back. Gliding back in.")) { fallingTimeout.Reset(); return(true); } await CommonCoroutines.MoveTo(target.RelativeLocation, target.SafeName); } return(true); }
private static void talentSpecChanged(object sender, LuaEventArgs args) { //TODO: Remove after all 3 Spec supported L.infoLog("PLAYER_SPECIALIZATION_CHANGED - Spec changed to {0}.- {1}", C.InfoColor, Me.Specialization, args.EventName); initializeTalents(sender, args); //onSpecChanged(args); }
public static async Task <bool> DeathBehavor() { if (Me.IsDead) { L.infoLog(DateTime.Now.ToString("mm:ss:ffffff") + " RepopMe()", Core.Helpers.Common.InfoColor); Lua.DoString("RepopMe()"); } if (Me.IsGhost) { if (Battlegrounds.IsInsideBattleground || Me.CurrentMap.Name == "Ashran") { L.infoLog(DateTime.Now.ToString("mm:ss:ffffff") + " Waiting for spirit rez", Core.Helpers.Common.InfoColor); await Coroutine.Sleep(1500); } else { L.infoLog(DateTime.Now.ToString("mm:ss:ffffff") + " Move to corpse", Core.Helpers.Common.InfoColor); await CommonCoroutines.MoveTo(Me.CorpsePoint); } } return(false); }
private static void printTalent(string name, int tier) { L.infoLog(string.Format("Tier {0}: {1}", tier, name), C.InfoColor); }
private static void playerLeveledUp(object sender, LuaEventArgs args) { L.infoLog(string.Format($"Player leveled up! Now level {args.Args[0]}"), C.InfoColor); setTalents(); }
private static void playerTalentUpdate(object sender, LuaEventArgs args) { L.infoLog("PLAYER_TALENT_UPDATE - Event triggered: " + args.EventName, C.InfoColor); initializeTalents(sender, args); }
private static void learnedSpellInTab(object sender, LuaEventArgs args) { L.infoLog("LEARNED_SPELL_IN_TAB - Event triggered: " + args.EventName, C.InfoColor); initializeTalents(sender, args); }
private static void characterPointsChanged(object sender, LuaEventArgs args) { L.infoLog("CHARACTER_POINTS_CHANGED - Event triggered: " + args.EventName, C.InfoColor); initializeTalents(sender, args); }
/// <summary> /// this is the opening rotation for single target. Once activated, it will continue to use these abilities until it has been fulfilled and then reset again. /// </summary> /// <returns></returns> public static async Task <bool> OpeningRotationSingleTarget() { //L.debugLog("UseRotation:" + (!useOpenRotation).ToString() + ", FelRushOnPull:" + (HS.HavocFelRushOnPull).ToString() + ", UseMetaCd:" + UseMetamorphosisCD(false).ToString() + ", FRMaxCharges:" + S.MaxChargesAvailable(SB.FelRush).ToString() + ", FRChargesNoFelMastery:" + (S.GetSpellChargeInfo(SB.FelRush).ChargesLeft >= 1 && !T.HavocFelMastery).ToString() + ", MetaCD:" + (!S.OnCooldown(SB.MetamorphosisSpell)).ToString()); if ((useOpenRotation && (openRotationTimeout.ElapsedMilliseconds > 5000 && openingRotationSkillsUsed != OpenerSteps.FuryBuilder) || openRotationTimeout.ElapsedMilliseconds > 10000 && openingRotationSkillsUsed == OpenerSteps.FuryBuilder)) { useOpenRotation = false; openingRotationSkillsUsed = OpenerSteps.None; L.infoLog("Opener Rotation timed out.", C.InfoColor); return(false); } if (!useOpenRotation && (HS.HavocFelRushOnPull && UseMetamorphosisCD(false) && (S.MaxChargesAvailable(SB.FelRush) || // make sure we have max charges saved up. (S.GetSpellChargeInfo(SB.FelRush).ChargesLeft >= 1 && !T.HavocFelMastery) // also check for 1 charge if no fel mastery. ) && !S.OnCooldown(SB.MetamorphosisSpell) && // make sure metamorphosis is not on cd. CurrentTarget.Distance < 25)) // make sure we aren't too far away. { L.infoLog("Ready for Havoc Single Target Opener: " + openingRotationSkillsUsed, C.HavocOpenerColor); useOpenRotation = true; openingRotationSkillsUsed = OpenerSteps.InitialFelRush; openRotationTimeout.Restart(); return(true); } if (useOpenRotation) { //L.debugLog(openingRotationSkillsUsed.ToString()); if (openingRotationSkillsUsed == OpenerSteps.InitialFelRush) { // we haven't used an ability yet for opener, let's fel rush if (await S.GCD(SB.FelRush, C.HavocOpenerColor, CurrentTarget.Distance <= 15 && Me.IsSafelyFacing(CurrentTarget), "Opener 1")) { openingRotationSkillsUsed = OpenerSteps.FelMasteryFelRush; openRotationTimeout.Restart(); return(true); } } if (openingRotationSkillsUsed == OpenerSteps.FelMasteryFelRush) { //L.debugLog("Made it to FelMasteryFelRush : HasFelMastery:" + T.HavocFelMastery + ", HasMomentum: " + Me.HasAnyAura("Momentum")); if (await S.GCD(SB.FelRush, C.HavocOpenerColor, T.HavocFelMastery && NeedMomentum(), "Opener 2 - Fel Mastery 2nd Fel Rush")) { openingRotationSkillsUsed = OpenerSteps.FuryBuilder; openRotationTimeout.Restart(); return(true); } // if we don't have fel mastery talent, just bump the rotation. // really should have it, but just in case someone thinks they know better ;] if (!T.HavocFelMastery) { L.combatLog("Skipping Opener 2; No Fel Mastery talent", C.HavocOpenerColor); openingRotationSkillsUsed = OpenerSteps.FuryBuilder; openRotationTimeout.Restart(); return(true); } } if (openingRotationSkillsUsed == OpenerSteps.FuryBuilder) { if (await S.GCD(SB.DemonsBite, C.HavocOpenerColor, !T.HavocDemonBlades, "Opener 3, building Fury")) { return(true); } // if we have demon blades, we want to passively get <=20 missing fury. if (T.HavocDemonBlades && C.MissingPower > 20) { L.combatLog("Opener 3, passively building fury", C.HavocOpenerColor); } if (C.MissingPower <= 20) { openingRotationSkillsUsed = OpenerSteps.FaceAwayFromTarget; return(true); } } // make sure we have max charges saved up. if (openingRotationSkillsUsed == OpenerSteps.FaceAwayFromTarget) { // we don't want to be safely facing if (Me.IsSafelyFacing(CurrentTarget.Location)) { await FaceAwayFromTarget(); openingRotationSkillsUsed = OpenerSteps.VengefulRetreat; } } //if (openingRotationSkillsUsed == OpenerSteps.VengefulRetreat && !Me.IsSafelyFacing(CurrentTarget)) //{ // // wait until you are safely facing. // return true; //} if (openingRotationSkillsUsed == OpenerSteps.VengefulRetreat && !Me.IsSafelyFacing(CurrentTarget.Location)) { if (await S.Cast(SB.VengefulRetreat, C.HavocOpenerColor, T.HavocPrepared || T.HavocMomentum, "Opener 4")) { openingRotationSkillsUsed = OpenerSteps.Nemesis; return(true); } } if (openingRotationSkillsUsed == OpenerSteps.Nemesis) { if (await S.Cast(SB.Nemesis, C.HavocOpenerColor, T.HavocNemesis, "Opener 5")) { openingRotationSkillsUsed = OpenerSteps.Metamorphosis; return(true); } if (!T.HavocNemesis) { L.combatLog("Skip Opener 5 - Nemesis. No talent selected", C.HavocOpenerColor); openingRotationSkillsUsed = OpenerSteps.Metamorphosis; return(true); } } if (openingRotationSkillsUsed == OpenerSteps.Metamorphosis) { // if in melee, need to cast on yourself. If in ranged, cast on target. if (await S.CastGround(SB.MetamorphosisSpell, C.HavocOpenerColor, !Me.IsWithinMeleeRangeOf(CurrentTarget), "Opener 6 - Cast on Target")) { openingRotationSkillsUsed = OpenerSteps.ChaosBlades; return(true); } if (await S.CastGroundOnMe(SB.MetamorphosisSpell, C.HavocOpenerColor, Me.IsWithinMeleeRangeOf(CurrentTarget), "Opener 6 - Cast on Me")) { // if we did metamorphosis then that's our last ability we can now continue single target openingRotationSkillsUsed = OpenerSteps.ChaosBlades; return(true); } } if (openingRotationSkillsUsed == OpenerSteps.ChaosBlades) { if (await S.Cast(SB.ChaosBlades, C.HavocOpenerColor, T.HavocChaosBlades, "Opener 7")) { useOpenRotation = false; openingRotationSkillsUsed = OpenerSteps.None; } if (!T.HavocChaosBlades) { useOpenRotation = false; openingRotationSkillsUsed = OpenerSteps.None; return(true); } } await S.Cast(SB.DemonsBite, C.HavocOpenerColor, !T.HavocDemonBlades && Me.IsWithinMeleeRangeOf(CurrentTarget), "Opener, Filler"); } return(useOpenRotation); }