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

FREE SSkin : 1.1.1 1.1.1

Нет прав для скачивания
C#:
using Facepunch.Extend;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Oxide.Plugins.Extension;
using Oxide.Plugins.Helper;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using UnityEngine;
using VLB;
using Time = UnityEngine.Time;
namespace Oxide.Plugins {
    /*ПЛАГИН БЫЛ ПОФИКШЕН С ПОМОЩЬЮ ПРОГРАММЫ СКАЧАНОЙ С https://discord.gg/dNGbxafuJn */
    [Info("SSkin", "Skuli Dropek", "1.1.1")]
    internal class SSkin : RustPlugin {
        private readonly Dictionary<ulong, BaseEntity> _startUseMenu = new Dictionary<ulong, BaseEntity>();
#region Configuration
        private class Configuration : Sigleton<Configuration> {
            public bool AddApproved;
            public bool AddHazmat;
            public string DefaultSkinsPermission;
            public Grades GradesSettings;
            public Hammer HammerSettings;
            public Command SkinCommand;
            public Command SkinEntityCommand;
            public Dictionary<string, List<ulong>> PermissionSkins;
            public class Grades {
                public List<BuildingGrade> Array;
                public string Permission;
            }
            public class BuildingGrade {
                public string Name;
                public List<SkinUrl> Skins;
            }
            public class SkinUrl : Skin.Skin {
                public string Url;
            }
            public class Hammer {
                public string OpenSkinEntityPermission;
                public BUTTON OpenSkinEntityButton;
                public BUTTON OpenSkinBuildingButton;
                public string ChangeSkinPressLeftButtonPermission;
            }
            public class Command {
                public List<string> Commands;
                public string Permission;
            }
            public List<ulong> GetBlockPermissionSkins(BasePlayer player) {
                List<ulong> items = new List<ulong>();
                foreach (var perm in PermissionSkins) {
                    if (player.HasPermission(perm.Key)) continue;
                    items.AddRange(perm.Value);
                }
                return items;
            }
            public List<ulong> GetPermissionSkins(BasePlayer player) {
                List<ulong> items = new List<ulong>();
                foreach (var perm in PermissionSkins) {
                    if (player.HasPermission(perm.Key)) items.AddRange(perm.Value);
                }
                return items;
            }
            public void SetDefaultConfig() {
                AddApproved = true;
                AddHazmat = true;
                DefaultSkinsPermission = "defaultskins.use";
                GradesSettings = new Grades() {
                    Array = new List<BuildingGrade>() {
                        new BuildingGrade() {
                            Name = "Stone", Skins = new List<SkinUrl>() {
                                new SkinUrl() {
                                    Name = "Default Stone", Id = 0, Url = "https://rustlabs.com/img/items180/stones.png"
                                }
                                , new SkinUrl() {
                                    Name = "Upgrade Stone", Id = 10220, Url = "https://media.discordapp.net/attachments/1103353725772386318/1111205056520388608/IMG_9516.png",
                                }
                            }
                        }
                        , new BuildingGrade() {
                            Name = "Metal", Skins = new List<SkinUrl>() {
                                new SkinUrl() {
                                    Name = "Default Metal", Id = 0, Url = "https://rustlabs.com/img/items180/metal.refined.png"
                                }
                                , new SkinUrl() {
                                    Name = "Upgrade Metal", Id = 10221, Url = "https://media.discordapp.net/attachments/1090555264106770513/1114467883943215164/512fx512f.png",
                                }
                            }
                        }
                    }
                    , Permission = "gradesetting.use"
                }
                ;
                PermissionSkins = new Dictionary<string, List<ulong>>() {
                    {
                        "testperm", new List<ulong>() {
                            1
                        }
                    }
                }
                ;
                HammerSettings = new Hammer() {
                    ChangeSkinPressLeftButtonPermission = "changeskinpressleftbutton.use", OpenSkinEntityPermission = "openskinentity.use", OpenSkinEntityButton = BUTTON.FIRE_SECONDARY, OpenSkinBuildingButton = BUTTON.USE,
                }
                ;
                SkinCommand = new Command() {
                    Commands = new List<string>() {
                        "skin"
                    }
                    , Permission = "skincommand.use"
                }
                ;
                SkinEntityCommand = new Command() {
                    Commands = new List<string>() {
                        "skinentity", "se"
                    }
                    , Permission = "skinentitycommand.use"
                }
                ;
            }
        }
        protected override void LoadDefaultConfig() {
            if (Configuration.Instance == null) new Configuration();
            Configuration.Instance.SetDefaultConfig();
        }
        protected override void SaveConfig() {
            Config.WriteObject(Configuration.Instance);
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                Configuration.Instance = Config.ReadObject<Configuration>();
            }
            catch {
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
#endregion
#region Lang
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string>() {
                ["NOPERMUSE"]
                = "У вас нет прав на использование команды!", ["LABLEMENUTEXT"] = "МЕНЮ СКИНОВ", ["INFOCLICKSKIN"] = "Нажмите на предмет,\nна который нужно установить скин", ["FAVSKINSLABLE"] = "ИЗБРАННЫЕ СКИНЫ", ["NOTYOUREBUILD"] = "Этот предмет не ваш"
            }
            , this, "ru");
            lang.RegisterMessages(new Dictionary<string, string>() {
                ["NOPERMUSE"]
                = "You don't have the rights to use the command!", ["LABLEMENUTEXT"] = "Menu Skin", ["INFOCLICKSKIN"] = "Click on the item you want to install the skin on", ["FAVSKINSLABLE"] = "SKINS FAVORITAS", ["NOTYOUREBUILD"] = "This item is not yours"
            }
            , this, "en");
        }
#endregion
#region Hooks
        private void Loaded() {
            new Items().Load();
            new Players().Load();
        }
        private void OnServerInitialized() {
            new SSkinWeb(this);
            new ImageLibrary(plugins.Find("ImageLibrary"));
            new SSkinLang(this);
            new InterfaceBuilder();
            new Helper();
            foreach (var command in Configuration.Instance.SkinCommand.Commands) cmd.AddChatCommand(command, this, SkinCommand);
            foreach (var command in Configuration.Instance.SkinEntityCommand.Commands) cmd.AddChatCommand(command, this, SkinEntityCommand);
            NextTick(() => {
                if (Configuration.Instance.AddHazmat) {
                    Items.Instance.LoadSkinHazmats();
                }
                if (Configuration.Instance.AddApproved) {
                    Items.Instance.LoadSkinDefines();
                    Items.Instance.LoadApprovedSkin();
                    Items.Instance.Unload();
                }
            }
            );
            BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected);
            ImageLibrary.Instance.AddImage($"https://i.ibb.co/XX5ntbr/grid.png", "grid2");
            RegisterPermission(Configuration.Instance.DefaultSkinsPermission);
            RegisterPermission(Configuration.Instance.HammerSettings.OpenSkinEntityPermission);
            RegisterPermission(Configuration.Instance.HammerSettings.ChangeSkinPressLeftButtonPermission);
            RegisterPermission(Configuration.Instance.SkinCommand.Permission);
            RegisterPermission(Configuration.Instance.SkinEntityCommand.Permission);
            RegisterPermission(Configuration.Instance.GradesSettings.Permission);
            foreach (var perm in Configuration.Instance.PermissionSkins) {
                RegisterPermission(perm.Key);
                foreach (var skin in perm.Value) {
                    if (skin > 0) SSkinWeb.Instance.DownloadSkin(skin);
                }
            }
            if (Configuration.Instance.GradesSettings.Array.Count > 0) {
                foreach (var grade in Configuration.Instance.GradesSettings.Array) {
                    foreach (var skin in grade.Skins) {
                        ImageLibrary.Instance.AddImage(skin.Url, skin.Name);
                    }
                    if (Items.Instance.Get(grade.Name) != null) continue;
                    Items.Instance.Add(grade.Name).Skins = grade.Skins.Select(s => new Skin.Skin() {
                        Name = s.Name, Id = s.Id
                    }
                    ).ToList();
                }
            }
        }
        private void OnPlayerConnected(BasePlayer player) {
            player.gameObject.GetOrAddComponent<OpenMenuButton>();
            if (Players.Instance.Get(player.userID) == null) Players.Instance.Value.Add(new Player.Player() {
                SteamId = player.userID
            }
            );
        }
        private void OnPlayerDisconnected(BasePlayer player, string reason) {
            var openMenuButton = player.gameObject.GetComponent<OpenMenuButton>();
            if (openMenuButton == null) return;
            openMenuButton.Destroy();
        }
        private void Unload() {
            Items.Instance.Unload();
            Players.Instance.Unload();
            if (_startUseMenu.Count > 0) _startUseMenu.Keys.ToList().ForEach(s => {
                var basePlayer = Player.FindById(s);
                InterfaceBuilder.Instance.DestroyAllUI(basePlayer);
                basePlayer.EndLooting();
                OnPlayerDisconnected(basePlayer, "");
            }
            );
        }
        private void CanWearItem(PlayerInventory inventory, Item item, int targetSlot) => CanEquipItem(inventory, item, targetSlot);
        private void CanEquipItem(PlayerInventory inventory, Item item, int targetPos) {
            if (inventory.baseEntity == null || item == null || !inventory.baseEntity.userID.IsSteamId()) return;
            var player = inventory.baseEntity.ToPlayer();
            if (player == null) return;
            var blockedSkins = Configuration.Instance.GetBlockPermissionSkins(player);
            var playerData = Players.Instance.Get(inventory.baseEntity.userID);
            if (!player.HasPermission(Configuration.Instance.DefaultSkinsPermission) || !playerData.DefaultSkins.ContainsKey(item.info.shortname)) {
                if (blockedSkins.Contains(item.skin)) {
                    item.SetItemSkin(0);
                    player.SendNetworkUpdate();
                }
                return;
            }
            playerData.SetDefaultSkin(item);
            player.SendNetworkUpdate();
        }
        private void OnStructureRepair(BaseCombatEntity entity, BasePlayer player) {
            if (entity == null || player == null) return;
            if (entity.OwnerID != player.userID && !(player.Team != null && player.Team.members.Contains(entity.OwnerID))) return;
            if (!player.HasPermission(Configuration.Instance.DefaultSkinsPermission)) return;
            if (player.HasPermission(Configuration.Instance.GradesSettings.Permission) && entity is BuildingBlock) {
                var block = entity as BuildingBlock;
                if ((!player.CanBuild())) return;
                if (Items.Instance.Get(block.grade.ToString()) == null) return;
                Players.Instance.Get(player.userID).SetDefaultSkin(block);
                player.SendNetworkUpdateImmediate(false);
                player.ClientRPC(null, "RefreshSkin");
                return;
            }
            if (player.HasPermission(Configuration.Instance.HammerSettings.ChangeSkinPressLeftButtonPermission)) Players.Instance.Get(player.userID).SetDefaultSkin(entity);
        }
        private void OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum grade) {
            if (player == null || block == null) return;
            if (!player.HasPermission(Configuration.Instance.DefaultSkinsPermission, Configuration.Instance.GradesSettings.Permission)) return;
            if (Items.Instance.Get(grade.ToString()) == null) return;
            timer.Once(1, () => {
                NextTick(() => {
                    Players.Instance.Get(player.userID).SetDefaultSkin(block, grade);
                    player.SendNetworkUpdateImmediate(false);
                    player.ClientRPC(null, "RefreshSkin");
                }
                );
            }
            );
        }
        private void OnItemAddedToContainer(ItemContainer container, Item item) {
            if (container == null || item == null || item.skin != 0 || Items.Instance.Get(item.info.shortname) == null) return;
            var basePlayer = item.GetOwnerPlayer();
            if (basePlayer == null || basePlayer.IPlayer == null || basePlayer.IsNpc || !basePlayer.userID.IsSteamId()) return;
            var blockedSkins = Configuration.Instance.GetBlockPermissionSkins(basePlayer);
            var playerData = Players.Instance.Get(basePlayer.userID);
            if (!basePlayer.HasPermission(Configuration.Instance.DefaultSkinsPermission) || !playerData.DefaultSkins.ContainsKey(item.info.shortname)) {
                if (blockedSkins.Contains(item.skin)) {
                    item.SetItemSkin(0);
                    basePlayer.SendNetworkUpdate();
                }
                return;
            }
            if (container != basePlayer.inventory.containerMain && container != basePlayer.inventory.containerBelt && container != basePlayer.inventory.containerWear) return;
            playerData.SetDefaultSkin(item);
            basePlayer.SendNetworkUpdate();
        }
        private void OnItemCraftFinished(ItemCraftTask task, Item item, ItemCrafter owner) {
            if (task.skinID != 0) return;
            Players.Instance.Get(owner.owner.userID).SetDefaultSkin(item);
        }
        private object OnItemAction(Item item, string action, BasePlayer player) {
            if (_startUseMenu.ContainsKey(player.userID)) return false;
            return null;
        }
        private object CanLootPlayer(BasePlayer looted, BasePlayer looter) {
            if (looter == null) return null;
            if (_startUseMenu.ContainsKey(looter.userID)) return true;
            return null;
        }
        private void OnPlayerLootEnd(PlayerLoot inventory) {
            if (inventory == null) return;
            var player = inventory.GetComponent<BasePlayer>();
            if (player == null || !_startUseMenu.ContainsKey(player.userID)) return;
            player.SendConsoleCommand("uiskinmenu close");
        }
