Example #1
0
        //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;
            }
        }
Example #2
0
        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));
            }
        }