示例#1
0
        private void NoMinicopter(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, _noMini))
            {
                player.ChatMessage(lang.GetMessage("mini_perm", this, player.UserIDString));
                return;
            }

            if (!_data.playerMini.ContainsKey(player.UserIDString))
            {
                player.ChatMessage(lang.GetMessage("mini_notcurrent", this, player.UserIDString));
                return;
            }

            MiniCopter mini = BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString]) as MiniCopter;

            if (mini == null)
            {
                return;
            }

            if (mini.AnyMounted() && (!_config.canDespawnWhileOccupied || player.GetMountedVehicle() == mini))
            {
                player.ChatMessage(lang.GetMessage("mini_mounted", this, player.UserIDString));
                return;
            }

            if (IsMiniBeyondMaxDistance(player, mini))
            {
                player.ChatMessage(lang.GetMessage("mini_current_distance", this, player.UserIDString));
                return;
            }

            BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString])?.Kill();
        }
示例#2
0
        private void FetchMinicopter(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, _fetchMini))
            {
                player.ChatMessage(lang.GetMessage("mini_perm", this, player.UserIDString));
            }
            else
            {
                if (!_data.playerMini.ContainsKey(player.UserIDString))
                {
                    player.ChatMessage(lang.GetMessage("mini_notcurrent", this, player.UserIDString));
                }
                else if (_data.playerMini.ContainsKey(player.UserIDString))
                {
                    MiniCopter mini = BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString]) as MiniCopter;

                    if (mini == null)
                    {
                        return;
                    }

                    if (!mini.AnyMounted() && GetDistance(player, mini) < _config.noMiniDistance)
                    {
                        Puts(GetDistance(player, mini).ToString());
                        Vector3 destination = new Vector3(player.transform.position.x, player.transform.position.y + 3.5f, player.transform.position.z + 2);
                        mini.transform.position = destination;
                    }
                    else if (GetDistance(player, mini) > _config.noMiniDistance)
                    {
                        player.ChatMessage(lang.GetMessage("mini_distance", this, player.UserIDString));
                    }
                    else if (mini.AnyMounted())
                    {
                        player.ChatMessage(lang.GetMessage("mini_mounted", this, player.UserIDString));
                    }
                }
            }
        }
示例#3
0
        private void NoMinicopter(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, _noMini))
            {
                player.ChatMessage(lang.GetMessage("mini_perm", this, player.UserIDString));
            }
            else
            {
                if (!_data.playerMini.ContainsKey(player.UserIDString))
                {
                    player.ChatMessage(lang.GetMessage("mini_notcurrent", this, player.UserIDString));
                }
                else if (_data.playerMini.ContainsKey(player.UserIDString))
                {
                    MiniCopter mini = BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString]) as MiniCopter;

                    if (mini == null)
                    {
                        return;
                    }

                    if (!mini.AnyMounted() && GetDistance(player, mini) < _config.noMiniDistance)
                    {
                        BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString])?.Kill();
                    }
                    else if (GetDistance(player, mini) > _config.noMiniDistance)
                    {
                        player.ChatMessage(lang.GetMessage("mini_distance", this, player.UserIDString));
                    }
                    else if (mini.AnyMounted())
                    {
                        player.ChatMessage(lang.GetMessage("mini_mounted", this, player.UserIDString));
                    }
                }
            }
        }
示例#4
0
        private void FetchMinicopter(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, _fetchMini))
            {
                player.ChatMessage(lang.GetMessage("mini_perm", this, player.UserIDString));
                return;
            }

            if (!_data.playerMini.ContainsKey(player.UserIDString))
            {
                player.ChatMessage(lang.GetMessage("mini_notcurrent", this, player.UserIDString));
                return;
            }

            MiniCopter mini = BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString]) as MiniCopter;

            if (mini == null)
            {
                return;
            }

            bool isMounted = mini.AnyMounted();

            if (isMounted && (!_config.canFetchWhileOccupied || player.GetMountedVehicle() == mini))
            {
                player.ChatMessage(lang.GetMessage("mini_mounted", this, player.UserIDString));
                return;
            }

            if (IsMiniBeyondMaxDistance(player, mini))
            {
                player.ChatMessage(lang.GetMessage("mini_current_distance", this, player.UserIDString));
                return;
            }

            if (isMounted)
            {
                // mini.DismountAllPlayers() doesn't work so we have to enumerate the mount points
                foreach (var mountPoint in mini.mountPoints)
                {
                    mountPoint.mountable?.DismountAllPlayers();
                }
            }

            mini.transform.SetPositionAndRotation(GetIdealFixedPositionForPlayer(player), GetIdealRotationForPlayer(player));
        }
示例#5
0
        private void GiveMinicopter(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, _spawnMini))
            {
                player.ChatMessage(lang.GetMessage("mini_perm", this, player.UserIDString));
                return;
            }

            if (_data.playerMini.ContainsKey(player.UserIDString))
            {
                // Fix a potential data file desync where the mini doesn't exist anymore
                // Desyncs should be rare but are not possible to 100% prevent
                // They can happen if the mini is destroyed while the plugin is unloaded
                // Or if someone edits the data file manually
                if (BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString]) == null)
                {
                    _data.playerMini.Remove(player.UserIDString);
                }
                else
                {
                    //player.ChatMessage(lang.GetMessage("mini_current", this, player.UserIDString));
                    //return;
                }
            }

            if (_data.cooldown.ContainsKey(player.UserIDString) && !permission.UserHasPermission(player.UserIDString, _noCooldown))
            {
                DateTime lastSpawned   = _data.cooldown[player.UserIDString];
                TimeSpan timeRemaining = CeilingTimeSpan(lastSpawned.AddSeconds(GetPlayerCooldownSeconds(player)) - DateTime.Now);
                if (timeRemaining.TotalSeconds > 0)
                {
                    player.ChatMessage(string.Format(lang.GetMessage("mini_timeleft_new", this, player.UserIDString), timeRemaining.ToString("g")));
                    return;
                }

                _data.cooldown.Remove(player.UserIDString);
            }


            if (!_data.playerMini.ContainsKey(player.UserIDString)) // If player doesn't have heli
            {
                SpawnMinicopter(player);                            //Spawn one
                return;                                             //Done
            }
            else                                                    //Player has a heli already
            {
                MiniCopter mini = BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString]) as MiniCopter;
                if (mini == null)
                {
                    return;
                }

                if (mini.AnyMounted() && (!_config.canDespawnWhileOccupied || player.GetMountedVehicle() == mini)) //Make Sure it's not mounted
                {
                    player.ChatMessage(lang.GetMessage("mini_mounted", this, player.UserIDString));                //Message if it is
                    return;                                                                                        //Done
                }
                if (IsMiniBeyondMaxDistance(player, mini))                                                         //Make Sure it's witin range
                {
                    player.ChatMessage(lang.GetMessage("mini_current_distance", this, player.UserIDString));       //Msg if not
                    return;                                                                                        //Done
                }
                mini.transform.SetPositionAndRotation(GetIdealFixedPositionForPlayer(player), GetIdealRotationForPlayer(player));
                //BaseNetworkable.serverEntities.Find(_data.playerMini[player.UserIDString])?.Kill();//Remove it
                //SpawnMinicopter(player); //Spawn New
            }
        }