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

FREE IQKits : 0.1.5 0.1.5

Нет прав для скачивания
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using System.Linq;
using System.Text;
using ConVar;
using Oxide.Core;
namespace Oxide.Plugins {
    [Info("IQKits", "Mercury", "0.1.5")]
    [Description("Лучшие наборы из всех,которые есть")]
    class IQKits : RustPlugin {
        /// <summary>
        /// Обновление 0.1.0
        /// - FIX NRE если в оружие 0 патронов
        /// - Добавлена проверка на админа в чат командах
        /// - Убрал дебаг
        /// - Добавлена возможность разрешать/запрещать использовать определенные наборы во время рейдблока
        /// - Добавлена поддержка IQRankSystem
        /// - Добавлена возможность разрешать использовать определенные наборы с наличием ранга
        /// Обновление 0.1.2
        /// - Исправил неккоректную запись набора в дата файл с типами "Amount/Amount + Cooldown"
        /// Обновление 0.1.3
        /// /// </summary>
#region Reference
        [PluginReference]
        Plugin ImageLibrary, IQPlagueSkill, IQChat, IQRankSystem;
#region IQChat
        public void SendChat(BasePlayer player, string Message, Chat.ChatChannel channel = Chat.ChatChannel.Global) {
            var Chat = config.ReferenceSetting.IQChatSetting;
            if (IQChat) IQChat?.Call("API_ALERT_PLAYER", player, Message, Chat.CustomPrefix, Chat.CustomAvatar);
            else player.SendConsoleCommand("chat.add", channel, 0, Message);
        }
#endregion
#region ImageLibrary
        private string GetImage(string fileName, ulong skin = 0) {
            var imageId = (string)plugins.Find("ImageLibrary").CallHook("GetImage", fileName, skin);
            if (!string.IsNullOrEmpty(imageId)) return imageId;
            return string.Empty;
        }
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
        public void SendImage(BasePlayer player, string imageName, ulong imageId = 0) => ImageLibrary?.Call("SendImage", player, imageName, imageId);
        public bool HasImage(string imageName) => (bool)ImageLibrary?.Call("HasImage", imageName);
#endregion
#region IQPlagueSkill
        bool IS_SKILL_COOLDOWN(BasePlayer player) => (bool)IQPlagueSkill?.CallHook("API_IS_COOLDOWN_SKILL_KITS", player);
        bool IS_SKILL_RARE(BasePlayer player) => (bool)IQPlagueSkill?.CallHook("API_IS_RARE_SKILL_KITS", player);
        int GET_SKILL_COOLDOWN_PERCENT() => (int)IQPlagueSkill?.CallHook("API_GET_COOLDOWN_IQKITS");
        int GET_SKILL_RARE_PERCENT() => (int)IQPlagueSkill?.CallHook("API_GET_RARE_IQKITS");
#endregion
#region RaidBlocked
        public Boolean IsRaidBlocked(BasePlayer player, Boolean Skipped) {
            if (Skipped) return false;
            var ret = Interface.Call("CanTeleport", player) as String;
            if (ret != null) return true;
            else return false;
        }
#endregion
#region IQRankSystem
        Boolean IsRank(UInt64 userID, String Key) {
            if (!IQRankSystem) return true;
            if (String.IsNullOrWhiteSpace(Key)) return true;
            return (Boolean)IQRankSystem?.Call("API_GET_AVAILABILITY_RANK_USER", userID, Key);
        }
        String GetRankName(String Key) {
            String Rank = string.Empty;
            if (!IQRankSystem) return Rank;
            return (String)IQRankSystem?.Call("API_GET_RANK_NAME", Key);
        }
#endregion
#endregion
#region Vars
        public static DateTime TimeCreatedSave = SaveRestore.SaveCreatedTime.Date;
        public static DateTime RealTime = DateTime.Now.Date;
        public static int WipeTime = RealTime.Subtract(TimeCreatedSave).Days;
        enum BiomeType {
            None, Arid, Temperate, Tundra, Arctic
        }
        enum TypeContent {
            Ammo, Contents
        }
        enum TypeAutoKit {
            Single, List, PriorityList, BiomeList,
        }
        enum TypeKits {
            Cooldown, Amount, Started, AmountCooldown,
        }
        enum ContainerItem {
            containerWear, containerBelt, containerMain
        }
        public Dictionary<BasePlayer, int> PagePlayers = new Dictionary<BasePlayer, int>();
#endregion
#region Configuration
        private static Configuration config = new Configuration();
        private class Configuration {
            [JsonProperty("Общие настройки")]
            public GeneralSettings GeneralSetting = new GeneralSettings();
            [JsonProperty("Настройки интерфейса")]
            public InterfaceSettings InterfaceSetting = new InterfaceSettings();
            [JsonProperty("Настройка наборов")]
            public Dictionary<String, Kits> KitList = new Dictionary<String, Kits>();
            [JsonProperty("Настройки плагинов совместимости")]
            public ReferenceSettings ReferenceSetting = new ReferenceSettings();
            internal class ReferenceSettings {
                [JsonProperty("Настройки IQChat")]
                public IQChatSettings IQChatSetting = new IQChatSettings();
                internal class IQChatSettings {
                    [JsonProperty("IQChat : Кастомный префикс в чате")]
                    public String CustomPrefix;
                    [JsonProperty("IQChat : Кастомный аватар в чате(Если требуется)")]
                    public String CustomAvatar;
                }
            }
            internal class GeneralSettings {
                [JsonProperty("Настройки автоматических китов")]
                public AutoKit AutoKitSettings = new AutoKit();
                [JsonProperty("Автоматическая очистка наборов у игроков после вайпа (true - включено/false - выключено)")]
                public Boolean AutoWipeClearKits;
                internal class AutoKit {
                    [JsonProperty("Тип автокитов : 0 - Единый ключ, 1 - Случаный список, 2 - Приоритетный список, 3 - Биомный список")]
                    public TypeAutoKit TypeAuto;
                    [JsonProperty("Ключ набора (Тип 0 - Единый ключ)")]
                    public String StartKitKey;
                    [JsonProperty("Список ключей набора (Тип 1 - Случайный список).Дается один из случайных автокитов доступных игроку")]
                    public List<KitSettings> KitListRandom = new List<KitSettings>();
                    [JsonProperty("Список ключей набора (Тип 2 - Приоритетный список).Дается доступный набор игроку, который выше других")]
                    public List<KitSettings> KitListPriority = new List<KitSettings>();
                    [JsonProperty("Список ключей наборов по биомам (Тип 3 - Биомный список).Дается доступный набор игроку, в зависимости от биома")]
                    public List<BiomeKits> BiomeStartedKitList = new List<BiomeKits>();
                    internal class BiomeKits {
                        [JsonProperty("Настройка набора")]
                        public KitSettings Kits = new KitSettings();
                        [JsonProperty("Номер биома в котором будет даваться набор ( 1 - Arid, 2 - Temperate, 3 - Tundra, 4 - Arctic )")]
                        public BiomeType biomeType;
                    }
                    internal class KitSettings {
                        [JsonProperty("Ключ набора")]
                        public String StartKitKey;
                        [JsonProperty("Права для набора(не оставляйте это поле пустым)")]
                        public String Permissions;
                    }
                }
            }
            internal class InterfaceSettings {
                [JsonProperty("Использовать кнопку ЗАКРЫТЬ в UI (true - да/false - нет).Если установлено false - ui будет закрываться при нажатии в любом месте")]
                public Boolean CloseType;
                [JsonProperty("Закрывать интерфейс после выбора набора")]
                public Boolean CloseUiTakeKit;
                [JsonProperty("HEX: Цвет заднего фона")]
                public String HEXBackground;
                [JsonProperty("HEX: Цвет текста")]
                public String HEXLabels;
                [JsonProperty("HEX: Кнопки с информацией")]
                public String HEXInfoItemButton;
                [JsonProperty("HEX: Цвет текста на кнопке с информацией")]
                public String HEXLabelsInfoItemButton;
                [JsonProperty("HEX: Цвет кнопки забрать")]
                public String HEXAccesButton;
                [JsonProperty("HEX: Цвет текста на кнопке забрать")]
                public String HEXLabelsAccesButton;
                [JsonProperty("HEX: Цвет полосы перезарядки")]
                public String HEXCooldowns;
                [JsonProperty("HEX: Цвет блоков с информацией")]
                public String HEXBlock;
                [JsonProperty("HEX: Цвет блоков на которых будут лежать предметы")]
                public String HEXBlockItemInfo;
                [JsonProperty("Время появления интерфейса(его плавность)")]
                public Single InterfaceFadeOut;
                [JsonProperty("Время исчезновения интерфейса(его плавность)")]
                public Single InterfaceFadeIn;
                [JsonProperty("PNG заднего фона с информацией о том,что находится в наборе")]
                public String PNGInfoPanel;
                [JsonProperty("PNG заднего фона уведомления")]
                public String PNGAlert;
            }
            internal class Kits {
                [JsonProperty("Тип набора(0 - С перезарядкой, 1 - Лимитированый, 2 - Стартовый(АвтоКит), 3 - Лимитированый с перезарядкой)")]
                public TypeKits TypeKit;
                [JsonProperty("Отображаемое имя")]
                public String DisplayName;
                [JsonProperty("Через сколько дней вайпа будет доступен набор")]
                public Int32 WipeOpened;
                [JsonProperty("Разрешить использовать этот набор во время рейдблока (true - да/false - нет)")]
                public Boolean UseRaidBlock = true;
                [JsonProperty("IQRankSystem : Разрешить использовать этот набор только по рангу (Впишите ключ с рангом).Если вам это не нужно - оставьте поле пустым")]
                public String RankUser = "";
                [JsonProperty("Права")]
                public String Permission;
                [JsonProperty("PNG(128x128)")]
                public String PNG;
                [JsonProperty("Sprite(Установится если отсутствует PNG)")]
                public String Sprite;
                [JsonProperty("Shortname(Установится если отсутствует PNG и Sprite)")]
                public String Shortname;
                [JsonProperty("Время перезарядки набора")]
                public Int32 CoolDown;
                [JsonProperty("Количество сколько наборов можно взять")]
                public Int32 Amount;
                [JsonProperty("Предметы , которые будут даваться в данном наборе")]
                public List<ItemsKit> ItemKits = new List<ItemsKit>();
                internal class ItemsKit {
                    [JsonProperty("Выберите контейнер в который будет перенесен предмет(0 - Одежда, 1 - Панель быстрого доступа, 2 - Рюкзак)")]
                    public ContainerItem ContainerItemType;
                    [JsonProperty("Название предмета")]
                    public String DisplayName;
                    [JsonProperty("Shortname предмета")]
                    public String Shortname;
                    [JsonProperty("Количество(Если это команда,так-же указывайте число)")]
                    public Int32 Amount;
                    [JsonProperty("Настройки случайного количества выпадения предмета")]
                    public RandomingDrop RandomDropSettings = new RandomingDrop();
                    [JsonProperty("Шанс на выпадения предмета(Оставьте 0 - если не нужен шанс)")]
                    public Int32 Rare;
                    [JsonProperty("SkinID предмета")]
                    public UInt64 SkinID;
                    [JsonProperty("PNG предмета(если установлена команда)")]
                    public String PNG;
                    [JsonProperty("Sprite(Если установлена команда и не установлен PNG)")]
                    public String Sprite;
                    [JsonProperty("Команда(%STEAMID% заменится на ID пользователя)")]
                    public String Command;
                    [JsonProperty("Содержимое внутри предмета (Пример : Вода в бутылке) не корректируйте эти значения, если не знаете для чего они.Используйте встроенные команды")]
                    public List<ItemContents> ContentsItem = new List<ItemContents>();
                    internal class ItemContents {
                        [JsonProperty("Тип : 0 - Патроны | 1 - Контент")]
                        public TypeContent ContentType;
                        [JsonProperty("Shortname предмета")]
                        public String Shortname = "";
                        [JsonProperty("Количество предметов")]
                        public Int32 Amount = 0;
                        [JsonProperty("Целостность предмета")]
                        public Single Condition = 0;
                    }
                    internal class RandomingDrop {
                        [JsonProperty("Использовать случайное выпадение предмета(Действует только на предметы)")]
                        public Boolean UseRandomItems;
                        [JsonProperty("Минимальное количество")]
                        public Int32 MinAmount;
                        [JsonProperty("Максимальное количество")]
                        public Int32 MaxAmount;
                    }
                }
            }
            public static Configuration GetNewConfiguration() {
                return new Configuration {
                    ReferenceSetting = new ReferenceSettings {
                        IQChatSetting = new ReferenceSettings.IQChatSettings {
                            CustomAvatar = "", CustomPrefix = "",
                        }
                        ,
                    }
                    , KitList = new Dictionary<String, Kits> {
#region Start Kits
                        ["start1"]
                        = new Kits {
                            TypeKit = TypeKits.Started, Amount = 0, CoolDown = 0, WipeOpened = 0, DisplayName = "Новичок", Permission = "iqkits.start1", RankUser = "", UseRaidBlock = false, PNG = "", Shortname = "", Sprite = "", ItemKits = new List<Kits.ItemsKit> {
                                new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak103", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0,
                                }
                                , new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak104", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0,
                                }
                                ,
                            }
                            ,
                        }
                        , ["start2"] = new Kits {
                            TypeKit = TypeKits.Started, Amount = 0, CoolDown = 0, WipeOpened = 0, DisplayName = "Новичок #2", Permission = "iqkits.start2", RankUser = "", UseRaidBlock = false, PNG = "", Shortname = "", Sprite = "", ItemKits = new List<Kits.ItemsKit> {
                                new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak103", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0,
                                }
                                , new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak104", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0,
                                }
                                ,
                            }
                            ,
                        }
                        , ["start3Premium"] = new Kits {
                            TypeKit = TypeKits.Started, Amount = 0, CoolDown = 0, WipeOpened = 0, DisplayName = "Премиум новичок", Permission = "iqkits.premium", RankUser = "", UseRaidBlock = false, PNG = "", Shortname = "", Sprite = "", ItemKits = new List<Kits.ItemsKit> {
                                new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak103", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0,
                                }
                                , new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak104", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0,
                                }
                                ,
                            }
                            ,
                        }
                        ,