#endregion
#region Commands
#region ChatCommands
        private void SkinCommand(BasePlayer player, string command, string[] args) {
            if (!player.HasPermission(Configuration.Instance.SkinCommand.Permission)) {
                SendReply(player, SSkinLang.Instance.Get("NOPERMUSE", player.UserIDString));
                return;
            }
            if (_startUseMenu.ContainsKey(player.userID)) return;
            timer.Once(0.5f, () => {
                ItemContainer container = new ItemContainer();
                container.entityOwner = player;
                container.isServer = true;
                container.allowedContents = ItemContainer.ContentsType.Generic;
                container.GiveUID();
                _startUseMenu.Add(player.userID, null);
                container.capacity = 12;
                container.playerOwner = player;
                player.LootContainer(container);
                InterfaceBuilder.Instance.Draw(player);
            }
            );
        }
        private void SkinEntityCommand(BasePlayer player, string command, string[] args) {
            if (!player.HasPermission(Configuration.Instance.SkinEntityCommand.Permission)) {
                SendReply(player, SSkinLang.Instance.Get("NOPERMUSE", player.UserIDString));
                return;
            }
            if (_startUseMenu.ContainsKey(player.userID)) return;
            var entity = player.FindConstructioninDirectionLook();
            if (entity == null) return;
            if (entity.OwnerID != player.userID && !(player.Team != null && player.Team.members.Contains(entity.OwnerID))) {
                SendReply(player, SSkinLang.Instance.Get("NOTYOUREBUILD", player.UserIDString));
                return;
            }
            if(entity is BuildingBlock) {
                if (args.Length > 0 && args[0] != "buildings") return;
            }
            else {
                if (args.Length > 0 && args[0] != "entity") return;
            }
            string shortName = entity.GetShortName();
            if (string.IsNullOrEmpty(shortName)) return;
            _startUseMenu.Add(player.userID, entity);
            InterfaceBuilder.Instance.Draw(player, false);
            player.SendConsoleCommand($"uiskinmenu", new object[] {
                "weaponSelect", shortName, 0
            }
            );
        }
