Иконка ресурса

FREE RocketGuns : 1.6.3 1.6.3

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core.Plugins;
using UnityEngine;
using System.Collections.Generic;
using Newtonsoft.Json;
using System;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
namespace Oxide.Plugins {
    [Info("Rocket Guns", "Amphetaminov", "1.6.3")]
    [Description("Ракеты из любого оружия с ограниченным использованием")]
    public class RocketGuns : RustPlugin {
#region Fields
        private const string PERMISSION_USE = "rocketguns.use";
        private const string PERMISSION_ADMIN = "rocketguns.admin";
        private const string PERMISSION_WEAPON = "rocketguns.weapon";
        private const string PERMISSION_ROCKET = "rocketguns.rocket";
        private const string PERMISSION_SPEED = "rocketguns.speed";
        private const string PERMISSION_COOLDOWN = "rocketguns.cooldown";
        private const string PERMISSION_GETWEAPON = "rocketguns.getweapon";
        private const string PERMISSION_GETLIMITED = "rocketguns.getlimited";
        private const string PERMISSION_ROCKET_BASIC = "rocketguns.rocket.basic";
        private const string PERMISSION_ROCKET_FIRE = "rocketguns.rocket.fire";
        private const string PERMISSION_ROCKET_HV = "rocketguns.rocket.hv";
        private const string PERMISSION_ROCKET_SMOKE = "rocketguns.rocket.smoke";
        private const string PERMISSION_ROCKET_SHARK = "rocketguns.rocket.shark";
        private readonly Dictionary<ulong, bool> playerStates = new Dictionary<ulong, bool>();
        private readonly Dictionary<ulong, DateTime> fireCooldownData = new Dictionary<ulong, DateTime>();
        private readonly Dictionary<ulong, Timer> sharkTimers = new Dictionary<ulong, Timer>();
        private readonly Dictionary<ulong, int> limitedUsesLeft = new Dictionary<ulong, int>();
        private const string SHARK_PREFAB = "assets/rust.ai/agents/fish/simpleshark.prefab";
        private const string WATER_SPLASH = "assets/bundled/prefabs/fx/explosions/water_bomb.prefab";
        private const string AIRBURST_EFFECT = "assets/content/vehicles/mlrs/effects/pfx_airburst.prefab";
        private readonly Dictionary<string, string> availableWeapons = new Dictionary<string, string> {
            {
                "rifle.lr300", "LR-300"
            }
            , {
                "rifle.ak", "AK-47"
            }
            , {
                "rifle.bolt", "Болтовка"
            }
            , {
                "rifle.l96", "L96"
            }
            , {
                "rifle.m39", "M39"
            }
            , {
                "smg.mp5", "MP5A4"
            }
            , {
                "smg.2", "Custom SMG"
            }
            , {
                "pistol.python", "Python"
            }
            , {
                "pistol.revolver", "Револьвер"
            }
            , {
                "pistol.semiauto", "Semi Auto Pistol"
            }
            , {
                "pistol.m92", "M92"
            }
            , {
                "rocket.launcher", "Ракетница"
            }
            , {
                "rifle.semiauto", "SAR"
            }
            , {
                "shotgun.pump", "Помповый дробовик"
            }
            , {
                "shotgun.spas12", "SPAS-12"
            }
            , {
                "shotgun.double", "Двустволка"
            }
            , {
                "smg.thompson", "Thompson"
            }
            , {
                "crossbow", "Арбалет"
            }
            , {
                "bow.hunting", "Лук"
            }
        }
        ;
        private readonly Dictionary<string, string> availableRockets = new Dictionary<string, string> {
            {
                "rocket_basic", "Обычная ракета"
            }
            , {
                "rocket_fire", "Зажигательная ракета"
            }
            , {
                "rocket_hv", "Высокоскоростная ракета"
            }
            , {
                "rocket_smoke", "Дымовая ракета"
            }
            , {
                "rocket_shark", "Ракета-Акула"
            }
        }
        ;
        private Configuration config;
        class LimitedUseConfig {
            [JsonProperty("Количество использований для ограниченного оружия")]
            public int UsesCount = 3;
            [JsonProperty("Разрешить повторное получение ограниченного оружия")]
            public bool AllowMultiple = false;
        }
        class Configuration {
            [JsonProperty("Скорость ракеты")]
            public float RocketSpeed = 50f;
            [JsonProperty("Задержка между выстрелами (в секундах)")]
            public float FireCooldown = 1f;
            [JsonProperty("Язык по умолчанию (ru/en)")]
            public string DefaultLanguage = "ru";
            [JsonProperty("Тип ракеты")]
            public string RocketType = "rocket_hv";
            [JsonProperty("Оружие (shortname)")]
            public string WeaponShortname = "rifle.lr300";
            [JsonProperty("Настройки ограниченного использования")]
            public LimitedUseConfig LimitedUseSettings = new LimitedUseConfig();
        }
#endregion
#region Configuration
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config.LimitedUseSettings == null) config.LimitedUseSettings = new LimitedUseConfig();
            }
            catch {
                LoadDefaultConfig();
            }
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            config = new Configuration();
            SaveConfig();
        }
        protected override void SaveConfig() => Config.WriteObject(config, true);
