public void HandleBuffs() { List <string> myAuras = CombatUtils.GetAuras(LuaUnit.player); if (!myAuras.Contains("demon armor")) { CombatUtils.CastSpellByName(Me, Target, "Demon Armor", true); } if (!myAuras.Contains("blood pact")) { CombatUtils.CastSpellByName(Me, Target, "Summon Imp", true); } }
private void DoAttackRoutine() { List <string> targetAuras = CombatUtils.GetAuras(LuaUnit.target); Me?.Update(); // Restore Mana if (Me.EnergyPercentage < 30 && Me.HealthPercentage > 50) { CombatUtils.CastSpellByName(Me, Target, "Life Tap", true); return; } Target?.Update(); // DoT's to apply if (!targetAuras.Contains("curse of agony")) { CombatUtils.CastSpellByName(Me, Target, "Curse of Agony", false); return; } if (!targetAuras.Contains("corruption")) { CombatUtils.CastSpellByName(Me, Target, "Corruption", false); return; } if (!targetAuras.Contains("unstable affliction")) { CombatUtils.CastSpellByName(Me, Target, "Unstable Affliction", false); return; } if (!targetAuras.Contains("haunt")) { CombatUtils.CastSpellByName(Me, Target, "Haunt", false); return; } Target?.Update(); // Active-Damage Spell if (Target?.HealthPercentage < 25) { CombatUtils.CastSpellByName(Me, Target, "Drain Soul", false); return; } else { CombatUtils.CastSpellByName(Me, Target, "Shadow Bolt", false); return; } }
public Spell DoRoutine(Me me, Unit target, Unit pet) { if (CombatUtils.IsUnitValid(me) && CombatUtils.IsUnitValid(target)) { return(null); } List <string> myAuras = AmeisenCore.GetAuras(LuaUnit.player); List <string> targetAuras = AmeisenCore.GetAuras(LuaUnit.target); Spell spellToUse = null; double targetDistance = Utils.GetDistance(me.pos, target.pos); // our Buff if (IsMarkOfTheWildKnown && !targetAuras.Contains("mark of the wild")) { spellToUse = TryUseSpell("Mark of the Wild", me); if (spellToUse != null) { return(spellToUse); } } // our Barkskin if (IsMarkOfTheWildKnown && !myAuras.Contains("barkskin")) { spellToUse = TryUseSpell("Barkskin", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Barkskin", true); } // only cast on me } // Innervate mana regen if (IsInnervateKnown && me.ManaPercentage < 20) { spellToUse = TryUseSpell("Innervate", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Innervate", true); } // only cast on me } // main spell rotation if (targetDistance < 38) { // Swiftmend burst heal if (IsSwiftmendKnown && target.HealthPercentage < 40 && targetAuras.Contains("rejuvenation")) { spellToUse = TryUseSpell("Swiftmend", me); if (spellToUse != null) { return(spellToUse); } } // Regrowth HOT if (IsRegrowthKnown && target.HealthPercentage < 80 && !targetAuras.Contains("regrowth")) { spellToUse = TryUseSpell("Regrowth", me); if (spellToUse != null) { return(spellToUse); } } // Lifebloom HOT if (IsLifebloomKnown && target.HealthPercentage < 90 && !targetAuras.Contains("lifebloom")) { spellToUse = TryUseSpell("Lifebloom", me); if (spellToUse != null) { return(spellToUse); } } // Wild Growth HOT if (IsWildGrowthKnown && target.HealthPercentage < 70 && !targetAuras.Contains("wild growth")) { spellToUse = TryUseSpell("Wild Growth", me); if (spellToUse != null) { return(spellToUse); } } // Rejuvenation HOT if (IsRejuvenationKnown && target.HealthPercentage < 70 && !targetAuras.Contains("rejuvenation")) { spellToUse = TryUseSpell("Rejuvenation", me); if (spellToUse != null) { return(spellToUse); } } } return(null); }
public override void DoThings() { // Updte me, target and pet Me?.Update(); Target?.Update(); Pet?.Update(); // Handle pending movement actions if (WaypointQueue.Count > 0) { base.DoThings(); } // Try to get a target if (AmeisenDataHolder.IsHealer) { CombatUtils.TargetTargetToHeal(Me, AmeisenDataHolder.ActiveWoWObjects); Me?.Update(); Target?.Update(); } else { // clear all friendly targets AmeisenCore.ClearTargetIfItIsFriendly(); if (Me.TargetGuid == 0 || CombatUtils.IsUnitValid(Target)) { CombatUtils.AssistParty(Me, AmeisenDataHolder.ActiveWoWObjects, AmeisenDataHolder.Partymembers); // clear all friendly targets again AmeisenCore.ClearTargetIfItIsFriendly(); Me?.Update(); Target?.Update(); } if (Me.TargetGuid == 0 || CombatUtils.IsUnitValid(Target)) { CombatUtils.TargetNearestEnemy(); Me?.Update(); Target?.Update(); if (Me.TargetGuid == 0 || CombatUtils.IsUnitValid(Target)) { // by now we should have a target return; } } } // Attack target if we are no healer if (!Me.InCombat && !AmeisenDataHolder.IsHealer) { CombatUtils.AttackTarget(); } // Cast the Spell selected for this Iteration if (CombatPackage.SpellStrategy != null) { Me?.Update(); Target?.Update(); Spell spellToUse = CombatPackage.SpellStrategy.DoRoutine(Me, Target, Pet); if (spellToUse != null) { // try to get in line of sight while (!IsInLineOfSight(Me, Target)) { HandleMovement(Target.pos); Thread.Sleep(500); } CombatUtils.CastSpellByName(Me, Target, spellToUse.Name, false, true); } else { Thread.Sleep(200); } } // Handle Movement stuff if (CombatPackage.MovementStrategy != null) { Me?.Update(); Target?.Update(); HandleMovement(CombatPackage.MovementStrategy.CalculatePosition(Me, Target)); } }
public Spell DoRoutine(Me me, Unit target, Unit pet) { if (CombatUtils.IsUnitValid(me) && CombatUtils.IsUnitValid(target)) { return null; } List<string> myAuras = AmeisenCore.GetAuras(LuaUnit.player); List<string> targetAuras = AmeisenCore.GetAuras(LuaUnit.target); Spell spellToUse = null; double targetDistance = Utils.GetDistance(me.pos, target.pos); // our Seal if (IsSealOfVengeanceKnown) { if (!myAuras.Contains("seal of vengeance")) { spellToUse = TryUseSpell("Seal of Vengeance", me); if (spellToUse != null) { return spellToUse; } } } // our Buff if (IsBlessingOfMightKnown) { if (!myAuras.Contains("blessing of might")) { spellToUse = TryUseSpell("Blessing of Might", me); if (spellToUse != null) { return spellToUse; } } } // if we go under 70% Mana, use Divine Plea if (IsDivinePleaKnown && me.HealthPercentage < 70) { spellToUse = TryUseSpell("Divine Plea", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Divine Plea", false, true); // doesn't trigger GCD } } // if we go under 10% health, use our insta-full-heal if (IsLayOnHandsKnown && me.HealthPercentage < 10 && !myAuras.Contains("forbearance")) { spellToUse = TryUseSpell("Lay on Hands", me); if (spellToUse != null) { return spellToUse; } } // if we go under 70% health, use Flash Heal if (IsFlashHealKnown && me.HealthPercentage < 70) { spellToUse = TryUseSpell("Flash Heal", me); if (spellToUse != null) { return spellToUse; } } // if we go under 40% health, use Holy Light if (IsHolyLightKnown && me.HealthPercentage < 40) { spellToUse = TryUseSpell("Holy Light", me); if (spellToUse != null) { return spellToUse; } } // Avenging Wrath cooldown if (IsAvengingWrathKnown) { spellToUse = TryUseSpell("Avenging Wrath", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Avenging Wrath", false, true); // doesn't trigger GCD } } // stun if (targetDistance < 5) { // try to Fear it away lmao if (IsHammerOfJusticeKnown) { spellToUse = TryUseSpell("Hammer of Justice", me); if (spellToUse != null) { return spellToUse; } } } // main spell rotation if (targetDistance < 30) { // apply our Judgement if (IsJudgementOfWisdomKnown) { spellToUse = TryUseSpell("Judgement of Wisdom", me); if (spellToUse != null) { return spellToUse; } } else if (IsJudgementOfLightKnown) { spellToUse = TryUseSpell("Judgement of Light", me); if (spellToUse != null) { return spellToUse; } } // if target is over 20% use Hammer of Wrath if (target.HealthPercentage < 20) { if (IsHammerOfWrathKnown) { spellToUse = TryUseSpell("Hammer of Wrath", me); if (spellToUse != null) { return spellToUse; } } } // use Crusader Strike if (IsCrusaderStrikeKnown) { spellToUse = TryUseSpell("Crusader Strike", me); if (spellToUse != null) { return spellToUse; } } // use Divine Storm if (IsDivineStormKnown) { spellToUse = TryUseSpell("Divine Storm", me); if (spellToUse != null) { return spellToUse; } } // use Consecration if (IsConsecrationKnown) { spellToUse = TryUseSpell("Consecration", me); if (spellToUse != null) { return spellToUse; } } // use Exorcism if (IsExorcismKnown) { spellToUse = TryUseSpell("Exorcism", me); if (spellToUse != null) { return spellToUse; } } } return null; }
public Spell DoRoutine(Me me, Unit target, Unit pet) { if (CombatUtils.IsUnitValid(me) && CombatUtils.IsUnitValid(target)) { return(null); } List <string> myAuras = AmeisenCore.GetAuras(LuaUnit.player); List <string> targetAuras = AmeisenCore.GetAuras(LuaUnit.target); Spell spellToUse = null; double targetDistance = Utils.GetDistance(me.pos, target.pos); // our Buff if (IsPowerwordFortitudeKnown && !targetAuras.Contains("power word: fortitude")) { spellToUse = TryUseSpell("Power Word: Fortitude", me); if (spellToUse != null) { return(spellToUse); } } // our defensive buff if (IsInnerFireKnown && !myAuras.Contains("inner fire")) { spellToUse = TryUseSpell("Inner Fire", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Inner Fire", true); } // only cast on me } // Shadowfiend mana regen if (IsShadowfiendKnown && me.ManaPercentage < 20) { spellToUse = TryUseSpell("Shadowfiend", me); if (spellToUse != null) { CombatUtils.TargetNearestEnemy(); // use shadowfiend on something around us CombatUtils.CastSpellByName(me, target, "Shadowfiend", false); } } // main spell rotation if (targetDistance < 38) { // Renew HOT if (IsRenewKnown && target.HealthPercentage < 80 && !targetAuras.Contains("renew")) { spellToUse = TryUseSpell("Renew", me); if (spellToUse != null) { return(spellToUse); } } // Binding Heal if me is low too, otherwise Flash Heal until Serendipity is stacked, then use Greater Heal if (target.HealthPercentage < 70) { if (IsBindingHealKnown && me.HealthPercentage < 80) { spellToUse = TryUseSpell("Binding Heal", me); if (spellToUse != null) { return(spellToUse); } } else { if (IsGreaterHealKnown && myAuras.Contains("serendipity")) { spellToUse = TryUseSpell("Greater Heal", me); if (spellToUse != null) { return(spellToUse); } } else if (IsFlashHealKnown) { spellToUse = TryUseSpell("Flash Heal", me); if (spellToUse != null) { return(spellToUse); } } } } } return(null); }
public Spell DoRoutine(Me me, Unit target, Unit pet) { if (CombatUtils.IsUnitValid(me) && CombatUtils.IsUnitValid(target)) { return(null); } List <string> myAuras = AmeisenCore.GetAuras(LuaUnit.player); List <string> targetAuras = AmeisenCore.GetAuras(LuaUnit.target); Spell spellToUse = null; double targetDistance = Utils.GetDistance(me.pos, target.pos); // if we are low on HP try to use Enraged Regeneration /*if (me.HealthPercentage < 40) * { * if (IsEnragedRegenerationKnown) * { * spellToUse = TryUseSpell("Enraged Regeneration", me); * if (spellToUse != null) { return spellToUse; } * } * }*/ // hold Berserker Rage on cooldown if (IsBerserkerRageKnown && !IsInMainCombo) { spellToUse = TryUseSpell("Berserker Rage", me); if (spellToUse != null) { return(spellToUse); } } // main spell rotation if (targetDistance < 3) { // if we got enough rage and nothing better to do, use Heroic Strike if (me.Rage > 50 && target.HealthPercentage > 15) { // Heroic Strike wont't interrupt main-combo if (IsHeroicStrikeKnown) { CombatUtils.CastSpellByName(me, target, "Heroic Strike", false, false); // don't wait on cooldown } } // if we are in our main-combo, use the second part of it, whirlwind if (IsWhirlwindKnown && IsInMainCombo && IsBerserkerStanceKnown) { // dont't interrupt main-combo spellToUse = TryUseSpell("Whirlwind", me); if (spellToUse != null) { IsInMainCombo = false; } // normally whirlwind has 10s cooldown, bloodthirst only 5 so use it if we are still in that 10s else if (IsBloodthirstKnown) { spellToUse = TryUseSpell("Bloodthirst", me); } return(spellToUse); } else if (!IsBerserkerStanceKnown) { IsInMainCombo = false; } // use hamstring so our enemy can't escape if (IsHamstringKnown && !targetAuras.Contains("hamstring")) { spellToUse = TryUseSpell("Hamstring", me); if (spellToUse != null) { return(spellToUse); } } // when da slam procs, use it if (IsSlamKnown && myAuras.Contains("slam!")) { spellToUse = TryUseSpell("Slam", me); if (spellToUse != null) { return(spellToUse); } } // start our main-combo if (IsBloodthirstKnown) { spellToUse = TryUseSpell("Bloodthirst", me); if (spellToUse != null) { IsInMainCombo = true; return(spellToUse); } } // hold Recklessness on cooldown if (IsRecklessnessKnown && !IsInMainCombo) { spellToUse = TryUseSpell("Recklessness", me); if (spellToUse != null) { return(spellToUse); } } // hold Death Wish on cooldown if (IsDeathWishKnown && !IsInMainCombo) { spellToUse = TryUseSpell("Death Wish", me); if (spellToUse != null) { return(spellToUse); } } // hold Battleshout on cooldown if (IsBattleShoutKnown && !IsInMainCombo && !myAuras.Contains("battle shout")) { spellToUse = TryUseSpell("Battle Shout", me); if (spellToUse != null) { return(spellToUse); } } if (me.Rage > 50) { if (IsExecuteKnown && target.HealthPercentage < 15 && !IsInMainCombo) { spellToUse = TryUseSpell("Execute", me); if (spellToUse != null) { return(spellToUse); } } } } else if (targetDistance > 8 && targetDistance < 25) { // try to charge to our target if (IsInterceptKnown) { spellToUse = TryUseSpell("Intercept", me); if (spellToUse != null) { return(spellToUse); } } } else if (targetDistance < 30) { // if there is really nothing other to do, throw something if (IsHeroicThrowKnown) { spellToUse = TryUseSpell("Heroic Throw", me); if (spellToUse != null) { return(spellToUse); } } } return(null); }
public Spell DoRoutine(Me me, Unit target, Unit pet) { if (CombatUtils.IsUnitValid(me) && CombatUtils.IsUnitValid(target)) { return(null); } List <string> myAuras = AmeisenCore.GetAuras(LuaUnit.player); List <string> targetAuras = AmeisenCore.GetAuras(LuaUnit.target); Spell spellToUse = null; double targetDistance = Utils.GetDistance(me.pos, target.pos); // our Buff if (IsPowerwordFortitudeKnown && !myAuras.Contains("power word: fortitude")) { spellToUse = TryUseSpell("Power Word: Fortitude", me); if (spellToUse != null) { return(spellToUse); } } // Shadowform if (IsShadowformKnown && !myAuras.Contains("shadowform")) { spellToUse = TryUseSpell("Shadowform", me); if (spellToUse != null) { return(spellToUse); } } // our Vampiric Embrace if (IsVampiricEmbraceKnown && !myAuras.Contains("vampiric embrace")) { spellToUse = TryUseSpell("Vampiric Embrace", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Vampiric Embrace", true); } // only cast on me } // Heal oruself using Flash Heal if (IsFlashHealKnown && me.HealthPercentage < 50) { spellToUse = TryUseSpell("Vampiric Embrace", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Vampiric Embrace", true); } // only cast on me } // main spell rotation if (targetDistance < 28) { // Vampiric Touch if (IsVampiricTouchKnown && !targetAuras.Contains("vampiric touch")) { spellToUse = TryUseSpell("Vampiric Touch", me); if (spellToUse != null) { return(spellToUse); } } // Devouring Plague if (IsDevouringPlagueKnown && !targetAuras.Contains("devouring plague")) { spellToUse = TryUseSpell("Scorch", me); if (spellToUse != null) { return(spellToUse); } } // Shadow Word: Pain if (IsShadowWordPainKnown && !targetAuras.Contains("shadow word: pain")) { spellToUse = TryUseSpell("Shadow Word: Pain", me); if (spellToUse != null) { return(spellToUse); } } // Mind Blast if (IsMindBlastKnown && !targetAuras.Contains("mind trauma")) { spellToUse = TryUseSpell("Mind Blast", me); if (spellToUse != null) { return(spellToUse); } } // Spam Mind Flay if (IsMindFlayKnown) { spellToUse = TryUseSpell("Mind Flay", me); if (spellToUse != null) { return(spellToUse); } } } return(null); }
public Spell DoRoutine(Me me, Unit target, Unit pet) { if (CombatUtils.IsUnitValid(me) && CombatUtils.IsUnitValid(target)) { return(null); } List <string> myAuras = AmeisenCore.GetAuras(LuaUnit.player); List <string> targetAuras = AmeisenCore.GetAuras(LuaUnit.target); Spell spellToUse = null; double targetDistance = Utils.GetDistance(me.pos, target.pos); // our Buff if (IsArcaneIntellectKnown && !myAuras.Contains("arcane intellect")) { spellToUse = TryUseSpell("Arcane Intellect", me); if (spellToUse != null) { return(spellToUse); } } // our Mage Armor if (IsMageArmorKnown && me.ManaPercentage > 10 && !myAuras.Contains("mage armor")) { spellToUse = TryUseSpell("Mage Armor", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Mage Armor", true); } // only cast on me } // our Molten Armor if (IsMoltenArmorKnown && me.ManaPercentage < 10 && !myAuras.Contains("molten armor")) { spellToUse = TryUseSpell("Molten Armor", me); if (spellToUse != null) { CombatUtils.CastSpellByName(me, target, "Molten Armor", true); } // only cast on me } // Evocation mana regen if (IsEvocationKnown && me.ManaPercentage < 20) { spellToUse = TryUseSpell("Evocation", me); if (spellToUse != null) { return(spellToUse); } } // Mirror Image CD if (IsMirrorImageKnown) { spellToUse = TryUseSpell("Mirror Image", me); if (spellToUse != null) { return(spellToUse); } } // Mana Shield if (IsManaShieldKnown && me.HealthPercentage < 70) { spellToUse = TryUseSpell("Mana Shield", me); if (spellToUse != null) { return(spellToUse); } } // Ice Block if we are about to die if (IsIceBlockKnown && me.HealthPercentage < 20) { spellToUse = TryUseSpell("Ice Block", me); if (spellToUse != null) { return(spellToUse); } } // main spell rotation if (targetDistance < 28) { // Hot Streak proc if (IsPyroblastKnown && myAuras.Contains("hot streak")) { spellToUse = TryUseSpell("Pyroblast", me); if (spellToUse != null) { return(spellToUse); } } // Scorch crit debuff if (IsScorchKnown && !targetAuras.Contains("improved scorch")) { spellToUse = TryUseSpell("Scorch", me); if (spellToUse != null) { return(spellToUse); } } // Living Bomb if (IsLivingBombKnown && !targetAuras.Contains("living bomb")) { spellToUse = TryUseSpell("Living Bomb", me); if (spellToUse != null) { return(spellToUse); } } // Spam Forstfire Bolt if (IsForstfireBoltKnown) { spellToUse = TryUseSpell("Frostfire Bolt", me); if (spellToUse != null) { return(spellToUse); } } // Spam Fireball if (IsFireballKnown) { spellToUse = TryUseSpell("Fireball", me); if (spellToUse != null) { return(spellToUse); } } } return(null); }