#endregion
#region ConsoleCommands
        [ConsoleCommand("uiskinmenu")]
        private void ConsoleCommand(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (player == null) return;
            string shortName;
            ulong skinId;
            int page;
            ulong itemId;
            var playerData = Players.Instance.Get(player.userID);
            var sound = new Effect("assets/bundled/prefabs/fx/notice/loot.drag.grab.fx.prefab", player, 0, new Vector3(), new Vector3());
            switch (arg.Args[0]) {
                case "page" : {
                    shortName = arg.Args[1];
                    itemId = ulong.Parse(arg.Args[2]);
                    page = arg.Args[3].ToInt();
                    InterfaceBuilder.Instance.DrawSkins(player, shortName, itemId, page);
                    InterfaceBuilder.Instance.DrawSelectSkins(player, shortName, itemId, page);
                }
                break;
                case "weaponSelect" : {
                    shortName = arg.Args[1];
                    itemId = ulong.Parse(arg.Args[2]);
                    InterfaceBuilder.Instance.DrawSkins(player, shortName, itemId, 1);
                    InterfaceBuilder.Instance.DrawSelectSkins(player, shortName, itemId, 1);
                }
                break;
                case "setSelected" : {
                    shortName = arg.Args[1];
                    itemId = ulong.Parse(arg.Args[2]);
                    skinId = ulong.Parse(arg.Args[3]);
                    page = arg.Args[4].ToInt();
                    string layer = arg.Args[5];
                    playerData.AddOrRemoveSelectedSkin(shortName, skinId);
                    InterfaceBuilder.Instance.UpdateItem(player, shortName, itemId, skinId, page);
                    //InterfaceBuilder.Instance.DrawSkins(player, shortName, itemId, page);
                    InterfaceBuilder.Instance.DrawSelectSkins(player, shortName, itemId, page);
                }
                break;
                case "setdefault" : {
                    shortName = arg.Args[1];
                    itemId = ulong.Parse(arg.Args[2]);
                    skinId = ulong.Parse(arg.Args[3]);
                    page = arg.Args[4].ToInt();
                    string layer = arg.Args[5];
                    if (playerData.DefaultSkins.ContainsKey(shortName)) {
                        var defaultSkinId = playerData.DefaultSkins[shortName];
                        playerData.DefaultSkins[shortName] = skinId;
                        if(defaultSkinId != skinId) InterfaceBuilder.Instance.UpdateItem(player, shortName, itemId, defaultSkinId, page);
                    }
                    else playerData.DefaultSkins.Add(shortName, skinId);
                    InterfaceBuilder.Instance.UpdateItem(player, shortName, itemId, skinId, page);
                    //InterfaceBuilder.Instance.DrawSkins(player, shortName, itemId, page);
                    InterfaceBuilder.Instance.DrawSelectSkins(player, shortName, itemId, page);
                }
                break;
                case "setskin" : {
                    itemId = ulong.Parse(arg.Args[1]);
                    skinId = ulong.Parse(arg.Args[2]);
                    var entity = _startUseMenu[playerData.SteamId];
                    if (entity == null) {
                        var item = player.inventory.FindItemUID(new ItemId(itemId));
                        item.SetItemSkin(skinId);
                        player.SendNetworkUpdate();
                        return;
                    }
                    entity.SetSkin(skinId);
                }
                break;
                case "close" : {
                    InterfaceBuilder.Instance.DestroyAllUI(player);
                    _startUseMenu.Remove(player.userID);
                    player.EndLooting();
                }
                break;
                case "openEntityUi" : {
                    if (arg.Args.Length < 1) return;
                    SkinEntityCommand(player, "console", new string[] {
                        arg.Args[1]
                    }
                    );
                }
                break;
                case "openDefaultUi" : {
                    SkinCommand(player, "console", new string[0]);
                }
                break;
            }
            EffectNetwork.Send(sound, player.Connection);
        }