#endregion
#region Localization
        private string GetMessage(string key, string userId, params object[] args) {
            var message = lang.GetMessage(key, this, userId);
            var prefix = lang.GetMessage("PluginPrefix", this, userId);
            return $"{prefix} {string.Format(message, args)}";
        }
        private string GetMessage(string key, string userId) {
            var message = lang.GetMessage(key, this, userId);
            var prefix = lang.GetMessage("PluginPrefix", this, userId);
            return $"{prefix} {message}";
        }
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["NoPermission"]
                = "У вас нет прав для использования этой команды!", ["HelpText"] = "<color=#87ceeb>Доступные команды:</color>\n/rocketguns on - Включить режим ракет\n/rocketguns off - Выключить режим ракет\n/rocketguns info - Показать текущие настройки\n/rocketguns weapon [тип] - Изменить оружие\n/rocketguns rocket [тип] - Изменить тип ракеты\n/rocketguns speed [значение] - Изменить скорость ракеты\n/rocketguns cooldown [секунды] - Изменить задержку между выстрелами\n/rocketguns weapons - Показать список доступного оружия\n/rocketguns reset - Сбросить настройки на стандартные\n/getweapon - Получить выбранное оружие\n/getlimited - Получить оружие с ограниченным использованием", ["ShortCommands"] = "<color=#87ceeb>Короткие команды:</color>\n/rg on - Включить режим\n/rg off - Выключить режим\n/rg info - Настройки\n/rg weapon [тип] - Изменить оружие\n/rg rocket [тип] - Изменить тип ракеты\n/rg speed [значение] - Изменить скорость\n/rg cooldown [секунды] - Изменить задержку\n/rg weapons - Список оружия\n/rg reset - Сбросить настройки", ["RocketModeEnabled"] = "Режим ракет включен!", ["RocketModeDisabled"] = "Режим ракет выключен!", ["InvalidWeapon"] = "Неверное оружие! Доступные варианты: {0}", ["InvalidRocket"] = "Неверный тип ракеты! Доступные варианты: {0}", ["NoRocketsAvailable"] = "У вас нет доступных типов ракет!", ["InvalidNumber"] = "Пожалуйста, введите корректное число!", ["WeaponChanged"] = "Оружие изменено на: {0}", ["RocketChanged"] = "Тип ракеты изменен на: {0}", ["SpeedChanged"] = "Скорость изменена на: {0}", ["CooldownChanged"] = "Задержка изменена на: {0} секунд", ["AvailableWeapons"] = "Доступное оружие: {0}", ["AvailableRockets"] = "Доступные типы ракет: {0}", ["CurrentSettings"] = "Текущие настройки:\nСкорость: {0}\nЗадержка: {1} сек\nТип ракеты: {2}\nОружие: {3}", ["SettingsReset"] = "Настройки сброшены до значений по умолчанию!", ["WeaponReceived"] = "Вы получили оружие: {0}", ["LimitedReceived"] = "Вы получили оружие {0} с {1} использованиями режима ракет!", ["LimitedUsesLeft"] = "Осталось использований: {0}", ["LimitedUsesExhausted"] = "Все использования израсходованы! Режим ракет отключен.", ["LimitedAlreadyUsed"] = "Вы уже использовали свое ограниченное оружие!", ["PluginPrefix"] = "<color=#ffd700>[Rocket Guns]</color>", ["LimitedPrefix"] = "<color=#ff0000>[Ограниченное оружие]</color>"
            }
            , this, "ru");
            lang.RegisterMessages(new Dictionary<string, string> {
                ["NoPermission"]
                = "You don't have permission to use this command!", ["HelpText"] = "<color=#87ceeb>Available commands:</color>\n/rocketguns on - Enable rocket mode\n/rocketguns off - Disable rocket mode\n/rocketguns info - Show current settings\n/rocketguns weapon [type] - Change weapon\n/rocketguns rocket [type] - Change rocket type\n/rocketguns speed [value] - Change rocket speed\n/rocketguns cooldown [seconds] - Change fire cooldown\n/rocketguns weapons - Show available weapons\n/rocketguns reset - Reset settings to default\n/getweapon - Get selected weapon\n/getlimited - Get weapon with limited uses", ["ShortCommands"] = "<color=#87ceeb>Short commands:</color>\n/rg on - Enable mode\n/rg off - Disable mode\n/rg info - Settings\n/rg weapon [type] - Change weapon\n/rg rocket [type] - Change rocket type\n/rg speed [value] - Change speed\n/rg cooldown [seconds] - Change cooldown\n/rg weapons - List weapons\n/rg reset - Reset settings", ["RocketModeEnabled"] = "Rocket mode enabled!", ["RocketModeDisabled"] = "Rocket mode disabled!", ["InvalidWeapon"] = "Invalid weapon! Available options: {0}", ["InvalidRocket"] = "Invalid rocket type! Available options: {0}", ["NoRocketsAvailable"] = "You don't have any available rocket types!", ["InvalidNumber"] = "Please enter a valid number!", ["WeaponChanged"] = "Weapon changed to: {0}", ["RocketChanged"] = "Rocket type changed to: {0}", ["SpeedChanged"] = "Speed changed to: {0}", ["CooldownChanged"] = "Cooldown changed to: {0} seconds", ["AvailableWeapons"] = "Available weapons: {0}", ["AvailableRockets"] = "Available rocket types: {0}", ["CurrentSettings"] = "Current settings:\nSpeed: {0}\nCooldown: {1} sec\nRocket type: {2}\nWeapon: {3}", ["SettingsReset"] = "Settings have been reset to default!", ["WeaponReceived"] = "You received weapon: {0}", ["LimitedReceived"] = "You received {0} with {1} rocket mode uses!", ["LimitedUsesLeft"] = "Uses left: {0}", ["LimitedUsesExhausted"] = "All uses exhausted! Rocket mode disabled.", ["LimitedAlreadyUsed"] = "You've already used your limited weapon!", ["PluginPrefix"] = "<color=#ffd700>[Rocket Guns]</color>", ["LimitedPrefix"] = "<color=#ff0000>[Limited Weapon]</color>"
            }
            , this, "en");
        }
