void OnEntityDismounted(BaseMountable mount, BasePlayer player) { if (mount.GetParentEntity() != null) { if (_config.Hovering.disableHoverOnDismount && mount.GetParentEntity().ShortPrefabName == "minicopter.entity" || mount.GetParentEntity().ShortPrefabName == "scraptransporthelicopter" && _config.Permission.scrapheliCanHover) { MiniCopter minicopter = mount.GetParentEntity() as MiniCopter; if (minicopter != null && helicopterHovering.ContainsKey(minicopter.GetInstanceID())) { if (helicopterHovering[minicopter.GetInstanceID()] && mount.GetParentEntity() is MiniCopter && !minicopter.HasAnyPassengers() && minicopter != null) { helicopterHovering[minicopter.GetInstanceID()] = false; minicopter.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.None; minicopter.GetComponent <Rigidbody>().freezeRotation = false; } } else { if (minicopter == null) { PrintWarning(lang.GetMessage("HelicopterNull", this, null)); } else if (!helicopterHovering.ContainsKey(minicopter.GetInstanceID())) { return; } } } else if (!_config.Hovering.disableHoverOnDismount && mount.GetParentEntity().ShortPrefabName == "minicopter.entity" || mount.GetParentEntity().ShortPrefabName == "scraptransporthelicopter" && _config.Permission.scrapheliCanHover) { if (_config.Hovering.keepEngineOnHover) { MiniCopter minicopter = mount.GetParentEntity() as MiniCopter; if (minicopter != null && helicopterHovering.ContainsKey(minicopter.GetInstanceID())) { Rigidbody rb = minicopter.GetComponent <Rigidbody>(); minicopter.StartCoroutine(WhileHovering(minicopter, rb)); } } } } }
//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; } }