#endregion
#endregion
#region UI
        private interface IContainer {
            string OffsetMin {
                get;
            }
            string OffsetMax {
                get;
            }
            PlayerInventory.Type Type {
                get;
            }
            Tuple<string, string> GetOffsets(int index);
        }
        private class MainContainer : IContainer {
            public string OffsetMin => "-200 85";
            public string OffsetMax => "180 337";
            public PlayerInventory.Type Type => PlayerInventory.Type.Main;
            public Tuple<string, string> GetOffsets(int i) {
                var x = i * 64 - Math.Floor((double)i / 6) * 6 * 64;
                var y = Math.Floor((double)i / 6) * 63;
                return new Tuple<string, string>($"{x} {-60 - y}", $"{60 + x} {-y}");
            }
        }
        private class WearContainer : IContainer {
            public string OffsetMin => "-588 51";
            public string OffsetMax => "-215 115";
            public PlayerInventory.Type Type => PlayerInventory.Type.Wear;
            public Tuple<string, string> GetOffsets(int i) {
                var x = i * 54 - Math.Floor((double)i / 7) * 7 * 54;
                return new Tuple<string, string>($"{x} 0", $"{50 + x} 50");
            }
        }
        private class BeltContainer : IContainer {
            public string OffsetMin => "-200 -43";
            public string OffsetMax => "180 19";
            public PlayerInventory.Type Type => PlayerInventory.Type.Belt;
            public Tuple<string, string> GetOffsets(int i) {
                var x = i * 64 - Math.Floor((double)i / 6) * 6 * 64;
                return new Tuple<string, string>($"{x} 0", $"{60 + x} 60");
            }
        }
        private class DefaultInterface {
            private string _json = "[{\"name\":\"UiSkuliSkins\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 1\",\"anchormax\":\"0.5 1\",\"offsetmin\":\"-225 -325\",\"offsetmax\":\"615 -1\"},{\"type\":\"NeedsCursor\"}]},{\"name\":\"UiSkuliSkins-Lable\",\"parent\":\"UiSkuliSkins\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0.33 0.32 0.32 1.00\",\"imagetype\":\"Tiled\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 1\",\"anchormax\":\"0 1\",\"offsetmin\":\"7 -47\",\"offsetmax\":\"427 5\"}]},{\"parent\":\"UiSkuliSkins-Lable\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"%LABLEMENUTEXT%\",\"fontSize\":24,\"align\":\"MiddleCenter\",\"color\":\"0.75 0.71 0.67 1.00\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.5\",\"anchormax\":\"0 0.5\",\"offsetmin\":\"4 -30\",\"offsetmax\":\"427 25\"}]},{\"name\":\"61533899272e46f486d03ceff11413f2\",\"parent\":\"UiSkuliSkins-Lable\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"uiskinmenu close\",\"sprite\":\"assets/icons/close.png\",\"color\":\"0.75 0.75 0.75 0.65\"},{\"type\":\"RectTransform\",\"anchormin\":\"1 0.5\",\"anchormax\":\"1 0.5\",\"offsetmin\":\"5 -15\",\"offsetmax\":\"35 15\"}]},{\"name\":\"UiSkuliSkins-Search\",\"parent\":\"UiSkuliSkins\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"%INFOCLICKSKIN%\",\"fontSize\":12,\"align\":\"MiddleCenter\",\"color\":\"1 1 1 1\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.5\",\"anchormax\":\"0.5 0.5\",\"offsetmin\":\"-400 -185\",\"offsetmax\":\"-35 115\"}]},{\"name\":\"UiSkuliSkins-LableIzb\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0.33 0.32 0.32 1.00\",\"imagetype\":\"Tiled\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0\",\"anchormax\":\"0.5 0\",\"offsetmin\":\"190 235\",\"offsetmax\":\"575 290\"}]},{\"parent\":\"UiSkuliSkins-LableIzb\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"%FAVSKINSLABLE%\",\"fontSize\":24,\"align\":\"MiddleCenter\",\"color\":\"0.75 0.71 0.67 1.00\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.5\",\"anchormax\":\"0 0.5\",\"offsetmin\":\"20 -25\",\"offsetmax\":\"350 25\"}]},{\"name\":\"UiSkuliSkins-Selected\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0\",\"anchormax\":\"0.5 0\",\"offsetmin\":\"201 111\",\"offsetmax\":\"571 231\"}]}]";
            public DefaultInterface() {
                //SkuliElement skuliElement = new SkuliElement("Overlay", false);
                //var layer = skuliElement.AddChildren(new CuiPanel()
                //{
                //	RectTransform = { AnchorMin = "0.5 1", AnchorMax = "0.5 1", OffsetMin = "-225 -325", OffsetMax = "615 -1" },
                //	CursorEnabled = true,
                //	Image = { Color = "0 0 0 0" }
                //}, InterfaceBuilder.Layer);
                //var lable = layer.AddChildren(new CuiPanel()
                //{
                //	Image = { Color = "0.33 0.32 0.32 1.00", ImageType = Image.Type.Tiled },
                //	RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "7 -47", OffsetMax = "427 5" }
                //}, InterfaceBuilder.Layer + "-Lable");
                //lable.AddChildren(new CuiElement()
                //{
                //	Components =
                //	{
                //		new CuiTextComponent() { Text =  "%LABLEMENUTEXT%", Align = TextAnchor.MiddleCenter, FontSize = 24, Color = "0.75 0.71 0.67 1.00" },
                //		new CuiRectTransformComponent() { AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "4 -30", OffsetMax = "427 25" }
                //	}
                //});
                //layer.AddChildren(new CuiElement()
                //{
                //	Name = InterfaceBuilder.Layer + "-Search",
                //	Components =
                //	{
                //		new CuiTextComponent() { Text = "%INFOCLICKSKIN%", Color = "1 1 1 1", FontSize = 12, Align = TextAnchor.MiddleCenter },
                //		new CuiRectTransformComponent() { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-400 -185", OffsetMax = "-35 115" }
                //	}
                //});
                //lable.AddChildren(new CuiButton()
                //{
                //	RectTransform = { AnchorMin = "1 0.5", AnchorMax = "1 0.5", OffsetMin = "5 -15", OffsetMax = "35 15" },
                //	Button = { Color = "0.75 0.75 0.75 0.65", Command = "uiskinmenu close", Sprite = "assets/icons/close.png" },
                //	Text = { Text = "", Align = TextAnchor.MiddleCenter }
                //});
                //var lableIzb = skuliElement.AddChildren(new CuiPanel()
                //{
                //	Image = { Color = "0.33 0.32 0.32 1.00", ImageType = Image.Type.Tiled },
                //	RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "190 235", OffsetMax = "575 290" },
                //}, InterfaceBuilder.Layer + "-LableIzb");
                //lableIzb.AddChildren(new CuiElement()
                //{
                //	Components =
                //	{
                //		new CuiTextComponent() { Text = "%FAVSKINSLABLE%", Align = TextAnchor.MiddleCenter, FontSize = 24, Color = "0.75 0.71 0.67 1.00" },
                //		new CuiRectTransformComponent() { AnchorMin = "0 0.5", AnchorMax = "0 0.5", OffsetMin = "20 -25", OffsetMax = "350 25" }
                //	}
                //});
                //skuliElement.AddChildren(new CuiPanel()
                //{
                //	Image = { Color = "0 0 0 0" },
                //	RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "201 111", OffsetMax = "571 231" }
                //}, InterfaceBuilder.Layer + "-Selected");
                //_json = skuliElement.ToJson();
            }
            public string GetElement(string lableMenuText, string infoClickSkin, string favSkinable) {
                return _json.Replace("%LABLEMENUTEXT%", lableMenuText).Replace("%INFOCLICKSKIN%", infoClickSkin).Replace("%FAVSKINSLABLE%", favSkinable);
            }
        }
        private class ContainerInterface {
            private string _json = "[{\"name\":\"%Layer%\",\"parent\":\"Overlay\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0\",\"anchormax\":\"0.5 0\",\"offsetmin\":\"%OffsetMin%\",\"offsetmax\":\"%OffsetMax%\"}]}]";
            //	private SkuliElement _skuliElement = new SkuliElement("Overlay", false);
            public ContainerInterface() {
                //_skuliElement.AddChildren(new CuiPanel()
                //{
                //	Image = { Color = "0 0 0 0" },
                //	RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "%OffsetMin%", OffsetMax = "%OffsetMax%" }
                //},
                //"%Layer%");
                //Debug.Log(_skuliElement.ToJson());
            }
            public string GetElement(string offsetMin, string offsetMax, string layer) {
                return _json.Replace("%OffsetMin%", offsetMin).Replace("%OffsetMax%", offsetMax).Replace("%Layer%", layer);
            }
        }
        private class ContainerItemInterface  //Динамический предмет
        {
            //private SkuliElement _skuliElement = new SkuliElement("%Layer%", false);
            private string _json = "[{\"name\":\"6f1e1c3df3804b128afb75440617ec81\",\"parent\":\"%Layer%\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"uiskinmenu weaponSelect %ShortName% %SkinId%\",\"color\":\"0.65 0.65 0.65 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 1\",\"anchormax\":\"0 1\",\"offsetmin\":\"%OffsetMin%\",\"offsetmax\":\"%OffsetMax%\"}]}]";
            public ContainerItemInterface() {
                //_skuliElement.AddChildren(new CuiButton()
                //{
                //	Button = { Color = "0.65 0.65 0.65 0", Command = $"uiskinmenu weaponSelect %ShortName% %SkinId%" },
                //	RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "%OffsetMin%", OffsetMax = "%OffsetMax%" }
                //});
                //Debug.Log(_skuliElement.ToJson());
            }
            public string GetElement(string offsetMin, string offsetMax, string layer, string shortName, ulong skinId) {
                return _json.Replace("%OffsetMin%", offsetMin).Replace("%OffsetMax%", offsetMax).Replace("%Layer%", layer).Replace("%ShortName%", shortName).Replace("%SkinId%", skinId.ToString());
            }
        }
        private class BlockItemInterface {
            private string _json = "[{\"parent\":\"%Layer%\",\"components\":[{\"type\":\"UnityEngine.UI.RawImage\",\"color\":\"1 1 1 0.05\",\"png\":\"2001040039\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 1\",\"anchormax\":\"0 1\",\"offsetmin\":\"%OffsetMin%\",\"offsetmax\":\"%OffsetMax%\"}]}]";
            //	private SkuliElement _skuliElement = new SkuliElement("%Layer%", false);
            public BlockItemInterface() {
                //_skuliElement.AddChildren(new CuiElement()
                //{
                //	Components =
                //	{
                //		new CuiRawImageComponent()
                //		{
                //			Png = ImageLibrary.Instance.GetImage("grid2"),
                //			Color = "1 1 1 0.05"
                //		},
                //		new CuiRectTransformComponent()
                //		{
                //			AnchorMin = "0 1",
                //			AnchorMax = "0 1",
                //			OffsetMin = "%OffsetMin%",
                //			OffsetMax  = "%OffsetMax%",
                //		}
                //	}
                //});
                //Debug.Log(_skuliElement.ToJson());
            }
            public string GetElement(string offsetMin, string offsetMax, string layer) {
                return _json.Replace("%OffsetMin%", offsetMin).Replace("%OffsetMax%", offsetMax).Replace("%Layer%", layer);
            }
        }
        private class ItemSkinInterface {
            private string _jsonOwnerElement = "[{\"name\":\"%ParrentLayer%%LayerName%\",\"parent\":\"%ParrentLayer%\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"color\":\"0.35 0.35 0.35 0.65\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 0.5\",\"anchormax\":\"0 0.5\",\"offsetmin\":\"%OffsetMin%\",\"offsetmax\":\"%OffsetMax%\"}]},{\"parent\":\"%ParrentLayer%%LayerName%\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"itemid\":1,\"skinid\":1},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.5\",\"anchormax\":\"0.5 0.5\",\"offsetmin\":\"%ImageOffsetMin%\",\"offsetmax\":\"%ImageOffsetMax%\"}]},{\"parent\":\"%ParrentLayer%%LayerName%\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"%Name%\",\"fontSize\":9,\"font\":\"robotocondensed-regular.ttf\",\"align\":\"MiddleCenter\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0\",\"anchormax\":\"0.5 0\",\"offsetmin\":\"%NameOffsetMin%\",\"offsetmax\":\"%NameOffsetMax%\"}]},{\"name\":\"5397032dd08d4ef4ac90d44e848ac005\",\"parent\":\"%ParrentLayer%%LayerName%\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"uiskinmenu setskin %SelectItemId% %SkinId%\",\"color\":\"0 0 0 0\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.5\",\"anchormax\":\"0.5 0.5\",\"offsetmin\":\"%ImageOffsetMin%\",\"offsetmax\":\"%ImageOffsetMax%\"}]}]";
            private string _jsonSelectebleElement = "[{\"name\":\"21c13360b417459f8ac5a24ba73f244e\",\"parent\":\"%ParrentLayer%%LayerName%\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"uiskinmenu setSelected %ShortName% %SelectItemId% %SkinId% %Page% %LayerName%\",\"sprite\":\"assets/icons/favourite_servers.png\",\"color\":\"%ColorSelected%\"},{\"type\":\"RectTransform\",\"anchormin\":\"0 1\",\"anchormax\":\"0 1\",\"offsetmin\":\"%SelectableOffsetMin%\",\"offsetmax\":\"%SelectableOffsetMax%\"}]}]";
            private string _jsonDefaultElement = "[{\"name\":\"fe1b35c48ccd4c0db6843c7b821aae33\",\"parent\":\"%ParrentLayer%%LayerName%\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"uiskinmenu setdefault %ShortName% %SelectItemId% %SkinId% %Page% %LayerName%\",\"sprite\":\"assets/icons/power.png\",\"color\":\"%ColorDefault%\"},{\"type\":\"RectTransform\",\"anchormin\":\"1 1\",\"anchormax\":\"1 1\",\"offsetmin\":\"%DefaultOffsetMin%\",\"offsetmax\":\"%DefaultOffsetMax%\"}]}]";
            //private SkuliElement _skuliElement = new SkuliElement("%ParrentLayer%", false);
            //private SkuliElement _skuliElementSelecteble = new SkuliElement("%ParrentLayer%" + "%LayerName%", false);
            //private SkuliElement _skuliElementDefault = new SkuliElement("%ParrentLayer%" + "%LayerName%", false);
            public ItemSkinInterface() {
                //var layerNameElement = _skuliElement.AddChildren(new CuiElement()
                //{
                //	Name = "%ParrentLayer%" + "%LayerName%",
                //	Components =
                //	{
                //		new CuiImageComponent()
                //		{
                //			Color = "0.35 0.35 0.35 0.65",
                //		},
                //		new CuiRectTransformComponent
                //		{
                //			AnchorMin = "0 0.5",
                //			AnchorMax = "0 0.5",
                //			OffsetMin = "%OffsetMin%",
                //			OffsetMax = "%OffsetMax%"
                //		}
                //	}
                //});
                //layerNameElement.AddChildren(new CuiElement()
                //{
                //	Components =
                //	{
                //		new CuiImageComponent()
                //		{
                //			ItemId = 1,
                //			SkinId = 1
                //		},
                //		new CuiRectTransformComponent()
                //		{
                //			AnchorMin = "0.5 0.5",
                //			AnchorMax = "0.5 0.5",
                //			OffsetMin = "%ImageOffsetMin%", //-30 -30
                //			OffsetMax = "%ImageOffsetMax%" //30 30
                //		}
                //	}
                //});
                //layerNameElement.AddChildren(new CuiElement()
                //{
                //	Components =
                //	{
                //		new CuiTextComponent()
                //		{
                //			Text = "%Name%", Align = TextAnchor.MiddleCenter,
                //			Font = InterfaceBuilder.Regular,
                //			FontSize = 9
                //		},
                //		new CuiRectTransformComponent()
                //		{
                //			AnchorMin = "0.5 0",
                //			AnchorMax = "0.5 0",
                //			OffsetMin = "%NameOffsetMin%", //-40 -15
                //			OffsetMax = "%NameOffsetMax%" //40 0
                //		}
                //	}
                //});
                //layerNameElement.AddChildren(new CuiButton()
                //{
                //	RectTransform =
                //	{
                //		AnchorMin = "0.5 0.5",
                //		AnchorMax = "0.5 0.5",
                //		OffsetMin = "%ImageOffsetMin%",
                //		OffsetMax = "%ImageOffsetMax%"
                //	},
                //	Button =
                //	{
                //		Command = $"uiskinmenu setskin %SelectItemId% %SkinId%",
                //		Color = "0 0 0 0"
                //	},
                //	Text = { Text = "" }
                //});
                //_jsonOwnerElement = layerNameElement.ToJson();
                //_skuliElementSelecteble.AddChildren(new CuiButton()
                //{
                //	RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "%SelectableOffsetMin%", OffsetMax = "%SelectableOffsetMax%" }, //1 -18 "18 -1"
                //	Button = { Command = $"uiskinmenu setSelected %ShortName% %SelectItemId% %SkinId% %Page%", Color = "%ColorSelected%", Sprite = "assets/icons/favourite_servers.png" },
                //	Text = { Text = "" }
                //});
                //_jsonSelectebleElement = _skuliElementSelecteble.ToJson();
                //	Debug.Log(_jsonSelectebleElement);
                //_skuliElementDefault.AddChildren(new CuiButton()
                //{
                //	RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "%DefaultOffsetMin%", OffsetMax = "%DefaultOffsetMax%" },
                //	Button = { Command = $"uiskinmenu setdefault %ShortName% %SelectItemId% %SkinId% %Page%", Color = "%ColorDefault%", Sprite = "assets/icons/power.png", },
                //	Text = { Text = "" }
                //});
                //_jsonDefaultElement = _skuliElementDefault.ToJson();
                //Debug.Log(_jsonDefaultElement);
            }
            public string GetElement(string offsetMin, string offsetMax, string shortName, Skin.Skin skin, ulong selectItemId, string ownLayer, string layerName, int page) {
                var json = _jsonOwnerElement.Replace("%LayerName%", layerName).Replace("%Name%", skin.Name).Replace("%SelectItemId%", selectItemId.ToString()).Replace("%SkinId%", skin.Id.ToString()).Replace("%Page%", page.ToString()).Replace("%ShortName%", shortName).Replace("%OffsetMin%", offsetMin).Replace("%OffsetMax%", offsetMax).Replace("%ParrentLayer%", ownLayer);
                //Configuration.Instance.Grades.FirstOrDefault()
                if (ImageLibrary.Instance.HasImage(skin.Name)) {
                    json = json.Replace("\"type\":\"UnityEngine.UI.Image\",\"itemid\":1,\"skinid\":1", $"\"type\":\"UnityEngine.UI.RawImage\",\"png\":\"{ImageLibrary.Instance.GetImage(skin.Name)}\"");
                }
                else {
                    json = json.Replace("\"itemid\":1", "\"itemid\":" + ItemExtension.GetItemId(shortName, skin.Id));
                    if (skin.Id == 0) {
                        json = json.Replace(",\"skinid\":1", "");
                    }
                    else {
                        json = json.Replace("\"skinid\":1", "\"skinid\":" + skin.Id);
                    }
                }
                return json;
            }
            public string GetElementSelectable(string shortName, ulong selectItemId, ulong skinId, int page, string layerName, string ownLayer, bool isSelected) {
                return _jsonSelectebleElement.Replace("%SelectItemId%", selectItemId.ToString()).Replace("%SkinId%", skinId.ToString()).Replace("%Page%", page.ToString()).Replace("%ShortName%", shortName).Replace("%LayerName%", layerName).Replace("%ColorSelected%", isSelected ? "0.87 0.68 0.22 1.00" : "1 1 1 1").Replace("%ParrentLayer%", ownLayer);
            }
            public string GetElementDefault(string shortName, ulong selectItemId, ulong skinId, int page, string layerName, string ownLayer, bool isDefault) {
                return _jsonDefaultElement.Replace("%SelectItemId%", selectItemId.ToString()).Replace("%SkinId%", skinId.ToString()).Replace("%Page%", page.ToString()).Replace("%ShortName%", shortName).Replace("%LayerName%", layerName).Replace("%ColorDefault%", isDefault ? "0.21 0.62 0.28 1.00" : "0.98 0.31 0.23 1.00").Replace("%ParrentLayer%", ownLayer);
            }
        }
        private class SearchSkinsInterface {
            string _json = "[{\"name\":\"UiSkuliSkins-Search\",\"parent\":\"UiSkuliSkins\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"material\":\"assets/icons/greyout.mat\",\"color\":\"0.33 0.32 0.32 0.00\",\"imagetype\":\"Filled\",\"png\":\"assets/standard assets/effects/imageeffects/textures/noise.png\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.5\",\"anchormax\":\"0.5 0.5\",\"offsetmin\":\"-400 -185\",\"offsetmax\":\"%OffsetMax%\"}]},{\"name\":\"UiSkuliSkins-Page\",\"parent\":\"UiSkuliSkins-Search\",\"components\":[{\"type\":\"UnityEngine.UI.Image\",\"material\":\"assets/icons/greyout.mat\",\"color\":\"0.33 0.32 0.32 0.17\",\"imagetype\":\"Filled\",\"png\":\"assets/standard assets/effects/imageeffects/textures/noise.png\"},{\"type\":\"RectTransform\",\"anchormin\":\"1 0.5\",\"anchormax\":\"1 0.5\",\"offsetmin\":\"15 0\",\"offsetmax\":\"15 0\"}]},{\"name\":\"0d06821bfe8b478cbb868a378443a9a2\",\"parent\":\"UiSkuliSkins-Page\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"%CommandRightButton%\",\"color\":\"0.36 0.50 0.73 1.00\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.5\",\"anchormax\":\"0.5 0.5\",\"offsetmin\":\"-10 5\",\"offsetmax\":\"10 143\"}]},{\"parent\":\"0d06821bfe8b478cbb868a378443a9a2\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"»\",\"fontSize\":20,\"align\":\"MiddleCenter\",\"color\":\"%ColorRightButton%\"},{\"type\":\"RectTransform\"}]},{\"name\":\"6b0b7f9ea38f4de283d5676c29e8a1d2\",\"parent\":\"UiSkuliSkins-Page\",\"components\":[{\"type\":\"UnityEngine.UI.Button\",\"command\":\"%CommandLeftButton%\",\"color\":\"0.36 0.50 0.73 1.00\"},{\"type\":\"RectTransform\",\"anchormin\":\"0.5 0.5\",\"anchormax\":\"0.5 0.5\",\"offsetmin\":\"-10 -137\",\"offsetmax\":\"10 -5\"}]},{\"parent\":\"6b0b7f9ea38f4de283d5676c29e8a1d2\",\"components\":[{\"type\":\"UnityEngine.UI.Text\",\"text\":\"«\",\"fontSize\":20,\"align\":\"MiddleCenter\",\"color\":\"%ColorLeftButton%\"},{\"type\":\"RectTransform\"}]}]";
            public SearchSkinsInterface() {
                //var search = _skuliElement.AddChildren(new CuiPanel()
                //{
                //	Image = { ImageType = Image.Type.Filled, Png = "assets/standard assets/effects/imageeffects/textures/noise.png", Color = "0.33 0.32 0.32 0.00", Material = "assets/icons/greyout.mat" },
                //	RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-400 -185", OffsetMax = "%OffsetMax%" }
                //}, InterfaceBuilder.Layer + "-Search");
                //var pageElement = search.AddChildren(new CuiPanel()
                //{
                //	Image = { ImageType = Image.Type.Filled, Png = "assets/standard assets/effects/imageeffects/textures/noise.png", Color = "0.33 0.32 0.32 0.17", Material = "assets/icons/greyout.mat" },
                //	RectTransform = { AnchorMin = "1 0.5", AnchorMax = "1 0.5", OffsetMin = "15 0", OffsetMax = "15 0" }
                //}, InterfaceBuilder.Layer + "-Page");
                //pageElement.AddChildren(PageButtonInterface.MoveRightButton("%CommandRightButton%", "%ColorRightButton%"));
                //pageElement.AddChildren(PageButtonInterface.MoveLeftButton("%CommandLeftButton%", "%ColorLeftButton%"));
            }
            public string GetElement(string offsetMax, string commandRightButton, string colorRightButton, string commandLeftButton, string colorLeftButton) {
                return _json.Replace("%OffsetMax%", offsetMax).Replace("%CommandRightButton%", commandRightButton).Replace("%ColorRightButton%", colorRightButton).Replace("%CommandLeftButton%", commandLeftButton).Replace("%ColorLeftButton%", colorLeftButton);
            }
        }
        private class InterfaceBuilder : Sigle
// ... [Code preview truncated due to length. Full source in attached file] ...

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

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

Сверху