#endregion
#region Kits
                        ["hunter"]
                        = new Kits {
                            TypeKit = TypeKits.Cooldown, Amount = 0, CoolDown = 300, WipeOpened = 2, DisplayName = "Охотник", Permission = "iqkits.default", RankUser = "", UseRaidBlock = false, PNG = "", Shortname = "rifle.ak", Sprite = "", ItemKits = new List<Kits.ItemsKit> {
                                new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak103", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0, ContentsItem = new List<Kits.ItemsKit.ItemContents> {
                                    }
                                }
                                , new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak104", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0, ContentsItem = new List<Kits.ItemsKit.ItemContents> {
                                    }
                                }
                                ,
                            }
                            ,
                        }
                        , ["med"] = new Kits {
                            TypeKit = TypeKits.Amount, Amount = 10, CoolDown = 0, WipeOpened = 1, DisplayName = "Медик", Permission = "iqkits.default", RankUser = "", UseRaidBlock = false, PNG = "", Shortname = "", Sprite = "assets/icons/broadcast.png", ItemKits = new List<Kits.ItemsKit> {
                                new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak103", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0, ContentsItem = new List<Kits.ItemsKit.ItemContents> {
                                    }
                                }
                                , new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak104", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0, ContentsItem = new List<Kits.ItemsKit.ItemContents> {
                                    }
                                }
                                ,
                            }
                            ,
                        }
                        , ["food"] = new Kits {
                            TypeKit = TypeKits.AmountCooldown, Amount = 10, CoolDown = 300, DisplayName = "Еда", WipeOpened = 2, Permission = "iqkits.default", RankUser = "", UseRaidBlock = false, PNG = "https://i.imgur.com/rSWlSlN.png", Shortname = "", Sprite = "", ItemKits = new List<Kits.ItemsKit> {
                                new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak103", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0, ContentsItem = new List<Kits.ItemsKit.ItemContents> {
                                    }
                                }
                                , new Kits.ItemsKit {
                                    ContainerItemType = ContainerItem.containerMain, RandomDropSettings = new Kits.ItemsKit.RandomingDrop {
                                        UseRandomItems = false, MinAmount = 1, MaxAmount = 1
                                    }
                                    , DisplayName = "Ak104", Amount = 1, Command = "", PNG = "", Shortname = "rifle.ak", Rare = 0, Sprite = "", SkinID = 0, ContentsItem = new List<Kits.ItemsKit.ItemContents> {
                                    }
                                }
                                ,
                            }
                            ,
                        }
                        ,