#endregion
#region Hooks
        private void Init() {
            permission.RegisterPermission(PERMISSION_USE, this);
            permission.RegisterPermission(PERMISSION_ADMIN, this);
            permission.RegisterPermission(PERMISSION_WEAPON, this);
            permission.RegisterPermission(PERMISSION_ROCKET, this);
            permission.RegisterPermission(PERMISSION_SPEED, this);
            permission.RegisterPermission(PERMISSION_COOLDOWN, this);
            permission.RegisterPermission(PERMISSION_GETWEAPON, this);
            permission.RegisterPermission(PERMISSION_GETLIMITED, this);
            permission.RegisterPermission(PERMISSION_ROCKET_BASIC, this);
            permission.RegisterPermission(PERMISSION_ROCKET_FIRE, this);
            permission.RegisterPermission(PERMISSION_ROCKET_HV, this);
            permission.RegisterPermission(PERMISSION_ROCKET_SMOKE, this);
            permission.RegisterPermission(PERMISSION_ROCKET_SHARK, this);
            LoadConfig();
        }
        private void Unload() {
            foreach(var timer in sharkTimers.Values) timer?.Destroy();
            playerStates.Clear();
            fireCooldownData.Clear();
            sharkTimers.Clear();
            limitedUsesLeft.Clear();
        }
        void OnPlayerInput(BasePlayer player, InputState input) {
            if (player == null || input == null) return;
            if (limitedUsesLeft.ContainsKey(player.userID)) {
                if (!permission.UserHasPermission(player.UserIDString, PERMISSION_GETLIMITED)) return;
                if (!playerStates.ContainsKey(player.userID) || !playerStates[player.userID]) return;
                if (input.IsDown(BUTTON.FIRE_PRIMARY)) {
                    // Отменяем стандартное поведение оружия (расход боеприпасов)
                    input.WasJustPressed(BUTTON.FIRE_PRIMARY);
                    if (CheckisCooldown(player.userID)) return;
                    Item activeItem = player.GetActiveItem();
                    if (activeItem == null || activeItem.info.shortname != config.WeaponShortname) return;
                    limitedUsesLeft[player.userID]--;
                    if (limitedUsesLeft[player.userID] <= 0) {
                        playerStates[player.userID] = false;
                        limitedUsesLeft.Remove(player.userID);
                        permission.RevokeUserPermission(player.UserIDString, PERMISSION_GETLIMITED);
                        SendReply(player, GetMessage("LimitedUsesExhausted", player.UserIDString));
                    }
                    else {
                        SendReply(player, GetMessage("LimitedUsesLeft", player.UserIDString, limitedUsesLeft[player.userID]));
                    }
                    FireRocket(player);
                }
            }
            else {
                if (!permission.UserHasPermission(player.UserIDString, PERMISSION_USE)) return;
                if (!playerStates.ContainsKey(player.userID) || !playerStates[player.userID]) return;
                if (input.IsDown(BUTTON.FIRE_PRIMARY)) {
                    // Отменяем стандартное поведение оружия (расход боеприпасов)
                    input.WasJustPressed(BUTTON.FIRE_PRIMARY);
                    if (CheckisCooldown(player.userID)) return;
                    Item activeItem = player.GetActiveItem();
                    if (activeItem == null || activeItem.info.shortname != config.WeaponShortname) return;
                    FireRocket(player);
                }
            }
        }
        private void FireRocket(BasePlayer player) {
            Vector3 position = player.eyes.position;
            if (config.RocketType == "rocket_shark") {
                CreateSharkRocket(player, position);
            }
            else {
                var rocket = GameManager.server.CreateEntity($"assets/prefabs/ammo/rocket/{config.RocketType}.prefab", position + player.eyes.HeadForward(), player.transform.rotation);
                if (rocket == null) return;
                rocket.creatorEntity = player;
                rocket.OwnerID = player.userID;
                var serverProjectile = rocket.GetComponent<ServerProjectile>();
                if (serverProjectile != null) {
                    serverProjectile.InitializeVelocity(Quaternion.Euler(player.serverInput.current.aimAngles) * rocket.transform.forward * config.RocketSpeed);
                }
                rocket.Spawn();
                Effect.server.Run("assets/bundled/prefabs/fx/weapons/rocket_launch.prefab", position);
                Effect.server.Run("assets/prefabs/weapons/rocket_launcher/effects/pfx_rocket_launch.prefab", position);
            }
            if (!fireCooldownData.ContainsKey(player.userID)) {
                fireCooldownData.Add(player.userID, DateTime.Now.AddSeconds(config.FireCooldown));
            }
            else {
                fireCooldownData[player.userID] = DateTime.Now.AddSeconds(config.FireCooldown);
            }
        }
        private void CreateSharkRocket(BasePlayer player, Vector3 position) {
            var rocket = GameManager.server.CreateEntity("assets/prefabs/ammo/rocket/rocket_basic.prefab", position + player.eyes.HeadForward(), player.transform.rotation);
            if (rocket == null) return;
            rocket.creatorEntity = player;
            rocket.OwnerID = player.userID;
            rocket._name = "SLRocket";
            rocket.limitNetworking = true;
            var serverProjectile = rocket.GetComponent<ServerProjectile>();
            if (serverProjectile != null) {
                serverProjectile.InitializeVelocity(Quaternion.Euler(player.serverInput.current.aimAngles) * rocket.transform.forward * config.RocketSpeed);
            }
            rocket.Spawn();
            BaseEntity entity = GameManager.server.CreateEntity(SHARK_PREFAB, rocket.transform.position);
            if (entity == null) return;
            var shark = entity as SimpleShark;
            if (shark == null) return;
            shark.enabled = false;
            shark.limitNetworking = true;
            shark._name = "launchershark";
            shark.transform.position = rocket.transform.position;
            shark.transform.rotation = rocket.transform.rotation;
            entity.Spawn();
            timer.Once(0.05f, () => {
                if (shark == null || shark.IsDestroyed) return;
                Effect.server.Run(AIRBURST_EFFECT, shark.transform.position, Vector3.forward, null, false);
            }
            );
            shark.limitNetworking = false;
            if (sharkTimers.ContainsKey(player.userID)) {
                sharkTimers[player.userID]?.Destroy();
                sharkTimers.Remove(player.userID);
            }
            Timer sharkTimer = timer.Every(0.01f, () => {
                if (shark == null || !shark.IsAlive() || rocket == null || rocket.IsDestroyed) {
                    if (sharkTimers.ContainsKey(player.userID)) {
                        sharkTimers[player.userID]?.Destroy();
                        sharkTimers.Remove(player.userID);
                    }
                    return;
                }
                if (shark.transform != null && rocket.transform != null) {
                    shark.transform.position = rocket.transform.position;
                    shark.transform.rotation = rocket.transform.rotation;
                }
            }
            );
            sharkTimers[player.userID] = sharkTimer;
        }
        private bool CheckisCooldown(ulong userID) {
            if (!fireCooldownData.ContainsKey(userID)) return false;
            if (fireCooldownData[userID] > DateTime.Now) return true;
            return false;
        }
