private async Task <bool> MainCoroutine() { if (IsDone) { return(false); } // move to cannon. if (!Query.IsInVehicle()) { if (VehicleId == 0) { BehaviorDone("Not in a vehicle and no VehicleId is specified"); return(false); } // enable combat while not in a vehicle if ((LevelBot.BehaviorFlags & BehaviorFlags.Combat) == 0) { LevelBot.BehaviorFlags |= BehaviorFlags.Combat; } return(await UtilityCoroutine.MountVehicle( VehicleSearchLocation, MovementBy, u => !Query.IsInCompetition(u, NonCompeteDistance), VehicleId)); } // Disable combat while in a vehicle if ((LevelBot.BehaviorFlags & BehaviorFlags.Combat) != 0) { LevelBot.BehaviorFlags &= ~BehaviorFlags.Combat; } while (!IsDone && Query.IsInVehicle()) { // find the first weapon that is ready. var weapon = Weapons.FirstOrDefault(w => w.IsWeaponReady()); if (weapon != null) { //_target = StyxWoW.Me.CurrentTarget; if (!Query.IsViable(_target) || _target.IsDead || !weapon.WeaponAim(_target)) { // acquire a target that is within shooting range _target = Npcs.FirstOrDefault(n => weapon.WeaponAim(n)); await Coroutine.Sleep((int)Delay.BeforeButtonClick.TotalMilliseconds); return(true); } // fire away. if (Query.IsViable(_target) && weapon.WeaponAim(_target) && weapon.WeaponFire()) { await Coroutine.Sleep((int)Delay.AfterWeaponFire.TotalMilliseconds); } } await Coroutine.Yield(); } return(false); }