コード例 #1
0
        protected async Task Fight()
        {
            if (playerReader.Bits.HasPet && !playerReader.PetHasTarget)
            {
                await input.TapPetAttack("");
            }

            foreach (var item in Keys)
            {
                if (!playerReader.HasTarget)
                {
                    logger.LogInformation($"{GetType().Name}: Lost Target!");
                    await stopMoving.Stop();

                    return;
                }
                else
                {
                    lastKnwonPlayerDirection = playerReader.Direction;
                    lastKnownMinDistance     = playerReader.MinRange;
                    lastKnownMaxDistance     = playerReader.MaxRange;
                }

                if (await castingHandler.CastIfReady(item, item.DelayBeforeCast))
                {
                    if (item.Name == classConfiguration.Approach.Name ||
                        item.Name == classConfiguration.AutoAttack.Name)
                    {
                        await castingHandler.ReactToLastUIErrorMessage($"{GetType().Name}: Fight {item.Name}");
                    }

                    break;
                }
            }
        }
コード例 #2
0
        protected async Task WaitForWithinMeleeRange(KeyAction item, bool lastCastSuccess)
        {
            await stopMoving.Stop();

            await wait.Update(1);

            var start           = DateTime.Now;
            var lastKnownHealth = playerReader.HealthCurrent;
            int maxWaitTime     = 10;

            Log($"Waiting for the target to reach melee range - max {maxWaitTime}s");

            while (playerReader.HasTarget && !playerReader.IsInMeleeRange && (DateTime.Now - start).TotalSeconds < maxWaitTime)
            {
                if (playerReader.HealthCurrent < lastKnownHealth)
                {
                    Log("Got damage. Stop waiting for melee range.");
                    break;
                }

                if (playerReader.IsTargetCasting)
                {
                    Log("Target started casting. Stop waiting for melee range.");
                    break;
                }

                if (lastCastSuccess && addonReader.UsableAction.Is(item))
                {
                    Log($"While waiting, repeat current action: {item.Name}");
                    lastCastSuccess = await castingHandler.CastIfReady(item, item.DelayBeforeCast);

                    Log($"Repeat current action: {lastCastSuccess}");
                }

                await wait.Update(1);
            }
        }
コード例 #3
0
        public override async Task PerformAction()
        {
            if (Keys.Any(k => k.StopBeforeCast))
            {
                await stopMoving.Stop();

                await wait.Update(1);

                if (playerReader.Bits.IsMounted)
                {
                    await input.TapDismount();

                    await wait.Update(1);

                    //if (!await Wait(1000, () => playerReader.PlayerBitValues.PlayerInCombat)) return; // vanilla after dismout GCD
                }
            }

            await AsyncExt.Loop(Keys, async (KeyAction key) =>
            {
                var pressed = await castingHandler.CastIfReady(key, key.DelayBeforeCast);
                key.ResetCooldown();
                key.SetClicked();
            });

            bool wasDrinkingOrEating = playerReader.Buffs.Drinking || playerReader.Buffs.Eating;

            logger.LogInformation($"Waiting for {Name}");

            DateTime startTime = DateTime.Now;

            while ((playerReader.Buffs.Drinking || playerReader.Buffs.Eating || playerReader.IsCasting) && !playerReader.Bits.PlayerInCombat)
            {
                await wait.Update(1);

                if (playerReader.Buffs.Drinking && playerReader.Buffs.Eating)
                {
                    if (playerReader.ManaPercentage > 98 && playerReader.HealthPercent > 98)
                    {
                        break;
                    }
                }
                else if (playerReader.Buffs.Drinking)
                {
                    if (playerReader.ManaPercentage > 98)
                    {
                        break;
                    }
                }
                else if (playerReader.Buffs.Eating)
                {
                    if (playerReader.HealthPercent > 98)
                    {
                        break;
                    }
                }

                if ((DateTime.Now - startTime).TotalSeconds >= 25)
                {
                    logger.LogInformation($"Waited (25s) long enough for {Name}");
                    break;
                }
            }

            if (wasDrinkingOrEating)
            {
                await input.TapStandUpKey();
            }
        }