Exemplo n.º 1
0
            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");
                            }
                        }
                    }
                }
            }
Exemplo n.º 2
0
            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");
                        }
                    }
                }
            }
Exemplo n.º 3
0
            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");
                            }
                        }
                    }
                }
            }
Exemplo n.º 4
0
            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");
                }
            }