#endregion
                    }
                    , GeneralSetting = new GeneralSettings {
                        AutoWipeClearKits = true, AutoKitSettings = new GeneralSettings.AutoKit {
                            TypeAuto = TypeAutoKit.Single, StartKitKey = "start1", KitListRandom = new List<GeneralSettings.AutoKit.KitSettings> {
                                new GeneralSettings.AutoKit.KitSettings {
                                    Permissions = "iqkits.vip", StartKitKey = "start1"
                                }
                                , new GeneralSettings.AutoKit.KitSettings {
                                    Permissions = "iqkits.hunter", StartKitKey = "food"
                                }
                                ,
                            }
                            , KitListPriority = new List<GeneralSettings.AutoKit.KitSettings> {
                                new GeneralSettings.AutoKit.KitSettings {
                                    Permissions = "iqkits.vip", StartKitKey = "start1"
                                }
                                , new GeneralSettings.AutoKit.KitSettings {
                                    Permissions = "iqkits.hunter", StartKitKey = "food"
                                }
                                ,
                            }
                            , BiomeStartedKitList = new List<GeneralSettings.AutoKit.BiomeKits> {
                                new GeneralSettings.AutoKit.BiomeKits {
                                    biomeType = BiomeType.Arctic, Kits = new GeneralSettings.AutoKit.KitSettings {
                                        Permissions = "iqkits.default", StartKitKey = "start1"
                                    }
                                }
                                , new GeneralSettings.AutoKit.BiomeKits {
                                    biomeType = BiomeType.Arid, Kits = new GeneralSettings.AutoKit.KitSettings {
                                        Permissions = "iqkits.default", StartKitKey = "start1"
                                    }
                                }
                                , new GeneralSettings.AutoKit.BiomeKits {
                                    biomeType = BiomeType.None, Kits = new GeneralSettings.AutoKit.KitSettings {
                                        Permissions = "iqkits.default", StartKitKey = "start1"
                                    }
                                }
                                , new GeneralSettings.AutoKit.BiomeKits {
                                    biomeType = BiomeType.Temperate, Kits = new GeneralSettings.AutoKit.KitSettings {
                                        Permissions = "iqkits.default", StartKitKey = "start1"
                                    }
                                }
                                , new GeneralSettings.AutoKit.BiomeKits {
                                    biomeType = BiomeType.Tundra, Kits = new GeneralSettings.AutoKit.KitSettings {
                                        Permissions = "iqkits.default", StartKitKey = "start1"
                                    }
                                }
                                ,
                            }
                            ,
                        }
                        ,
                    }
                    , InterfaceSetting = new InterfaceSettings {
                        CloseType = true, CloseUiTakeKit = false, HEXBackground = "#0000006A", HEXBlock = "#646361A6", HEXAccesButton = "#708a47", HEXBlockItemInfo = "#3D492837", HEXInfoItemButton = "#8a6347", HEXCooldowns = "#708A47D8", HEXLabels = "#FFFFFFFF", HEXLabelsAccesButton = "#C9E39FFF", HEXLabelsInfoItemButton = "#C9E39FFF", InterfaceFadeIn = 0.35f, InterfaceFadeOut = 0.35f, PNGAlert = "https://i.imgur.com/g4Mzn9a.png", PNGInfoPanel = "https://i.imgur.com/9kbOqHK.png",
                    }
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning($"Ошибка чтения #57 конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Data
        [JsonProperty("Дата с информацией о игроках")]
        public Hash<ulong, DataKitsUser> DataKitsUserList = new Hash<ulong, DataKitsUser>();
        public class DataKitsUser {
            [JsonProperty("Информация о наборах игрока")]
            public Dictionary<string, InfoKits> InfoKitsList = new Dictionary<string, InfoKits>();
            internal class InfoKits {
                public int Amount;
                public int Cooldown;
            }
        }
        private void ClearData() {
            if (!config.GeneralSetting.AutoWipeClearKits) return;
            DataKitsUserList.Clear();
            WriteData();
        }
        void ReadData() => DataKitsUserList = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<ulong, DataKitsUser>>("IQKits/KitsData");
        void WriteData() => Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQKits/KitsData", DataKitsUserList);
        void RegisteredDataUser(BasePlayer player) {
            if (!DataKitsUserList.ContainsKey(player.userID)) DataKitsUserList.Add(player.userID, new DataKitsUser {
                InfoKitsList = new Dictionary<string, DataKitsUser.InfoKits> {
                }
            }
            );
            foreach (var Kit in config.KitList.Where(x => !DataKitsUserList[player.userID].InfoKitsList.ContainsKey(x.Key) && (String.IsNullOrWhiteSpace(x.Value.Permission) || permission.UserHasPermission(player.UserIDString, x.Value.Permission)))) DataKitsUserList[player.userID].InfoKitsList.Add(Kit.Key, new DataKitsUser.InfoKits {
                Amount = Kit.Value.Amount, Cooldown = 0
            }
            );
        }
#endregion
#region Metods
#region Images
        void LoadedImage() {
            var Interface = config.InterfaceSetting;
            foreach (var Kit in config.KitList.Where(k => !String.IsNullOrWhiteSpace(k.Value.PNG))) {
                if (!HasImage($"KIT_{Kit.Value.PNG}")) AddImage(Kit.Value.PNG, $"KIT_{Kit.Value.PNG}");
                foreach (var img in Kit.Value.ItemKits.Where(i => !String.IsNullOrWhiteSpace(i.PNG))) {
                    if (!HasImage($"ITEM_KIT_PNG_{img.PNG}")) AddImage(img.PNG, $"ITEM_KIT_PNG_{img.PNG}");
                }
            }
            if (!HasImage($"INFO_BACKGROUND_{Interface.PNGInfoPanel}")) AddImage(Interface.PNGInfoPanel, $"INFO_BACKGROUND_{Interface.PNGInfoPanel}");
            if (!HasImage($"INFO_ALERT_BACKGROUND_{Interface.PNGAlert}")) AddImage(Interface.PNGAlert, $"INFO_ALERT_BACKGROUND_{Interface.PNGAlert}");
            ServerMgr.Instance.StartCoroutine(DownloadImages());
        }
        private IEnumerator DownloadImages() {
            PrintError("AddImages SkyPlugins.ru...");
            foreach (var Kit in config.KitList) foreach (var img in Kit.Value.ItemKits.Where(i => !String.IsNullOrWhiteSpace(i.Shortname))) {
                if (!HasImage($"{img.Shortname}_128px")) AddImage($"https://api.skyplugins.ru/api/getimage/{img.Shortname}/128", $"{img.Shortname}_128px");
            }
            yield return new WaitForSeconds(0.04f);
            PrintError("AddImages SkyPlugins.ru - completed..");
        }
        void CachingImage(BasePlayer player) {
            var Interface = config.InterfaceSetting;
            foreach (var Kit in config.KitList.Where(k => !String.IsNullOrWhiteSpace(k.Value.PNG))) {
                SendImage(player, $"KIT_{Kit.Value.PNG}");
                foreach (var ItemKit in Kit.Value.ItemKits.Where(ik => !String.IsNullOrWhiteSpace(ik.Shortname))) SendImage(player, $"{ItemKit.Shortname}_128px");
                foreach (var img in Kit.Value.ItemKits.Where(i => !String.IsNullOrWhiteSpace(i.PNG))) if (!HasImage($"ITEM_KIT_PNG_{img.PNG}")) AddImage(img.PNG, $"ITEM_KIT_PNG_{img.PNG}");
            }
            SendImage(player, $"INFO_BACKGROUND_{Interface.PNGInfoPanel}");
            SendImage(player, $"INFO_ALERT_BACKGROUND_{Interface.PNGAlert}");
        }
#endregion
#region Registered Permissions
        void RegisteredPermissions() {
            var GeneralSettings = config.GeneralSetting;
            var KitList = config.KitList;
            foreach(var PermissionGeneral in GeneralSettings.AutoKitSettings.KitListRandom) if (!permission.PermissionExists(PermissionGeneral.Permissions, this)) permission.RegisterPermission(PermissionGeneral.Permissions, this);
            foreach (var PermissionGeneral in GeneralSettings.AutoKitSettings.KitListPriority) if (!permission.PermissionExists(PermissionGeneral.Permissions, this)) permission.RegisterPermission(PermissionGeneral.Permissions, this);
            foreach (var PermissionGeneral in GeneralSettings.AutoKitSettings.BiomeStartedKitList) if (!permission.PermissionExists(PermissionGeneral.Kits.Permissions, this)) permission.RegisterPermission(PermissionGeneral.Kits.Permissions, this);
            foreach (var PermissionKits in KitList) if (!permission.PermissionExists(PermissionKits.Value.Permission, this)) permission.RegisterPermission(PermissionKits.Value.Permission, this);
        }
#endregion
#region AutoKit
        void AutoKitGive(BasePlayer player) {
            if (player == null) return;
            Configuration.GeneralSettings.AutoKit AutoKit = config.GeneralSetting.AutoKitSettings;
            Dictionary<String, Configuration.Kits> KitList = config.KitList;
            switch(AutoKit.TypeAuto) {
                case TypeAutoKit.Single : {
                    if (String.IsNullOrWhiteSpace(AutoKit.StartKitKey) || !KitList.ContainsKey(AutoKit.StartKitKey)) {
                        PrintWarning("У вас не верно указан стартовый ключ, такого набора не существует! Игрок не получил его автоматически");
                        return;
                    }
                    ParseAndGive(player, AutoKit.StartKitKey);
                    break;
                }
                case TypeAutoKit.List : {
                    Configuration.GeneralSettings.AutoKit.KitSettings RandomKit = AutoKit.KitListRandom.Where(k => permission.UserHasPermission(player.UserIDString, k.Permissions) && KitList.ContainsKey(k.StartKitKey) && WipeTime >= KitList[k.StartKitKey].WipeOpened).ToList().GetRandom();
                    if (RandomKit == null) return;
                    ParseAndGive(player, RandomKit.StartKitKey);
                    break;
                }
                case TypeAutoKit.PriorityList : {
                    Configuration.GeneralSettings.AutoKit.KitSettings Kit = AutoKit.KitListPriority.FirstOrDefault(k => permission.UserHasPermission(player.UserIDString, k.Permissions) && KitList.ContainsKey(k.StartKitKey) && WipeTime >= KitList[k.StartKitKey].WipeOpened);
                    if (Kit == null) return;
                    ParseAndGive(player, Kit.StartKitKey);
                    break;
                }
                case TypeAutoKit.BiomeList : {
                    Configuration.GeneralSettings.AutoKit.BiomeKits BiomeKit = AutoKit.BiomeStartedKitList.FirstOrDefault(k => GetBiome(player) == k.biomeType && permission.UserHasPermission(player.UserIDString, k.Kits.Permissions) && KitList.ContainsKey(k.Kits.StartKitKey) && WipeTime >= KitList[k.Kits.StartKitKey].WipeOpened);
                    if (BiomeKit == null) return;
                    ParseAndGive(player, BiomeKit.Kits.StartKitKey);
                    break;
                }
            }
        }
#endregion
#region TakeKit
        void TakeKit(BasePlayer player, string KitKey) {
            var Kit = config.KitList[KitKey];
            var ItemKit = Kit.ItemKits;
            var Data = DataKitsUserList[player.userID].InfoKitsList[KitKey];
            if (Data.Cooldown >= CurrentTime()) return;
            int BeltAmount = ItemKit.Where(i => i.ContainerItemType == ContainerItem.containerBelt).Count();
            int WearAmount = ItemKit.Where(i => i.ContainerItemType == ContainerItem.containerWear).Count();
            int MainAmount = ItemKit.Where(i => i.ContainerItemType == ContainerItem.containerMain).Count();
            int Total = BeltAmount + WearAmount + MainAmount;
            if ((player.inventory.containerBelt.capacity - player.inventory.containerBelt.itemList.Count) < BeltAmount || (player.inventory.containerWear.capacity - player.inventory.containerWear.itemList.Count) < WearAmount || (player.inventory.containerMain.capacity - player.inventory.containerMain.itemList.Count) < MainAmount) if (Total > (player.inventory.containerMain.capacity - player.inventory.containerMain.itemList.Count)) {
                Interface_Alert_Kits(player, GetLang("UI_ALERT_FULL_INVENTORY", player.UserIDString));
                return;
            }
            switch (Kit.TypeKit) {
                case TypeKits.Cooldown : {
                    int Cooldown = IQPlagueSkill ? IS_SKILL_COOLDOWN(player) ? (Kit.CoolDown - (Kit.CoolDown / 100 * GET_SKILL_COOLDOWN_PERCENT())) : Kit.CoolDown : Kit.CoolDown;
                    Data.Cooldown = Convert.ToInt32(CurrentTime() + Cooldown);
                    break;
                }
                case TypeKits.Amount : {
                    Data.Amount--;
                    break;
                }
                case TypeKits.AmountCooldown : {
                    int Cooldown = IQPlagueSkill ? IS_SKILL_COOLDOWN(player) ? (Kit.CoolDown - (Kit.CoolDown / 100 * GET_SKILL_COOLDOWN_PERCENT())) : Kit.CoolDown : Kit.CoolDown;
                    Data.Amount--;
                    Data.Cooldown = Convert.ToInt32(CurrentTime() + Cooldown);
                    break;
                }
            }
            ParseAndGive(player, KitKey);
            if (!config.InterfaceSetting.CloseUiTakeKit) {
                DestroyKits(player);
                Interface_Loaded_Kits(player);
                Interface_Alert_Kits(player, GetLang("UI_ALERT_ACCES_KIT", player.UserIDString, Kit.DisplayName));
            }
            else DestroyAll(player);
        }
        void ParseAndGive(BasePlayer player, string KitKey) {
            var Kit = config.KitList[KitKey];
            var ItemKit = Kit.ItemKits;
            foreach (var Item in ItemKit) {
                if (Item.Rare != 0) {
                    int Rare = IQPlagueSkill ? IS_SKILL_RARE(player) ? Item.Rare + GET_SKILL_RARE_PERCENT() : Item.Rare : Item.Rare;
                    if (!IsRareDrop(Rare)) continue;
                }
                if (!String.IsNullOrWhiteSpace(Item.Command)) rust.RunServerCommand(Item.Command.Replace("%STEAMID%", player.UserIDString));
                else {
                    Int32 Amount = Item.RandomDropSettings.UseRandomItems ? UnityEngine.Random.Range(Item.RandomDropSettings.MinAmount, Item.RandomDropSettings.MaxAmount) : (Item.Amount > 1 ? Item.Amount : 1);
                    Item item = ItemManager.CreateByName(Item.Shortname, Amount, Item.SkinID);
                    if (!String.IsNullOrWhiteSpace(Item.DisplayName)) item.name = Item.DisplayName;
                    foreach(var Content in Item.ContentsItem) {
                        Item ItemContent = ItemManager.CreateByName(Content.Shortname, Content.Amount);
                        ItemContent.condition = Content.Condition;
                        switch(Content.ContentType) {
                            case TypeContent.Contents : {
                                ItemContent.MoveToContainer(item.contents);
                                break;
                            }
                            case TypeContent.Ammo : {
                                BaseProjectile Weapon = item.GetHeldEntity() as BaseProjectile;
                                if (Weapon != null) {
                                    Weapon.primaryMagazine.contents = ItemContent.amount;
                                    Weapon.primaryMagazine.ammoType = ItemManager.FindItemDefinition(Content.Shortname);
                                }
                                break;
                            }
                        }
                    }
                    GiveItem(player, item, Item.ContainerItemType == ContainerItem.containerBelt ? player.inventory.containerBelt : Item.ContainerItemType == ContainerItem.containerWear ? player.inventory.containerWear : player.inventory.containerMain);
                }
            }
        }
        private void GiveItem(BasePlayer player, Item item, ItemContainer cont = null) {
            if (item == null) return;
            var inv = player.inventory;
            var MovedContainer = item.MoveToContainer(cont) || item.MoveToContainer(inv.containerMain);
            if (!MovedContainer) {
                if (cont == inv.containerBelt) MovedContainer = item.MoveToContainer(inv.containerWear);
                if (cont == inv.containerWear) MovedContainer = item.MoveToContainer(inv.containerBelt);
            }
            if (!MovedContainer) item.Drop(player.GetCenter(), player.GetDropVelocity());
        }
#endregion
#region Kit Metods Admin
#region Kit Add
        void CreateNewKit(BasePlayer player, string NameKit) {
            if (!player.IsAdmin) return;
            if (config.KitList.ContainsKey(NameKit)) {
                SendChat(player, "Ключ данного набора уже существует!");
                return;
            }
            config.KitList.Add(NameKit, new Configuration.Kits {
                Amount = 0, CoolDown = 300, DisplayName = NameKit, Permission = "iqkits.setting", PNG = "", Shortname = "", UseRaidBlock = false, RankUser = "", Sprite = "assets/icons/gear.png", TypeKit = TypeKits.Cooldown, ItemKits = GetPlayerItems(player), WipeOpened = 0,
            }
            );
            SaveConfig();
            SendChat(player, $"Набор с ключем {NameKit} успешно создан");
        }
        private List<Configuration.Kits.ItemsKit> GetPlayerItems(BasePlayer player) {
            List<Configuration.Kits.ItemsKit> kititems = new List<Configuration.Kits.ItemsKit>();
            foreach (Item item in player.inventory.containerWear.itemList) {
                if (item != null) {
                    var iteminfo = ItemToKit(item, ContainerItem.containerWear);
                    kititems.Add(iteminfo);
                }
            }
            foreach (Item item in player.inventory.containerMain.itemList) {
                if (item != null) {
                    var iteminfo = ItemToKit(item, ContainerItem.containerMain);
                    kititems.Add(iteminfo);
                }
            }
            foreach (Item item in player.inventory.containerBelt.itemList) {
                if (item != null) {
                    var iteminfo = ItemToKit(item, ContainerItem.containerBelt);
                    kititems.Add(iteminfo);
                }
            }
            return kititems;
        }
        private Configuration.Kits.ItemsKit ItemToKit(Item item, ContainerItem containerItem) {
            Configuration.Kits.ItemsKit ItemsKit = new Configuration.Kits.ItemsKit();
            ItemsKit.Amount = item.amount;
            ItemsKit.ContainerItemType = containerItem;
            ItemsKit.Shortname = item.info.shortname;
            ItemsKit.SkinID = item.skin;
            ItemsKit.Rare = 0;
            ItemsKit.PNG = "";
            ItemsKit.Sprite = "";
            ItemsKit.Command = "";
            ItemsKit.DisplayName = "";
            ItemsKit.RandomDropSettings = new Configuration.Kits.ItemsKit.RandomingDrop {
                MinAmount = 0, MaxAmount = 0, UseRandomItems = false,
            }
            ;
            ItemsKit.ContentsItem = GetContentItem(item);
            return ItemsKit;
        }
        private List<Configuration.Kits.ItemsKit.ItemContents> GetContentItem(Item Item) {
            List<Configuration.Kits.ItemsKit.ItemContents> Contents = new List<Configuration.Kits.ItemsKit.ItemContents>();
            if (Item.contents != null) foreach (Item Content in Item.contents.itemList) {
                Configuration.Kits.ItemsKit.ItemContents ContentItem = new Configuration.Kits.ItemsKit.ItemContents();
                ContentItem.ContentType = TypeContent.Contents;
                ContentItem.Shortname = Content.info.shortname;
                ContentItem.Amount = Content.amount;
                ContentItem.Condition = Content.condition;
                Contents.Add(ContentItem);
            }
            BaseProjectile Weapon = Item.GetHeldEntity() as BaseProjectile;
            if (Weapon != null) {
                Configuration.Kits.ItemsKit.ItemContents ContentItem = new Configuration.Kits.ItemsKit.ItemContents();
                ContentItem.ContentType = TypeContent.Ammo;
                ContentItem.Shortname = Weapon.primaryMagazine.ammoType.shortname;
                ContentItem.Amount = Weapon.primaryMagazine.contents == 0 ? 1 : Weapon.primaryMagazine.contents;
                ContentItem.Condition = Weapon.primaryMagazine.ammoType.condition.max;
                Contents.Add(ContentItem);
            }
            return Contents;
        }
#endregion
#region Kit Remove
        void KitRemove(BasePlayer player, string NameKit) {
            if (!player.IsAdmin) return;
            if (!config.KitList.ContainsKey(NameKit)) {
                SendChat(player, "Набора с таким ключем не существует!");
                return;
            }
            config.KitList.Remove(NameKit);
            SaveConfig();
            SendChat(player, $"Набора с ключем {NameKit} успешно удален");
        }
#endregion
#region Kit Edit
        void KitEdit(BasePlayer player, String NameKit) {
            if (!player.IsAdmin) return;
            if (!config.KitList.ContainsKey(NameKit)) {
                SendChat(player, "Ключ данного набора не существует!");
                return;
            }
            var Kit = config.KitList[NameKit];
            Kit.ItemKits = GetPlayerItems(player);
            SaveConfig();
            SendChat(player, $"Предметы набора с ключем {NameKit} успешно изменены, настройки сохранены");
        }
#endregion
#endregion
        public bool IsRareDrop(int Rare) => UnityEngine.Random.Range(0, 100) >= (100 - (Rare > 100 ? 100 : Rare));
#endregion
#region Hooks
        void OnNewSave(string filename) => ClearData();
        object OnPlayerRespawned(BasePlayer player) {
            player.inventory.Strip();
            AutoKitGive(player);
            return null;
        }
        void Init() => ReadData();
        private void OnServerInitialized() {
            RegisteredPermissions();
            LoadedImage();
            foreach (BasePlayer p in BasePlayer.activePlayerList) OnPlayerConnected(p);
        }
        void OnPlayerConnected(BasePlayer player) {
            CachingImage(player);
            RegisteredDataUser(player);
        }
        void OnPlayerDisconnected(BasePlayer player, string reason) => player.SetFlag(BaseEntity.Flags.Reserved3, false);
        void Unload() {
            foreach (BasePlayer player in 
// ... [Code preview truncated due to length. Full source in attached file] ...

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