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

FREE ClanSkins : 0.1.0 0.1.0

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("ClanSkins", "https://topplugin.ru/", "0.1.0")]
    public class ClanSkins : RustPlugin {
        public Dictionary<string, ClansSkins> ClansData = new Dictionary<string, ClansSkins>();
        [PluginReference]
        Plugin Clans, ImageLibrary;
        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary.Call("GetImage", shortname, skin);
        public bool AddImage(string shortname, string name, ulong skin = 0) => (bool)ImageLibrary.Call("AddImage", shortname, name);
        public class ClansSkins {
            public ulong Owner;
            public Dictionary<string, CategoriesItems> CategiriesList = new Dictionary<string, CategoriesItems>();
        }
        public class CategoriesItems {
            public Dictionary<string, ulong> ItemsList = new Dictionary<string, ulong>();
        }
        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Title, ClansData);
        void LoadData() {
            try {
                ClansData = Interface.GetMod().DataFileSystem.ReadObject<Dictionary<string, ClansSkins>>(Title);
            }
            catch {
                ClansData = new Dictionary<string, ClansSkins>();
            }
        }
        private PluginConfig config;
        protected override void LoadDefaultConfig() {
            PrintWarning("Благодарим за покупку плагина на сайте RustPlugin.ru.Если вы передадите этот плагин сторонним лицам знайте - это лишает вас гарантированных обновлений!");
            config = PluginConfig.DefaultConfig();
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
            if (config.PluginVersion < Version) UpdateConfigValues();
            Config.WriteObject(config, true);
        }
        protected override void SaveConfig() {
            Config.WriteObject(config);
        }
        private void UpdateConfigValues() {
            PrintWarning("Config update detected! Updating config values...");
            PluginConfig baseConfig = PluginConfig.DefaultConfig();
            config.PluginVersion = Version;
            PrintWarning("Config update completed!");
        }
        private class PluginConfig {
            [JsonProperty("Команда открытия меню клановых скинов")]
            public string Command;
            [JsonProperty("Привилегия на использование команды открытия клановых скинов")]
            public string Permission;
            [JsonProperty("Черный список скинов предметов (одежда, оружие)")]
            public List<ulong> Blacklist;
            [JsonProperty("Версия конфигурации")]
            public VersionNumber PluginVersion;
            public static PluginConfig DefaultConfig() {
                return new PluginConfig() {
                    PluginVersion = new VersionNumber(), Command = "cskin", Permission = "ClanSkins.allowed", Blacklist = new List<ulong>() {
                        1740563572,
                    }
                }
                ;
            }
        }
        void Init() {
            permission.RegisterPermission(config.Permission, this);
            AddCovalenceCommand(config.Command, "CommandOpenMenu", config.Permission);
        }
        void OnServerInitialized() {
            if (!Clans) {
                PrintError("I did not find the plugin Clans, work stopped");
                Interface.Oxide.UnloadPlugin(Title);
                return;
            }
            if (!ImageLibrary) {
                PrintError("I did not find the plugin ImageLibrary, work stopped");
                Interface.Oxide.UnloadPlugin(Title);
                return;
            }
            else {
                AddImage("https://i.imgur.com/NAXqf60.png", "ClanSkins_Update");
                AddImage("https://i.imgur.com/4waRRlv.png", "ClanSkins_Close");
                AddImage("https://i.imgur.com/d78SFco.png", "ClanSkins_Return");
                Puts("Image library found! Images loaded");
            }
            LoadData();
            CheckClans();
            timer.Repeat(300, 0, () => SaveData());
        }
        void CheckClans() {
            var tags = Clans?.Call<JArray>("GetAllClans");
            List<string> AddedToRemove = new List<string>();
            ClansData.Keys.ToList().ForEach(tag => {
                if (!tags.ToList().Contains(tag.ToString())) AddedToRemove.Add(tag);
            }
            );
            if (AddedToRemove.Count > 0) {
                PrintWarning($"Load {AddedToRemove.Count} old clans, removed");
                AddedToRemove.ForEach(tag => ClansData.Remove(tag));
            }
            PrintWarning($"Load all clans in server, loaded {tags.Count}");
            for (var i = 0; i < tags.Count; i++) {
                var tag = tags[i];
                ProcessClan(tag.ToString());
            }
        }
        void ProcessClan(string Tag) {
            if (!ClansData.ContainsKey(Tag)) {
                PrintWarning($"New clan {Tag} added");
                var ItemsListed = ItemManager.itemList.ToList();
                ClansData.Add(Tag, new ClansSkins() {
                    Owner = ulong.Parse(Clans?.Call<JObject>("GetClan", Tag)?.GetValue("owner").Value<string>()), CategiriesList = new Dictionary<string, CategoriesItems>() {
                        ["Attire"]
                        = new CategoriesItems() {
                            ItemsList = ItemsListed.Where(x => x.category.ToString() == "Attire" && GetImageSkins(x.shortname).Count > 1).ToDictionary(p => p.shortname, p => ulong.Parse("0"))
                        }
                        , ["Weapon"] = new CategoriesItems() {
                            ItemsList = ItemsListed.Where(x => x.category.ToString() == "Weapon" && GetImageSkins(x.shortname).Count > 1 && !x.shortname.Contains(".mod")).ToDictionary(p => p.shortname, p => ulong.Parse("0"))
                        }
                        ,
                    }
                }
                );
                SaveData();
            }
            else PrintWarning($"Clan {Tag} already listed");
        }
        void Unload() => SaveData();
        private bool? CanWearItem(PlayerInventory inventory, Item item, int targetPos) {
            var player = inventory.gameObject.ToBaseEntity() as BasePlayer;
            var clan = Clans?.Call("GetClanOf", player.userID);
            if (clan != null) {
                if (ClansData[clan.ToString()].CategiriesList.ContainsKey(item.info.category.ToString())) if (ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList.ContainsKey(item.info.shortname) && item.skin != ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList[item.info.shortname]) item.skin = ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList[item.info.shortname];
            }
            return null;
        }
        private bool? CanEquipItem(PlayerInventory inventory, Item item) {
            if (inventory == null || item == null) return null;
            var player = inventory.gameObject.ToBaseEntity() as BasePlayer;
            if (player == null) return null;
            var clan = Clans?.Call("GetClanOf", player.userID);
            if (clan != null) {
                if (ClansData[clan.ToString()].CategiriesList.ContainsKey(item.info.category.ToString())) if (ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList.ContainsKey(item.info.shortname) && item.skin != ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList[item.info.shortname]) {
                    item.skin = ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList[item.info.shortname];
                    item.MarkDirty();
                    if (item.GetHeldEntity() != null) {
                        item.GetHeldEntity().skinID = ClansData[clan.ToString()].CategiriesList[item.info.category.ToString()].ItemsList[item.info.shortname];
                        item.GetHeldEntity().SendNetworkUpdate();
                    }
                }
            }
            return null;
        }
        void OnPlayerActiveItemChanged(BasePlayer player, Item oldItem, Item newItem) {
            if (player == null || newItem == null) return;
            var clan = Clans?.Call("GetClanOf", player.userID);
            if (clan != null) {
                if (ClansData[clan.ToString()].CategiriesList.ContainsKey(newItem.info.category.ToString())) if (ClansData[clan.ToString()].CategiriesList[newItem.info.category.ToString()].ItemsList.ContainsKey(newItem.info.shortname) && newItem.skin != ClansData[clan.ToString()].CategiriesList[newItem.info.category.ToString()].ItemsList[newItem.info.shortname]) {
                    newItem.skin = ClansData[clan.ToString()].CategiriesList[newItem.info.category.ToString()].ItemsList[newItem.info.shortname];
                    newItem.MarkDirty();
                    if (newItem.GetHeldEntity() != null) {
                        newItem.GetHeldEntity().skinID = ClansData[clan.ToString()].CategiriesList[newItem.info.category.ToString()].ItemsList[newItem.info.shortname];
                        newItem.GetHeldEntity().SendNetworkUpdate();
                    }
                }
            }
        }
        [ConsoleCommand("ClanSkins_addnewSkin")]
        void cmdAddNewSkin(ConsoleSystem.Arg args) {
            var player = args.Player();
            var shortname = args.Args[0];
            var skinid = ulong.Parse(args.Args[1]);
            var myClan = Clans?.Call("GetClanOf", player.userID);
            var type = args.Args[2];
            if (myClan != null) {
                if (ClansData.ContainsKey(myClan.ToString())) {
                    ClansData[myClan.ToString()].CategiriesList[type].ItemsList[shortname] = skinid;
                    CreateMainMenu(player, type, 0);
                }
            }
        }
        [ConsoleCommand("ClanSkins_changeskin")]
        void cmdNewSkinOfClan(ConsoleSystem.Arg args) {
            if (args.GetString(1) == "") return;
            var player = args.Player();
            ulong skin;
            if (!ulong.TryParse(args.Args[2], out skin)) return;
            var clan = Clans?.Call("GetClanOf", player.userID);
            if (clan == null) return;
            ClansData[clan.ToString()].CategiriesList[args.Args[0]].ItemsList[args.Args[1]] = skin;
            CreateMainMenu(player, args.Args[0], 0);
        }
        private void CommandOpenMenu(IPlayer iplayer, string command, string[] args) {
            var player = BasePlayer.Find(iplayer.Id);
            if (player == null) return;
            var myClan = Clans?.Call("GetClanOf", player.userID);
            if (myClan == null) {
                Reply(player, GetMsg("NoClan", player.userID));
                return;
            }
            if (!ClansData.ContainsKey(myClan.ToString())) {
                Reply(player, GetMsg("NotClanInBase", player.userID));
                return;
            }
            else {
                if (ClansData[myClan.ToString()].Owner != player.userID) {
                    Reply(player, GetMsg("PlayerNoOwner", player.userID));
                    return;
                }
                CreateMainMenu(player);
            }
        }
        [ConsoleCommand("ClanSkins_Update")]
        void cmdClanSkinsUpdate(ConsoleSystem.Arg args) {
            var player = args.Player();
            var page = int.Parse(args.Args[1]);
            if (args.Args[0] == "Attire" || args.Args[0] == "Weapon") CreateMainMenu(player, args.Args[0], page);
            else cmdClansGetSkinList(args);
        }
        public string GetImageSkin(string shortname, ulong skin = 0) => (string)ImageLibrary.Call("GetImage", shortname, skin);
        public List<ulong> GetImageSkins(string shortname) {
            var list = ImageLibrary.Call("GetImageList", shortname) as List<ulong>;
            config.Blacklist.ForEach(skin => {
                if (list.Contains(skin)) list.Remove(skin);
            }
            );
            return list;
        }
        void CreateMainMenu(BasePlayer player, string categiries = "Attire", int page = 0) {
            CuiHelper.DestroyUi(player, "clanSkins_skinlist");
            var elements = new CuiElementContainer();
            elements.Add(new CuiElement {
                Name = "clanSkins_skinlist", Parent = "Overlay", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0.85", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    , new CuiNeedsCursorComponent {
                    }
                }
            }
            );
            elements.Add(new CuiElement() {
                Name = "clanSkins_mainClose", Parent = $"clanSkins_skinlist", Components = {
                    new CuiRawImageComponent {
                        Png = GetImage("ClanSkins_Close")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.925 0.88", AnchorMax = "0.98 0.98"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Button = {
                    Color = "1 1 1 0", Close = "clanSkins_skinlist", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
                , Text = {
                    Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 24
                }
                ,
            }
            , "clanSkins_mainClose");
            elements.Add(new CuiElement {
                Name = "clanSkins_main", Parent = "clanSkins_skinlist", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.17 0.1546297", AnchorMax = "0.83 0.8935185"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiElement {
                Name = "clanSkins_main200", Parent = "clanSkins_main", Components = {
                    new CuiRawImageComponent {
                        Color = "0 0 0 0.85", Sprite = "assets/content/ui/ui.background.tile.psd"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 1", AnchorMax = "1 1.1"
                    }
                }
            }
            );
            elements.Add(new CuiElement {
                Parent = "clanSkins_main200", Components = {
                    new CuiTextComponent {
                        Text = GetMsg("UIMainText", player.userID), Color = "1 0.9294118 0.8666667 1", Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiElement() {
                Name = "clanSkins_mainUpdate", Parent = $"clanSkins_main200", Components = {
                    new CuiRawImageComponent {
                        Png = GetImage("ClanSkins_Update"), Color = "1 1 1 0.3"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.925 0", AnchorMax = "0.99 1"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Button = {
                    Color = "1 1 1 0", Command = $"ClanSkins_Update {categiries} {page}", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
                , Text = {
                    Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 24
                }
                ,
            }
            , "clanSkins_mainUpdate");
            CuiHelper.AddUi(player, elements);
            CreateCategoriesItems(player, categiries);
        }
        void CreateCategoriesItems(BasePlayer player, string categiries, int page = 1) {
            var elements = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "clanSkins_main2");
            CuiHelper.DestroyUi(player, "clanSkins_main3");
            elements.Add(new CuiElement {
                Name = "clanSkins_main2", Parent = "clanSkins_skinlist", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0.3"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.17 0.1546297", AnchorMax = "0.83 0.8935185"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiElement {
                Name = "clanSkins_CategoriesItems", Parent = "clanSkins_main2", Components = {
                    new CuiImageComponent {
                        Color = categiries == "Weapon" ? "0 0 0 0.3" : "1 1 1 0.3", Sprite = "assets/content/ui/ui.background.tile.psd"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    ,
                }
            }
            );
            var playerClan = Clans?.Call("GetClanOf", player.userID);
            if (playerClan == null) return;
            var myClanItems = ClansData[playerClan.ToString()].CategiriesList[categiries].ItemsList;
            var poses = GetPositions(7, 5, 0.01f, 0.01f);
            if (myClanItems.Count > 35) {
                elements.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "1 0", AnchorMax = "1.1 1"
                    }
                    , Button = {
                        Color = "1 1 1 0.3", Command = $"ClanSkins_Update {categiries} {page}", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                    }
                    , Text = {
                        Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 24
                    }
                    ,
                }
                , "clanSkins_CategoriesItems");
            }
            var i = 0;
            foreach (var item in myClanItems.Take(35)) {
                elements.Add(new CuiElement {
                    Name = "clanSkins_skinlist" + item.Key, Parent = "clanSkins_CategoriesItems", Components = {
                        new CuiRawImageComponent {
                            Color = "0.3294118 0.3294118 0.3294118 0.5", Sprite = "assets/content/ui/ui.background.tile.psd"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = poses[i].AnchorMin, AnchorMax = poses[i].AnchorMax
                        }
                    }
                }
                );
                elements.Add(new CuiElement {
                    Parent = "clanSkins_skinlist" + item.Key, Components = {
                        new CuiRawImageComponent {
                            Png = GetImageSkin(item.Key, item.Value)
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                    }
                }
                );
                elements.Add(new CuiButton {
                    Button = {
                        Color = "0.13 0.44 0.48 0", Command = $"clanSkins_getskinIds {item.Key} 1 {categiries}"
                    }
                    , Text = {
                        Text = "", Color = "1 0.9294118 0.8666667 1", FontSize = 14, Align = TextAnchor.MiddleCenter
                    }
                    , RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    ,
                }
                , "clanSkins_skinlist" + item.Key);
                i++;
            }
            elements.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 -0.1", AnchorMax = "0.5 -0.0025"
                }
                , Button = {
                    Color = "1 1 1 0.3", Command = $"ClanSkins_Update Attire 1", Sprite = "assets/content/ui/ui.background.tile.psd"
                }
                , Text = {
                    Text = GetMsg("AttireTranslate", player.userID), Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 30
                }
                ,
            }
            , "clanSkins_CategoriesItems");
            elements.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.5015 -0.1", AnchorMax = "0.998 -0.0025"
                }
                , Button = {
                    Color = "0 0 0 0.3", Command = $"ClanSkins_Update Weapon 1", Sprite = "assets/content/ui/ui.background.tile.psd"
                }
                , Text = {
                    Text = GetMsg("WeaponTranslate", player.userID), Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 30
                }
                ,
            }
            , "clanSkins_CategoriesItems");
            CuiHelper.AddUi(player, elements);
        }
        [ConsoleCommand("clanSkins_getskinIds")]
        void cmdClansGetSkinList(ConsoleSystem.Arg args) {
            var player = args.Player();
            var page = int.Parse(args.Args[1]);
            var SkinList = GetImageSkins(args.Args[0]);
            var categories = args.Args[2];
            var elements = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "clanSkins_main2");
            CuiHelper.DestroyUi(player, "clanSkins_main3");
            CuiHelper.DestroyUi(player, "clanSkins_main");
            CuiHelper.DestroyUi(player, "clanSkins_mainReturn");
            elements.Add(new CuiElement {
                Name = "clanSkins_main3", Parent = "clanSkins_skinlist", Components = {
                    new CuiImageComponent {
                        Color = categories == "Weapon" ? "0 0 0 0.3" : "1 1 1 0.1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.17 0.1546297", AnchorMax = "0.83 0.8935185"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiElement {
                Name = "clanSkins_main200", Parent = "clanSkins_main3", Components = {
                    new CuiRawImageComponent {
                        Color = "0 0 0 0.85", Sprite = "assets/content/ui/ui.background.tile.psd"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 1", AnchorMax = "1 1.1"
                    }
                }
            }
            );
            elements.Add(new CuiElement {
                Parent = "clanSkins_main200", Components = {
                    new CuiTextComponent {
                        Text = GetMsg("UISkinListText", player.userID), Color = "1 0.9294118 0.8666667 1", Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiElement() {
                Name = "clanSkins_mainReturn", Parent = $"clanSkins_main200", Components = {
                    new CuiRawImageComponent {
                        Png = GetImage("ClanSkins_Return"), Color = "1 1 1 0.3"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.01 0.1", AnchorMax = "0.064 0.9"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Button = {
                    Color = "1 1 1 0", Command = $"ClanSkins_Update {categories} 1", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
                , Text = {
                    Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 24
                }
                ,
            }
            , "clanSkins_mainReturn");
            elements.Add(new CuiElement() {
                Name = "clanSkins_mainUpdate", Parent = $"clanSkins_main200", Components = {
                    new CuiRawImageComponent {
                        Png = GetImage("ClanSkins_Update"), Color = "1 1 1 0.3"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.925 0", AnchorMax = "0.99 1"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Button = {
                    Color = "1 1 1 0", Command = $"ClanSkins_Update {args.Args[0]} {page} {categories}", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                }
                , Text = {
                    Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 24
                }
                ,
            }
            , "clanSkins_mainUpdate");
            var poses = GetPositions(7, 5, 0.01f, 0.01f);
            if (SkinList.Count > 35) {
                elements.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "1.004 0.001", AnchorMax = "1.08 0.997"
                    }
                    , Button = {
                        Color = "1 1 1 0.3", Command = $"clanSkins_getskinIds {args.Args[0]} {page + 1} {categories}"
                    }
                    , Text = {
                        Text = ">", Color = "1 0.9294118 0.8666667 1", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 40
                    }
                    ,
                }
                , "clanSkins_main3");
            }
            if (page > 1) {
                elements.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "-0.08 0.001", AnchorMax = "-0.004 0.997"
                    }
                    , Button = {
                        Color = "1 1 1 0.3", Command = $"clanSkins_getskinIds {args.Args[0]} {page - 1} {categories}"
                    }
                    , Text = {
                        Text = "<", Color = "1 0.9294118 0.8666667 1", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 40
                    }
                    ,
                }
                , "clanSkins_main3");
            }
            int i = 0;
            foreach (var skin in SkinList.Skip(35 * page).ToList().Take(35)) {
                elements.Add(new CuiElement {
                    Name = "clanSkins_skinlist" + skin, Parent = "clanSkins_main3", Components = {
                        new CuiRawImageComponent {
                            Color = "0.3294118 0.3294118 0.3294118 0.5", Sprite = "assets/content/ui/ui.background.tile.psd"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = poses[i].AnchorMin, AnchorMax = poses[i].AnchorMax
                        }
                    }
                }
                );
                elements.Add(new CuiElement {
                    Parent = "clanSkins_skinlist" + skin, Components = {
                        new CuiRawImageComponent {
                            Png = GetImageSkin(args.Args[0], skin)
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                    }
                }
                );
                elements.Add(new CuiButton {
                    Button = {
                        Color = "0.13 0.44 0.48 0", Command = $"ClanSkins_addnewSkin {args.Args[0]} {skin} {categories}"
                    }
                    , Text = {
                        Text = "", Color = "1 0.9294118 0.8666667 1", FontSize = 14, Align = TextAnchor.MiddleCenter
                    }
                    , RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    ,
                }
                , "clanSkins_skinlist" + skin);
                i++;
            }
            elements.Add(new CuiElement {
                Name = "clanSkins_skinlist_input", Parent = "clanSkins_main3", Components = {
                    new CuiRawImageComponent {
                        Color = "0 0 0 0.85", Sprite = "assets/content/ui/ui.background.tile.psd", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 -0.1", AnchorMax = "1 0"
                    }
                }
            }
            );
            elements.Add(new CuiElement {
                Parent = "clanSkins_skinlist_input", Components = {
                    new CuiTextComponent {
                        Text = GetMsg("UIInputText", player.userID), Color = "1 0.9294118 0.8666667 0.01", Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                    ,
                }
            }
            );
            elements.Add(new CuiElement() {
                Parent = "clanSkins_skinlist_input", Components = {
                    new CuiInputFieldComponent {
                        Align = TextAnchor.MiddleCenter, CharsLimit = 64, FontSize = 26, Command = $"ClanSkins_changeskin {categories} {args.Args[0]} ", Font = "robotocondensed-bold.ttf", Text = "", Color = "1 0.9294118 0.8666667 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
            CuiHelper.AddUi(player, elements);
        }
        class Position {
            public float Xmin;
            public float Xmax;
            public float Ymin;
            public float Ymax;
            public string AnchorMin => $"{Math.Round(Xmin, 4).ToString(CultureInfo.InvariantCulture)} {Math.Round(Ymin, 4).ToString(CultureInfo.InvariantCulture)}";
            public string AnchorMax => $"{Math.Round(Xmax, 4).ToString(CultureInfo.InvariantCulture)} {Math.Round(Ymax, 4).ToString(CultureInfo.InvariantCulture)}";
            public override string ToString() {
                return $"----------\nAmin:{AnchorMin}\nAmax:{AnchorMax}\n----------";
            }
        }
        [SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator")]
        private static List<Position> GetPositions(int colums, int rows, float colPadding = 0, float rowPadding = 0, bool columsFirst = false) {
            var reply = 3075;
            if (reply == 0) {
            }
            if (colums == 0) throw new ArgumentException("Can't create positions for gui!", nameof(colums));
            if (rows == 0) throw new ArgumentException("Can't create positions for gui!", nameof(rows));
            List<Position> result = new List<Position>();
            result.Clear();
            var colsDiv = 1f / colums;
            var rowsDiv = 1f / rows;
            if (colPadding == 0) colPadding = colsDiv / 2;
            if (rowPadding == 0) rowPadding = rowsDiv / 2;
            if (!columsFirst) for (int j = rows; j >= 1; j--) {
                for (int i = 1; i <= colums; i++) {
                    Position pos = new Position {
                        Xmin = (i - 1) * colsDiv + colPadding / 2f, Xmax = i * colsDiv - colPadding / 2f, Ymin = (j - 1) * rowsDiv + rowPadding / 2f, Ymax = j * rowsDiv - rowPadding / 2f
                    }
                    ;
                    result.Add(pos);
                }
            }
            else for (int i = 1; i <= colums; i++) {
                for (int j = rows; j >= 1; j--) {
                    Position pos = new Position {
                        Xmin = (i - 1) * colsDiv + colPadding / 2f, Xmax = i * colsDiv - colPadding / 2f, Ymin = (j - 1) * rowsDiv + rowPadding / 2f, Ymax = j * rowsDiv - rowPadding / 2f
                    }
                    ;
                    result.Add(pos);
                }
            }
            return result;
        }
        void OnClanCreate(string tag) => ProcessClan(tag);
        void OnClanDestroy(string tag) {
            if (ClansData.ContainsKey(tag)) {
                ClansData.Remove(tag);
                SaveData();
            }
        }
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string>() {
                ["NoClan"]
                = "You are not a member of any clan, access is denied.", ["PlayerNoOwner"] = "Only the leader of your clan can customize skins.", ["NotClanInBase"] = "The clan leader has not yet set up skins.Or the clan is not found in the database list", ["UIInputText"] = "<size=24>ALSO YOU CAN HERE ENTER THE ID OF YOUR SKIN (ONLY WORKSHOP)</size>", ["UISkinListText"] = "<size=26>SELECT THE NECESSARY SKIN JUST PRESS ON IT</size>", ["WeaponTranslate"] = "WEAPON", ["AttireTranslate"] = "CLOTHES", ["UIMainText"] = "<size=26>SETTING CLAN SKINS</size>",
            }
            , this);
            lang.RegisterMessages(new Dictionary<string, string>() {
                ["NoClan"]
                = "Вы не состоите ни в одном из кланов, доступ запрещен", ["PlayerNoOwner"] = "Только лидер вашего клана может настраивать скины", ["NotClanInBase"] = "Лидер клана еще не настраивал скины.Или клан не найден в списке базы данных", ["UIInputText"] = "<size=24>ТАК ЖЕ ВЫ МОЖЕТЕ СЮДА ВВЕСТИ ID СВОЕГО СКИНА (ТОЛЬКО WORKSHOP)</size>", ["UISkinListText"] = "<size=26>ВЫБЕРИТЕ НУЖНЫЙ СКИН ПРОСТО НАЖАВ НА НЕГО</size>", ["WeaponTranslate"] = "ОРУЖИЕ", ["AttireTranslate"] = "ОДЕЖДА", ["UIMainText"] = "<size=26>НАСТРОЙКА КЛАНОВЫХ СКИНОВ</size>",
            }
            , this, "ru");
        }
        private string GetMsg(string langkey, ulong playerid = 3148800) => lang.GetMessage(langkey, this, playerid.ToString());
        private void Reply(BasePlayer player, string langkey, params object[] args) {
            player.ChatMessage(string.Format(GetMsg(langkey, player.userID), args));
        }
    }
}

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

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

Сверху