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

FREE IQKits : 1.1.9 1.1.9

Нет прав для скачивания
C#:
using Oxide.Core;
using UnityEngine;
using System;
using System.Collections.Generic;
using ConVar;
using System.Collections;
using Oxide.Core.Plugins;
using System.Linq;
using Oxide.Game.Rust.Cui;
using System.Text;
using Newtonsoft.Json;
namespace Oxide.Plugins {
    [Info("IQKits", "Sempai#3239", "1.1.9")]
    [Description("Лучшие наборы из всех,которые есть")]
    internal class IQKits : RustPlugin {
        [ConsoleCommand("kit")]
        private void IQKITS_ConsoleCommand(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (arg == null || arg.Args == null || arg.Args.Length < 2) {
                if (player != null) {
                    PagePlayers[player] = 0;
                    Interface_IQ_Kits(player);
                }
                return;
            }
            if (player != null && !player.IsAdmin) return;
            switch (arg.Args[0]) {
                case "create" : case "createkit" : case "add" : case "new" : {
                    if (player == null || !player.IsAdmin) return;
                    String NameKit = arg.Args[1];
                    if (String.IsNullOrWhiteSpace(NameKit)) {
                        PrintToConsole(player, "Введите корректное название!");
                        return;
                    }
                    CreateNewKit(player, NameKit);
                    break;
                }
                case "remove" : case "delete" : case "revoke" : {
                    if (player == null || !player.IsAdmin) return;
                    String NameKit = arg.Args[1];
                    if (String.IsNullOrWhiteSpace(NameKit)) {
                        PrintToConsole(player, "Введите корректное название!");
                        return;
                    }
                    KitRemove(player, NameKit);
                    break;
                }
                case "give" : {
                    if (player != null && !player.IsAdmin) return;
                    String IDarName = arg.Args[1];
                    if (String.IsNullOrWhiteSpace(IDarName)) {
                        if (player != null) PrintToConsole(player, "Введите корректное имя или ID");
                        PrintError("Введите корректное имя или ID");
                        return;
                    }
                    BasePlayer TargetUser = BasePlayer.Find(IDarName);
                    if (TargetUser == null) {
                        if (player != null) PrintToConsole(player, "Такого игрока нет на сервере");
                        PrintError("Такого игрока нет на сервере");
                        return;
                    }
                    String KitKey = arg.Args[2];
                    if (String.IsNullOrWhiteSpace(KitKey)) {
                        if (player != null) PrintToConsole(player, "Введите корректный ключ набора");
                        PrintError("Введите корректный ключ набора");
                        return;
                    }
                    if (!config.KitList.ContainsKey(KitKey)) {
                        if (player != null) PrintToConsole(player, "Набора с данным ключем не существует");
                        PrintError("Набора с данным ключем не существует");
                        return;
                    }
                    ParseAndGive(TargetUser, KitKey);
                    if (player != null) PrintToConsole(player, "Успешно выдан набор");
                    break;
                }
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning($"Ошибка чтения #57 конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        private Int32 GET_SKILL_COOLDOWN_PERCENT() {
            return (Int32)IQPlagueSkill?.CallHook("API_GET_COOLDOWN_IQKITS");
        }
        private void GiveItem(BasePlayer player, Item item, ItemContainer cont = null) {
            if (item == null) return;
            PlayerInventory inv = player.inventory;
            Boolean 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());
        }
        protected override void LoadDefaultConfig() {
            config = Configuration.GetNewConfiguration();
        }
        protected override void SaveConfig() {
            Config.WriteObject(config);
        }
        [JsonProperty("Дата с информацией о игроках")]
        public Hash<UInt64, DataKitsUser> DataKitsUserList = new Hash<UInt64, DataKitsUser>();
        private void DestroyKits(BasePlayer player) {
            CuiHelper.DestroyUi(player, $"BTN_BACK_BUTTON");
            CuiHelper.DestroyUi(player, $"BTN_NEXT_BUTTON");
            for (Int32 i = 0; i < 4; i++) {
                CuiHelper.DestroyUi(player, $"WHAT_INFO_{i}");
                CuiHelper.DestroyUi(player, $"TAKE_KIT_{i}");
                CuiHelper.DestroyUi(player, $"COOLDOWN_LINE_{i}");
                CuiHelper.DestroyUi(player, $"COOLDOWN_TITLE{i}");
                CuiHelper.DestroyUi(player, $"COOLDOWN_PANEL_{i}");
                CuiHelper.DestroyUi(player, $"TITLE_KIT_{i}");
                CuiHelper.DestroyUi(player, $"DISPLAY_NAME_PANEL_{i}");
                CuiHelper.DestroyUi(player, $"AVATAR_{i}");
                CuiHelper.DestroyUi(player, $"AVATAR_PANEL_{i}");
                CuiHelper.DestroyUi(player, $"KIT_PANEL_{i}");
            }
        }
        public Boolean HasImage(String imageName) {
            return (Boolean)ImageLibrary?.Call("HasImage", imageName);
        }
        public void SendChat(BasePlayer player, String Message, Chat.ChatChannel channel = Chat.ChatChannel.Global) {
            Configuration.ReferenceSettings.IQChatSettings 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);
        }
        public static String FormatTime(TimeSpan time) {
            String result = String.Empty;
            if (time.Days != 0) result = $"{Format(time.Days, "дней", "дня", "день")}";
            if (time.Hours != 0 && time.Days == 0) result = $"{Format(time.Hours, "часов", "часа", "час")}";
            if (time.Minutes != 0 && time.Hours == 0 && time.Days == 0) result = $"{Format(time.Minutes, "минут", "минуты", "минута")}";
            if (time.Seconds != 0 && time.Days == 0 && time.Minutes == 0 && time.Hours == 0) result = $"{Format(time.Seconds, "секунд", "секунды", "секунда")}";
            return result;
        }
        private enum BiomeType {
            None, Arid, Temperate, Tundra, Arctic
        }
        private void Interface_Alert_Kits(BasePlayer player, String Message) {
            DestroyAlert(player);
            CuiElementContainer container = new CuiElementContainer();
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            Single FadeIn = Interface.InterfaceFadeIn;
            Single FadeOut = Interface.InterfaceFadeOut;
            String AlertBackground = $"INFO_ALERT_BACKGROUND_{Interface.PNGAlert}";
            container.Add(new CuiElement {
                FadeOut = FadeOut, Parent = IQKITS_OVERLAY, Name = $"INFO_ALERT_BACKGROUND", Components = {
                    new CuiRawImageComponent {
                        FadeIn = FadeIn, Png = GetImage(AlertBackground), Color = HexToRustFormat(Interface.HEXBlock)
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.3213542 0.01018518", AnchorMax = $"0.6958333 0.1101852"
                    }
                    ,
                }
            }
            );
            container.Add(new CuiLabel {
                FadeOut = FadeOut, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Text = {
                    FadeIn = FadeIn, Text = Message.ToUpper(), Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , "INFO_ALERT_BACKGROUND", "TITLE_ALERT");
            CuiHelper.AddUi(player, container);
            timer.Once(2.5f, () => {
                DestroyAlert(player);
            }
            );
        }
        private void Interface_Loaded_Kits(BasePlayer player) {
            RegisteredDataUser(player);
            IEnumerable<KeyValuePair<String, Configuration.Kits>> Kits = GetKits(player);
            if (Kits == null || Kits.Skip(4 * (PagePlayers[player])).Take(4).Count() == 0) return;
            CuiElementContainer container = new CuiElementContainer();
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            Single FadeIn = Interface.InterfaceFadeIn;
            Single FadeOut = Interface.InterfaceFadeOut;
            Int32 CountKitPage = Kits.Skip(4 * (PagePlayers[player] + 1)).Take(4).Count();
            Int32 x = 0, y = 0, i = 0;
            foreach (KeyValuePair<String, Configuration.Kits> Kit in Kits.Skip(4 * (PagePlayers[player])).Take(4)) {
                DataKitsUser.InfoKits Data = DataKitsUserList[player.userID].InfoKitsList[Kit.Key];
                Boolean IsCooldown = Data.Cooldown >= CurrentTime();
                container.Add(new CuiPanel {
                    FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                        AnchorMin = $"{0.08385417 + (x * 0.52)} {0.5842593 - (y * 0.342)}", AnchorMax = $"{0.3916667 + (x * 0.52)} {0.8231534 - (y * 0.342)}"
                    }
                    , Image = {
                        FadeIn = FadeIn, Color = "0 0 0 0"
                    }
                }
                , IQKITS_OVERLAY, $"KIT_PANEL_{i}");
                container.Add(new CuiPanel {
                    FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"0.4365226 1"
                    }
                    ,  //
                    Image = {
                        FadeIn = FadeIn, Color = HexToRustFormat(Interface.HEXBlock)
                    }
                }
                , $"KIT_PANEL_{i}", $"AVATAR_PANEL_{i}");
                if (String.IsNullOrWhiteSpace(Kit.Value.Sprite)) {
                    CuiRawImageComponent ComponentAvatar = !String.IsNullOrWhiteSpace(Kit.Value.PNG) ? new CuiRawImageComponent {
                        FadeIn = FadeIn, Png = GetImage($"KIT_{Kit.Value.PNG}")
                    }
                    : new CuiRawImageComponent {
                        FadeIn = FadeIn, Png = GetImage(Kit.Value.Shortname)
                    }
                    ;
                    container.Add(new CuiElement {
                        FadeOut = FadeOut, Parent = $"AVATAR_PANEL_{i}", Name = $"AVATAR_{i}", Components = {
                            ComponentAvatar, new CuiRectTransformComponent {
                                AnchorMin = "0.0775194 0.07364181", AnchorMax = $"0.9224806 0.9185845"
                            }
                            ,
                        }
                    }
                    );
                }
                else {
                    container.Add(new CuiElement {
                        FadeOut = FadeOut, Parent = $"AVATAR_PANEL_{i}", Name = $"AVATAR_{i}", Components = {
                            new CuiImageComponent {
                                FadeIn = FadeIn, Sprite = Kit.Value.Sprite
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = "0.0775194 0.07364181", AnchorMax = $"0.9224806 0.9185845"
                            }
                            ,
                        }
                    }
                    );
                }
                container.Add(new CuiPanel {
                    FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                        AnchorMin = $"0.4602368 0.6472726", AnchorMax = $"1 1"
                    }
                    , Image = {
                        FadeIn = FadeIn, Color = HexToRustFormat(Interface.HEXBlock)
                    }
                }
                , $"KIT_PANEL_{i}", $"DISPLAY_NAME_PANEL_{i}");
                container.Add(new CuiLabel {
                    FadeOut = FadeOut, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "0.965517 0.9449963"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = GetLang("UI_DISPLAY_NAME_KIT", player.UserIDString, Kit.Value.DisplayName.ToUpper()), Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.UpperRight
                    }
                }
                , $"DISPLAY_NAME_PANEL_{i}", $"TITLE_KIT_{i}");
                container.Add(new CuiPanel {
                    FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                        AnchorMin = $"0.4602368 0.2519316", AnchorMax = $"1 0.6046609"
                    }
                    , Image = {
                        FadeIn = FadeIn, Color = HexToRustFormat(Interface.HEXBlock)
                    }
                }
                , $"KIT_PANEL_{i}", $"COOLDOWN_PANEL_{i}");
                Double XMax = IsCooldown ? (Double)((Data.Cooldown - CurrentTime()) * Math.Pow(Kit.Value.CoolDown, -1)) : Data.Amount != 0 ? (Double)((Data.Amount) * Math.Pow(Kit.Value.Amount, -1)) : 1;
                container.Add(new CuiPanel {
                    FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"{XMax} 1", OffsetMin = "1 1", OffsetMax = "-2 -1"
                    }
                    , Image = {
                        FadeIn = FadeIn, Color = HexToRustFormat(Interface.HEXCooldowns)
                    }
                }
                , $"COOLDOWN_PANEL_{i}", $"COOLDOWN_LINE_{i}");
                String InfoAmountAndCooldown = IsCooldown ? GetLang("UI_COOLDONW_KIT", player.UserIDString, FormatTime(TimeSpan.FromSeconds(Data.Cooldown - CurrentTime()))) : Data.Amount != 0 ? GetLang("UI_AMOUNT_KIT", player.UserIDString, Data.Amount) : GetLang("UI_COOLDONW_KIT_NO", player.UserIDString);
                container.Add(new CuiLabel {
                    FadeOut = FadeOut, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "0.965517 0.9449963"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = InfoAmountAndCooldown, Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.UpperRight
                    }
                }
                , $"COOLDOWN_PANEL_{i}", $"COOLDOWN_TITLE{i}");
                container.Add(new CuiButton {
                    FadeOut = FadeOut - 0.2f, RectTransform = {
                        AnchorMin = "0.465313 0", AnchorMax = "0.7258226 0.2170226"
                    }
                    , Button = {
                        FadeIn = FadeIn, Command = $"kit_ui_func information {Kit.Key}", Color = HexToRustFormat(Interface.HEXInfoItemButton),
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = GetLang("UI_BTN_WHAT_INFO", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabelsInfoItemButton), Align = TextAnchor.MiddleCenter
                    }
                }
                , $"KIT_PANEL_{i}", $"WHAT_INFO_{i}");
                String KeyLangTake = IsCooldown ? GetLang("UI_BTN_TAKE_KIT_BLOCK", player.UserIDString) : Data.Amount != 0 ? GetLang("UI_BTN_TAKE_KIT", player.UserIDString, Data.Amount) : GetLang("UI_BTN_TAKE_KIT", player.UserIDString);
                String HexButtonTake = IsCooldown ? Interface.HEXInfoItemButton : Data.Amount != 0 ? Interface.HEXAccesButton : Interface.HEXAccesButton;
                String HexButtonLabelTake = IsCooldown ? Interface.HEXLabelsInfoItemButton : Data.Amount != 0 ? Interface.HEXLabelsAccesButton : Interface.HEXLabelsAccesButton;
                String CommandButtonTake = IsCooldown ? "" : Data.Amount != 0 ? $"kit_ui_func take.kit {Kit.Key}" : $"kit_ui_func take.kit {Kit.Key}";
                container.Add(new CuiButton {
                    FadeOut = FadeOut - 0.2f, RectTransform = {
                        AnchorMin = "0.7394261 0", AnchorMax = "1 0.2170733"
                    }
                    , Button = {
                        FadeIn = FadeIn, Command = CommandButtonTake, Color = HexToRustFormat(HexButtonTake)
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = KeyLangTake, Color = HexToRustFormat(HexButtonLabelTake), Align = TextAnchor.MiddleCenter
                    }
                }
                , $"KIT_PANEL_{i}", $"TAKE_KIT_{i}");
                x++;
                if (x >= 2) {
                    x = 0;
                    y++;
                }
                i++;
                if (x == 2 && y == 1) break;
            }
            if (PagePlayers[player] != 0) {
                container.Add(new CuiButton {
                    FadeOut = FadeOut - 0.2f, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "0.1015625 0.05462963"
                    }
                    , Button = {
                        FadeIn = FadeIn, Command = "kit_ui_func back.page", Color = "0 0 0 0"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = GetLang("UI_BACK_BTN", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabels), Align = TextAnchor.MiddleCenter
                    }
                }
                , IQKITS_OVERLAY, $"BTN_BACK_BUTTON");
            }
            if (CountKitPage != 0) {
                container.Add(new CuiButton {
                    FadeOut = FadeOut - 0.2f, RectTransform = {
                        AnchorMin = "0.89895 0", AnchorMax = "1 0.05462963"
                    }
                    , Button = {
                        FadeIn = FadeIn, Command = $"kit_ui_func next.page", Color = "0 0 0 0"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = GetLang("UI_NEXT_BTN", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabels), Align = TextAnchor.MiddleCenter
                    }
                }
                , IQKITS_OVERLAY, $"BTN_NEXT_BUTTON");
            }
            CuiHelper.AddUi(player, container);
        }
        private void DestroyInfoKits(BasePlayer player) {
            for (Int32 i = 0; i < 40; i++) {
                CuiHelper.DestroyUi(player, $"KIT_ITEM_AMOUNT_{i}");
                CuiHelper.DestroyUi(player, $"RARE_LABEL_{i}");
                CuiHelper.DestroyUi(player, $"RARE_BACKGROUND_{i}");
                CuiHelper.DestroyUi(player, $"KIT_ITEM_{i}");
                CuiHelper.DestroyUi(player, $"ITEM_{i}");
            }
            CuiHelper.DestroyUi(player, $"TITLE_KIT_INFO");
            CuiHelper.DestroyUi(player, $"HIDE_INFO_BTN");
            CuiHelper.DestroyUi(player, $"INFO_BACKGROUND");
        }
        private enum TypeAutoKit {
            Single, List, PriorityList, BiomeList,
        }
        private enum TypeKits {
            Cooldown, Amount, Started, AmountCooldown,
        }
        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) {
                    Configuration.Kits.ItemsKit iteminfo = ItemToKit(item, ContainerItem.containerWear);
                    kititems.Add(iteminfo);
                }
            }
            foreach (Item item in player.inventory.containerMain.itemList) {
                if (item != null) {
                    Configuration.Kits.ItemsKit iteminfo = ItemToKit(item, ContainerItem.containerMain);
                    kititems.Add(iteminfo);
                }
            }
            foreach (Item item in player.inventory.containerBelt.itemList) {
                if (item != null) {
                    Configuration.Kits.ItemsKit iteminfo = ItemToKit(item, ContainerItem.containerBelt);
                    kititems.Add(iteminfo);
                }
            }
            return kititems;
        }
        private 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 void Init() {
            ReadData();
        }
        private IEnumerable<KeyValuePair<String, Configuration.Kits>> GetKits(BasePlayer player) {
            IEnumerable<KeyValuePair<String, Configuration.Kits>> Kits = config.KitList.Where(k => ((k.Value.TypeKit != TypeKits.Started && WipeTime >= k.Value.WipeOpened) && (((k.Value.TypeKit == TypeKits.Amount || k.Value.TypeKit == TypeKits.AmountCooldown) && (DataKitsUserList[player.userID].InfoKitsList.ContainsKey(k.Key) && DataKitsUserList[player.userID].InfoKitsList[k.Key].Amount > 0)) || k.Value.TypeKit == TypeKits.Cooldown) && (String.IsNullOrWhiteSpace(k.Value.Permission) || permission.UserHasPermission(player.UserIDString, k.Value.Permission)) && !IsRaidBlocked(player, k.Value.UseRaidBlock) && IsRank(player.userID, k.Value.RankUser) ));
            return Kits;
        }
        private IEnumerator DownloadImages() {
            Puts("AddImages SkyPlugins.ru...");
            foreach (KeyValuePair<String, Configuration.Kits> Kit in config.KitList) {
                foreach (Configuration.Kits.ItemsKit 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);
            Puts("AddImages SkyPlugins.ru - completed..");
        }
        private Boolean IS_SKILL_RARE(BasePlayer player) {
            return (Boolean)IQPlagueSkill?.CallHook("API_IS_RARE_SKILL_KITS", player);
        }
        private System.Object OnPlayerRespawned(BasePlayer player) {
            player.inventory.Strip();
            AutoKitGive(player);
            return null;
        }
        private void ReadData() {
            if ((Oxide.Core.Interface.Oxide.DataFileSystem.GetFile("IQKits/KitsData") != null && Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<UInt64, DataKitsUser>>("IQKits/KitsData").Count > 0) && (Oxide.Core.Interface.Oxide.DataFileSystem.GetFile("IQSystem/IQKits/KitsData") == null || Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<UInt64, DataKitsUser>>("IQSystem/IQKits/KitsData").Count == 0)) {
                DataKitsUserList = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<UInt64, DataKitsUser>>("IQKits/KitsData");
                PrintWarning($"Миграция дата-файла..");
                NextTick(() => {
                    Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQSystem/IQKits/KitsData", DataKitsUserList);
                    DataKitsUserList = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<UInt64, DataKitsUser>>("IQSystem/IQKits/KitsData");
                    PrintWarning($"Миграция дата-файла завершена!\nПеренесено {DataKitsUserList.Count} записей");
                }
                );
            }
            else DataKitsUserList = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Hash<UInt64, DataKitsUser>>("IQSystem/IQKits/KitsData");
        }
        private void CheckKit() {
            foreach (KeyValuePair<UInt64, DataKitsUser> Data in DataKitsUserList) {
                UInt64 PlayerID = Data.Key;
                foreach (KeyValuePair<String, Configuration.Kits> kitList in config.KitList.Where(k => DataKitsUserList[PlayerID].InfoKitsList.ContainsKey(k.Key))) {
                    String KitKey = kitList.Key;
                    DataKitsUser.InfoKits DataPlayer = Data.Value.InfoKitsList[KitKey];
                    if (!permission.UserHasPermission(PlayerID.ToString(), kitList.Value.Permission)) DataKitsUserList[PlayerID].InfoKitsList.Remove(KitKey);
                }
            }
        }
        private void OnServerInitialized() {
            PrintWarning("\n-----------------------------\n" + "     Author - Sempai#3239\n" + "     VK - https://vk.com/rustnastroika/n" + "     Discord - https://discord.gg/5DPTsRmd3G/n" if(ImageLibrary == null) {
                NextTick(() => {
                    PrintError("Для корректной работы плагина требуется установить плагин ImageLibrary (https://umod.org/plugins/image-library)");
                    Interface.Oxide.UnloadPlugin(Name);
                }
                );
            }
            RegisteredPermissions();
            LoadedImage();
            foreach (BasePlayer p in BasePlayer.activePlayerList) OnPlayerConnected(p);
        }
        private Int32 API_KIT_PLAYER_GET_AMOUNT(BasePlayer player, String KitKey) {
            if (player == null) return 0;
            if (String.IsNullOrWhiteSpace(KitKey)) return 0;
            if (!DataKitsUserList.ContainsKey(player.userID)) {
                PrintError($"API_KIT_PLAYER_GET_AMOUNT : Такого игрока не существует в дата-файле");
                return 0;
            }
            if (!config.KitList.ContainsKey(KitKey)) {
                PrintError($"API_KIT_PLAYER_GET_AMOUNT : Ключа {KitKey} не существует");
                return 0;
            }
            if (!DataKitsUserList[player.userID].InfoKitsList.ContainsKey(KitKey)) {
                PrintError($"API_KIT_PLAYER_GET_AMOUNT : У игрока нет данного набора {KitKey}");
                return 0;
            }
            return DataKitsUserList[player.userID].InfoKitsList[KitKey].Amount;
        }
        private Int32 API_KIT_PLAYER_GET_COOLDOWN(BasePlayer player, String KitKey) {
            if (player == null) return 0;
            if (String.IsNullOrWhiteSpace(KitKey)) return 0;
            if (!DataKitsUserList.ContainsKey(player.userID)) {
                PrintError($"API_KIT_PLAYER_GET_COOLDOWN : Такого игрока не существует в дата-файле");
                return 0;
            }
            if (!config.KitList.ContainsKey(KitKey)) {
                PrintError($"API_KIT_PLAYER_GET_COOLDOWN : Ключа {KitKey} не существует");
                return 0;
            }
            if (!DataKitsUserList[player.userID].InfoKitsList.ContainsKey(KitKey)) {
                PrintError($"API_KIT_PLAYER_GET_COOLDOWN : У игрока нет данного набора {KitKey}");
                return 0;
            }
            return DataKitsUserList[player.userID].InfoKitsList[KitKey].Cooldown;
        }
        private String API_KIT_GET_ITEMS(String KitKey) {
            Configuration.Kits Kit = config.KitList[KitKey];
            if (Kit == null) return String.Empty;
            List<ShortInfoKit> ShortKitList = new List<ShortInfoKit>();
            foreach (Configuration.Kits.ItemsKit KitItems in Kit.ItemKits.Where(x => !String.IsNullOrWhiteSpace(x.Shortname))) ShortKitList.Add(new ShortInfoKit {
                Shortname = KitItems.Shortname, Amount = KitItems.Amount, SkinID = KitItems.SkinID
            }
            );
            return JsonConvert.SerializeObject(ShortKitList);
        }
        private 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} успешно удален");
        }
        private List<String> API_KIT_GET_ALL_KIT_LIST() {
            List<String> KitList = new List<String>();
            foreach (KeyValuePair<String, Configuration.Kits> Kit in config.KitList) KitList.Add(Kit.Key);
            return KitList;
        }
        private void Interface_Info_Kits(BasePlayer player, String KitKey) {
            DestroyInfoKits(player);
            CuiElementContainer container = new CuiElementContainer();
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            Single FadeIn = Interface.InterfaceFadeIn;
            Single FadeOut = Interface.InterfaceFadeOut;
            Configuration.Kits Kit = config.KitList[KitKey];
            container.Add(new CuiElement {
                FadeOut = FadeOut, Parent = IQKITS_OVERLAY, Name = $"INFO_BACKGROUND", Components = {
                    new CuiRawImageComponent {
                        FadeIn = FadeIn, Png = GetImage($"INFO_BACKGROUND_{Interface.PNGInfoPanel}"), Color = HexToRustFormat(Interface.HEXBlock)
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.4005208 0.2416667", AnchorMax = $"0.5958334 0.825"
                    }
                    ,
                }
            }
            );
            container.Add(new CuiButton {
                FadeOut = FadeOut - 0.2f, RectTransform = {
                    AnchorMin = "0.02933349 0.01269239", AnchorMax = "0.9706663 0.1111111"
                }
                , Button = {
                    FadeIn = FadeIn, Command = $"kit_ui_func hide.info", Color = HexToRustFormat(Interface.HEXInfoItemButton)
                }
                , Text = {
                    FadeIn = FadeIn, Text = GetLang("UI_HIDE_BTN", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabelsInfoItemButton), Align = TextAnchor.MiddleCenter
                }
            }
            , $"INFO_BACKGROUND", $"HIDE_INFO_BTN");
            container.Add(new CuiLabel {
                FadeOut = FadeOut, RectTransform = {
                    AnchorMin = "0.3916669 0.1444444", AnchorMax = "0.60625 0.237037"
                }
                , Text = {
                    FadeIn = FadeIn, Text = GetLang("UI_WHAT_INFO_TITLE", player.UserIDString, Kit.DisplayName.ToUpper()), Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.UpperCenter
                }
            }
            , IQKITS_OVERLAY, $"TITLE_KIT_INFO");
            Int32 ItemCount = 0;
            Single itemMinPosition = 219f;
            Single itemWidth = 0.413646f - 0.24f;
            /// Ширина
            Single itemMargin = 0.439895f - 0.415f;
            /// Расстояние между
            Int32 itemCount = Kit.ItemKits.Count;
            Single itemMinHeight = 0.89f;
            // Сдвиг по вертикали
            Single itemHeight = 0.1f;
            /// Высота
            Int32 ItemTarget = 5;
            if (itemCount > ItemTarget) {
                itemMinPosition = 0.5f - ItemTarget / 2f * itemWidth - (ItemTarget - 1) / 2f * itemMargin;
                itemCount -= ItemTarget;
            }
            else {
                itemMinPosition = 0.5f - itemCount / 2f * itemWidth - (itemCount - 1) / 2f * itemMargin;
            }
            Int32 i = 0;
            foreach (Configuration.Kits.ItemsKit Item in Kit.ItemKits.Take(35)) {
                container.Add(new CuiElement {
                    FadeOut = FadeOut, Parent = "INFO_BACKGROUND", Name = $"KIT_ITEM_{i}", Components =  // debug
                    {
                        new CuiImageComponent {
                            FadeIn = FadeIn, Color = HexToRustFormat("#37353E77")
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = $"{itemMinPosition} {itemMinHeight}", AnchorMax = $"{itemMinPosition + itemWidth} {itemMinHeight + itemHeight}"
                        }
                        , new CuiOutlineComponent {
                            Color = HexToRustFormat(Interface.HEXBlockItemInfo), Distance = "0 -1.5", UseGraphicAlpha = true
                        }
                    }
                }
                );
                if (String.IsNullOrWhiteSpace(Item.Sprite)) {
                    CuiRawImageComponent ComponentAvatar = !String.IsNullOrWhiteSpace(Item.PNG) ? new CuiRawImageComponent {
                        FadeIn = FadeIn, Png = GetImage($"ITEM_KIT_PNG_{Item.PNG}")
                    }
                    : new CuiRawImageComponent {
                        FadeIn = FadeIn, Png = GetImage($"{Item.Shortname}_128px")
                    }
                    ;
                    container.Add(new CuiElement {
                        FadeOut = FadeOut, Parent = $"KIT_ITEM_{i}", Name = $"ITEM_{i}", Components = {
                            ComponentAvatar, new CuiRectTransformComponent {
                                AnchorMin = "0 0", AnchorMax = $"1 1"
                            }
                            ,
                        }
                    }
                    );
                }
                else {
                    container.Add(new CuiElement {
                        FadeOut = FadeOut, Parent = $"KIT_ITEM_{i}", Name = $"ITEM_{i}", Components = {
                            new CuiImageComponent {
                                FadeIn = FadeIn, Sprite = Item.Sprite
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = "0 0", AnchorMax = $"1 1"
                            }
                            ,
                        }
                    }
                    );
                }
                if (Item.Rare != 0) {
                    Int32 Rare = IQPlagueSkill ? IS_SKILL_RARE(player) ? Item.Rare + GET_SKILL_RARE_PERCENT() : Item.Rare : Item.Rare;
                    if (Rare >= 100) continue;
                    container.Add(new CuiPanel {
                        FadeOut = FadeOut, RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                        , Image = {
                            FadeIn = FadeIn, Color = HexToRustFormat(Interface.HEXBackground)
                        }
                    }
                    , $"KIT_ITEM_{i}", $"RARE_BACKGROUND_{i}");
                    container.Add(new CuiLabel {
                        FadeOut = FadeOut, RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                        , Text = {
                            FadeIn = FadeIn, Text = $"{Rare}%", FontSize = 10, Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                        }
                    }
                    , $"RARE_BACKGROUND_{i}", $"RARE_LABEL_{i}");
                }
                container.Add(new CuiLabel {
                    FadeOut = FadeOut, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "0.930693 0.2688163"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = $"x{Item.Amount}", FontSize = 10, Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleRight
                    }
                }
                , $"KIT_ITEM_{i}", $"KIT_ITEM_AMOUNT_{i}");
                i++;
                ItemCount++;
                itemMinPosition += (itemWidth + itemMargin);
                if (ItemCount % ItemTarget == 0) {
                    itemMinHeight -= (itemHeight + (itemMargin * 1f));
                    if (itemCount > ItemTarget) {
                        itemMinPosition = 0.5f - ItemTarget / 2f * itemWidth - (ItemTarget - 1) / 2f * itemMargin;
                        itemCount -= ItemTarget;
                    }
                    else {
                        itemMinPosition = 0.5f - itemCount / 2f * itemWidth - (itemCount - 1) / 2f * itemMargin;
                    }
                }
            }
            CuiHelper.AddUi(player, container);
        }
        private 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);
        }
        private List<String> API_KIT_GET_AUTO_KIT_LIST() {
            List<String> KitList = new List<String>();
            for (Int32 i = 0; i < config.GeneralSetting.AutoKitSettings.KitListRandom.Count; i++) KitList.Add(config.GeneralSetting.AutoKitSettings.KitListRandom[i].StartKitKey);
            return KitList;
        }
        private static Double CurrentTime() {
            return DateTime.UtcNow.Subtract(epoch).TotalSeconds;
        }
        /// <summary>
        /// Обновление 1.1.9
        /// - Корректировка перезарядки в UI
        /// /// </summary>
        [PluginReference]
        private readonly Plugin ImageLibrary, IQPlagueSkill, IQChat, IQRankSystem;
        private IEnumerator UI_UpdateCooldown(BasePlayer player) {
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            IEnumerable<KeyValuePair<String, Configuration.Kits>> Kits = GetKits(player);
            while (player.HasFlag(BaseEntity.Flags.Reserved3)) {
                Int32 i = 0;
                foreach (KeyValuePair<String, Configuration.Kits> Kit in Kits.Skip(4 * (PagePlayers[player])).Take(4)) {
                    CuiElementContainer container = new CuiElementContainer();
                    CuiHelper.DestroyUi(player, $"COOLDOWN_LINE_{i}");
                    CuiHelper.DestroyUi(player, $"COOLDOWN_TITLE{i}");
                    DataKitsUser.InfoKits Data = DataKitsUserList[player.userID].InfoKitsList[Kit.Key];
                    Boolean IsCooldown = Data.Cooldown >= CurrentTime();
                    Double XMax = IsCooldown ? (Double)((Data.Cooldown - CurrentTime()) * Math.Pow(Kit.Value.CoolDown, -1)) : Data.Amount != 0 ? (Double)((Data.Amount) * Math.Pow(Kit.Value.Amount, -1)) : 1;
                    container.Add(new CuiPanel {
                        CursorEnabled = true, RectTransform = {
                            AnchorMin = $"0 0", AnchorMax = $"{XMax} 1", OffsetMin = "1 1", OffsetMax = "-2 -1"
                        }
                        , Image = {
                            Color = HexToRustFormat(Interface.HEXCooldowns)
                        }
                    }
                    , $"COOLDOWN_PANEL_{i}", $"COOLDOWN_LINE_{i}");
                    String InfoAmountAndCooldown = IsCooldown ? GetLang("UI_COOLDONW_KIT", player.UserIDString, FormatTime(TimeSpan.FromSeconds(Data.Cooldown - CurrentTime()))) : Data.Amount != 0 ? GetLang("UI_AMOUNT_KIT", player.UserIDString, Data.Amount) : GetLang("UI_COOLDONW_KIT_NO", player.UserIDString);
                    container.Add(new CuiLabel {
                        RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "0.965517 0.9449963"
                        }
                        , Text = {
                            Text = InfoAmountAndCooldown, Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.UpperRight
                        }
                    }
                    , $"COOLDOWN_PANEL_{i}", $"COOLDOWN_TITLE{i}");
                    i++;
                    CuiHelper.AddUi(player, container);
                }
                yield return new WaitForSeconds(1);
            }
        }
        private void CachingImage(BasePlayer player) {
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            foreach (KeyValuePair<String, Configuration.Kits> Kit in config.KitList.Where(k => !String.IsNullOrWhiteSpace(k.Value.PNG))) {
                SendImage(player, $"KIT_{Kit.Value.PNG}");
                foreach (Configuration.Kits.ItemsKit ItemKit in Kit.Value.ItemKits.Where(ik => !String.IsNullOrWhiteSpace(ik.Shortname))) SendImage(player, $"{ItemKit.Shortname}_128px");
                foreach (Configuration.Kits.ItemsKit 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}");
        }
        [ConsoleCommand("kit_ui_func")]
        private void IQKITS_UI_Func(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (player == null) {
                PrintWarning("Это консольная команда должна отыгрываться от игрока!");
                return;
            }
            String Key = arg.Args[0];
            switch (Key) {
                case "information" : {
                    String KitKey = arg.Args[1];
                    Interface_Info_Kits(player, KitKey);
                    break;
                }
                case "take.kit" : {
                    String KitKey = arg.Args[1];
                    TakeKit(player, KitKey);
                    break;
                }
                case "close.ui" : {
                    DestroyAll(player);
                    break;
                }
                case "hide.info" : {
                    DestroyInfoKits(player);
                    break;
                }
                case "next.page" : {
                    DestroyKits(player);
                    PagePlayers[player]++;
                    Interface_Loaded_Kits(player);
                    break;
                }
                case "back.page" : {
                    DestroyKits(player);
                    PagePlayers[player]--;
                    Interface_Loaded_Kits(player);
                    break;
                }
            }
        }
        public static DateTime RealTime = DateTime.Now.Date;
        private void KitEdit(BasePlayer player, String NameKit) {
            if (!player.IsAdmin) return;
            if (!config.KitList.ContainsKey(NameKit)) {
                SendChat(player, "Ключ данного набора не существует!");
                return;
            }
            Configuration.Kits Kit = config.KitList[NameKit];
            Kit.ItemKits = GetPlayerItems(player);
            SaveConfig();
            SendChat(player, $"Предметы набора с ключем {NameKit} успешно изменены, настройки сохранены");
        }
        private void Unload() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) DestroyAll(player);
            if (DownloadImage != null) ServerMgr.Instance.StopCoroutine(DownloadImage);
            CheckKit();
            WriteData();
            PlayersRoutine = null;
            DownloadImage = null;
        }
        public static StringBuilder sb = new StringBuilder();
        private String GetRankName(String Key) {
            String Rank = String.Empty;
            if (!IQRankSystem) return Rank;
            return (String)IQRankSystem?.Call("API_GET_RANK_NAME", Key);
        }
        private void OnNewSave(String filename) {
            ClearData();
        }
        private static Configuration config = new Configuration();
        public Boolean IsRareDrop(Int32 Rare) {
            return UnityEngine.Random.Range(0, 100) >= (100 - (Rare > 100 ? 100 : Rare));
        }
        public static Int32 WipeTime = RealTime.Subtract(TimeCreatedSave).Days;
        public Dictionary<BasePlayer, Int32> PagePlayers = new Dictionary<BasePlayer, Int32>();
        private void ClearData() {
            if (!config.GeneralSetting.AutoWipeClearKits) return;
            DataKitsUserList.Clear();
            WriteData();
        }
        public void SendImage(BasePlayer player, String imageName, UInt64 imageId = 0) {
            ImageLibrary?.Call("SendImage", player, imageName, imageId);
        }
        private class Configuration {
            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 - Панель быстрого дос
// ... [Code preview truncated due to length. Full source in attached file] ...

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

Другие ресурсы пользователя 15FPS

Сверху