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

FREE PlayerKits : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Globalization;
using UnityEngine;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Plugins;
using Oxide.Plugins;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using UnityEngine;
using Facepunch.Math;
using UnityEngine.UI;
namespace Oxide.Plugins {
    [Info("PlayerKits", "Ifte", "1.0.0")]
    [Description("Create kits for players.")]
    public class PlayerKits : RustPlugin {
        /*------------------------------------
         *
         *        PlayerKits by Ifte
         *     Support: https://discord.gg/cCWadjcapr
         *     Fiverr: https://www.fiverr.com/s/e2pkYY
         *         CODECCREATION
         *
         ------------------------------------*/
#region Variables
        [PluginReference]
        Plugin ImageLibrary, ZoneManager;
        private Configuration config;
        private PlayerData playerData;
        private KitsUIData _data;
        private readonly string AdminPerm = "PlayerKits.admin";
        private readonly string AutoKitPerm = "PlayerKits.changeautokit";
        private static double CurrentTime => DateTime.UtcNow.Subtract(Epoch).TotalSeconds;
        private static DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0);
        private static double LastWipeTime;
        private enum NotifyType {
            SUCCESS, ERROR
        }
        private Dictionary<string, string> Images = new Dictionary<string, string>();
#endregion
#region Config & Lang
        protected override void LoadConfig() {
            base.LoadConfig();
            config = Config.ReadObject<Configuration>();
        }
        protected override void LoadDefaultConfig() {
            config = new Configuration();
        }
        protected override void SaveConfig() {
            Config.WriteObject(config, true);
        }
        private class Configuration {
            [JsonProperty(PropertyName = "Kit Chat Commands")]
            public string[] Commands = new[] {
                "kitmenu", "kitlist", "kits"
            }
            ;
            [JsonProperty(PropertyName = "Chat Prefix")]
            public string Prefix = "<color=#FFD700>[PlayerKits]</color> »";
            [JsonProperty(PropertyName = "Chat Avator")]
            public ulong Avatar = 0;
            [JsonProperty(PropertyName = "Setting")]
            public SettingsKits Settings = new SettingsKits();
            [JsonProperty(PropertyName = "UI Settings")]
            public KitsUISetting UI = new KitsUISetting();
        }
        private class SettingsKits {
            [JsonProperty(PropertyName = "Wipe player data when the server is wiped")]
            public bool WipePlayerDataOnWipe = true;
            [JsonProperty(PropertyName = "Give spawn kits to players")]
            public bool SpawnKits = true;
            [JsonProperty(PropertyName = "Allow players to toggle spawn kits on spawn")]
            public bool AllowToggleSpawn = true;
        }
        private class KitsUISetting {
            [JsonProperty(PropertyName = "Background UI")]
            public HexColor bacground = new HexColor("#000000", 90);
            [JsonProperty(PropertyName = "Background Image Full")]
            public string bacgroundImgFull = "";
            [JsonProperty(PropertyName = "Topbar UI")]
            public TopBarUISetting topbar = new TopBarUISetting();
            [JsonProperty(PropertyName = "Category UI")]
            public CategoryUISetting category = new CategoryUISetting();
            [JsonProperty(PropertyName = "Kit List UI")]
            public KitListUISetting kitList = new KitListUISetting();
        }
        private class TopBarUISetting {
            [JsonProperty(PropertyName = "Background Color")]
            public HexColor bacground = new HexColor("#000000", 0);
            [JsonProperty(PropertyName = "Background Image")]
            public string backgroundImage = "";
            [JsonProperty(PropertyName = "Display Name")]
            public string DisplayName = "PLAYER KITS";
            [JsonProperty(PropertyName = "Logo URL")]
            public string logourl = "https://rustlabs.com/img/skins/324/10197.png";
            [JsonProperty(PropertyName = "Bar Color")]
            public HexColor barColor = new HexColor("#BFBFAC", 100);
        }
        private class CategoryUISetting {
            [JsonProperty(PropertyName = "Background Color")]
            public HexColor bacground = new HexColor("#000000", 0);
            [JsonProperty(PropertyName = "Background Image")]
            public string backgroundImage = "";
            [JsonProperty(PropertyName = "Display Name")]
            public string DisplayName = "CATEGORY";
            [JsonProperty(PropertyName = "Category List Active Color")]
            public HexColor cateBoxColorActive = new HexColor("#FFC700", 60);
            [JsonProperty(PropertyName = "Category List Inactive Color")]
            public HexColor cateBoxColorInactive = new HexColor("#3C4B24", 60);
        }
        private class KitListUISetting {
            [JsonProperty(PropertyName = "Background Color")]
            public HexColor bacground = new HexColor("#000000", 0);
            [JsonProperty(PropertyName = "Background Image")]
            public string backgroundImage = "";
            [JsonProperty(PropertyName = "Kit Background Color")]
            public HexColor kitBack = new HexColor("#1B201B", 90);
            [JsonProperty(PropertyName = "Kit Description Color")]
            public HexColor kitDesc = new HexColor("#BFBFAC", 100);
            [JsonProperty(PropertyName = "Kit Bookmark Icon")]
            public string kitBookmarkIcon = "https://i.postimg.cc/VkyrF9vf/star.png";
            [JsonProperty(PropertyName = "Kit Description Font")]
            public string kitDescFont = "robotocondensed-bold.ttf";
            [JsonProperty(PropertyName = "Kit Description Font Size")]
            public int kitDescSize = 12;
            [JsonProperty(PropertyName = "Kit Infos Name Color")]
            public HexColor kitInfo = new HexColor("#9CD293", 100);
            [JsonProperty(PropertyName = "Kit Infos Value Color")]
            public HexColor kitInfoValue = new HexColor("#E7E277", 100);
            [JsonProperty(PropertyName = "Kit Icons Color")]
            public HexColor kitIconsColor = new HexColor("#9CD293", 100);
            [JsonProperty(PropertyName = "Kit Limit Icon")]
            public string kitLimitIcon = "https://i.postimg.cc/Rhsdz9t2/warning.png";
            [JsonProperty(PropertyName = "Kit Cooldown Icon")]
            public string kitCoolIcon = "https://i.postimg.cc/hj0MpVtD/timer-1.png";
            [JsonProperty(PropertyName = "Kit WipeCooldown Icon")]
            public string kitWipeCoolIcon = "https://i.postimg.cc/0j2n3rzp/time.png";
        }
#endregion
#region Init
        private void OnServerInitialized() {
            permission.RegisterPermission(AdminPerm, this);
            permission.RegisterPermission(AutoKitPerm, this);
            LoadData();
            LoadImages();
            CheckKits();
            RegisterAllKitsPerms();
            RegisterKitCommands(cmd, this);
            LoadPlayerData();
            LastWipeTime = SaveRestore.SaveCreatedTime.Subtract(Epoch).TotalSeconds;
        }
        private void Unload() {
            SaveData();
            SavePlayerData();
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, "PLAYER_KITS");
            }
        }
        private void OnNewSave(string FileName) {
            if (config.Settings.WipePlayerDataOnWipe) {
                playerData.Wipe();
                SavePlayerData();
                Puts($"New save detected, wiping PlayerData.");
            }
        }
        private void OnServerSave() {
            SaveData();
            SavePlayerData();
        }
