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

FREE AutoKit : 1.0.5 1.0.5

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins 
{
    [Info("AutoKit", "BANTIK AKA CURSOR", "1.0.5")]
    public class AutoKit : RustPlugin 
    {
        #region Конфигурация

        private Configuration _config;

        public class Configuration 
        {
            [JsonProperty("Разрешение для использования")] 
            public string permission = "autokit.use";

            [JsonProperty("Выдавать набор при спавне?")] 
            public bool recive = true;

            [JsonProperty("Очищать инвентарь перед выдачей?")]
            public bool strip = true;

            [JsonProperty("Предметы к выдаче")] 
            public List<ItemConfig> items = new List<ItemConfig>();

            public class ItemConfig
            {
                [JsonProperty("Отображаемое название")] 
                public string name = "";

                [JsonProperty("Скин ID предмета")] 
                public ulong id = 0;

                [JsonProperty("Shortname предмета")] 
                public string shortname = "";

                [JsonProperty("Количество")] 
                public int amount = 1;

                [JsonProperty("В какой контейнер помещать? (wear, main, belt)")] 
                public string container = "main";

                public ItemConfig(ulong sourceID = 0, string sourceShortname = "", int sourceAmount = 0, string sourceContainer = "main")
                {
                    id = sourceID;
                    shortname = sourceShortname;
                    amount = sourceAmount;
                    container = sourceContainer;
                }
            }
        
            public static Configuration GetDefault()
            {
                return new Configuration();
            }
        }

        protected override void LoadDefaultConfig() => _config = Configuration.GetDefault();
        protected override void SaveConfig() => Config.WriteObject(_config);
        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<Configuration>();
            }
            catch
            {
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        
        #endregion

        #region Хуки

        private void Loaded()
        {
            permission.RegisterPermission(_config.permission, this);
            permission.RegisterPermission("autokit.admin", this);
            
            cmd.AddChatCommand("autokit", this, nameof(cmdAutoKit));
        }

        private void OnDefaultItemsReceived(PlayerInventory inventory) 
        {
            var player = inventory.containerMain?.GetOwnerPlayer();
            if(player == null) return;
            
            ReciveItems(player);
        }

        #endregion

        #region Методы

        private void cmdAutoKit(BasePlayer player, string command, string[] args)
        {
            if(!permission.UserHasPermission(player.UserIDString, "autokit.admin"))
            {
                player.ChatMessage("У вас нет прав на использование этой команды!");
                return;
            }

            if(args == null || args.Length == 0)
            {
                ShowHelp(player);
                return;
            }

            switch(args[0].ToLower())
            {
                case "save":
                    SetupNewItems(player);
                    break;

                case "clear":
                    _config.items.Clear();
                    SaveConfig();
                    player.ChatMessage("Автокит очищен!");
                    break;

                case "list":
                    if(_config.items.Count == 0)
                    {
                        player.ChatMessage("Автокит пуст!");
                        return;
                    }

                    player.ChatMessage("Список предметов в автоките:");
                    for(int i = 0; i < _config.items.Count; i++)
                    {
                        var itemConf = _config.items[i];
                        player.ChatMessage($"{i + 1}.{itemConf.shortname} x{itemConf.amount} ({itemConf.container})" + 
                            (itemConf.id > 0 ? $" [Skin: {itemConf.id}]" : "") +
                            (!string.IsNullOrEmpty(itemConf.name) ? $" \"{itemConf.name}\"" : ""));
                    }
                    break;

                default:
                    ShowHelp(player);
                    break;
            }
        }

        private void ShowHelp(BasePlayer player)
        {
            player.ChatMessage("Автокит - Список команд:");
            player.ChatMessage("/autokit save - Сохранить текущий инвентарь как автокит");
            player.ChatMessage("/autokit list - Показать список предметов");
            player.ChatMessage("/autokit clear - Очистить автокит");
        }
        
        private void SetupNewItems(BasePlayer player) 
        {
            _config.items = new List<Configuration.ItemConfig>();
                
            foreach(var itemInventory in player.inventory.containerMain.itemList) 
            {
                Configuration.ItemConfig item = new Configuration.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "main");
                if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                _config.items.Add(item);
            }

            foreach(var itemInventory in player.inventory.containerBelt.itemList) 
            {
                Configuration.ItemConfig item = new Configuration.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "belt");
                if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                _config.items.Add(item);
            }

            foreach(var itemInventory in player.inventory.containerWear.itemList) 
            {
                Configuration.ItemConfig item = new Configuration.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "wear");
                if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                _config.items.Add(item);
            }

            SaveConfig();
            player.ChatMessage("Автокит был успешно изменен!");
        }
        
        private static ItemContainer GetContainer(BasePlayer player, string container) 
        {   
            switch(container) 
            {
                case "wear":
                    return player.inventory.containerWear;
                case "belt":
                    return player.inventory.containerBelt;
                case "main":
                    return player.inventory.containerMain;
            }
            return null;
        }
        
        private void ReciveItems(BasePlayer player) 
        {
            if(_config.recive && permission.UserHasPermission(player.UserIDString, _config.permission))
            {
                if(_config.strip) player.inventory.Strip();

                foreach(var itemConf in _config.items) 
                {
                    Item item = ItemManager.CreateByName(itemConf.shortname, itemConf.amount, itemConf.id);
                    if(!string.IsNullOrEmpty(itemConf.name)) item.name = itemConf.name;
                    item.MoveToContainer(GetContainer(player, itemConf.container));
                }
            }
        }

        #endregion
    }
}

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