#endregion
#region Commands
        [ChatCommand("rocketguns")]
        void RocketGunsCommand(BasePlayer player, string command, string[] args) {
            HandleCommand(player, args, false);
        }
        [ChatCommand("rg")]
        void RocketGunsShortCommand(BasePlayer player, string command, string[] args) {
            HandleCommand(player, args, true);
        }
        [ChatCommand("getlimited")]
        void GetLimitedCommand(BasePlayer player, string command, string[] args) {
            if (player == null) {
                if (args.Length < 1) {
                    Puts("Использование: getlimited <имя/steamid> [количество использований]");
                    return;
                }
                var target = covalence.Players.FindPlayer(args[0]);
                if (target == null) {
                    Puts($"Игрок {args[0]} не найден!");
                    return;
                }
                var basePlayer = target.Object as BasePlayer;
                if (basePlayer == null) {
                    Puts("Не удалось получить BasePlayer!");
                    return;
                }
                float uses = config.LimitedUseSettings.UsesCount;
                if (args.Length > 1 && float.TryParse(args[1], out float customUses)) {
                    uses = customUses;
                }
                GiveLimitedWeapon(basePlayer, (int)uses);
                Puts($"Выдано ограниченное оружие игроку {target.Name} с {uses} использованиями");
                return;
            }
            if (!permission.UserHasPermission(player.UserIDString, PERMISSION_GETLIMITED)) {
                SendReply(player, GetMessage("NoPermission", player.UserIDString));
                return;
            }
            if (!config.LimitedUseSettings.AllowMultiple && limitedUsesLeft.ContainsKey(player.userID)) {
                SendReply(player, GetMessage("LimitedAlreadyUsed", player.UserIDString));
                return;
            }
            GiveLimitedWeapon(player, config.LimitedUseSettings.UsesCount);
            SendReply(player, GetMessage("LimitedReceived", player.UserIDString, config.WeaponShortname, config.LimitedUseSettings.UsesCount));
        }
        [ConsoleCommand("getlimited")]
        void ConsoleGetLimited(ConsoleSystem.Arg arg) {
            if (arg.Connection != null) return;
            if (arg.Args == null || arg.Args.Length < 1) {
                Puts("Использование: getlimited <имя/steamid> [количество использований]");
                return;
            }
            var target = covalence.Players.FindPlayer(arg.Args[0]);
            if (target == null) {
                Puts($"Игрок {arg.Args[0]} не найден!");
                return;
            }
            var basePlayer = target.Object as BasePlayer;
            if (basePlayer == null) {
                Puts("Не удалось получить BasePlayer!");
                return;
            }
            float uses = config.LimitedUseSettings.UsesCount;
            if (arg.Args.Length > 1 && float.TryParse(arg.Args[1], out float customUses)) {
                uses = customUses;
            }
            GiveLimitedWeapon(basePlayer, (int)uses);
            Puts($"Выдано ограниченное оружие игроку {target.Name} с {uses} использованиями");
        }
        private void GiveLimitedWeapon(BasePlayer player, int uses) {
            var definition = ItemManager.FindItemDefinition(config.WeaponShortname);
            if (definition != null) {
                Item item = ItemManager.Create(definition, 1);
                if (item != null) {
                    var baseProjectile = item.GetHeldEntity() as BaseProjectile;
                    if (baseProjectile != null) {
                        baseProjectile.primaryMagazine.contents = baseProjectile.primaryMagazine.capacity;
                    }
                    player.GiveItem(item, BaseEntity.GiveItemReason.PickedUp);
                }
            }
            limitedUsesLeft[player.userID] = uses;
            playerStates[player.userID] = true;
            permission.GrantUserPermission(player.UserIDString, PERMISSION_GETLIMITED, this);
        }
        [ChatCommand("getweapon")]
        void GetWeaponCommand(BasePlayer player, string command, string[] args) {
            if (!permission.UserHasPermission(player.UserIDString, PERMISSION_GETWEAPON)) {
                SendReply(player, GetMessage("NoPermission", player.UserIDString));
                return;
            }
            var definition = ItemManager.FindItemDefinition(config.WeaponShortname);
            if (definition != null) {
                Item item = ItemManager.Create(definition, 1);
                if (item != null) {
                    var baseProjectile = item.GetHeldEntity() as BaseProjectile;
                    if (baseProjectile != null) {
                        baseProjectile.primaryMagazine.contents = baseProjectile.primaryMagazine.capacity;
                    }
                    player.GiveItem(item, BaseEntity.GiveItemReason.PickedUp);
                    SendReply(player, GetMessage("WeaponReceived", player.UserIDString, config.WeaponShortname));
                }
            }
        }
        private void HandleCommand(BasePlayer player, string[] args, bool shortFormat) {
            if (!HasUsePermission(player) && !permission.UserHasPermission(player.UserIDString, PERMISSION_GETLIMITED)) {
                SendReply(player, GetMessage("NoPermission", player.UserIDString));
                return;
            }
            if (args.Length == 0) {
                SendReply(player, GetMessage(shortFormat ? "ShortCommands" : "HelpText", player.UserIDString));
                return;
            }
            switch (args[0].ToLower()) {
                case "on" : if (permission.UserHasPermission(player.UserIDString, PERMISSION_GETLIMITED)) {
                    playerStates[player.userID] = true;
                    SendReply(player, GetMessage("RocketModeEnabled", player.UserIDString));
                    return;
                }
                if (!HasUsePermission(player)) {
                    SendReply(player, GetMessage("NoPermission", player.UserIDString));
                    return;
                }
                playerStates[player.userID] = true;
                SendReply(player, GetMessage("RocketModeEnabled", player.UserIDString));
                break;
                case "off" : playerStates[player.userID] = false;
                SendReply(player, GetMessage("RocketModeDisabled", player.UserIDString));
                break;
                case "info" : SendReply(player, GetMessage("CurrentSettings", player.UserIDString, config.RocketSpeed, config.FireCooldown, config.RocketType, config.WeaponShortname));
                break;
                case "weapon" : if (!HasPermission(player, PERMISSION_WEAPON)) {
                    SendReply(player, GetMessage("NoPermission", player.UserIDString));
                    return;
                }
                if (args.Length < 2) {
                    SendReply(player, GetMessage("InvalidWeapon", player.UserIDString, string.Join(", ", availableWeapons.Keys)));
                    return;
                }
                string newWeapon = args[1].ToLower();
                if (!availableWeapons.ContainsKey(newWeapon)) {
                    SendReply(player, GetMessage("InvalidWeapon", player.UserIDString, string.Join(", ", availableWeapons.Keys)));
                    return;
                }
                config.WeaponShortname = newWeapon;
                SaveConfig();
                SendReply(player, GetMessage("WeaponChanged", player.UserIDString, newWeapon));
                break;
                case "rocket" : if (args.Length < 2) {
                    SendReply(player, GetMessage("InvalidRocket", player.UserIDString, string.Join(", ", availableRockets.Keys)));
                    return;
                }
                string newRocket = args[1].ToLower();
                if (!availableRockets.ContainsKey(newRocket)) {
                    SendReply(player, GetMessage("InvalidRocket", player.UserIDString, string.Join(", ", availableRockets.Keys)));
                    return;
                }
                config.RocketType = newRocket;
                SaveConfig();
                SendReply(player, GetMessage("RocketChanged", player.UserIDString, newRocket));
                break;
                case "speed" : if (args.Length < 2 || !float.TryParse(args[1], out float newSpeed)) {
                    SendReply(player, GetMessage("InvalidNumber", player.UserIDString));
                    return;
                }
                config.RocketSpeed = newSpeed;
                SaveConfig();
                SendReply(player, GetMessage("SpeedChanged", player.UserIDString, newSpeed));
                break;
                case "cooldown" : if (args.Length < 2 || !float.TryParse(args[1], out float newCooldown)) {
                    SendReply(player, GetMessage("InvalidNumber", player.UserIDString));
                    return;
                }
                config.FireCooldown = newCooldown;
                SaveConfig();
                SendReply(player, GetMessage("CooldownChanged", player.UserIDString, newCooldown));
                break;
                case "weapons" : SendReply(player, GetMessage("AvailableWeapons", player.UserIDString, string.Join(", ", availableWeapons.Keys)));
                break;
                case "reset" : if (!HasPermission(player, PERMISSION_ADMIN)) {
                    SendReply(player, GetMessage("NoPermission", player.UserIDString));
                    return;
                }
                config = new Configuration();
                SaveConfig();
                SendReply(player, GetMessage("SettingsReset", player.UserIDString));
                break;
                default : SendReply(player, GetMessage(shortFormat ? "ShortCommands" : "HelpText", player.UserIDString));
                break;
            }
        }
#endregion
#region Helpers
        private bool HasPermission(BasePlayer player, string permissionName) {
            if (player == null) return false;
            return permission.UserHasPermission(player.UserIDString, PERMISSION_ADMIN) || permission.UserHasPermission(player.UserIDString, permissionName);
        }
        private bool HasUsePermission(BasePlayer player) {
            if (player == null) return false;
            return permission.UserHasPermission(player.UserIDString, PERMISSION_ADMIN) || permission.UserHasPermission(player.UserIDString, PERMISSION_USE);
        }
#endregion
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху