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

FREE AutoKit : 1.0.2 1.0.2

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

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

        private Configuration _config;

        public class Configuration 
        {
            [JsonProperty("Биомы")] 
            public Biomes biomes = new Biomes();

            public class Biomes
            {
                [JsonProperty("Тундра")] 
                public Biome tundra = new Biome();

                [JsonProperty("Пустыня")] 
                public Biome dust = new Biome();

                [JsonProperty("Зима")] 
                public Biome winter = new Biome();

                [JsonProperty("Умеренный")] 
                public Biome normal = new Biome();
            }

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

                [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 = "pants";

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

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

                    public ItemConfig(ulong sourceID = 0, string sourceShortname = "", int sourceAmount = 0, string sourceContainer = "")
                    {
                        id = sourceID;
                        shortname = sourceShortname;
                        amount = sourceAmount;
                        container = sourceContainer;
                    }
                }
            
                public Biome(string defaultPermission = "", bool fillDefaultItem = false)
                {
                    if(fillDefaultItem) items.Add(new ItemConfig(0, "pants", 1, "wear"));
                    permission = defaultPermission;
                }
            }
        
            public static Configuration GetDefault()
            {
                Configuration _config = new Configuration();

                _config.biomes.tundra = new Biome("autokit.tundra", true);
                _config.biomes.dust = new Biome("autokit.dust", true);
                _config.biomes.winter = new Biome("autokit.winter", true);
                _config.biomes.normal = new Biome("autokit.normal", true);

                return _config;
            }
        }

        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.biomes.tundra.permission, this);
            permission.RegisterPermission(_config.biomes.dust.permission, this);
            permission.RegisterPermission(_config.biomes.winter.permission, this);
            permission.RegisterPermission(_config.biomes.normal.permission, this);

            permission.RegisterPermission("autokit.admin", this);
        }

        private void OnDefaultItemsReceived(PlayerInventory inventory) 
        {
            var player = inventory.containerMain?.GetOwnerPlayer();

            if(player == null) return;

            switch(GetBiome(player.transform.position))
            {
                case "Dust":
                    ReciveItems(player, _config.biomes.dust);
                    break;

                case "Normal":
                    ReciveItems(player, _config.biomes.normal);
                    break;

                case "Tundra":
                    ReciveItems(player, _config.biomes.tundra);
                    break;

                case "Winter":
                    ReciveItems(player, _config.biomes.winter);
                    break;

                case "Undefined":
                    break;
            }
        }

        #endregion

        #region Методы

        [ChatCommand("autokit")]
        private void chatCmd(BasePlayer player, string command, string[] args) 
        {
            if(!permission.UserHasPermission(player.UserIDString, "autokit.admin")) return;

            if(args == null || args?.Length == 0) player.ChatMessage("Не введен аргумент! (dust, tundra, winter, normal)");

            switch(args[0].ToLower())
            {
                case "dust":
                    SetupNewItems(player, "dust");
                    return;

                case "tundra":
                    SetupNewItems(player, "tundra");
                    return;
                    
                case "winter":
                    SetupNewItems(player, "winter");
                    return;

                case "normal":
                    SetupNewItems(player, "normal");
                    return;
            }

            player.ChatMessage("Указан неизвестный аргумент!");
        }
        
        private void SetupNewItems(BasePlayer player, string caseStr) 
        {
            if(caseStr == "dust") 
            {
                _config.biomes.dust.items = new List<Configuration.Biome.ItemConfig>();
                
                foreach(var itemInventory in player.inventory.containerMain.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "main");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.dust.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerBelt.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "belt");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.dust.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerWear.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "wear");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.dust.items.Add(item);
                }
            }

            if(caseStr == "tundra") 
            {
                _config.biomes.tundra.items = new List<Configuration.Biome.ItemConfig>();

                foreach(var itemInventory in player.inventory.containerMain.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "main");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.tundra.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerBelt.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "belt");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.tundra.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerWear.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "wear");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.tundra.items.Add(item);
                }
            }

            if(caseStr == "winter") 
            {
                _config.biomes.winter.items = new List<Configuration.Biome.ItemConfig>();

                foreach(var itemInventory in player.inventory.containerMain.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "main");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.winter.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerBelt.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "belt");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.winter.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerWear.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "wear");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.winter.items.Add(item);
                }
            }

            if(caseStr == "normal") 
            {
                _config.biomes.normal.items = new List<Configuration.Biome.ItemConfig>();

                foreach(var itemInventory in player.inventory.containerMain.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "main");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.normal.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerBelt.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "belt");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.normal.items.Add(item);
                }

                foreach(var itemInventory in player.inventory.containerWear.itemList) 
                {
                    Configuration.Biome.ItemConfig item = new Configuration.Biome.ItemConfig(itemInventory.skin, itemInventory.info.shortname, itemInventory.amount, "wear");

                    if(!string.IsNullOrEmpty(itemInventory.name)) item.name = itemInventory.name;
                    _config.biomes.normal.items.Add(item);
                }
            }

            NextTick(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, Configuration.Biome biome) 
        {
            if(biome.recive && permission.UserHasPermission(player.UserIDString, biome.permission))
            {
                if(biome.strip) player.inventory.Strip();

                foreach(var itemConf in biome.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));
                }
            }
        }

        private static string GetBiome(Vector3 pos)
        {
            if (TerrainMeta.BiomeMap.GetBiome(pos, 1) > 0.5f ) return "Dust";
            if (TerrainMeta.BiomeMap.GetBiome(pos, 2) > 0.5f ) return "Normal";
            if (TerrainMeta.BiomeMap.GetBiome(pos, 4) > 0.5f ) return "Tundra";
            if (TerrainMeta.BiomeMap.GetBiome(pos, 8) > 0.5f ) return "Winter";
            
            return "Undefined";
        }

        #endregion
    }
}

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