public override void Tick() { Thread.Sleep(ProdMboxV2.ClientSolutionSleepMs); me.RefreshLastHardwareEvent(); if (me.CastPrioritySpell()) { return; } if (!me.GetObjectMgrAndPlayer()) { return; } if (!mbox.slavesAI) { return; } if (me.Player.IsMounted()) { return; } LootAround(me); if (mbox.buffingAI && !me.Player.IsInCombat() && !me.HasAura(me.Player, "Drink")) { BuffUp(me, mbox, PartyBuffs, SelfBuffs); } Int64[] targetGuids = GetRaidTargetGuids(me); GameObject target = mbox.SelectRaidTargetByPriority(targetGuids, AttackPriorities, me); if (target == null) { return; } if (me.GetTargetGUID() != target.GUID) { me.ControlInterface.remoteControl.SelectUnit(target.GUID); } if (me.Player.GetDistance(target) > RangedAttackRange) { return; } else { FaceTowards(me, target); } if (!me.Player.IsCastingOrChanneling()) { var shouldMF = target.Health > (me.Player.MaxHealth * 2.5) && !me.HasAura(target, "Moonfire", me.Player); if (shouldMF) { me.CastSpell("Moonfire"); } else { var shouldIS = target.Health > (me.Player.MaxHealth * 2.5) && !me.HasAura(target, "Insect Swarm", me.Player); if (shouldIS) { me.CastSpell("Insect Swarm"); } else { if (me.HasAura(me.Player, EclipseLunar, me.Player)) { me.CastSpell("Starfire"); } else { me.CastSpell("Wrath"); } } } } }
public override void Tick() { Thread.Sleep(ProdMboxV2.ClientSolutionSleepMs); me.RefreshLastHardwareEvent(); if (me.CastPrioritySpell()) { return; } if (!me.GetObjectMgrAndPlayer()) { return; } if (!mbox.slavesAI) { return; } if (me.Player.IsMounted()) { return; } LootAround(me); if (mbox.buffingAI && !me.Player.IsInCombat() && !me.HasAura(me.Player, "Drink")) { BuffUp(me, mbox, PartyBuffs, SelfBuffs); CheckShamanEnchant(); } Int64[] targetGuids = GetRaidTargetGuids(me); GameObject target = mbox.SelectRaidTargetByPriority(targetGuids, AttackPriorities, me); if (target == null) { return; } if (me.GetTargetGUID() != target.GUID) { me.ControlInterface.remoteControl.SelectUnit(target.GUID); } if (me.Player.GetDistance(target) > RangedAttackRange) { return; } else { FaceTowards(me, target); } if (!me.Player.IsCastingOrChanneling()) { /* no simple/complex rotation separation */ bool isFSUp = me.HasAura(target, "Flame Shock", me.Player); if (isFSUp) { if (!me.IsOnCooldown("Lava Burst")) { me.CastSpell("Lava Burst"); } else { if (!me.IsOnCooldown("Chain Lightning")) { me.CastSpell("Chain Lightning"); } else { me.CastSpell("Lightning Bolt"); } } } else { if (!me.IsOnCooldown("Flame Shock")) { me.CastSpell("Flame Shock"); } else { me.CastSpell("Lightning Bolt"); } } } }
public override void Tick() { Thread.Sleep(ProdMboxV2.ClientSolutionSleepMs); me.RefreshLastHardwareEvent(); if (me.CastPrioritySpell()) { return; } if (!me.GetObjectMgrAndPlayer()) { return; } if (!mbox.slavesAI) { return; } if (me.Player.IsMounted()) { return; } LootAround(me); if (mbox.buffingAI && !me.Player.IsInCombat() && !me.HasAura(me.Player, "Drink")) { BuffUp(me, mbox, PartyBuffs, SelfBuffs); CheckPetActive(); } Int64[] targetGuids = GetRaidTargetGuids(me); GameObject target = mbox.SelectRaidTargetByPriority(targetGuids, AttackPriorities, me); if (target == null) { return; } if (me.GetTargetGUID() != target.GUID) { me.ControlInterface.remoteControl.SelectUnit(target.GUID); } if (me.Player.GetDistance(target) > RangedAttackRange) { return; } else if (me.Player.GetDistance(target) <= MeleeAttackRange) { me.CastSpell("Disengage"); } else { FaceTowards(me, target); } // attack with pet, if target is in tank's range [hunter pet is melee] var tank = mbox.me.Player; if (tank.GetDistance(target) <= MeleeAttackRange) { me.ExecLua("PetAttack()"); } if (!me.Player.IsCastingOrChanneling()) { if (!me.Player.IsAutoAttacking()) { me.ExecLua("AttackTarget()"); } if (me.Player.ManaPct < 15) { if (!me.HasAura(me.Player, "Aspect of the Viper", null) && !me.HasAura(me.Player, "Aspect of the Pack", null)) { me.CastSpell("Aspect of the Viper"); } } if (me.Player.ManaPct > 55) { if (!me.HasAura(me.Player, "Aspect of the Dragonhawk", null) && !me.HasAura(me.Player, "Aspect of the Pack", null)) { me.CastSpell("Aspect of the Dragonhawk"); } } var killShot = "Kill Shot"; if (target.HealthPct < 20 && !me.IsOnCooldown(killShot)) { me.CastSpell(killShot); } if (target.HealthPct > 80 && !me.HasAura(target, "Hunter's Mark", me.Player)) { me.CastSpell("Hunter's Mark"); } else { if (target.Health > (me.Player.MaxHealth * 1.5) && !me.HasAura(target, "Serpent Sting", me.Player)) { me.CastSpell("Serpent Sting"); } else { var chimShot = "Chimera Shot"; var aimedShot = "Aimed Shot"; var arcShot = "Arcane Shot"; if (!me.IsOnCooldown(chimShot)) { me.CastSpell(chimShot); } else if (!me.IsOnCooldown(aimedShot)) { me.CastSpell(aimedShot); } else if (!me.IsOnCooldown(arcShot)) { me.CastSpell(arcShot); } else if (!me.IsOnCooldown("Kill Command")) { me.CastSpell("Kill Command"); } else { me.CastSpell("Steady Shot"); } } } } }
public override void Tick() { Thread.Sleep(ProdMboxV2.ClientSolutionSleepMs); me.RefreshLastHardwareEvent(); if (me.CastPrioritySpell()) { return; } if (!me.GetObjectMgrAndPlayer()) { return; } if (!mbox.slavesAI) { return; } if (me.Player.IsMounted()) { return; } LootAround(me); if (mbox.buffingAI && !me.Player.IsInCombat() && !me.HasAura(me.Player, "Drink")) { BuffUp(me, mbox, PartyBuffs, SelfBuffs); } LowHealthPlayers.Clear(); MidHealthPlayers.Clear(); SteadyHealthPlayers.Clear(); foreach (Client client in mbox.clients) { if (!client.GetObjectMgrAndPlayer()) { continue; } GameObject player = client.Player; if (player.Health > 0) { if (client.Player.GetDistance(me.Player) > HealRange) { continue; } /* assess team health */ if (player.HealthPct < LowHealthPctThreshold) { LowHealthPlayers.Add(player); } else if (player.HealthPct < MidHealthPctThreshold) { MidHealthPlayers.Add(player); } else { SteadyHealthPlayers.Add(player); } } } if (!me.Player.IsCastingOrChanneling()) { var playersToHeal = LowHealthPlayers.Concat(MidHealthPlayers).ToList(); if (playersToHeal.Any()) { if (playersToHeal.Count > 2) { if (!me.IsOnCooldown("Inner Focus")) { me.CastSpell("Inner Focus"); } me.CastSpell("Prayer of Healing"); } if (!ShieldPlayers(playersToHeal)) { HealLowTarget(GetLowestHealthPlayer(playersToHeal)); } } } /* mana mgmt */ if (me.Player.ManaPct < 45 && me.Player.IsInCombat()) { if (!me.IsOnCooldown("Shadowfiend")) { me.CastSpell("Shadowfiend"); } else if (me.Player.ManaPct < 25) { /* command Druid to innervate me, if available */ var druidClient = mbox.clients.FirstOrDefault(client => client.Player.UnitClass == UnitClass.Druid); if (druidClient != null) { if (druidClient.Player.GetDistance(me.Player) <= HealRange && druidClient.Player.Health > 0 && !druidClient.IsOnCooldown("Innervate")) { druidClient.EnqueuePrioritySpellCast( new SpellCast { Coordinates = null, SpellName = "Innervate", TargetGUID = me.Player.GUID } ); Console.WriteLine("Commanding Druid to Innervate!"); return; } } } } Int64[] targetGuids = GetRaidTargetGuids(me); GameObject target = mbox.SelectRaidTargetByPriority(targetGuids, AttackPriorities, me); if (target == null) { return; } if (me.GetTargetGUID() != target.GUID) { me.ControlInterface.remoteControl.SelectUnit(target.GUID); } if (me.Player.GetDistance(target) > RangedAttackRange) { return; } else { FaceTowards(me, target); } me.ExecLua("PetAttack()"); if (LowHealthPlayers.Any() || MidHealthPlayers.Any() || me.Player.ManaPct < 90) { return; } if (!me.Player.IsCastingOrChanneling()) { me.CastSpell("Smite"); } }