Exemplo n.º 1
0
        public override async Task PerformAction()
        {
            if (this.Keys.Any(k => k.StopBeforeCast))
            {
                await this.stopMoving.Stop();

                if (playerReader.PlayerBitValues.IsMounted)
                {
                    await input.Dismount();
                }
                if (!await Wait(1000, () => playerReader.PlayerBitValues.PlayerInCombat))
                {
                    return;
                }
            }

            this.Keys.ForEach(async key =>
            {
                var pressed = await this.castingHandler.CastIfReady(key);
                key.ResetCooldown();
                key.SetClicked();
            });

            if (!await Wait(400, () => playerReader.PlayerBitValues.PlayerInCombat))
            {
                return;
            }

            bool wasDrinkingOrEating = this.playerReader.Buffs.Drinking || this.playerReader.Buffs.Eating;
            int  ticks = 0;

            this.logger.LogInformation($"Waiting for {Name}");
            while ((this.playerReader.Buffs.Drinking || this.playerReader.Buffs.Eating || this.playerReader.IsCasting) && !this.playerReader.PlayerBitValues.PlayerInCombat)
            {
                if (!await Wait(100, () => playerReader.PlayerBitValues.PlayerInCombat))
                {
                    return;
                }
                ticks++;

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

                if (ticks > 250)
                {
                    this.logger.LogInformation($"Waited long enough for {Name}");
                    break;
                }
            }

            if (wasDrinkingOrEating)
            {
                await input.TapStandUpKey(); // stand up
            }
        }
        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();
            }
        }