示例#1
0
        private DeathKnightRunesState GetAvailableRunes()
        {
            uint runeCountTotal = (uint)me.Memory.ReadInt32(IntPtr.Zero + Offset.RuneCount);

            DeathKnightRunesState state = new DeathKnightRunesState();

            state.bloodReady += (runeCountTotal & (1 << (int)DeathKnightRune.Blood1)) != 0 ? 1 : 0;
            state.bloodReady += (runeCountTotal & (1 << (int)DeathKnightRune.Blood2)) != 0 ? 1 : 0;

            state.frostReady += (runeCountTotal & (1 << (int)DeathKnightRune.Frost1)) != 0 ? 1 : 0;
            state.frostReady += (runeCountTotal & (1 << (int)DeathKnightRune.Frost2)) != 0 ? 1 : 0;

            state.unholyReady += (runeCountTotal & (1 << (int)DeathKnightRune.Unholy1)) != 0 ? 1 : 0;
            state.unholyReady += (runeCountTotal & (1 << (int)DeathKnightRune.Unholy2)) != 0 ? 1 : 0;

            return(state);
        }
示例#2
0
        public override void Tick()
        {
            Thread.Sleep(1);

            if (!me.GetObjectMgrAndPlayer())
            {
                return;
            }

            Looting();

            if (me.IsOnCooldown("Death Coil"))             /* global cooldown check */
            {
                return;
            }

            if (!me.Player.IsMounted() &&
                !me.IsOnCooldown("Horn of Winter") &&
                !me.HasAura(me.Player, "Horn of Winter"))
            {
                me.CastSpell("Horn of Winter");
                return;
            }


            Int64 targetGUID = me.GetTargetGUID();

            if (targetGUID == 0)
            {
                return;
            }

            GameObject target = me.ObjectManager.FirstOrDefault(gameObj => gameObj.GUID == targetGUID);

            if (target == null || target.Health == 0 ||
                ci.remoteControl.CGUnit_C__UnitReaction(me.Player.GetAddress(), target.GetAddress()) >
                UnitReaction.Neutral)
            {
                return;
            }

            bool isTargetInMelee = me.Player.GetDistance(target) < DeathKnightConstants.MeleeRange;

            Vector3 targetCoords = target.Coordinates;

            if (!isTargetInMelee)
            {
                if (!me.Player.IsMoving() && !me.Player.IsMounted())
                {
                    ci.remoteControl.CGPlayer_C__ClickToMove(me.Player.GetAddress(), ClickToMoveType.AutoAttack,
                                                             ref targetGUID, ref targetCoords, 1f);
                    return;
                }
            }
            else
            {
                ci.remoteControl.CGPlayer_C__ClickToMoveStop(me.Player.GetAddress());
                float angle = me.Player.Coordinates.AngleBetween(targetCoords);
                ci.remoteControl.CGPlayer_C__ClickToMove(me.Player.GetAddress(), ClickToMoveType.Face, ref targetGUID,
                                                         ref targetCoords, angle);
            }

            bool isTargetBloodPlagueUp = me.HasAura(target, "Blood Plague", me.Player);
            bool isTargetFrostFeverUp  = me.HasAura(target, "Frost Fever", me.Player);

            Console.WriteLine($"bp: {isTargetBloodPlagueUp}");
            Console.WriteLine($"ff: {isTargetFrostFeverUp}");

            DeathKnightRunesState runesState = GetAvailableRunes();

            Console.WriteLine($"blood r: {runesState.bloodReady}");
            Console.WriteLine($"frost r: {runesState.frostReady}");
            Console.WriteLine($"unholy r: {runesState.unholyReady}");

            if (isTargetInMelee && !isTargetBloodPlagueUp && runesState.unholyReady > 0)
            {
                me.CastSpell("Plague Strike");
                Console.WriteLine("PS");
                return;
            }

            if (!isTargetFrostFeverUp && runesState.frostReady > 0)
            {
                me.CastSpell("Icy Touch");
                Console.WriteLine("IT");
                return;
            }

            /* check for Pestilence possibility */
            if (isTargetInMelee && (isTargetBloodPlagueUp && isTargetFrostFeverUp) && runesState.bloodReady > 0)
            {
                IEnumerable <GameObject> pestilenceEnemies = me.ObjectManager.Where(gameObj =>
                                                                                    gameObj.Type == GameObjectType.Unit &&
                                                                                    gameObj.Health > 0 && /* alive units */
                                                                                    gameObj.GUID != targetGUID && /* exclude target unit */
                                                                                    me.Player.GetDistance(gameObj) < DeathKnightConstants.PestilenceRange && /* unit in range */
                                                                                    ci.remoteControl.CGUnit_C__UnitReaction(me.Player.GetAddress(), gameObj.GetAddress()) <=
                                                                                    UnitReaction.Neutral && /* unit attackable */
                                                                                    !me.HasAura(gameObj, "Blood Plague", me.Player) && /* unit doesn't have diseases */
                                                                                    !me.HasAura(gameObj, "Frost Fever", me.Player));

                if (pestilenceEnemies.Any())
                {
                    me.CastSpell("Pestilence");
                    Console.WriteLine("Pesti");
                    return;
                }
            }

            if (isTargetInMelee &&
                isTargetBloodPlagueUp &&
                isTargetFrostFeverUp &&
                runesState.unholyReady > 0 &&
                runesState.frostReady > 0)
            {
                if (me.Player.HealthPct >= 80)
                {
                    me.CastSpell("Scourge Strike");
                    Console.WriteLine("SS");
                    return;
                }
                else
                {
                    me.CastSpell("Death Strike");
                    Console.WriteLine("DS");
                    return;
                }
            }

            Int32 runicPower = me.Player.RunicPower;

            if (runicPower >= 40)
            {
                me.CastSpell("Death Coil");
                Console.WriteLine("DC");
                return;
            }

            /* use Blood Strike only when having 2 Blood Runes ready, to have always Pestilence ready to use */
            if (isTargetInMelee && isTargetBloodPlagueUp && isTargetFrostFeverUp &&
                runesState.bloodReady == 2)
            {
                me.CastSpell("Blood Strike");
                return;
            }
        }
