Esempio n. 1
0
        void ToggleHover(BasePlayer player, MiniCopter minicopter)
        {
            if (!helicopterHovering.ContainsKey(minicopter.GetInstanceID()))
            {
                helicopterHovering.Add(minicopter.GetInstanceID(), false);
            }

            if (!helicopterFuelUseTime.ContainsKey(minicopter.GetInstanceID()))
            {
                helicopterFuelUseTime.Add(minicopter.GetInstanceID(), 0f);
            }

            if (!helicopterTimers.ContainsKey(minicopter.GetInstanceID()))
            {
                helicopterTimers.Add(minicopter.GetInstanceID(), null);
            }

            Rigidbody rb = minicopter.GetComponent <Rigidbody>();

            if (rb == null)
            {
                PrintWarning(lang.GetMessage("RigidbodyNull", this, null));

                PrintToChat(player, lang.GetMessage("ErrorFound", this, player.UserIDString));

                return;
            }

            if (!helicopterHovering[minicopter.GetInstanceID()])
            {
                helicopterHovering[minicopter.GetInstanceID()] = true;

                rb.constraints = RigidbodyConstraints.FreezePositionY;

                if (!_config.Hovering.enableRotationOnHover)
                {
                    rb.freezeRotation = true;
                }

                PrintToChat(player, lang.GetMessage("HelicopterEnabled", this, player.UserIDString));

                if (_config.Hovering.keepEngineOnHover)
                {
                    MonoBehaviour monoBehaviour = minicopter.GetComponent <MonoBehaviour>();

                    monoBehaviour.StartCoroutine(WhileHovering(minicopter, rb));
                }
            }
            else
            {
                helicopterHovering[minicopter.GetInstanceID()] = false;

                rb.constraints = RigidbodyConstraints.None;

                rb.freezeRotation = false;

                PrintToChat(player, lang.GetMessage("HelicopterDisabled", this, player.UserIDString));
            }
        }
Esempio n. 2
0
        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));
                        }
                    }
                }
            }
        }
Esempio n. 3
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;
            }
        }