#endregion
#region Commands
        private void KitMenuCommand(BasePlayer player, string cmd, string[] args) {
            if (player == null) return;
            if (args.Length == 0) {
                KitsShow_UI(player);
                return;
            }
            string command = args[0].ToLower();
            string identifier = string.Join(" ", args.Skip(1));
            // Extract the kit identifier (ID or Name)
            switch (command) {
                case "remove" : case "delete" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                DeleteKit(player, identifier);
                return;
                case "list" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                //show list
                ShowKits(player);
                return;
                case "edit" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                if (args.Length != 2) {
                    CM(player, "You must specify a kit name.");
                    return;
                }
                Kits editKit = FindKit(identifier);
                if (editKit != null) {
                    KitsShow_UI(player);
                    CreateOrEditKit(player, editKit);
                }
                return;
                case "give" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                if (args.Length != 3) {
                    CM(player, "You must specify target player and a kit name.");
                    return;
                }
                BasePlayer target = FindPlayer(args[1]);
                if (target == null) {
                    CM(player, "Failed to find a player with the specified name or ID.");
                    return;
                }
                string FullName = string.Join("", args.Skip(2));
                Kits giveKit = FindKit(FullName);
                if (giveKit == null) {
                    CM(player, "The kit <color=#ce422b>{0}</color> does not exist.".Replace("{0}", giveKit.Name));
                    return;
                }
                GiveKit(target, giveKit);
                CM(player, "You have given <color=#ce422b>{0}</color> the kit <color=#ce422b>{1}</color>.".Replace("{0}", target.displayName).Replace("{1}", giveKit.Name));
                return;
                case "reset" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                playerData.Wipe();
                SavePlayerData();
                CM(player, "You have wiped player usage data.");
                return;
                case "help" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                ShowHelpMessageAdmin(player);
                return;
                case "create" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                if (args.Length != 2) {
                    CM(player, "You must specify a kit name.");
                    return;
                }
                string kitName = identifier;
                int randomNumber = GetRandom();
                Kits createKit = new Kits {
                    ID = randomNumber, Name = kitName, Description = "This is a kit description.\nPlease use as you fit.", Cooldown = 0, WipeCooldown = 0, AutoKit = false, AutoKitWeight = 0, UsesLimit = 0, Permission = string.Empty,
                }
                ;
                _data.KitsUI_Data.Add(randomNumber, createKit);
                SaveData();
                if (createKit != null) {
                    KitsShow_UI(player);
                    CreateOrEditKit(player, createKit, true);
                }
                return;
                case "autokit" : if (!permission.UserHasPermission(player.UserIDString, AutoKitPerm)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                if (!config.Settings.AllowToggleSpawn) {
                    CM(player, "You are not allowed to change Auto/Spawn Kits.");
                    return;
                }
                playerData[player.userID].ClaimAutoKits = !playerData[player.userID].ClaimAutoKits;
                SavePlayerData();
                if (playerData[player.userID].ClaimAutoKits) {
                    CM(player, $"You have enabled your Auto/Spawn kits.");
                }
                else {
                    CM(player, $"You have disabled your Auto/Spawn kits.");
                }
                return;
                case "convert" :  //
                return;
            }
        }
        private void ConsoleKitCommand(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            string command = args.Args[0].ToLower();
            string identifier = string.Join(" ", args.Args.Skip(1));
            // Extract the kit identifier (ID or Name)
            switch (command) {
                case "give" : if (args.Args.Length != 3) {
                    Puts("You must specify target player and a kit name.");
                    return;
                }
                BasePlayer target = FindPlayer(args.Args[1]);
                if (target == null) {
                    Puts("Failed to find a player with the specified name or ID.");
                    return;
                }
                string FullName = string.Join("", args.Args.Skip(2));
                Kits giveKit = FindKit(FullName);
                if (giveKit == null) {
                    Puts("The kit {0} does not exist.".Replace("{0}", giveKit.Name));
                    return;
                }
                GiveItemsTo(target, giveKit);
                Puts("You have given {0}the kit {1}.".Replace("{0}", target.displayName).Replace("{1}", giveKit.Name));
                return;
                case "list" : ShowKits();
                return;
                case "remove" : case "delete" : DeleteKit(player, identifier);
                return;
                case "reset" : playerData.Wipe();
                SavePlayerData();
                Puts("You have wiped player usage data.");
                return;
            }
        }
        private void CMDKitsUI(IPlayer p, string cmd, string[] args) {
            var player = p.Object as BasePlayer;
            if (player == null) return;
            string command = args[0].ToLower();
            string identifier = string.Join(" ", args.Skip(1));
            // Extract the kit identifier (ID or Name)
            switch (command) {
                case "remove" : case "delete" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                DeleteKit(player, identifier);
                return;
                case "list" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                //show list
                return;
                case "edit" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                Kits editKit = FindKit(identifier);
                if (editKit != null) {
                    CreateOrEditKit(player, editKit);
                }
                return;
                case "give" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                if (args.Length != 3) {
                    CM(player, "You must specify target player and a kit name.");
                    return;
                }
                BasePlayer target = FindPlayer(args[0]);
                if (target == null) {
                    CM(player, "Failed to find a player with the specified name or ID.");
                    return;
                }
                string FullName = string.Join("", args.Skip(2));
                Kits giveKit = FindKit(FullName);
                if (giveKit == null) {
                    CM(player, "The kit <color=#ce422b>{0}</color> does not exist.".Replace("{0}", giveKit.Name));
                    return;
                }
                GiveKit(target, giveKit);
                CM(player, "You have given <color=#ce422b>{0}</color> the kit <color=#ce422b>{1}</color>.".Replace("{0}", target.displayName).Replace("{1}", giveKit.Name));
                return;
                case "reset" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                playerData.Wipe();
                SavePlayerData();
                CM(player, "You have wiped player usage data.");
                return;
                case "help" : if (!IsAdmin(player)) {
                    CM(player, "You don't have permission to use this command.");
                    return;
                }
                //message
                return;
            }
        }
        [ConsoleCommand("pkitcon")]
        private void NewKitConsole(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            if (player == null) return;
            var command = args.Args[0];
            switch (command) {
                case "close" : CuiHelper.DestroyUi(player, "PLAYER_KITS");
                return;
                case "closepreview" : CuiHelper.DestroyUi(player, "KitPreviews");
                return;
                case "closeediting" : CuiHelper.DestroyUi(player, "CreatingKit");
                return;
                case "select" : Kits kit = FindKitByID(args.GetInt(1));
                //KitsShow_UI(player, kit);
                KitPreviews(player, kit);
                return;
                case "page" : int page = args.GetInt(1);
                string category = args.GetString(2);
                KitsShow_UI(player, page, category);
                return;
                case "editkit" : Kits kitedit = FindKitByID(args.GetInt(1));
                CuiHelper.DestroyUi(player, "KitPreviews");
                CreateOrEditKit(player, kitedit);
                return;
                case "createkit" : int randomNumber = GetRandom();
                Kits createKit = new Kits {
                    ID = randomNumber, Name = "Kit Name", Description = "This is a kit description.Please use as you fit.Get this kit from www.kitstore.com/kits.More kits available Soon", Cooldown = 0, WipeCooldown = 0, AutoKit = false, AutoKitWeight = 0, UsesLimit = 0, Permission = string.Empty, EnableKit = true, Color = "#FFFF61",
                }
                ;
                _data.KitsUI_Data.Add(randomNumber, createKit);
                createKit.WearItems = GetKitItems(player.inventory.containerWear);
                createKit.BeltItems = GetKitItems(player.inventory.containerBelt);
                createKit.MainItems = GetKitItems(player.inventory.containerMain);
                SaveData();
                CreateOrEditKit(player, createKit, true);
                return;
                case "delete" : Kits DelKit = FindKitByID(args.GetInt(1));
                RemoveKitByID(DelKit.ID);
                SaveData();
                KitsShow_UI(player);
                CM(player, $"<color=#FFD700>{DelKit.Name}</color> deleted from kits.");
                return;
                case "savekit" : Kits SaveKit = FindKitByID(args.GetInt(1));
                if (!HasKitItems(SaveKit)) {
                    //ShowNotify(player, "Please save at least 1 item for your Kit to be saved.");
                    NotifyMessage(player, NotifyType.ERROR, "Please save at least 1 item for your kit to be saved.");
                    PlaySound(player, "assets/prefabs/locks/keypad/effects/lock.code.denied.prefab");
                    return;
                }
                KitsShow_UI(player);
                return;
                case "copyinv" : Kits CopyInvKit = FindKitByID(args.GetInt(1));
                CopyInvKit.WearItems = GetKitItems(player.inventory.containerWear);
                CopyInvKit.BeltItems = GetKitItems(player.inventory.containerBelt);
                CopyInvKit.MainItems = GetKitItems(player.inventory.containerMain);
                SaveData();
                //ShowNotify(player, "You have copied your inventory to this kit.");
                NotifyMessage(player, NotifyType.SUCCESS, $"You have copied your inventory to <color=#FFD700>{CopyInvKit.Name}</color>");
                PlaySound(player, "assets/prefabs/locks/keypad/effects/lock.code.denied.prefab");
                return;
                case "changeName" : Kits nameKit = FindKitByID(args.GetInt(1));
                nameKit.Name = string.Join(" ", args.Args.Skip(2));
                SaveData();
                CreateOrEditKit(player, nameKit);
                return;
                case "changeDes" : Kits desKit = FindKitByID(args.GetInt(1));
                desKit.Description = string.Join(" ", args.Args.Skip(2));
                SaveData();
                CreateOrEditKit(player, desKit);
                return;
                case "changePerm" : Kits permKit = FindKitByID(args.GetInt(1));
                permKit.Permission = args.GetString(2);
                RegisterKitPerm(args.GetString(2));
                SaveData();
                CreateOrEditKit(player, permKit);
                return;
                case "changeColor" : Kits col = FindKitByID(args.GetInt(1));
                col.Color = args.GetString(2);
                SaveData();
                CreateOrEditKit(player, col);
                return;
                case "changeCategory" : Kits chType = FindKitByID(args.GetInt(1));
                chType.Category = string.Join(" ", args.Args.Skip(2));
                SaveData();
                CreateOrEditKit(player, chType);
                return;
                case "changeCool" : Kits coolKit = FindKitByID(args.GetInt(1));
                coolKit.Cooldown = args.GetInt(2);
                SaveData();
                CreateOrEditKit(player, coolKit);
                return;
                case "changeUses" : Kits usesKit = FindKitByID(args.GetInt(1));
                usesKit.UsesLimit = args.GetInt(2);
                SaveData();
                CreateOrEditKit(player, usesKit);
                return;
                case "changeWipe" : Kits wipeKit = FindKitByID(args.GetInt(1));
                wipeKit.WipeCooldown = args.GetInt(2);
                SaveData();
                CreateOrEditKit(player, wipeKit);
                return;
                case "changeIMG" : Kits imgKit = FindKitByID(args.GetInt(1));
                //imgKit.ImageURL = args.GetString(2);
                SaveData();
                //AddImage(imgKit.ImageURL);
                LoadImages();
                CreateOrEditKit(player, imgKit);
                return;
                case "changeShowKit" : Kits showKitChange = FindKitByID(args.GetInt(1));
                //showKitChange.ShowWithoutPerm = !showKitChange.ShowWithoutPerm;
                SaveData();
                CreateOrEditKit(player, showKitChange);
                return;
                case "changeAuto" : Kits autoKit = FindKitByID(args.GetInt(1));
                autoKit.AutoKit = !autoKit.AutoKit;
                SaveData();
                CreateOrEditKit(player, autoKit);
                return;
                case "changeKitEnable" :  //$"pkitcon changeKitEnable {kit.ID}"
                Kits colorBarKit = FindKitByID(args.GetInt(1));
                colorBarKit.EnableKit = !colorBarKit.EnableKit;
                SaveData();
                CreateOrEditKit(player, colorBarKit);
                return;
                case "changeTypeColor" : Kits typeColorKit = FindKitByID(args.GetInt(1));
                //typeColorKit.TypeColor = args.GetString(2);
                SaveData();
                CreateOrEditKit(player, typeColorKit);
                return;
                case "changePri" : Kits priKit = FindKitByID(args.GetInt(1));
                int num = args.GetInt(2);
                if (num > 100) {
                    num = 100;
                }
                if (num <= 0) {
                    num = 1;
                }
                priKit.AutoKitWeight = num;
                SaveData();
                CreateOrEditKit(player, priKit);
                return;
                case "redeemkit" : Kits rKit = FindKitByID(args.GetInt(1));
                GiveKit(player, rKit);
                return;
                case "cautoadmin" : playerData[player.userID].ShowAutoKitList = !playerData[player.userID].ShowAutoKitList;
                SavePlayerData();
                KitsShow_UI(player);
                return;
                case "selectCate" : string cate = args.GetString(1).Replace("_", " ");
                KitsShow_UI(player, 1, cate);
                return;
                case "bookmark" : Kits bmKit = FindKitByID(args.GetInt(1));
                if (playerData.Find(player.userID, out PlayerData.PlayerUsageData playerUsageData)) {
                    if (playerUsageData.FavKits.Contains(bmKit.ID)) {
                        playerUsageData.FavKits.Remove(bmKit.ID);
                        KitsShow_UI(player);
                    }
                    else {
                        playerUsageData.FavKits.Add(bmKit.ID);
                        KitsShow_UI(player);
                    }
                }
                return;
            }
        }
#endregion
#region Hooks
        private void OnPlayerRespawned(BasePlayer player) {
            if (player == null || !config.Settings.SpawnKits || !playerData[player.userID].ClaimAutoKits) return;
            List<Kits> AutoKits = _data.KitsUI_Data.Values.Where(kit => kit.AutoKit && (string.IsNullOrEmpty(kit.Permission) || permission.UserHasPermission(player.UserIDString, kit.Permission))).ToList();
            float highestWeight = 0.0f;
            Kits highestWeightKit = null;
            foreach (Kits kit in AutoKits) {
                // Check if the weight of the current kit is higher than the highest weight
                if (kit.AutoKitWeight > highestWeight) {
                    highestWeight = kit.AutoKitWeight;
                    highestWeightKit = kit;
                }
            }
            if (highestWeightKit != null) {
                player.inventory.Strip();
                GiveItemsTo(player, highestWeightKit);
            }
        }
#endregion
#region Methods
        private string FormatTime(double time) {
            TimeSpan dateDifference = TimeSpan.FromSeconds(time);
            int days = dateDifference.Days;
            int hours = dateDifference.Hours;
            int mins = dateDifference.Minutes;
            int secs = dateDifference.Seconds;
            if (days > 0) return $"{days:00}d:{hours:00}h";
            if (hours > 0) return $"{hours:00}h:{mins:00}m";
            return mins > 0 ? $"{mins:00}m:{secs:00}s" : $"{secs}s";
        }
        private int GetRandom() {
            System.Random random = new System.Random();
            int randomNumber;
            do {
                randomNumber = random.Next(1000, 99999999);
            }
            while (GetKitIDS().Contains(randomNumber));
            return randomNumber;
        }
        private HashSet<int> GetKitIDS() {
            HashSet<int> kitIDS = new HashSet<int>();
            foreach(var id in _data.KitsUI_Data.Values) {
                if (id != null) {
                    kitIDS.Add(id.ID);
                }
            }
            return kitIDS;
        }
        private bool HasBookMarkKit(BasePlayer player, int ID) {
            if (playerData.Find(player.userID, out PlayerData.PlayerUsageData playerUsageData)) {
                if (playerUsageData.FavKits.Count > 0) {
                    foreach (int num in playerUsageData.FavKits) {
                        if (num == ID) return true;
                    }
                }
            }
            return false;
        }
        private HashSet<string> GetCategorys() {
            HashSet<string> categories = new HashSet<string>();
            categories.Add("ALL KITS");
            categories.Add("FAVORITES");
            foreach (var kit in _data.KitsUI_Data.Values) {
                if (kit.Category != null && !string.IsNullOrEmpty(kit.Category)) {
                    categories.Add(kit.Category);
                }
            }
            return categories;
        }
        private void ShowHelpMessageAdmin(BasePlayer player) {
            string message = "<color=#FFD700>PlayerKits Help</color>\n» /kits - Shows Kits UI\n» /kits <color=#FFD700>list</color> - Shows Kits list\n» /kits <color=#FFD700>create</color> <Name> - Shows Kits create UI\n» /kits <color=#FFD700>edit</color> <Name/ID>< - Shows Kits edit UI\n» /kits <color=#FFD700>give</color> <PlayerName/SteamID> <Name/ID> - Give kit to specific player\n» /kits <color=#FFD700>reset</color> - Reset all player data";
            Player.Message(player, message, config.Avatar);
        }
        private void CM(BasePlayer player, string message) {
            if (player == null) return;
            if (message == null) return;
            Player.Message(player, config.Prefix + " " + message, config.Avatar);
        }
        private bool IsAdmin(BasePlayer player) => permission.UserHasPermission(player.UserIDString, AdminPerm);
        private BasePlayer FindPlayer(string partialNameOrID) => BasePlayer.allPlayerList.FirstOrDefault<BasePlayer>((BasePlayer x) => x.UserIDString.Equals(partialNameOrID) || x.displayName.Equals(partialNameOrID, StringComparison.OrdinalIgnoreCase) || x.displayName.Contains(partialNameOrID, CompareOptions.OrdinalIgnoreCase));
        private void PlaySound(BasePlayer player, string path) => Effect.server.Run(path, player, 2, Vector3.zero, new Vector3(0f, 2f, 0f));
        private void AddImage(string url) {
            if (string.IsNullOrEmpty(url)) return;
            if (!ImageLibrary.Call<bool>("HasImage", url)) ImageLibrary.Call("AddImage", url, url);
            timer.In(1f, () => {
                if (Images.ContainsKey(url)) Images.Remove(url);
                Images.Add(url, ImageLibrary.Call<string>("GetImage", url));
            }
            );
        }
        private void LoadImages() {
            if (ImageLibrary == null) {
                PrintError("[ImageLibrary] not found!");
                return;
            }
            //
            AddImage("https://i.postimg.cc/Rhh5bMFt/check.png");
            AddImage("https://i.postimg.cc/j5sgvcZG/Error-2.png");
            ///
            AddImage(config.UI.topbar.backgroundImage);
            AddImage(config.UI.topbar.logourl);
            AddImage(config.UI.kitList.backgroundImage);
            AddImage(config.UI.kitList.kitLimitIcon);
            AddImage(config.UI.kitList.kitCoolIcon);
            AddImage(config.UI.kitList.kitWipeCoolIcon);
            AddImage(config.UI.kitList.kitBookmarkIcon);
            foreach (var kit in _data.KitsUI_Data.Values) {
                var allItems = kit.MainItems.Concat(kit.WearItems).Concat(kit.BeltItems);
                foreach (var item in allItems) {
                    if (!string.IsNullOrEmpty(item.ImageURL)) {
                        AddImage(item.ImageURL);
                    }
                }
            }
        }
        private string GetImage(string url) {
            return Images[url];
        }
        private class HexColorCopy {
            [JsonProperty(PropertyName = "Hexa Color")]
            public string Hex;
            [JsonProperty(PropertyName = "Opacity(0 - 100)")]
            public float Alpha;
            public string Color() {
                if (string.IsNullOrEmpty(Hex)) Hex = "#FFFFFF";
                var str = Hex.Trim('#');
                if (str.Length != 6) throw new Exception(Hex);
                var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
                var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
                var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
                return $"{(double)r / 255} {(double)g / 255} {(double)b / 255} {Alpha / 100}";
            }
            public HexColorCopy(string hex, float alpha) {
                Hex = hex;
                Alpha = alpha;
            }
        }
        private string HexConvert(string Color, float Alpha) {
            var str = Color.Trim('#');
            if (str.Length != 6) throw new Exception("Invalid hexadecimal color");
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            return $"{(double)r / 255} {(double)g / 255} {(double)b / 255} {Alpha / 100}";
        }
        private class HexColor {
            [JsonProperty(PropertyName = "Hexa Color(#FFFFFF,100)")]
            public string Hex;
            public string Color() {
                if (string.IsNullOrEmpty(Hex)) Hex = "#FFFFFF,100";
                // Set default value if not provided
                var parts = Hex.Split(',');
                if (parts.Length != 2) throw new Exception("Invalid format for Hexa Color");
                var str = parts[0].Trim('#');
                if (str.Length != 6) throw new Exception("Invalid hexadecimal color");
                if (!float.TryParse(parts[1], out var alpha)) throw new Exception("Invalid alpha value");
                var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
                var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
                var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
                return $"{(double)r / 255} {(double)g / 255} {(double)b / 255} {alpha / 100}";
            }
            public HexColor(string hex, float alpha) {
                Hex = $"{hex},{alpha}";
            }
        }
        private void RegisterKitCommands(Game.Rust.Libraries.Command cmd, Plugin plugin) {
            for(int i = 0; i < config.Commands.Length; i++) {
                cmd.AddChatCommand(config.Commands[i], plugin, "KitMenuCommand");
                cmd.AddConsoleCommand(config.Commands[i], plugin, "ConsoleKitCommand");
            }
        }
#endregion
#region UIs
        private void NotifyMessage(BasePlayer player, NotifyType type, string Message) {
            var container = new CuiElementContainer();
            if (type == NotifyType.SUCCESS) {
                container.Add(new CuiPanel {
                    CursorEnabled = false, Image = {
                        Color = "0.3568628 0.4392157 0.2196078 1", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                    }
                    , RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "371.86 184.22", OffsetMax = "631.86 244.22"
                    }
                }
                , "Overlay", "NotifyUI");
                container.Add(new CuiPanel {
                    CursorEnabled = false, Image = {
                        Color = "0 0 0 0.4"
                    }
                    , RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-130 -30", OffsetMax = "-70 30"
                    }
                }
                , "NotifyUI", "Panel_4656");
                container.Add(new CuiElement {
                    Name = "Image_464", Parent = "NotifyUI", Components = {
                        new CuiRawImageComponent {
                            Color = "1 1 1 1", Png = GetImage("https://i.postimg.cc/Rhh5bMFt/check.png")
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-116.4 -14", OffsetMax = "-88.4 14"
                        }
                    }
                }
                );
                container.Add(new CuiElement {
                    Name = "Title", Parent = "NotifyUI", Components = {
                        new CuiTextComponent {
                            Text = "SUCCESS!", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.UpperLeft, Color = "1 1 1 1"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-62.3 0", OffsetMax = "113.7 20.668"
                        }
                    }
                }
                );
                container.Add(new CuiElement {
                    Name = "Desc", Parent = "NotifyUI", Components = {
                        new CuiTextComponent {
                            Text = Message, Font = "robotocondensed-regular.ttf", FontSize = 11, Align = TextAnchor.UpperLeft, Color = "1 1 1 1"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-62.3 -28", OffsetMax = "113.7 0"
                        }
                    }
                }
                );
                CuiHelper.DestroyUi(player, "NotifyUI");
                CuiHelper.AddUi(player, container);
            }
            else if (type == NotifyType.ERROR) {
                container.Add(new CuiPanel {
                    CursorEnabled = false, Image = {
                        Color = "0.8039216 0.254902 0.1686275 1", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                    }
                    , RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "371.86 184.22", OffsetMax = "631.86 244.22"
                    }
                }
                , "Overlay", "NotifyUI");
                container.Add(new CuiPanel {
                    CursorEnabled = false, Image = {
                        Color = "0 0 0 0.4"
                    }
                    , RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-130 -30", OffsetMax = "-70 30"
                    }
                }
                , "NotifyUI", "Panel_4656");
                container.Add(new CuiElement {
                    Name = "Image_464", Parent = "NotifyUI", Components = {
                        new CuiRawImageComponent {
                            Color = "0.7686275 1 0.3803922 1", Png = GetImage("https://i.postimg.cc/j5sgvcZG/Error-2.png")
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-116.4 -14", OffsetMax = "-88.4 14"
                        }
                    }
                }
                );
                container.Add(new CuiElement {
                    Name = "Title", Parent = "NotifyUI", Components = {
                        new CuiTextComponent {
                            Text = "ERROR!", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.UpperLeft, Color = "1 1 1 1"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-62.3 0", OffsetMax = "113.7 20.668"
                        }
                    }
                }
                );
                container.Add(new CuiElement {
                    Name = "Desc", Parent = "NotifyUI", Components = {
                        new CuiTextComponent {
                            Text = Message, Font = "robotocondensed-regular.ttf", FontSize = 11, Align = TextAnchor.UpperLeft, Color = "1 1 1 1"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-62.3 -28", OffsetMax = "113.7 0"
                        }
                    }
                }
                );
                CuiHelper.DestroyUi(player, "NotifyUI");
                CuiHelper.AddUi(player, container);
            }
            timer.In(5, () => {
                CuiHelper.DestroyUi(player, "NotifyUI");
            }
            );
        }
        private void ShowNotify(BasePlayer player, string Message) {
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "0 0 0 1"
                }
                , RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "371.858 190.925", OffsetMax = "604.342 257.875"
                }
            }
            , "Overlay", "Notify");
            container.Add(new CuiPanel {
                CursorEnabled = false, Image = {
                    Color = "0.1411765 0.1372549 0.1372549 1", Sprite = "assets/content/ui/ui.background.transparent.linearltr.tga"
                }
                , RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-116.241 -33.984", OffsetMax = "116.239 33.984"
                }
            }
            , "Notify", "Gradient");
            container.Add(new CuiElement {
                Name = "Image_4415", Parent = "Notify", Components = {
                    new CuiRawImageComponent {
                        Color = "1 1 1 1", Sprite = "assets/icons/info.png"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-107.3 -12.5", OffsetMax = "-82.3 12.5"
                    }
                }
            }
            );
            container.Add(new CuiElement {
                Name = "Type", Parent = "Notify", Components = {
                    new CuiTextComponent {
                        Text = "WARNING!", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.MiddleLeft, Color = "1 0.3411765 0.3411765 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-78.737 5.061", OffsetMax = "52.937 28.339"
                    }
                }
            }
            );
            container.Add(new CuiElement {
                Name = "Msg", Parent = "Notify", Components = {
                    new CuiTextComponent {
                        Text = Message, Font = "robotocondensed-regular.ttf", FontSize = 12, Align = TextAnchor.UpperLeft, Color = "1 1 1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-78.738 -37.786", OffsetMax = "112.476 0"
                    }
                }
            }
            );
            CuiHelper.DestroyUi(player, "Notify");
            CuiHelper.AddUi(player, container);
            timer.In(5, () => {
                CuiHelper.DestroyUi(player, "Notify");
            }
            );
        }
        private string CheckRedeemable(BasePlayer player, Kits kit) {
            string ClaimBTN = "REDEEM";
            if (!string.IsNullOrEmpty(kit.Permission) && !permission.UserHasPermission(player.UserIDString, kit.Permission)) {
                return ClaimBTN = "LOCKED";
            }
            else if (kit.WipeCooldown > 0 && IsOnWipeCooldown(kit)) {
                return ClaimBTN = "WAIT " + FormatTime(TimeLeftBeforeKitCanBeUsed(kit));
            }
            else if (playerData.Find(player.userID, out PlayerData.PlayerUsageData playerUsageData)) {
                if (kit.Cooldown > 0) {
                    double cooldownRem = playerUsageData.GetCooldownRemaining(kit.ID);
                    if (cooldownRem > 0) {
                        return ClaimBTN = "Wait " + FormatTime(playerData[player.userID].GetCooldownRemaining(kit.ID));
                    }
                }
                if (kit.UsesLimit > 0) {
                    int currentUses = playerUsageData.GetKitUses(kit.ID);
                    if (currentUses >= kit.UsesLimit) {
                        return ClaimBTN = "Limit Reached";
                    }
                }
            }
            return ClaimBTN;
        }
        private void KitsShow_UI(BasePlayer player, int currentPage = 1, string Category = "") {
            var container = new CuiElementContainer();
            if (string.IsNullOrEmpty(config.UI.bacgroundImgFull)) {
                container.Add(new CuiPanel {
                    CursorEnabled = true, Image = {
                        Color = config.UI.bacground.Color(), Material = "assets/content/ui/uibackgroundblur.mat"
                    }
                    , RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-640.002 -360.001", OffsetMax = "639.998 360.009"
                    }
                }
                , "Overlay", "PLAYER_KITS");
            }
            else {
                container.Add(new CuiElement {
                    Name = "PLAYER_KITS", Parent = "Overlay", Components = {
                        new CuiNeedsCursorComponent(), new CuiRawImageComponent {
                            Color = config.UI.bacground.Color(), Png = GetImage(config.UI.bacgroundImgFull)
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-640.002 -360.001", OffsetMax = "639.998 360.009"
                        }
                    }
                }
                );
            }
#region TOP BAR
            if (string.IsNullOrEmpty(config.UI.topbar.backgroundImage)) {
                container.Add(new CuiPanel {
                    Image = {
                     
// ... [Code preview truncated due to length. Full source in attached file] ...

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