//Keeps engine running after changing seats IEnumerator WhileHovering(MiniCopter minicopter, Rigidbody rb) { if (_config.Hovering.timedHover) { string position = minicopter.transform.position.ToString(); Timer hovertime = timer.Once(_config.Hovering.hoverDuration, () => { if (minicopter != null) { helicopterHovering[minicopter.GetInstanceID()] = false; minicopter.EngineOff(); rb.constraints = RigidbodyConstraints.None; minicopter.EngineOn(); minicopter.StopAllCoroutines(); } else { PrintError(lang.GetMessage("ErrorFound", this) + $"at {position}"); } }); } while (helicopterHovering[minicopter.GetInstanceID()]) { if (!minicopter.IsEngineOn() && minicopter.HasAnyPassengers() && minicopter.HasFuel() || !_config.Hovering.disableHoverOnDismount && !minicopter.HasAnyPassengers() && !minicopter.IsEngineOn() && minicopter.HasFuel()) { minicopter.EngineStartup(); } if (minicopter.HasDriver() && minicopter.HasFuel()) { minicopter.EngineOn(); } if (_config.Hovering.useFuelOnHover && minicopter.HasFuel()) { if (Time.time - helicopterFuelUseTime[minicopter.GetInstanceID()] > 1) { minicopter.UseFuel(minicopter.fuelPerSec); helicopterFuelUseTime[minicopter.GetInstanceID()] = Time.time; } } if ((!minicopter.HasFuel() && !_config.Hovering.disableHoverOnDismount) || (_config.Hovering.disableHoverOnSeat && minicopter.HasAnyPassengers() && minicopter.HasDriver() == false)) { minicopter.EngineOff(); rb.constraints = RigidbodyConstraints.None; minicopter.StopAllCoroutines(); } yield return(1); } if (!helicopterHovering[minicopter.GetInstanceID()]) { yield break; } }
void Hover(BasePlayer player) { if (permission.UserHasPermission(player.UserIDString, canHover) && player.GetMountedVehicle() != null) { BaseVehicle playerVehicle = player.GetMountedVehicle(); if (_config.Permission.passengerToggle || !_config.Permission.passengerToggle && playerVehicle.GetDriver() == player) { if (player.isMounted && playerVehicle.ShortPrefabName == "minicopter.entity" || playerVehicle.ShortPrefabName == "scraptransporthelicopter" && _config.Permission.scrapheliCanHover || playerVehicle.ShortPrefabName == "ch47.entity" && _config.Permission.chinookCanHover) { MiniCopter minicopter = playerVehicle as MiniCopter; //Chinook if (minicopter == null && playerVehicle.ShortPrefabName == "ch47.entity") { CH47Helicopter chinook = playerVehicle as CH47Helicopter; if (chinook != null) { if (_config.Permission.enableHoverWithTwoOccupants) { ChinookHover(player, chinook); return; } else { if (chinook.NumMounted() >= 2) { PrintToChat(player, lang.GetMessage("CantHoverTwoOccupants", this, player.UserIDString)); return; } } } } if (minicopter != null) { if (minicopter.IsEngineOn() && minicopter.isMobile || minicopter.isMobile && minicopter.GetDriver() != player) { if (_config.Permission.enableHoverWithTwoOccupants) { ToggleHover(player, minicopter); } else { if (minicopter.NumMounted() >= 2) { PrintToChat(player, lang.GetMessage("CantHoverTwoOccupants", this, player.UserIDString)); return; } } } else { PrintToChat(player, lang.GetMessage("NotFlying", this, player.UserIDString)); } } else { PrintWarning(lang.GetMessage("HelicopterNull", this, player.UserIDString)); PrintToChat(player, lang.GetMessage("ErrorFound", this, player.UserIDString)); return; } } else { if (!player.isMounted) { PrintToChat(lang.GetMessage("NotMounted", this, player.UserIDString)); } if (playerVehicle is MiniCopter == false) { PrintToChat(player, lang.GetMessage("NotInHelicopter", this, player.UserIDString)); } } } } else if (player.GetMountedVehicle() == null) { PrintToChat(player, lang.GetMessage("NotInHelicopter", this, player.UserIDString)); } else { PrintToChat(player, lang.GetMessage("NoPermission", this, player.UserIDString)); } }