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(); } }