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

FREE IQCraftSystem : 0.0.9 0.0.9

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using System.Collections.Generic;
using Oxide.Core.Plugins;
using System.Linq;
using System;
using System.Text;
using UnityEngine;
using Oxide.Game.Rust.Cui;
using System.Collections;
namespace Oxide.Plugins {
    [Info("IQCraftSystem", "TopPlugin.ru", "0.0.9")]
    [Description("Удобная система крафта")]
    class IQCraftSystem : RustPlugin {
        /// <summary>
        /// Обновление 0.0.4
        /// - Исправлена подгрузка иконок для крафта
        /// Обновление 0.0.5
        /// - Исправил снятие баланса при крафте с использованием IQEconomic
        /// Обновление 1.0.0
        /// Теперь обычный игрок не сможет выдать себе предмет
        /// </summary>
        ///
#region Reference
        [PluginReference]
        Plugin ImageLibrary, IQEconomic, IQPlagueSkill, IQRankSystem;
#region ImageLibrary
        private string GetImage(string fileName, ulong skin = 0) {
            var imageId = (string)plugins.Find("ImageLibrary").CallHook("GetImage", fileName, skin);
            if (!string.IsNullOrEmpty(imageId)) return imageId;
            return string.Empty;
        }
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
        public void SendImage(BasePlayer player, string imageName, ulong imageId = 0) => ImageLibrary?.Call("SendImage", player, imageName, imageId);
        public bool HasImage(string imageName) => (bool)ImageLibrary?.Call("HasImage", imageName);
#endregion
#region IQEconomic
        int IQEconomicGetBalance(ulong userID) => (int)IQEconomic?.Call("API_GET_BALANCE", userID);
        void IQEconomicRemoveBalance(ulong userID, int Balance) => IQEconomic?.Call("API_REMOVE_BALANCE", userID, Balance);
#endregion
#region IQPlagueSkill
        bool IQPlagueSkillISAdvanced(BasePlayer player) => (bool)IQPlagueSkill?.Call("API_IS_ADVANCED_CRAFT", player);
#endregion
#region IQRankSystem
        bool IQRankSystemAvaliability(BasePlayer player, string RankKey) => (bool)IQRankSystem?.Call("API_GET_AVAILABILITY_RANK_USER", player.userID, RankKey);
        string IQRankSystemGetName(string RankKey) => (string)IQRankSystem?.Call("API_GET_RANK_NAME", RankKey);
        bool IQRankRankReality(string RankKey) => (bool)IQRankSystem?.Call("API_IS_RANK_REALITY", RankKey);
#endregion
#endregion
#region Vars
        string CustomItemShortname = "electric.flasherlight";
        public Dictionary<BasePlayer, int> PagePlayers = new Dictionary<BasePlayer, int>();
        Dictionary<BasePlayer, CategoryItem> CategoryActive = new Dictionary<BasePlayer, CategoryItem>();
        public enum CategoryItem {
            Weapon, Tools, Construction, Items, Attirie, Electrical, Transport, Fun, Custom, Entity, All
        }
#endregion
#region Configuration
        private static Configuration config = new Configuration();
        private class Configuration {
            [JsonProperty("Настройка интерфейса плагина")]
            public InterfaceSettings InterfaceSetting = new InterfaceSettings();
            [JsonProperty("Настройка предметов, которые возможно скрафтить")]
            public Dictionary<string, ItemSettings> ItemSetting = new Dictionary<string, ItemSettings>();
#region ItemSettings
            internal class ItemSettings {
                [JsonProperty("К какой категории относится данный предмет : 0 - Оружие, 1 - Инструменты, 2 - Конструкции, 3 - Итемы, 4 - Одежда, 5 - Электричество, 6 - Транспорт, 7 - Фановые, 8 - Кастомные(команды), 9 - Иные(Крафтит префабы и предметы по типу Переработчика)")]
                public CategoryItem CategoryItems;
                [JsonProperty("Отображаемое имя")]
                public string DisplayName;
                [JsonProperty("Описание (Необязательно)")]
                public string Description;
                [JsonProperty("Shortname (Подходит ко всем категориям КРОМЕ : 6 - Транспорт и 8 - Кастомные(команды) и 9 - Иные(Крафтит префабы и предметы по типу Переработчика)")]
                public string Shortname;
                [JsonProperty("SkinID (Подходит ко всем категориям (Если вы используете категорию 6 - Транспорт или - 9 - Иные , обязательно устанавливайте SkinID для иконки)")]
                public ulong SkinID;
                [JsonProperty("PNG (Подходит только к категории : 6 - Транспорт и 8 - Кастомные(команды) и 9 - Иные(Крафтит префабы и предметы по типу Переработчика))")]
                public string PNG;
                [JsonProperty("Команда (Подходит только к категории : 8 - Кастомные(команды) %STEAMID% - заменится на Steam64ID игрока)")]
                public string Command;
                [JsonProperty("Префаб для транспорта (Подходит только к категории 6 - Транспорт)")]
                public string PrefabNameTransport;
                [JsonProperty("Префаб для предметов (Подходит только к категории 9 - Иные(Крафтит префабы и предметы по типу Переработчика))")]
                public string PrefabEntity;
                [JsonProperty("Какой уровень верстака требуется для крафта нужен, если верстак не требуется, установите 0")]
                public int WorkBenchLevel;
                [JsonProperty("IQEconomic : Сколько требуется валюты для крафта данного предмета(Устновите 0 если не требуется)")]
                public int IQEconomicPrice;
                [JsonProperty("IQPlagueSkill : Требуется ли нейтральный навык в IQPlagueSkill для крафта данного предмета(true - да/false - нет)")]
                public bool IQPlagueSkillCraft;
                [JsonProperty("IQRankSystem : Укажите ранг, который требуется для крафта данного предмета(Если не нужно, оставьте поле пустым)")]
                public string IQRankSystemRank;
                [JsonProperty("Список предметов требующихся для крафта")]
                public List<ItemForCraft> ItemListForCraft = new List<ItemForCraft>();
                internal class ItemForCraft {
                    [JsonProperty("Shortname")]
                    public string Shortname;
                    [JsonProperty("Количество")]
                    public int Amount;
                    [JsonProperty("SkinID если требуется")]
                    public ulong SkinID;
                    [JsonProperty("PNG для кастомных предметов (не забудьте установить SkinID)")]
                    public string PNG;
                }
            }
#endregion
#region Interface
            internal class InterfaceSettings {
                [JsonProperty("Основные настройки")]
                public GeneralSettings GeneralSetting = new GeneralSettings();
                [JsonProperty("Настройка категорий")]
                public CategorySettings CategorySetting = new CategorySettings();
                [JsonProperty("Настройка требований")]
                public RequiresSettings RequiresSetting = new RequiresSettings();
                internal class GeneralSettings {
                    [JsonProperty("Ссылка на картинку выбранного предмета")]
                    public string PNGActive;
                    [JsonProperty("Ссылка на картинку не выбранного предмета")]
                    public string PNGInActive;
                    [JsonProperty("Ссылка на логотип в меню крафта")]
                    public string PNGLogo;
                    [JsonProperty("Ссылка на картинку закрытия")]
                    public string PNGCloseButton;
                    [JsonProperty("HEX Заднего фона главного меню")]
                    public string HexBackground;
                    [JsonProperty("HEX Кнопки СОЗДАТЬ")]
                    public string HexButtonCreate;
                }
                internal class RequiresSettings {
                    [JsonProperty("HEX : Цвет если требование выполнено")]
                    public string RequiresDoTrueColor;
                    [JsonProperty("HEX : Цвет если требование не выполнено")]
                    public string RequiresDoFalseColor;
                    [JsonProperty("Символ выполненного требования")]
                    public string RequiresDoTrue;
                    [JsonProperty("HEX : Цвет если условие не требования")]
                    public string RequiresDoFalse;
                    [JsonProperty("PNG : Иконка для требования верстака")]
                    public string PNGRequiresWorckbench;
                    [JsonProperty("PNG : Иконка для требования валюты с IQEconomic")]
                    public string PNGRequiresIQEconomic;
                    [JsonProperty("PNG : Иконка для требования ранга с IQRankSystem")]
                    public string PNGRequiresIQRankSystem;
                    [JsonProperty("PNG : Иконка для требования навыка с IQPlagueSkill")]
                    public string PNGRequiresIQPlagueSkill;
                }
                internal class CategorySettings {
                    [JsonProperty("Настройка цветов не выбранных иконок под каждую категорию")]
                    public ColorCategoryIcon ColorCategoryIcons = new ColorCategoryIcon();
                    [JsonProperty("Настройка PNG иконок категорий")]
                    public PNGCategoryIcon PNGCategoryIcons = new PNGCategoryIcon();
                    internal class PNGCategoryIcon {
                        [JsonProperty("PNG : Иконка категории всех предметов")]
                        public string PNGAll;
                        [JsonProperty("PNG : Иконка категории оружия")]
                        public string PNGWeapon;
                        [JsonProperty("PNG : Иконка категории инструментов")]
                        public string PNGTools;
                        [JsonProperty("PNG : Иконка категории конструкций")]
                        public string PNGConstruction;
                        [JsonProperty("PNG : Иконка категории предметов")]
                        public string PNGItems;
                        [JsonProperty("PNG : Иконка категории одежды")]
                        public string PNGAttirie;
                        [JsonProperty("PNG : Иконка категории электрики")]
                        public string PNGElectrical;
                        [JsonProperty("PNG : Иконка категории транспорта")]
                        public string PNGTransport;
                        [JsonProperty("PNG : Иконка категории фана")]
                        public string PNGFun;
                        [JsonProperty("PNG : Иконка кастомных предметов")]
                        public string PNGCustom;
                    }
                    internal class ColorCategoryIcon {
                        [JsonProperty("HEX : Цвет панели с предметом категории всех предметов")]
                        public string AllItemsColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории оружий")]
                        public string WeaponColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории интсрументов")]
                        public string ToolsColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории конструкций")]
                        public string ConstructionColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории предметов")]
                        public string ItemsColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории одежды")]
                        public string AttirieColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории электрики")]
                        public string ElectricalColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории транспорта")]
                        public string TransportColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории фана")]
                        public string FunColor;
                        [JsonProperty("HEX : Цвет панели с предметом категории кастомных предметов")]
                        public string CustomColor;
                    }
                }
            }
#endregion
            public static Configuration GetNewConfiguration() {
                return new Configuration {
#region Interface
                    InterfaceSetting = new InterfaceSettings {
                        GeneralSetting = new InterfaceSettings.GeneralSettings {
                            PNGActive = "https://i.imgur.com/46KFe3X.png", PNGInActive = "https://i.imgur.com/31iuKXn.png", PNGLogo = "https://i.imgur.com/K29MfYR.png", PNGCloseButton = "https://i.imgur.com/mirRxLy.png", HexBackground = "#0C0C0C95", HexButtonCreate = "#C35F2FFF",
                        }
                        , RequiresSetting = new InterfaceSettings.RequiresSettings {
                            RequiresDoFalse = "×", RequiresDoTrue = "✓", RequiresDoFalseColor = "#FF3366", RequiresDoTrueColor = "#CCFFCC", PNGRequiresIQEconomic = "https://i.imgur.com/q0UjhJJ.png", PNGRequiresIQPlagueSkill = "https://i.imgur.com/f3isgi4.png", PNGRequiresIQRankSystem = "https://i.imgur.com/0ZFPmrZ.png", PNGRequiresWorckbench = "https://i.imgur.com/bxG5ofY.png",
                        }
                        , CategorySetting = new InterfaceSettings.CategorySettings {
                            PNGCategoryIcons = new InterfaceSettings.CategorySettings.PNGCategoryIcon {
                                PNGAll = "https://i.imgur.com/V1dUiuy.png", PNGWeapon = "https://i.imgur.com/XwDBNoW.png", PNGAttirie = "https://i.imgur.com/F25qevg.png", PNGConstruction = "https://i.imgur.com/WPG9YMb.png", PNGCustom = "https://i.imgur.com/jyobxIs.png", PNGElectrical = "https://i.imgur.com/7bYVThO.png", PNGFun = "https://i.imgur.com/iWQLRa5.png", PNGItems = "https://i.imgur.com/Rucen7r.png", PNGTools = "https://i.imgur.com/XJzPl6z.png", PNGTransport = "https://i.imgur.com/M9BsGiI.png",
                            }
                            , ColorCategoryIcons = new InterfaceSettings.CategorySettings.ColorCategoryIcon {
                                AllItemsColor = "#DECADEFF", AttirieColor = "#59A27AFF", ConstructionColor = "#B4D455FF", CustomColor = "#9077E2FF", ElectricalColor = "#00DDDDFF", FunColor = "#FFAABBFF", ItemsColor = "#FF2288FF", ToolsColor = "#EE3B00FF", TransportColor = "#D395FFFF", WeaponColor = "#7F4EFFFF",
                            }
                            ,
                        }
                        ,
                    }
                    ,
#endregion
#region ItemSetting
                    ItemSetting = new Dictionary<string, ItemSettings> {
                        ["ak47"]
                        = new ItemSettings {
                            CategoryItems = CategoryItem.Weapon, Command = "", Description = "Хорошее оружие для стрельбы на дальние и средние дистанции", DisplayName = "АК-47", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "rifle.ak", SkinID = 0, WorkBenchLevel = 0, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "wood", Amount = 500, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "scrap", Amount = 15, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "explosives", Amount = 1, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["jackhammer"] = new ItemSettings {
                            CategoryItems = CategoryItem.Tools, Command = "", Description = "", DisplayName = "Jackhammer", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "jackhammer", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "wood", Amount = 500, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "scrap", Amount = 15, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "explosives", Amount = 1, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["hazmatsuit"] = new ItemSettings {
                            CategoryItems = CategoryItem.Attirie, Command = "", Description = "", DisplayName = "Хазмат", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "hazmatsuit", SkinID = 0, WorkBenchLevel = 3, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["floor.ladder.hatch"] = new ItemSettings {
                            CategoryItems = CategoryItem.Construction, Command = "", Description = "Удобно спргынуть и не вернуться", DisplayName = "Люк", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "floor.ladder.hatch", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["privilegy3d"] = new ItemSettings {
                            CategoryItems = CategoryItem.Custom, Command = "say GivePrivilegy", Description = "Целая привилегия на 3 целых дня, самый лучший вариант", DisplayName = "ПРИВИЛЕГИЯ 3 ДНЯ", PNG = "https://i.imgur.com/vLCj3kO.png", PrefabEntity = "", PrefabNameTransport = "", Shortname = "", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                , new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["turret"] = new ItemSettings {
                            CategoryItems = CategoryItem.Electrical, Command = "", Description = "", DisplayName = "Турель", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "autoturret", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "metal.refined", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["tree"] = new ItemSettings {
                            CategoryItems = CategoryItem.Entity, Command = "", Description = "Возьми и всади дерево", DisplayName = "Дерево", PNG = "https://i.imgur.com/XnuUmyZ.png", PrefabEntity = "assets/bundled/prefabs/autospawn/resource/v2_temp_forest/pine_c.prefab", PrefabNameTransport = "", Shortname = "", SkinID = 1337, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["firewerk"] = new ItemSettings {
                            CategoryItems = CategoryItem.Fun, Command = "", Description = "Взорвик небо", DisplayName = "Фейверк", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "firework.romancandle.red", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["swetilnik"] = new ItemSettings {
                            CategoryItems = CategoryItem.Items, Command = "", Description = "", DisplayName = "Светилка на стенку", PNG = "", PrefabEntity = "", PrefabNameTransport = "", Shortname = "xmas.lightstring", SkinID = 0, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        , ["copter"] = new ItemSettings {
                            CategoryItems = CategoryItem.Transport, Command = "", Description = "", DisplayName = "Коптер", PNG = "https://i.imgur.com/kC8tfXF.png", PrefabEntity = "", PrefabNameTransport = "assets/content/vehicles/minicopter/minicopter.entity.prefab", Shortname = "", SkinID = 3333, WorkBenchLevel = 1, IQEconomicPrice = 0, IQRankSystemRank = "", IQPlagueSkillCraft = false, ItemListForCraft = new List<ItemSettings.ItemForCraft> {
                                new ItemSettings.ItemForCraft {
                                    Shortname = "wood", Amount = 100, PNG = "", SkinID = 0
                                }
                                ,
                            }
                        }
                        ,
                    }
                    ,
#endregion
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning($"Ошибка чтения #57 конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Metods
#region Loaded Icons
        void LoadedIcon() {
            PrintWarning("Начинаю загрузку иконок..");
            var Interface = config.InterfaceSetting;
            var Category = Interface.CategorySetting.PNGCategoryIcons;
            var Items = config.ItemSetting;
            var Requires = Interface.RequiresSetting;
            if (!HasImage($"LOGO_{Interface.GeneralSetting.PNGLogo}")) AddImage(Interface.GeneralSetting.PNGLogo, $"LOGO_{Interface.GeneralSetting.PNGLogo}");
            if (!HasImage($"ACTIVE_ITEM_{Interface.GeneralSetting.PNGActive}")) AddImage(Interface.GeneralSetting.PNGActive, $"ACTIVE_ITEM_{Interface.GeneralSetting.PNGActive}");
            if (!HasImage($"IN_ACTIVE_ITEM_{Interface.GeneralSetting.PNGInActive}")) AddImage(Interface.GeneralSetting.PNGInActive, $"IN_ACTIVE_ITEM_{Interface.GeneralSetting.PNGInActive}");
            if (!HasImage($"CLOSE_BUTTON_{Interface.GeneralSetting.PNGCloseButton}")) AddImage(Interface.GeneralSetting.PNGCloseButton, $"CLOSE_BUTTON_{Interface.GeneralSetting.PNGCloseButton}");
            if (!HasImage($"CATEGORY_{Category.PNGAll}")) AddImage(Category.PNGAll, $"CATEGORY_{Category.PNGAll}");
            if (!HasImage($"CATEGORY_{Category.PNGAttirie}")) AddImage(Category.PNGAttirie, $"CATEGORY_{Category.PNGAttirie}");
            if (!HasImage($"CATEGORY_{Category.PNGConstruction}")) AddImage(Category.PNGConstruction, $"CATEGORY_{Category.PNGConstruction}");
            if (!HasImage($"CATEGORY_{Category.PNGCustom}")) AddImage(Category.PNGCustom, $"CATEGORY_{Category.PNGCustom}");
            if (!HasImage($"CATEGORY_{Category.PNGElectrical}")) AddImage(Category.PNGElectrical, $"CATEGORY_{Category.PNGElectrical}");
            if (!HasImage($"CATEGORY_{Category.PNGFun}")) AddImage(Category.PNGFun, $"CATEGORY_{Category.PNGFun}");
            if (!HasImage($"CATEGORY_{Category.PNGItems}")) AddImage(Category.PNGItems, $"CATEGORY_{Category.PNGItems}");
            if (!HasImage($"CATEGORY_{Category.PNGTools}")) AddImage(Category.PNGTools, $"CATEGORY_{Category.PNGTools}");
            if (!HasImage($"CATEGORY_{Category.PNGTransport}")) AddImage(Category.PNGTransport, $"CATEGORY_{Category.PNGTransport}");
            if (!HasImage($"CATEGORY_{Category.PNGWeapon}")) AddImage(Category.PNGWeapon, $"CATEGORY_{Category.PNGWeapon}");
            if (!HasImage($"REQUIRES_WORKBENCH_{Requires.PNGRequiresWorckbench}")) AddImage(Requires.PNGRequiresWorckbench, $"REQUIRES_WORKBENCH_{Requires.PNGRequiresWorckbench}");
            if (!HasImage($"REQUIRES_IQRANKSYSTEM_{Requires.PNGRequiresIQRankSystem}")) AddImage(Requires.PNGRequiresIQRankSystem, $"REQUIRES_IQRANKSYSTEM_{Requires.PNGRequiresIQRankSystem}");
            if (!HasImage($"REQUIRES_IQPLAGUESKILL_{Requires.PNGRequiresIQPlagueSkill}")) AddImage(Requires.PNGRequiresIQPlagueSkill, $"REQUIRES_IQPLAGUESKILL_{Requires.PNGRequiresIQPlagueSkill}");
            if (!HasImage($"REQUIRES_IQECONOMIC_{Requires.PNGRequiresIQEconomic}")) AddImage(Requires.PNGRequiresIQEconomic, $"REQUIRES_IQECONOMIC_{Requires.PNGRequiresIQEconomic}");
            foreach (var Icon in Items.Where(x => x.Value.CategoryItems == CategoryItem.Custom || x.Value.CategoryItems == CategoryItem.Transport || x.Value.CategoryItems == CategoryItem.Entity)) if (!HasImage($"ITEM_{Icon.Value.PNG}")) AddImage(Icon.Value.PNG, $"ITEM_{Icon.Value.PNG}");
            foreach(var Item in Items) foreach(var ItemCraft in Item.Value.ItemListForCraft) if (!HasImage($"ITEM_CRAFT_{ItemCraft.PNG}")) AddImage(ItemCraft.PNG, $"ITEM_CRAFT_{ItemCraft.PNG}");
            ServerMgr.Instance.StartCoroutine(DownloadImages());
            PrintWarning("Загрузка иконок завершена");
        }
        private IEnumerator DownloadImages() {
            var Items = config.ItemSetting;
            PrintError("AddImages SkyPlugins.ru...");
            foreach (var Item in Items) {
                if (Item.Value.SkinID != 0) {
                    if (!HasImage($"{Item.Value.Shortname}_128px_{Item.Value.SkinID}")) AddImage($"http://rust.skyplugins.ru/getskin/{Item.Value.SkinID}/", $"{Item.Value.Shortname}_128px_{Item.Value.SkinID}", Item.Value.SkinID);
                    if (!HasImage($"{Item.Value.Shortname}_256px_{Item.Value.SkinID}")) AddImage($"http://rust.skyplugins.ru/getskin/{Item.Value.SkinID}/", $"{Item.Value.Shortname}_256px_{Item.Value.SkinID}", Item.Value.SkinID);
                }
                else {
                    if (!String.IsNullOrWhiteSpace(Item.Value.Shortname)) {
                        if (!HasImage($"{Item.Value.Shortname}_128px")) AddImage($"http://rust.skyplugins.ru/getimage/{Item.Value.Shortname}/128", $"{Item.Value.Shortname}_128px");
                        if (!HasImage($"{Item.Value.Shortname}_256px")) AddImage($"http://rust.skyplugins.ru/getimage/{Item.Value.Shortname}/256", $"{Item.Value.Shortname}_256px");
                    }
                }
                foreach (var ItemCraft in Item.Value.ItemListForCraft.Where(x => !String.IsNullOrEmpty(x.Shortname))) {
                    if (ItemCraft.SkinID != 0) {
                        if (!HasImage($"{ItemCraft.Shortname}_128px_{ItemCraft.SkinID}")) AddImage($"http://rust.skyplugins.ru/getskin/{ItemCraft.SkinID}/", $"{ItemCraft.Shortname}_128px_{ItemCraft.SkinID}", ItemCraft.SkinID);
                    }
                    else {
                        if (!HasImage($"{ItemCraft.Shortname}_128px")) AddImage($"http://rust.skyplugins.ru/getimage/{ItemCraft.Shortname}/128", $"{ItemCraft.Shortname}_128px");
                    }
                }
            }
            yield return new WaitForSeconds(0.04f);
            PrintError("AddImages SkyPlugins.ru - completed..");
        }
        void CachingImage(BasePlayer player) {
            var Interface = config.InterfaceSetting;
            var Category = Interface.CategorySetting.PNGCategoryIcons;
            var Items = config.ItemSetting;
            var Requires = Interface.RequiresSetting;
            SendImage(player, $"REQUIRES_IQECONOMIC_{Requires.PNGRequiresIQEconomic}");
            SendImage(player, $"REQUIRES_IQPLAGUESKILL_{Requires.PNGRequiresIQPlagueSkill}");
            SendImage(player, $"REQUIRES_IQRANKSYSTEM_{Requires.PNGRequiresIQRankSystem}");
            SendImage(player, $"REQUIRES_WORKBENCH_{Requires.PNGRequiresWorckbench}");
            SendImage(player, $"LOGO_{Interface.GeneralSetting.PNGLogo}");
            SendImage(player, $"CLOSE_BUTTON_{Interface.GeneralSetting.PNGCloseButton}");
            SendImage(player, $"ACTIVE_ITEM_{Interface.GeneralSetting.PNGActive}");
            SendImage(player, $"IN_ACTIVE_ITEM_{Interface.GeneralSetting.PNGInActive}");
            SendImage(player, $"CATEGORY_{Category.PNGAll}");
            SendImage(player, $"CATEGORY_{Category.PNGAttirie}");
            SendImage(player, $"CATEGORY_{Category.PNGConstruction}");
            SendImage(player, $"CATEGORY_{Category.PNGCustom}");
            SendImage(player, $"CATEGORY_{Category.PNGElectrical}");
            SendImage(player, $"CATEGORY_{Category.PNGFun}");
            SendImage(player, $"CATEGORY_{Category.PNGItems}");
            SendImage(player, $"CATEGORY_{Category.PNGTools}");
            SendImage(player, $"CATEGORY_{Category.PNGTransport}");
            SendImage(player, $"CATEGORY_{Category.PNGWeapon}");
            foreach (var Icon in Items.Where(x => x.Value.CategoryItems == CategoryItem.Custom || x.Value.CategoryItems == CategoryItem.Transport || x.Value.CategoryItems == CategoryItem.Entity)) SendImage(player, $"ITEM_{Icon.Value.PNG}");
            foreach (var Item in Items) foreach (var ItemCraft in Item.Value.ItemListForCraft) SendImage(player, $"ITEM_CRAFT_{ItemCraft.PNG}");
        }
#endregion
#region Check Metods
        public bool DoWorkbenchLevel(BasePlayer player, int NeededWorkbenchLevel) => (bool)(player.currentCraftLevel >= NeededWorkbenchLevel);
        public bool DoBalanceIQEconomic(BasePlayer player, int NeededBalance) => (bool)(IQEconomicGetBalance(player.userID) >= NeededBalance);
        public bool DoSkillIQPlagueSkill(BasePlayer player) => (bool)IQPlagueSkillISAdvanced(player);
        public bool DoRankIQRankSystem(BasePlayer player, string RankKey) => (bool)IQRankSystemAvaliability(player, RankKey);
        public bool IS_Item_Player(BasePlayer player, string Shortname, int Amount, ulong SkinID = 0) {
            int ItemAmount = 0;
            foreach (var ItemRequires in player.inventory.AllItems()) {
                if (ItemRequires == null) continue;
                if (ItemRequires.info.shortname != Shortname) continue;
                if (ItemRequires.skin != SkinID) continue;
                ItemAmount += ItemRequires.amount;
            }
            return ItemAmount >= Amount;
        }
        bool Is_Full_Item_Pack(BasePlayer player, List<Configuration.ItemSettings.ItemForCraft> itemForCraftList) {
            int TrueItem = 0;
            for(int i = 0; i < itemForCraftList.Count; i++) {
                var Item = itemForCraftList[i];
                if (IS_Item_Player(player, Item.Shortname, Item.Amount, Item.SkinID)) TrueItem++;
            }
            return TrueItem >= itemForCraftList.Count;
        }
#endregion
        void GiveItemUser(ulong userID, string ItemKey) {
            var Item = config.ItemSetting[ItemKey];
            BasePlayer player = BasePlayer.FindByID(userID);
            switch (Item.CategoryItems) {
                case CategoryItem.Weapon : case CategoryItem.Attirie : case CategoryItem.Construction : case CategoryItem.Electrical : case CategoryItem.Fun : case CategoryItem.Items : case CategoryItem.Tools :  // ITEM
                {
                    Item item = ItemManager.CreateByName(Item.Shortname, 1, Item.SkinID);
                    if (!String.IsNullOrWhiteSpace(Item.DisplayName)) item.name = Item.DisplayName;
                    player.GiveItem(item);
                    break;
                }
                case CategoryItem.Custom :  // COMMAND
                {
                    rust.RunServerCommand(Item.Command.Replace("%STEAMID%", player.UserIDString));
                    break;
                }
                case CategoryItem.Transport :  // ENTITY
                case CategoryItem.Entity : {
                    Item item = ItemManager.CreateByName(CustomItemShortname, 1, Item.SkinID);
                    if (!String.IsNullOrWhiteSpace(Item.DisplayName)) item.name = Item.DisplayName;
                    player.GiveItem(item);
                    break;
                }
            }
        }
#region Craft Metods
        void SpawnItem(BaseEntity entity) {
            if (entity == null) return;
            var ItemSpawn = config.ItemSetting.FirstOrDefault(x => x.Value.SkinID == entity.skinID).Value;
            if (ItemSpawn == null) return;
            if (ItemSpawn.CategoryItems == CategoryItem.Entity || ItemSpawn.CategoryItems == CategoryItem.Transport) {
                string Prefab = ItemSpawn.CategoryItems == CategoryItem.Transport ? ItemSpawn.PrefabNameTransport : ItemSpawn.PrefabEntity;
                BaseEntity SpawnedEntity = (BaseEntity)GameManager.server.CreateEntity(Prefab, entity.transform.position, entity.transform.rotation);
                if (SpawnedEntity == null) return;
                SpawnedEntity.Spawn();
                NextTick(() => entity.Kill());
            }
        }
        void CraftingItem(BasePlayer player, string ItemKey) {
            var Item = config.ItemSetting[ItemKey];
            foreach (var ItemTake in Item.ItemListForCraft) player.inventory.Take(null, ItemManager.FindItemDefinition(ItemTake.Shortname).itemid, ItemTake.Amount);
            if (Item.IQEconomicPrice != 0) IQEconomicRemoveBalance(player.userID, Item.IQEconomicPrice);
            switch (Item.CategoryItems) {
                case CategoryItem.Weapon : case CategoryItem.Attirie : case CategoryItem.Construction : case CategoryItem.Electrical : case CategoryItem.Fun : case CategoryItem.Items : case CategoryItem.Tools :  // ITEM
                {
                    Item item = ItemManager.CreateByName(Item.Shortname, 1, Item.SkinID);
                    if (!String.IsNullOrWhiteSpace(Item.DisplayName)) item.name = Item.DisplayName;
                    player.GiveItem(item);
                    break;
                }
                case CategoryItem.Custom :  // COMMAND
                {
                    rust.RunServerCommand(Item.Command.Replace("%STEAMID%", player.UserIDString));
                    break;
                }
                case CategoryItem.Transport :  // ENTITY
                case CategoryItem.Entity : {
                    Item item = ItemManager.CreateByName(CustomItemShortname, 1, Item.SkinID);
                    if (!String.IsNullOrWhiteSpace(Item.DisplayName)) item.name = Item.DisplayName;
                    player.GiveItem(item);
                    break;
                }
            }
        }
#endregion
#endregion
#region Hooks
        private void OnEntityBuilt(Planner plan, GameObject go) {
            SpawnItem(go.ToBaseEntity());
        }
        private void OnServerInitialized() {
            LoadedIcon();
            foreach (var p in BasePlayer.activePlayerList) OnPlayerConnected(p);
        }
        void Unload() => ServerMgr.Instance.StopCoroutine(DownloadImages());
        void OnPlayerConnected(BasePlayer player) {
            CachingImage(player);
        }
#endregion
#region Commands
        [ChatCommand("craft")]
        void IQCraftSystemCommand(BasePlayer player) {
            PagePlayers[player] = 0;
            UI_CraftMenu(player);
        }
        [ConsoleCommand("craft_give")]
        void IQCraftSystemCmdGiveItem(ConsoleSystem.Arg arg) {
            if (arg.Player() != null) {
                if (!arg.Player().IsAdmin) {
                    PrintError($"Игрок {BasePlayer.FindByID(arg.Player().userID)} Пытается выдать себе предмет");
                    return;
                }
            }
            if (arg == null || arg.Args == null || arg.Args.Length < 2) {
                PrintWarning("Используйте синтаксис : craft_give SteamID Ключ(из кфг)");
                return;
            }
            if(arg.Args[0] == null || String.IsNullOrWhiteSpace(arg.Args[0])) {
                PrintWarning("Вы неверно указали SteamID\nИспользуйте синтаксис : craft_give SteamID Ключ(из кфг)");
                return;
            }
            ulong userID = ulong.Parse(arg.Args[0]);
            if(arg.Args[1] == null || String.IsNullOrWhiteSpace(arg.Args[1])) {
                PrintWarning("Вы неверно указали ключ из кфг\nИспользуйте синтаксис : craft_give SteamID Ключ(из кфг)");
                return;
            }
            string ItemKey = (string)arg.Args[1];
            if(!config.ItemSetting.ContainsKey(ItemKey)) {
                PrintWarning("Такого ключа не существует в конфигурации, используйте верный ключ!");
                return;
            }
            GiveItemUser(userID, ItemKey);
        }
        [ConsoleCommand("func_craft")]
        void IQCraftSsytemFunc(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (player == null) return;
            string Action = arg.Args[0];
            switch(Action) {
                case "close_ui" : {
                    DestroyAll(player);
                    break;
                }
                case "select_category" : {
                    CategoryItem CategoryTake = (CategoryItem)int.Parse(arg.Args[1]);
                    DestroyItem(player);
                    LoadedItems(player, CategoryTake);
                    break;
                }
                case "select_item" : {
                    CategoryItem CategoryTake = (CategoryItem)int.Parse(arg.Args[1]);
                    int SlotActive = int.Parse(arg.Args[2]);
                    string ItemKey = arg.Args[3];
                    DestroyItem(player);
                    LoadedItems(player, CategoryTake, SlotActive);
                    UI_Information_Craft(player, ItemKey);
                    break;
                }
                case "craft_item" : {
                    string ItemKey = arg.Args[1];
                    CraftingItem(player, ItemKey);
                    UI_Information_Craft(player, ItemKey);
                    break;
                }
                case "next.page" : {
                    CategoryItem CategoryTake = (CategoryItem)int.Parse(arg.Args[1]);
                    DestroyItem(player);
                    PagePlayers[player]++;
                    LoadedItems(player, CategoryTake, 0);
                    break;
                }
                case "back.page" : {
                    CategoryItem CategoryTake = (CategoryItem)int.Parse(arg.Args[1]);
                    DestroyItem(player);
                    PagePlayers[player]--;
                    LoadedItems(player, CategoryTake, 0);
                    break;
                }
            }
        }
#endregion
#region UI
        public static string CRAFTSYSTEM_HUD = "CRAFTSYSTEM_HUD";
        void DestroyItemInfo(BasePlayer player) {
            for(int ItemCount = 0; ItemCount < 15; ItemCount++) {
                CuiHelper.DestroyUi(player, $"REQUIRES_ITEM_AMOUNT_{ItemCount}");
                CuiHelper.DestroyUi(player, $"REQUIRES_ITEM_ICO_{ItemCount}");
                CuiHelper.DestroyUi(player, $"REQUIRES_ITEM_LOGO_{ItemCount}");
                CuiHelper.DestroyUi(player, $"REQUIRES_ITEM_{ItemCount}");
            }
            CuiHelper.DestroyUi(player, "CREATE_ITEM_BUTTON");
            CuiHelper.DestroyUi(player, "REQUIRES_ITEM_LIST_TITLE");
            CuiHelper.DestroyUi(player, "REQUIRES_ITEM_LIST_PANEL");
            CuiHelper.DestroyUi(player, "TITLE_REQUIRES");
            CuiHelper.DestroyUi(player, "WORKBENCH_REQ");
            CuiHelper.DestroyUi(player, "WORKBENCH_REQ_ICON");
            CuiHelper.DestroyUi(player, "IQPLAGUESKILL");
            CuiHelper.DestroyUi(player, "IQPLAGUESKILL_ICON");
            CuiHelper.DestroyUi(player, "IQRANKSYSTEM_REQ_ICON");
            CuiHelper.DestroyUi(player, "IQECONOMIC");
            CuiHelper.DestroyUi(player, "IQECONOMIC_REQ_ICON");
            CuiHelper.DestroyUi(player, "IQRANKSYSTEM");
            CuiHelper.DestroyUi(player, "DESCRIPTION_CRAFT_INFO");
            CuiHelper.DestroyUi(player, "TITLE_CRAFT_INFO");
            CuiHelper.DestroyUi(player, "ICON_CRAFT_INFO");
            CuiHelper.DestroyUi(player, "CRAFT_INFORMATION_PANEL");
        }
        void DestroyItem(BasePlayer player) {
            CategoryItem SortCategory = !CategoryActive.ContainsKey(player) ? CategoryItem.All : CategoryActive[player];
            int ItemCategoryIndex = 0;
            var Items = SortCategory == CategoryItem.All ? config.ItemSetting : config.ItemSetting.Where(i => i.Value.CategoryItems == SortCategory);
            foreach (var Item in Items) {
                CuiHelper.DestroyUi(player, $"ITEM_ICON_{ItemCategoryIndex}");
                CuiHelper.DestroyUi(player, $"ITEM_BACKGROUND_{ItemCategoryIndex}");
                CuiHelper.DestroyUi(player, $"ITEMS_{ItemCategoryIndex}");
                ItemCategoryIndex++;
            }
            CuiHelper.DestroyUi(player, "ITEM_PANEL");
            CuiHelper.DestroyUi(player, "BTN_BACK_BUTTON");
            CuiHelper.DestroyUi(player, "BTN_NEXT_BUTTON");
        }
        void DestroyAll(BasePlayer player) {
            DestroyItemInfo(player);
            DestroyItem(player);
            CuiHelper.DestroyUi(player, "CLOSE_BTN");
            CuiHelper.DestroyUi(player, "CLOSE_ICON");
            CuiHelper.DestroyUi(player, "CATEGORY_WEAPON");
            CuiHelper.DestroyUi(player, "CATEGORY_WEAPON" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_TRANSPORT");
            CuiHelper.DestroyUi(player, "CATEGORY_TRANSPORT" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_TOOLS");
            CuiHelper.DestroyUi(player, "CATEGORY_TOOLS" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_ITEMS");
            CuiHelper.DestroyUi(player, "CATEGORY_ITEMS" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_FUN");
            CuiHelper.DestroyUi(player, "CATEGORY_FUN" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_ELECTRICAL");
            CuiHelper.DestroyUi(player, "CATEGORY_ELECTRICAL" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_CUSTOM");
            CuiHelper.DestroyUi(player, "CATEGORY_CUSTOM" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_CONSTRUCTION");
            CuiHelper.DestroyUi(player, "CATEGORY_CONSTRUCTION" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_ATTIRIE");
            CuiHelper.DestroyUi(player, "CATEGORY_ATTIRIE" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_ALL");
            CuiHelper.DestroyUi(player, "CATEGORY_ALL" + "BUTTON");
            CuiHelper.DestroyUi(player, "CATEGORY_PANEL");
            CuiHelper.DestroyUi(player, "LOGO");
            CuiHelper.DestroyUi(player, "DESCRIPTION");
            CuiHelper.DestroyUi(player, "TITLE");
            CuiHelper.DestroyUi(player, CRAFTSYSTEM_HUD);
        }
        void UI_CraftMenu(BasePlayer player) {
            DestroyAll(player);
            var Interface = config.InterfaceSetting;
            var Category = Interface.CategorySetting.PNGCategoryIcons;
            float FadeOut = 0.3f;
            float FadeIn = 0.3f;
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                FadeOut = FadeOut, CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Image = {
                    FadeIn = FadeIn, Color = HexToRustFormat(Interface.GeneralSetting.HexBackground), Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
            }
            , "Overlay", CRAFTSYSTEM_HUD);
#region Welcome Info
            container.Add(new CuiLabel {
                FadeOut = FadeOut, RectTransform = {
                    AnchorMin = "0 0.4759259", AnchorMax = "0.265625 0.5250071"
                }
                , Text = {
                    FadeIn = FadeIn, Text = GetLang("UI_TITLE", player.UserIDString), Font = "robotocondensed-bold.ttf", Align = TextAnchor.UpperCenter
                }
            }
            , CRAFTSYSTEM_HUD, "TITLE");
            container.Add(new CuiLabel {
                FadeOut = FadeOut, RectTransform = {
                    A
// ... [Code preview truncated due to length. Full source in attached file] ...

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

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

Сверху