示例#3
0
            public override void Tick()
            {
                Thread.Sleep(ProdMbox.ClientSolutionSleepMs);
                me.RefreshLastHardwareEvent();

                if (me.CastPrioritySpell())
                {
                    return;
                }

                if (!me.GetObjectMgrAndPlayer())
                {
                    return;
                }

                if (!mbox.slavesAI)
                {
                    return;
                }

                LootAround(me);

                if (me.IsOnCooldown("Death Coil"))                 /* global cooldown check */
                {
                    return;
                }

                if (mbox.buffingAI)
                {
                    BuffUp(me, mbox, PartyBuffs, SelfBuffs, null);
                }

                Int64[]    targetGuids = GetRaidTargetGuids(me);
                GameObject target      = SelectRaidTargetByPriority(targetGuids, AttackPriorities, me);

                if (target == null)
                {
                    return;
                }

                if (me.GetTargetGUID() != target.GUID)
                {
                    me.ControlInterface.remoteControl.SelectUnit(target.GUID);
                }

                if (me.Player.GetDistance(target) > MeleeAttackRange)
                {
                    return;
                }
                else
                {
                    FaceTowards(me, target);
                }

                if (!me.Player.IsCastingOrChanneling())
                {
                    if (!me.Player.IsAutoAttacking())
                    {
                        me.ExecLua("AttackTarget();PetAttack()");
                    }

                    DeathKnightRunesState runesState = GetAvailableRunes();
                    bool isTargetBloodPlagueUp       = me.HasAuraEx(target, "Blood Plague", me.Player);
                    bool isTargetFrostFeverUp        = me.HasAuraEx(target, "Frost Fever", me.Player);

                    if (target.Health > ProdMbox.BigHealthThreshold)
                    {
                        if (!isTargetBloodPlagueUp && runesState.unholyReady > 0)
                        {
                            me.CastSpell("Plague Strike");
                            return;
                        }

                        if (!isTargetFrostFeverUp && runesState.frostReady > 0)
                        {
                            me.CastSpell("Icy Touch");
                            return;
                        }

                        /* check for Pestilence possibility */
                        if (isTargetBloodPlagueUp && isTargetFrostFeverUp && runesState.bloodReady > 0)
                        {
                            IEnumerable <GameObject> pestilenceEnemies = me.ObjectManager.Where(gameObj =>
                                                                                                gameObj.Type == GameObjectType.Unit &&
                                                                                                gameObj.Health > 0 && /* alive units */
                                                                                                gameObj.GUID != target.GUID && /* exclude target unit */
                                                                                                me.Player.GetDistance(gameObj) < DeathKnightConstants.PestilenceRange && /* unit in range */
                                                                                                me.ControlInterface.remoteControl.CGUnit_C__UnitReaction(me.Player.GetAddress(), gameObj.GetAddress()) <=
                                                                                                UnitReaction.Neutral && /* unit attackable */
                                                                                                !me.HasAuraEx(gameObj, "Blood Plague", me.Player) && /* unit doesn't have diseases */
                                                                                                !me.HasAuraEx(gameObj, "Frost Fever", me.Player));

                            if (pestilenceEnemies.Any())
                            {
                                me.CastSpell("Pestilence");
                                return;
                            }
                        }

                        if (isTargetBloodPlagueUp &&
                            isTargetFrostFeverUp &&
                            runesState.unholyReady > 0 &&
                            runesState.frostReady > 0)
                        {
                            if (me.Player.HealthPct >= 80)
                            {
                                me.CastSpell("Scourge Strike");
                                return;
                            }
                            else
                            {
                                me.CastSpell("Death Strike");
                                return;
                            }
                        }

                        Int32 runicPower = me.Player.RunicPower;
                        if (runicPower >= 40)
                        {
                            me.CastSpell("Death Coil");
                            return;
                        }

                        /* use Blood Strike only when having 2 Blood Runes ready, to have always Pestilence ready to use */
                        if (isTargetBloodPlagueUp && isTargetFrostFeverUp &&
                            runesState.bloodReady == 2)
                        {
                            me.CastSpell("Blood Strike");
                            return;
                        }
                    }
                    else
                    {
                        if (!isTargetBloodPlagueUp && runesState.unholyReady > 0)
                        {
                            me.CastSpell("Plague Strike");
                            return;
                        }

                        if (isTargetBloodPlagueUp &&
                            isTargetFrostFeverUp &&
                            runesState.unholyReady > 0 &&
                            runesState.frostReady > 0)
                        {
                            if (me.Player.HealthPct >= 80)
                            {
                                me.CastSpell("Scourge Strike");
                                return;
                            }
                            else
                            {
                                me.CastSpell("Death Strike");
                                return;
                            }
                        }

                        Int32 runicPower = me.Player.RunicPower;
                        if (runicPower >= 40)
                        {
                            me.CastSpell("Death Coil");
                            return;
                        }

                        if (isTargetBloodPlagueUp && isTargetFrostFeverUp &&
                            runesState.bloodReady > 0)
                        {
                            me.CastSpell("Blood Strike");
                            return;
                        }
                    }
                }
            }