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

FREE IQKits : 1.3.10 1.3.10

Нет прав для скачивания
C#:
using System.Text;
using UnityEngine;
using System;
using Oxide.Core.Plugins;
using ConVar;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using Newtonsoft.Json;
using System.Collections;
using System.Linq;
namespace Oxide.Plugins {
    [Info("IQKits", "sborka", "1.3.10")]
    [Description("Киты")]
    internal class IQKits : RustPlugin {
        private Boolean API_IS_KIT_PLAYER(BasePlayer player, String KitKey) {
            if (player == null) return false;
            if (String.IsNullOrWhiteSpace(KitKey)) return false;
            if (!DataKitsUserList.ContainsKey(player.userID)) return false;
            if (!config.KitList.ContainsKey(KitKey)) return false;
            return DataKitsUserList[player.userID].InfoKitsList.ContainsKey(KitKey);
        }
        private Boolean API_IS_KIT(String KitKey) {
            if (String.IsNullOrWhiteSpace(KitKey)) return false;
            return config.KitList.ContainsKey(KitKey);
        }
        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);
        }
        private void OnServerShutdown() => Unload();
        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_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);
            }
            );
        }
        public static DateTime RealTime = DateTime.Now.Date;
        private String GetRankName(String Key) {
            String Rank = String.Empty;
            if (!IQRankSystem) return Rank;
            return (String)IQRankSystem?.Call("API_GET_RANK_NAME", Key);
        }
        private void RegisteredPermissions() {
            Configuration.GeneralSettings GeneralSettings = config.GeneralSetting;
            Dictionary<String, Configuration.Kits> KitList = config.KitList;
            foreach (Configuration.GeneralSettings.AutoKit.KitSettings PermissionGeneral in GeneralSettings.AutoKitSettings.KitListRandom) {
                if (!permission.PermissionExists(PermissionGeneral.Permissions, this)) permission.RegisterPermission(PermissionGeneral.Permissions, this);
            }
            foreach (Configuration.GeneralSettings.AutoKit.KitSettings PermissionGeneral in GeneralSettings.AutoKitSettings.KitListPriority) {
                if (!permission.PermissionExists(PermissionGeneral.Permissions, this)) permission.RegisterPermission(PermissionGeneral.Permissions, this);
            }
            foreach (Configuration.GeneralSettings.AutoKit.BiomeKits PermissionGeneral in GeneralSettings.AutoKitSettings.BiomeStartedKitList) {
                if (!permission.PermissionExists(PermissionGeneral.Kits.Permissions, this)) permission.RegisterPermission(PermissionGeneral.Kits.Permissions, this);
            }
            foreach (KeyValuePair<String, Configuration.Kits> PermissionKits in KitList) {
                if (!permission.PermissionExists(PermissionKits.Value.Permission, this)) permission.RegisterPermission(PermissionKits.Value.Permission, this);
            }
        }
        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 void Interface_IQ_Kits(BasePlayer player) {
            DestroyAll(player);
            player.SetFlag(BaseEntity.Flags.Reserved3, true);
            CuiElementContainer container = new CuiElementContainer();
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            Single FadeIn = Interface.InterfaceFadeIn;
            Single FadeOut = Interface.InterfaceFadeOut;
            container.Add(new CuiPanel {
                FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Image = {
                    FadeIn = FadeIn, Color = HexToRustFormat(Interface.HEXBackground), Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
            }
            , "Overlay", IQKITS_OVERLAY);
            container.Add(new CuiLabel {
                FadeOut = FadeOut, RectTransform = {
                    AnchorMin = "0 0.915", AnchorMax = "1 1"
                }
                , Text = {
                    FadeIn = FadeIn, Text = GetLang("UI_TITLE", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , IQKITS_OVERLAY, "TITLE");
            container.Add(new CuiLabel {
                FadeOut = FadeOut, RectTransform = {
                    AnchorMin = "0 0.8925912", AnchorMax = "1 0.9351871"
                }
                , Text = {
                    FadeIn = FadeIn, Text = GetLang("UI_DESCRIPTION", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , IQKITS_OVERLAY, "DESCRIPTION");
            if (Interface.CloseType) {
                container.Add(new CuiButton {
                    FadeOut = FadeOut - 0.2f, RectTransform = {
                        AnchorMin = "0.871875 0.9388889", AnchorMax = "1 1"
                    }
                    , Button = {
                        FadeIn = FadeIn, Command = $"kit_ui_func close.ui", Color = "0 0 0 0"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = GetLang("UI_CLOSE_BTN", player.UserIDString), Color = HexToRustFormat(Interface.HEXLabels), Align = TextAnchor.MiddleCenter
                    }
                }
                , IQKITS_OVERLAY, "CLOSE_BTN");
            }
            else {
                container.Add(new CuiButton {
                    FadeOut = FadeOut - 0.2f, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    , Button = {
                        FadeIn = FadeIn, Command = $"kit_ui_func close.ui", Color = "0 0 0 0"
                    }
                    , Text = {
                        FadeIn = FadeIn, Text = ""
                    }
                }
                , IQKITS_OVERLAY, "CLOSE_BTN");
            }
            CuiHelper.AddUi(player, container);
            Interface_Loaded_Kits(player);
            PlayersRoutine[player] = ServerMgr.Instance.StartCoroutine(UI_UpdateCooldown(player));
        }
        public Coroutine DownloadImage = null;
        private Dictionary<BasePlayer, Coroutine> PlayersRoutine = new Dictionary<BasePlayer, Coroutine>();
        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 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;
        }
        public Boolean AddImage(String url, String shortname, UInt64 skin = 0) {
            return (Boolean)ImageLibrary?.Call("AddImage", url, shortname, skin);
        }
        public Boolean HasImage(String imageName) {
            return (Boolean)ImageLibrary?.Call("HasImage", imageName);
        }
        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());
        }
        public void SendImage(BasePlayer player, String imageName, UInt64 imageId = 0) {
            ImageLibrary?.Call("SendImage", player, imageName, imageId);
        }
        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;
        }
        public String GetLang(String LangKey, String userID = null, params System.Object[] args) {
            sb.Clear();
            if (args != null) {
                sb.AppendFormat(lang.GetMessage(LangKey, this, userID), args);
                return sb.ToString();
            }
            return lang.GetMessage(LangKey, this, userID);
        }
        private void DestroyAll(BasePlayer player) {
            DestroyAlert(player);
            DestroyInfoKits(player);
            DestroyKits(player);
            CuiHelper.DestroyUi(player, "CLOSE_BTN");
            CuiHelper.DestroyUi(player, "DESCRIPTION");
            CuiHelper.DestroyUi(player, "TITLE");
            CuiHelper.DestroyUi(player, IQKITS_OVERLAY);
            player.SetFlag(BaseEntity.Flags.Reserved3, false);
            if (PlayersRoutine != null) if (PlayersRoutine.ContainsKey(player) && PlayersRoutine[player] != null) {
                ServerMgr.Instance.StopCoroutine(PlayersRoutine[player]);
                PlayersRoutine[player] = null;
            }
        }
        private String API_KIT_GET_NAME(String KitKey) {
            if (String.IsNullOrWhiteSpace(KitKey)) return "NONE";
            if (!config.KitList.ContainsKey(KitKey)) return "NONE";
            return config.KitList[KitKey].DisplayName;
        }
        protected override void SaveConfig() {
            Config.WriteObject(config);
        }
        private enum TypeContent {
            Ammo, Contents
        }
        private String GetImage(String fileName, UInt64 skin = 0) {
            String imageId = (String)plugins.Find("ImageLibrary").CallHook("GetImage", fileName, skin);
            if (!String.IsNullOrEmpty(imageId)) return imageId;
            return String.Empty;
        }
        private void API_KIT_GIVE(BasePlayer player, String KitKey) {
            if (player == null) return;
            if (!config.KitList.ContainsKey(KitKey)) {
                PrintError($"Ключа {KitKey} не существует, набор не выдан!");
                return;
            }
            ParseAndGive(player, KitKey);
        }
        private static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
        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 OnPlayerDisconnected(BasePlayer player, String reason) {
            player.SetFlag(BaseEntity.Flags.Reserved3, false);
            if (PlayersRoutine.ContainsKey(player)) PlayersRoutine.Remove(player);
        }
        private void OnPlayerConnected(BasePlayer player) {
            CachingImage(player);
            RegisteredDataUser(player);
            if (!PlayersRoutine.ContainsKey(player)) PlayersRoutine.Add(player, null);
        }
        private void LoadedImage() {
            Configuration.InterfaceSettings Interface = config.InterfaceSetting;
            foreach (KeyValuePair<String, Configuration.Kits> 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 (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}");
                }
            }
            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}");
            DownloadImage = ServerMgr.Instance.StartCoroutine(DownloadImages());
        }
        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 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 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 void ParseAndGive(BasePlayer player, String KitKey) {
            Configuration.Kits Kit = config.KitList[KitKey];
            List<Configuration.Kits.ItemsKit> ItemKit = Kit.ItemKits;
            foreach (Configuration.Kits.ItemsKit Item in ItemKit) {
                if (Item.Rare != 0) {
                    Int32 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 (Configuration.Kits.ItemsKit.ItemContents 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 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 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 System.Object OnPlayerRespawned(BasePlayer player) {
            player.inventory.Strip();
            AutoKitGive(player);
            return null;
        }
        private Boolean IS_SKILL_COOLDOWN(BasePlayer player) {
            return (Boolean)IQPlagueSkill?.CallHook("API_IS_COOLDOWN_SKILL_KITS", player);
        }
        private Int32 API_KIT_GET_MAX_COOLDOWN(String KitKey) {
            if (String.IsNullOrWhiteSpace(KitKey)) return 0;
            if (!config.KitList.ContainsKey(KitKey)) {
                PrintError($"API_KIT_GET_MAX_COOLDOWN : Ключа {KitKey} не существует!");
                return 0;
            }
            return config.KitList[KitKey].CoolDown;
        }
        [ChatCommand("kit")]
        private void IQKITS_ChatCommand(BasePlayer player, String cmd, String[] arg) {
            if (player.HasFlag(BaseEntity.Flags.Reserved3)) return;
            if (arg.Length == 1) {
                String KitKey = arg[0];
                if (String.IsNullOrWhiteSpace(KitKey)) {
                    SendChat(player, GetLang("CHAT_ALERT_PLAYER_KIT_COMMAND_EMPTY_KEY", player.UserIDString));
                    return;
                }
                if (!DataKitsUserList[player.userID].InfoKitsList.ContainsKey(KitKey)) {
                    String KistList = String.Empty;
                    foreach (KeyValuePair<String, DataKitsUser.InfoKits> keyValuePair in DataKitsUserList[player.userID].InfoKitsList.OrderBy(x => x.Value.Cooldown >= CurrentTime()).Where(k => config.KitList.ContainsKey(k.Key) && ((config.KitList[k.Key].TypeKit != TypeKits.Started && WipeTime >= config.KitList[k.Key].WipeOpened) && (((config.KitList[k.Key].TypeKit == TypeKits.Amount || config.KitList[k.Key].TypeKit == TypeKits.AmountCooldown) && (DataKitsUserList[player.userID].InfoKitsList.ContainsKey(k.Key) && DataKitsUserList[player.userID].InfoKitsList[k.Key].Amount > 0)) || config.KitList[k.Key].TypeKit == TypeKits.Cooldown)))) {
                        Boolean IsCooldown = keyValuePair.Value.Cooldown >= CurrentTime();
                        String InfoAmountAndCooldown = IsCooldown ? GetLang("CHAT_ALERT_PLAYER_INFO_KIT_LIST_KIT_FORMAT_COOLDOWN", player.UserIDString, keyValuePair.Key, FormatTime(TimeSpan.FromSeconds(keyValuePair.Value.Cooldown - CurrentTime()))) : keyValuePair.Value.Amount != 0 ? GetLang("CHAT_ALERT_PLAYER_INFO_KIT_LIST_KIT_FORMAT_AMOUNT", player.UserIDString, keyValuePair.Key, keyValuePair.Value.Amount) : GetLang("CHAT_ALERT_PLAYER_INFO_KIT_LIST_KIT_FORMAT_YES", player.UserIDString, keyValuePair.Key);
                        KistList += InfoAmountAndCooldown;
                    }
                    SendChat(player, GetLang("CHAT_ALERT_PLAYER_INFO_KIT_LIST", player.UserIDString, KistList));
                    return;
                }
                TakeKit(player, KitKey, true);
                return;
            }
            if (arg.Length < 2) {
                PagePlayers[player] = 0;
                Interface_IQ_Kits(player);
                return;
            }
            switch (arg[0]) {
                case "create" : case "createkit" : case "add" : case "new" : {
                    if (!player.IsAdmin) return;
                    String NameKit = arg[1];
                    if (String.IsNullOrWhiteSpace(NameKit)) {
                        SendChat(player, "Введите корректное название!");
                        return;
                    }
                    CreateNewKit(player, NameKit);
                    break;
                }
                case "remove" : case "delete" : case "revoke" : {
                    if (!player.IsAdmin) return;
                    String NameKit = arg[1];
                    if (String.IsNullOrWhiteSpace(NameKit)) {
                        SendChat(player, "Введите корректное название!");
                        return;
                    }
                    KitRemove(player, NameKit);
                    break;
                }
                case "copy" : case "edit" : {
                    if (!player.IsAdmin) return;
                    String NameKit = arg[1];
                    if (String.IsNullOrWhiteSpace(NameKit)) {
                        SendChat(player, "Введите корректное название!");
                        return;
                    }
                    KitEdit(player, NameKit);
                    break;
                }
                case "give" : {
                    if (!player.IsAdmin) return;
                    String IDarName = arg[1];
                    if (String.IsNullOrWhiteSpace(IDarName)) {
                        SendChat(player, "Введите корректное имя или ID");
                        return;
                    }
                    BasePlayer TargetUser = BasePlayer.Find(IDarName);
                    if (TargetUser == null) {
                        SendChat(player, "Такого игрока нет на сервере");
                        return;
                    }
                    String KitKey = arg[2];
                    if (String.IsNullOrWhiteSpace(KitKey)) {
                        SendChat(player, "Введите корректный ключ набора");
                        return;
                    }
                    if (!config.KitList.ContainsKey(KitKey)) {
                        SendChat(player, "Набора с данным ключем не существует");
                        return;
                    }
                    ParseAndGive(TargetUser, KitKey);
                    break;
                }
            }
        }
        private void Init() {
            ReadData();
        }
        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}");
                }
                if (Item.RandomDropSettings.UseRandomItems) {
                    string amount = $"x{Item.RandomDropSettings.MinAmount}-{Item.RandomDropSettings.MaxAmount}";
                    container.Add(new CuiLabel {
                        FadeOut = FadeOut, RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "0.930693 0.2688163"
                        }
                        , Text = {
                            FadeIn = FadeIn, Text = amount, FontSize = amount.Length > 7 ? 8 : amount.Length > 9 ? 7 : 10, Color = HexToRustFormat(Interface.HEXLabels), Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleRight
                        }
                    }
                    , $"KIT_ITEM_{i}", $"KIT_ITEM_AMOUNT_{i}");
                }
                else {
                    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 enum TypeAutoKit {
            Single, List, PriorityList, BiomeList,
        }
        private Int32 GET_SKILL_RARE_PERCENT() {
            return (Int32)IQPlagueSkill?.CallHook("API_GET_RARE_IQKITS");
        }
        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 void DestroyAlert(BasePlayer player) {
            CuiHelper.DestroyUi(player, $"TITLE_ALERT");
            CuiHelper.DestroyUi(player, $"INFO_ALERT_BACKGROUND");
        }
        public class DataKitsUser {
            [JsonProperty("Информация о наборах игрока")]
            public Dictionary<String, InfoKits> InfoKitsList = new Dictionary<String, InfoKits>();
            internal class InfoKits {
                public Int32 Amount;
                public Int32 Cooldown;
            }
        }
        private enum TypeKits {
            Cooldown, Amount, Started, AmountCooldown,
        }
        private void OnServerInitialized() {
            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 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.43654976 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.72584976 0.21704976"
                    }
                    , 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"
                    }
              
// ... [Code preview truncated due to length. Full source in attached file] ...

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