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

FREE SkuliSkins : 1.6.3 1.6.3

Нет прав для скачивания
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Globalization;
using System.IO;
using System.Linq;
using Facepunch.Extend;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using Global = Rust.Global;

namespace Oxide.Plugins
{
    [Info("SkuliSkins", "Skuli Dropek", "1.6.3")]
    public class SkuliSkins : RustPlugin
    {
        #region Cfg

        private const bool En = true;
        class DataPlayer
        {
            [JsonProperty(En ? "List of favorite skins" : "Список избранных скинов")]
            public Dictionary<string, Dictionary<ulong, ItemData.SkinInfo>> _izvSkins =
                new Dictionary<string, Dictionary<ulong, ItemData.SkinInfo>>();
            [JsonProperty(En ? "List of default skins supplied" : "Список поставленных скинов по дефолту")]
            public Dictionary<string, DefaultSkins> _defaultSkins =
                new Dictionary<string, DefaultSkins>();
            [NonSerialized]
            public BaseEntity Prefab;
        }

        class DefaultSkins
        {
            [JsonProperty(En ? "SkinID" : "СкинАйди")]
            public ulong skinId;
            [JsonProperty(En ? "Information about the skin" : "Информация о скине")]
            public ItemData.SkinInfo SkinInfo;
        }
        private Dictionary<ulong, DataPlayer> playersData = new Dictionary<ulong, DataPlayer>();
        private static ConfigData cfg { get; set; }


        private class ConfigData
        {
            internal class MarketSystem
            {
                [JsonProperty(En ? "Enabled(true = yes)" : "Включить?(true = да)")]
                public bool IsEnabled = false;
                [JsonProperty(En ? "How to pay?(Scrap, ServerRewards, Economics)" : "Чем платить?(Scrap, ServerRewards, Economics)")]
                public string WhoMarket = "Scrap";
                [JsonProperty(En ? "The price for opening the interface (If 0, then free)" : "Цена за открытие интерфейса(Если 0, то бесплатно)")]
                public int costOpen = 10;
                [JsonProperty(En ? "Price per change of one skin (If 0, then free)" : "Цена за смену одного скина(Если 0, то бесплатно)")]
                public int costChange = 10;
            }
            internal class CuiBuilderSettings
            {
                [JsonProperty(En ? "Menu color" : "Цвет менюшки")]
                public string MenuColor = "#535151";
                [JsonProperty(En ? "Text color" : "Цвет текста")]
                public string TextColor = "#beb5ac";
                [JsonProperty(En ? "The number of pits displayed when using the /skinentity command" : "Количество ячек отображаемое при использования команды /skinentity")]
                public byte EntityMenuCellsCount = 24;
                [JsonProperty(En ? "The number of pits displayed when using the /skin command" : "Количество ячек отображаемое при использования команды /skin")]
                public byte StandartMenuCellsCount = 24;
            }

            public CuiBuilderSettings MenuSettings = new CuiBuilderSettings();

            [JsonProperty(En ? "Menu commands open" : "Команды открывающие менюшку")]
            public List<string> MenuCommandsOpen = new List<string>();
            [JsonProperty(En ? "Entity Menu commands open" : "Команды для открытия скинов при наведении на предмет")]
            public List<string> EntityMenuCommandsOpen = new List<string>();
            [JsonProperty(En ? "Add a skin to the cfg automatically?(true = yes)" : "Добавить в кфг автоматически скин?(true = да)")]
            public bool IsApproved = false;
           // [JsonProperty(En ? "Vip permision" : "Пермиссион для вип игроков")]
           // public string VipPerm = "skuliskins.vip";
            [JsonProperty(En ? "Rights to use the skins system" : "Права для использование системы скинов.")]
            public string canuse = "skuliskins.use";
            [JsonProperty(En ? "Install the skin automatically on items where there is already a skin?(true = yes)" : "Устанавилвать скин автоматически на предметы где уже есть скин?(true = да)")]
            public bool SkinAuto = false;
            [JsonProperty(En ? "Rights to use default skins" : "Права для использование скинов по дефолту")]
            public string canusedefault = "skuliskins.usedefault";
            [JsonProperty(En ? "Setting up payment for opening" : "Настройка оплаты за открытие")]
            public MarketSystem Market = new MarketSystem();
            [JsonProperty(En ? "Items with these skins cannot be exchanged." : "Предметы с этими скинами нельзя будет поменять.")]
            public List<ulong> blackList = new List<ulong>();
            [JsonProperty(En ? "Rights to use unique skins" : "Права для использование уникальных скинов")]
            public Dictionary<string, List<ulong>> useSkins = new Dictionary<string, List<ulong>>();
            public static ConfigData GetNewConf()
            {
                var newConfig = new ConfigData
                {
                    MenuCommandsOpen = new List<string>() { "skin" },
                    EntityMenuCommandsOpen = new List<string>() { "skinentity" },
                    useSkins = new Dictionary<string, List<ulong>>()
                    {
                        ["skuliskins.prem"] = new List<ulong>()
                        {
                            2668297561,
                            2649480126,
                            2599664731,
                        }
                    },
                    blackList = new List<ulong>()
                    {
                        12341234,
                    }
                };
                return newConfig;
            }
        }

        class ItemData
        {
            public class SkinInfo
            {
                [JsonProperty(En ? "Enabled skin?(true = yes)" : "Включить скин?(true = да)")]
                public bool IsEnabled = true;
                [JsonProperty(En ? "Is this skin from the developers of rust or take it in a workshop?" : "Этот скин есть от разработчиков раста или принять в воркшопе??(true = да)")]
                public bool IsApproved = true;
                [JsonProperty(En ? "Name skin" : "Название скина")]
                public string MarketName = "Warhead LR300";
                [JsonProperty(En ? "Url" : "Сыссылка")]
                public string Url = "";

            }
            public Dictionary<ulong, SkinInfo> _skinInfos = new Dictionary<ulong, SkinInfo>();
        }
        protected override void LoadDefaultConfig()
        {
            cfg = ConfigData.GetNewConf();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(cfg);
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                cfg = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            NextTick(SaveConfig);
        }

        #endregion

        #region Interface
        private static string Layer = "UiSkuliSkins";
        private static string Overlay = "Overlay";
        private static string Regular = "robotocondensed-regular.ttf";
       // private static string Sharp = "assets/content/ui/ui.background.tile.psd";


        private void LoadIzbranoeUI(BasePlayer player, string weapon, uint itemId, int page)
        {
            DataPlayer weapons;
            if (!playersData.TryGetValue(player.userID, out weapons)) return;
            CuiHelper.DestroyUi(player, Layer + "-Izbranoe");
            var cont = new CuiElementContainer();
            cont.Add(new CuiPanel()
            {
                Image =
                {
                    Color = "0 0 0 0"
                },
                RectTransform =
                {
                    AnchorMin = "0.5 0",
                    AnchorMax = "0.5 0",
                    OffsetMin = $"{201} {111}",
                    OffsetMax = $"{571} {231}"
                }
            }, Overlay, Layer + "-Izbranoe");

            if (!weapons._izvSkins.ContainsKey(weapon)) return;
            var tSkinsList = weapons._izvSkins[weapon];
            foreach (var keyValuePair in cfg.useSkins.Where(keyValuePair => !permission.UserHasPermission(player.UserIDString, keyValuePair.Key)))
            {
                keyValuePair.Value.ForEach(p =>
                {
                    if (tSkinsList.ContainsKey(p))
                    {
                        tSkinsList.Remove(p);
                    }
                });
            }
            for (int i = 0; i < 12; i++)
            {
                if (tSkinsList.Count - 1 >= i)
                {
                    cont.Add(new CuiElement()
                    {
                        Parent = Layer + "-Izbranoe",
                        Components =
                        {
                            new CuiRawImageComponent()
                            {
                                Png = GetImage("SKULISKINS1"+ weapon +"_" + tSkinsList.ToList()[i].Key)
                            },
                            new CuiRectTransformComponent()
                            {
                                AnchorMin =
                                    $"0 0.5",
                                AnchorMax =
                                    $"0 0.5",
                                OffsetMin =
                                    $"{2 + i * 62 - Math.Floor((double) i / 6) * 6 * 62} {5 - Math.Floor((double) i / 6) * 62}",
                                OffsetMax =
                                    $"{52 + i * 62 - Math.Floor((double) i / 6) * 6 * 62} {55 - Math.Floor((double) i / 6) * 62}"
                            }
                        }
                    });
                    cont.Add(new CuiButton()
                    {
                        Button = {
                            Color = "1 1 1 0",
                            Command = $"uiskinmenu setskin {itemId} {tSkinsList.ToList()[i].Key}"
                        },
                        Text =
                        {
                            Text = ""
                        },
                        RectTransform =
                        {
                            AnchorMin =
                                $"0 0.5",
                            AnchorMax =
                                $"0 0.5",
                            OffsetMin =
                                $"{2 + i * 62 - Math.Floor((double) i / 6) * 6 * 62} {5- Math.Floor((double) i / 6) * 62}",
                            OffsetMax =
                                $"{52 + i * 62 - Math.Floor((double) i / 6) * 6 * 62} {55 - Math.Floor((double) i / 6) * 62}"
                        }
                    }, Layer + "-Izbranoe", Layer + "-Izbranoe" + i);
                    cont.Add(new CuiButton()
                    {
                        RectTransform =
                        {
                            AnchorMin = "0 1",
                            AnchorMax = "0 1",
                            OffsetMin = $"{-5} {-10}",
                            OffsetMax = $"{10} {5}"
                        },
                        Button =
                        {
                            Command = $"uiskinmenu setizbranoe {weapon} {tSkinsList.ToList()[i].Key} {page} {itemId}",
                            Color = HexToRustFormat("#dead39"),
                            Sprite = "assets/icons/favourite_servers.png",
                        },
                        Text = { Text = "" }
                    }, Layer + "-Izbranoe" + i);
                    if (permission.UserHasPermission(player.UserIDString, cfg.canusedefault))
                    {
                        if (playersData.TryGetValue(player.userID, out weapons) && weapons._defaultSkins.ContainsKey(weapon) && weapons._defaultSkins[weapon].skinId == tSkinsList.ToList()[i].Key)
                        {
                            cont.Add(new CuiButton()
                            {
                                RectTransform =
                                {
                                    AnchorMin = "1 0",
                                    AnchorMax = "1 0",
                                    OffsetMin = $"{-10} {0}",
                                    OffsetMax = $"{0} {10}"
                                },
                                Button =
                                {
                                    Command = $"uiskinmenu setdefault {weapon} {tSkinsList.ToList()[i].Key} {page} {itemId}",
                                    Color = HexToRustFormat("#369f47"),
                                    Sprite = "assets/icons/power.png",
                                },
                                Text = { Text = "" }
                            }, Layer + "-Izbranoe" + i);
                        }
                        else
                        {
                            cont.Add(new CuiButton()
                            {
                                RectTransform =
                                {
                                    AnchorMin = "1 0",
                                    AnchorMax = "1 0",
                                    OffsetMin = $"{-10} {0}",
                                    OffsetMax = $"{0} {10}"
                                },
                                Button =
                                {
                                    Command = $"uiskinmenu setdefault {weapon} {tSkinsList.ToList()[i].Key} {page} {itemId}",
                                    Color = HexToRustFormat("#fb4f3b"),
                                    Sprite = "assets/icons/power.png",
                                },
                                Text = { Text = "" }
                            }, Layer + "-Izbranoe" + i);
                        }
                    }
                }
            }
            CuiHelper.AddUi(player, cont);
        }
        private void LoadWearUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Layer + "-Wear");
            DataPlayer dataPlayer;
            if (this.playersData.TryGetValue(player.userID, out dataPlayer) && dataPlayer.Prefab != null) return;
            var cont = new CuiElementContainer
            {
                {
                    new CuiPanel()
                    {
                        Image =
                {
                    Color = "0 0 0 0"
                },
                        RectTransform =
                {
                    AnchorMin = "0.5 0",
                    AnchorMax = "0.5 0",
                    OffsetMin = $"{-588} {115}",
                    OffsetMax = $"{-215} {169}"
                }
                    },
                    Overlay,
                    Layer + "-Wear"
                }
            };

            for (int i = 0; i < player.inventory.containerWear.capacity; i++)
            {
                var item = player.inventory.containerWear.GetSlot(i);
                if (item == null)
                    continue;

                if (!cfg.blackList.Contains(item.skin) &&
                    _loadData.ContainsKey(item.info.shortname))
                {
                    cont.Add(new CuiButton()
                    {
                        Button = {
                            Color = "0.65 0.65 0.65 0",
                            Command = $"uiskinmenu weaponSelect {item.info.shortname} {item.uid}"
                        },
                        Text =
                        {
                            Text = ""
                        },
                        RectTransform =
                        {
                            AnchorMin =
                                $"0 0",
                            AnchorMax =
                                $"0 0",
                            OffsetMin = $"{0 + i * 54 - Math.Floor((double) i / 7) * 7 * 54} {0}",
                            OffsetMax = $"{50 + i * 54 - Math.Floor((double) i / 7) * 7 * 54} {50}"
                        }
                    }, Layer + "-Wear");
                }
            }
            CuiHelper.AddUi(player, cont);
        }
        private void LoadMainUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Layer + "-Main");
            DataPlayer dataPlayer;
            if (this.playersData.TryGetValue(player.userID, out dataPlayer) && dataPlayer.Prefab != null) return;
            var cont = new CuiElementContainer();
            cont.Add(new CuiPanel()
            {
                Image =
                {
                    Color = "0 0 0 0"
                },
                RectTransform =
                {
                    AnchorMin = $"{0.5} {0}",
                    AnchorMax = $"{0.5} {0}",
                    OffsetMin = $"{-200 } {85}",
                    OffsetMax = $"{180} {337}"
                }
            }, Overlay, Layer + "-Main");
            for (int i = 0; i < player.inventory.containerMain.capacity; i++)
            {
                var item = player.inventory.containerMain.GetSlot(i);
                if (item == null)
                {
                    continue;
                }
                if (!cfg.blackList.Contains(item.skin) &&
                    _loadData.ContainsKey(item.info.shortname))
                {
                    cont.Add(new CuiButton()
                    {
                        Button = {
                            Color = "0.65 0.65 0.65 0",
                            Command = $"uiskinmenu weaponSelect {item.info.shortname} {item.uid}"

                        },
                        Text =
                        {
                            Text = ""
                        },
                        RectTransform =
                        {
                            AnchorMin =
                                $"0 1",
                            AnchorMax =
                                $"0 1",
                            OffsetMin =
                                $"{0 + i * 64- Math.Floor((double) i / 6) * 6 * 64} {-60 - Math.Floor((double) i / 6) * 63}",
                            OffsetMax =
                                $"{60 + i * 64 - Math.Floor((double) i / 6) * 6 * 64} {0 - Math.Floor((double) i / 6) * 63}"
                        }
                    }, Layer + "-Main");
                }
            }
            CuiHelper.AddUi(player, cont);
        }
        private void LoadBeltUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Layer + "-Belt");
            DataPlayer dataPlayer;
            if (this.playersData.TryGetValue(player.userID, out dataPlayer) && dataPlayer.Prefab != null) return;
            var cont = new CuiElementContainer();
            cont.Add(new CuiPanel()
            {
                Image =
                {
                    Color = "0 0 0 0"
                },
                RectTransform =
                {
                    AnchorMin = "0.5 0",
                    AnchorMax = "0.5 0",
                    OffsetMin = $"{-200} {17}",
                    OffsetMax = $"{180} {79}"
                }
            }, Overlay, Layer + "-Belt");
            for (int i = 0; i < 6; i++)
            {
                var item = player.inventory.containerBelt.GetSlot(i);
                if (item == null)
                    continue;

                if (!cfg.blackList.Contains(item.skin) &&
                    _loadData.ContainsKey(item.info.shortname))
                {
                    cont.Add(new CuiButton()
                    {
                        Button =
                        {
                            Color = "0.65 0.65 0.65 0",
                            Command = $"uiskinmenu weaponSelect {item.info.shortname} {item.uid}"
                        },
                        Text =
                        {
                            Text = ""
                        },
                        RectTransform =
                        {
                            AnchorMin =
                                $"0 0",
                            AnchorMax =
                                $"0 0",
                            OffsetMin = $"{0 + i * 64 - Math.Floor((double) i / 6) * 6 * 64} {0}",
                            OffsetMax = $"{60+ i * 64 - Math.Floor((double) i / 6) * 6 * 64} {60}"
                        }
                    }, Layer + "-Belt");
                }
            }
            CuiHelper.AddUi(player, cont);
        }
        [ConsoleCommand("uiskinmenu")]
        void ConsoleCommand(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null) return;
            Effect Sound1 = new Effect("assets/bundled/prefabs/fx/notice/loot.drag.grab.fx.prefab", player, 0, new Vector3(), new Vector3());
            string weapon;
            ulong skinId;
            int page;
            int itemId;
            DataPlayer playerData;
            switch (arg.Args[0])
            {
                case "page":
                    EffectNetwork.Send(Sound1, player.Connection);
                    LoadSkinsUI(player, arg.Args[1], arg.Args[2].ToInt(), uint.Parse(arg.Args[3]));
                    LoadIzbranoeUI(player, arg.Args[1], uint.Parse(arg.Args[3]), arg.Args[2].ToInt());
                    break;
                case "weaponSelect":
                    EffectNetwork.Send(Sound1, player.Connection);
                    LoadSkinsUI(player, arg.Args[1], 1, uint.Parse(arg.Args[2]));
                    LoadIzbranoeUI(player, arg.Args[1], uint.Parse(arg.Args[2]), 1);
                    break;
                case "setizbranoe":
                    EffectNetwork.Send(Sound1, player.Connection);
                    if (!this.playersData.TryGetValue(player.userID, out playerData)) return;
                    weapon = arg.Args[1];
                    skinId = ulong.Parse(arg.Args[2]);
                    page = arg.Args[3].ToInt();
                    itemId = arg.Args[4].ToInt();
                    if (playerData._izvSkins.ContainsKey(weapon) && playerData._izvSkins[weapon].ContainsKey(skinId))
                    {
                        playerData._izvSkins[weapon].Remove(skinId);
                    }
                    else if (playerData._izvSkins.ContainsKey(weapon))
                    {
                        playerData._izvSkins[weapon].Add(skinId, _loadData[weapon][skinId]);
                    }
                    else
                    {
                        playerData._izvSkins.Add(weapon, new Dictionary<ulong, ItemData.SkinInfo>()
                        {
                            [skinId] = _loadData[weapon][skinId]
                        });
                    }
                    LoadSkinsUI(player, weapon, page, (uint)itemId);
                    LoadIzbranoeUI(player, weapon, (uint)itemId, page);
                    break;
                case "setdefault":
                    EffectNetwork.Send(Sound1, player.Connection);
                    if (!this.playersData.TryGetValue(player.userID, out playerData)) return;
                    weapon = arg.Args[1];
                    skinId = ulong.Parse(arg.Args[2]);
                    page = arg.Args[3].ToInt();
                    itemId = arg.Args[4].ToInt();
                    if (playerData._defaultSkins.ContainsKey(weapon) && playerData._defaultSkins[weapon].skinId == skinId)
                    {
                        playerData._defaultSkins.Remove(weapon);
                    }
                    else if (playerData._defaultSkins.ContainsKey(weapon))
                    {
                        playerData._defaultSkins[weapon].skinId = skinId;
                        playerData._defaultSkins[weapon].SkinInfo = _loadData[weapon][skinId];
                    }
                    else
                    {
                        playerData._defaultSkins.Add(weapon, new DefaultSkins()
                        {
                            skinId = skinId,
                            SkinInfo = _loadData[weapon][skinId]
                        });
                    }
                    LoadSkinsUI(player, weapon, page, (uint)itemId);
                    LoadIzbranoeUI(player, weapon, (uint)itemId, page);
                    break;
                case "setskin":
                    skinId = ulong.Parse(arg.Args[2]);

                    EffectNetwork.Send(Sound1, player.Connection);
                    if (cfg.Market.IsEnabled && !permission.UserHasPermission(player.UserIDString, cfg.canuse))
                    {
                        if (ChangeSkin(player) == false)
                        {
                            return;
                        }
                    }
                    if (!this.playersData.TryGetValue(player.userID, out playerData)) return;
                    if (playerData.Prefab == null)
                    {
                        var uid = arg.Args[1];
                        var item = player.inventory.FindItemUID(uint.Parse(uid));
                        item.skin = skinId;
                        var hend = item.GetHeldEntity();
                        if (hend != null)
                        {
                            hend.skinID = skinId;
                            hend.SendNetworkUpdate();
                        }
                        item.MarkDirty();
                        player.SendNetworkUpdate();
                    }
                    else
                    {
                        DefaultSkins skinData;

                        if (playerData.Prefab is BaseVehicle)
                        {
                            var vehicle = playerData.Prefab as BaseVehicle;
                            var shortname = vehicle.ShortPrefabName;
                            if (!playerData._defaultSkins.TryGetValue(shortname, out skinData)) return;

                            if (skinId == vehicle.skinID || skinId == 0) return;

                            BaseVehicle transport = GameManager.server.CreateEntity($"assets/content/vehicles/snowmobiles/{shortname}.prefab", vehicle.transform.position, vehicle.transform.rotation) as BaseVehicle;
                            transport.health = vehicle.health;
                            transport.skinID = skinId;

                            vehicle.Kill();
                            transport.Spawn();
                            Effect.server.Run("assets/prefabs/deployable/repair bench/effects/skinchange_spraypaint.prefab", transport.transform.localPosition);
                        }
                        else if (playerData.Prefab.OwnerID == player.userID || player.currentTeam != 0 && player.Team.members.Contains(playerData.Prefab.OwnerID))
                        {
                            if (shortnamesEntity.ContainsKey(playerData.Prefab.ShortPrefabName))
                            {
                                if (skinId == playerData.Prefab.skinID || skinId == 0) return;

                                playerData.Prefab.skinID = skinId;
                                playerData.Prefab.SendNetworkUpdate();
                                Effect.server.Run("assets/prefabs/deployable/repair bench/effects/skinchange_spraypaint.prefab", playerData.Prefab.transform.localPosition);
                            }
                        }
                    }
                    break;
                case "":

                    break;
                case "close":
                    if (this.playersData.TryGetValue(player.userID, out playerData))
                        playerData.Prefab = null;
                    CuiHelper.DestroyUi(player, Layer);
                    CuiHelper.DestroyUi(player, Layer + "-Wear");
                    CuiHelper.DestroyUi(player, Layer + "-Main");
                    CuiHelper.DestroyUi(player, Layer + "-Belt");
                    CuiHelper.DestroyUi(player, Layer + "-Izbranoe");
                    CuiHelper.DestroyUi(player, Layer + "-Search");
                    CuiHelper.DestroyUi(player, Layer + "-LableIzb");
                    openSkins.Remove(player.userID);
                    EffectNetwork.Send(Sound1, player.Connection);
                    player.EndLooting();

                    break;
            }
        }
        private void LoadSkinsUI(BasePlayer player, string weapon, int page, uint itemId)
        {
            if (!_loadData.ContainsKey(weapon)) return;
            DataPlayer dataPlayer;

            if (!playersData.TryGetValue(player.userID, out dataPlayer)) return;

            bool havePrefab = dataPlayer.Prefab == null;

            int skinsCount = havePrefab ? 
                cfg.MenuSettings.StandartMenuCellsCount : 
                cfg.MenuSettings.EntityMenuCellsCount;
            int pageXCount = havePrefab ? skinsCount / 3 : 4;
            int pageYCount = havePrefab ? 3 : skinsCount / 4;
            CuiHelper.DestroyUi(player, Layer + "-Search");
            var container = new CuiElementContainer
            {
                {
                    new CuiPanel()
                    {
                        Image =
                        {
                            ImageType = Image.Type.Filled,
                            Png = "assets/standard assets/effects/imageeffects/textures/noise.png",
                            //Sprite = Sharp,
                            Color = HexToRustFormat($"#535151{(havePrefab ? "2C" : "00")}"),//
                            Material = "assets/icons/greyout.mat"
                        },
                        RectTransform =
                        {
                            AnchorMin = "0.5 0.5",
                            AnchorMax = "0.5 0.5",
                            OffsetMin = $"{-400} {-185}",
                            OffsetMax = $"{-400 + 90 * pageXCount} {115}"
                        }
                    },
                    Layer,
                    Layer + "-Search"
                },
                {
                    new CuiPanel()
                    {
                        Image =
                        {
                            ImageType = Image.Type.Filled,
                            Png = "assets/standard assets/effects/imageeffects/textures/noise.png",
                           // Sprite = Sharp,
                            Color = HexToRustFormat("#5351512C"),
                            Material = "assets/icons/greyout.mat"
                        },
                        RectTransform =
                        {
                            AnchorMin = "1 0.5",
                            AnchorMax = $"{1} 0.5",//  + float.Parse($"0.{skinsCount}") / 2
                            OffsetMin = $"{15} 0", // * (skinsCount == 12 ? 8 : 4)  + 90 * pageCount + 20} {-150}
                            OffsetMax = $"{15} 0" //  + 90 * pageCount + 20} {150}
                        }
                    },
                    Layer + "-Search",
                    Layer + "-Page"
                }
            };
            if (0 < _loadData[weapon].Count - skinsCount * page)
            {
                container.Add(new CuiButton()
                {
                    RectTransform =
                    {
                        AnchorMin = "0.5 0.5",
                        AnchorMax = "0.5 0.5",
                        OffsetMin = $"{-10} {5}",
                        OffsetMax = $"{10} {143}"
                    },
                    Button =
                    {
                        Command = $"uiskinmenu page {weapon} {page + 1} {itemId}",
                        Color = HexToRustFormat("#5c80ba")
                    },
                    Text =
                    {
                        Text = "»", Align = TextAnchor.MiddleCenter,
                        FontSize = (int) (20 )
                    }
                }, Layer + "-Page");
            }
            else
            {
                container.Add(new CuiButton()
                {
                    RectTransform =
                    {
                        AnchorMin = "0.5 0.5",
                        AnchorMax = "0.5 0.5",
                        OffsetMin = $"{-10} {5}",
                        OffsetMax = $"{10} {143}"
                    },
                    Button =
                    {
                        Command = $"",
                        Color = HexToRustFormat("#5c80bac3")
                    },
                    Text =
                    {
                        Text = "»", Align = TextAnchor.MiddleCenter,
                        FontSize = (int) (20),
                        Color = "0.65 0.65 0.65 0.65"
                    }
                }, Layer + "-Page");
            }
            if (page > 1)
            {
                container.Add(new CuiButton()
                {
                    RectTransform =
                    {
                        AnchorMin = "0.5 0.5",
                        AnchorMax = "0.5 0.5",
                        OffsetMin = $"{-10} {-137}",
                        OffsetMax = $"{10} {-5}"
                    },
                    Button =
                    {
                        Command = $"uiskinmenu page {weapon} {page - 1} {itemId}",
                        Color = HexToRustFormat("#5c80ba")
                    },
                    Text =
                    {
                        Text = "«", Align = TextAnchor.MiddleCenter, FontSize = (int) (20 )
                    }
                }, Layer + "-Page");
            }
            else
            {
                container.Add(new CuiButton()
                {
                    RectTransform =
                    {
                        AnchorMin = "0.5 0.5",
                        AnchorMax = "0.5 0.5",
                        OffsetMin = $"{-10} {-137}",
                        OffsetMax = $"{10} {-5}"
                    },
                    Button =
                    {
                        Command = $"",
                        Color = HexToRustFormat("#5c80bac3")
                    },
                    Text =
                    {
                        Text = "«", Align = TextAnchor.MiddleCenter, FontSize = (int) (20 ),
                        Color = "0.65 0.65 0.65 0.65"
                    }
                }, Layer + "-Page");
            }
            //CuiHelper.AddUi(player, container);
            //return;
            var tSkinsList = _loadData[weapon].ToDictionary(keyValuePair => keyValuePair.Key, keyValuePair => keyValuePair.Value);
            if (cfg.useSkins.Count >= 1)
                foreach (var keyValuePair in cfg.useSkins.Where(keyValuePair =>
                    !permission.UserHasPermission(player.UserIDString, keyValuePair.Key)))
                {
                    keyValuePair.Value.ForEach(p =>
                    {
                        if (tSkinsList.ContainsKey(p))
                        {
                            tSkinsList.Remove(p);
                        }
                    });
                }

            foreach (var skinItem in tSkinsList.Where(p => p.Value.IsEnabled).Select((i, t) => new { A = i, B = t - (page - 1) * skinsCount }).//
                Skip((page - 1) * skinsCount).//skinsCount
                Take(skinsCount)) //skinsCount
            {
                container.Add(new CuiElement()
                {
                    Parent = Layer + "-Search",
                    Name = Layer + "-Search" + ".Player" + skinItem.B,
                    Components =
                    {
                        new CuiImageComponent()
                        {
                            Color = "0.35 0.35 0.35 0.65"
                        },
                        new CuiRectTransformComponent
                        {
                            AnchorMin = $"0 0.5",
                            AnchorMax = $"0 0.5",
                            OffsetMin = $"{4 + skinItem.B * 90 - Math.Floor((double) skinItem.B / pageXCount) * pageXCount * 90} {60 - Math.Floor((double) skinItem.B / pageXCount) * 98}",
                            OffsetMax = $"{90 + skinItem.B * 90 - Math.Floor((double) skinItem.B / pageXCount) * pageXCount * 90} {143 - Math.Floor((double) skinItem.B / pageXCount) * 98}"
                        }
                    }
                });
                
                container.Add(new CuiElement()
                {
                    Parent = Layer + "-Search" + ".Player" + skinItem.B,
                    Components =
                    {
                        new CuiRawImageComponent()
                        {
                            Png = GetImage("SKULISKINS1"+ weapon +"_" + skinItem.A.Key)
                        },
                        new CuiRectTransformComponent()
                        {
                            AnchorMin = "0.5 0.5",
                            AnchorMax = "0.5 0.5",
                            OffsetMin = $"{-30} {-30}",
                            OffsetMax = $"{30} {30}"
                        }
                    }
                });
                container.Add(new CuiElement()
                {
                    Parent = Layer + "-Search" + ".Player" + skinItem.B,
                    Components =
                    {
                        new CuiTextComponent()
                        {
                            Text = skinItem.A.Value.MarketName, Align = TextAnchor.MiddleCenter,
                            Font = Regular,
                            FontSize = 9
                        },
                        new CuiRectTransformComponent()
                        {
                            AnchorMin = "0.5 0",
                            AnchorMax = "0.5 0",
                            OffsetMin = $"{-40} {-15}",
                            OffsetMax = $"{40} {0}"
                        }
                    }
                });
                container.Add(new CuiButton()
                {
                    RectTransform =
                    {
                        AnchorMin = "0.5 0.5",
                        AnchorMax = "0.5 0.5",
                        OffsetMin = $"{-30} {-30}",
                        OffsetMax = $"{30} {30}"
                    },
                    Button =
                    {
                        Command = $"uiskinmenu setskin {itemId} {skinItem.A.Key}",
                        Color = "0 0 0 0"
                    },
                    Text = { Text = "" }
                }, Layer + "-Search" + ".Player" + skinItem.B);

                if (dataPlayer._izvSkins.ContainsKey(weapon) &&
                    dataPlayer._izvSkins[weapon].ContainsKey(skinItem.A.Key))
                {
                    container.Add(new CuiButton()
                    {
                        RectTransform =
                        {
                            AnchorMin = "0 1",
                            AnchorMax = "0 1",
                            OffsetMin = $"{1} {-18}",
                            OffsetMax = $"{18} {-1}"
                        },
                        Button =
                        {
                            Command = $"uiskinmenu setizbranoe {weapon} {skinItem.A.Key} {page} {itemId}",
                            Color = HexToRustFormat("#dead39"),
                            Sprite = "assets/icons/favourite_servers.png",
                        },
                        Text = { Text = "" }
                    }, Layer + "-Search" + ".Player" + skinItem.B);
                }
                else
                {
                    container.Add(new CuiButton()
                    {
                        RectTransform =
                        {
                            AnchorMin = "0 1",
                            AnchorMax = "0 1",
                            OffsetMin = $"{1} {-18}",
                            OffsetMax = $"{18} {-1}"
                        },
                        Button =
                        {
                            Command = $"uiskinmenu setizbranoe {weapon} {skinItem.A.Key} {page} {itemId}",
                            Color = "1 1 1 1",
                            Sprite = "assets/icons/favourite_servers.png",
                        },
                        Text = { Text = "" }
                    }, Layer + "-Search" + ".Player" + skinItem.B);
                }

                if (permission.UserHasPermission(player.UserIDString, cfg.canusedefault))
                {
                    if (playersData.TryGetValue(player.userID, out dataPlayer) && dataPlayer._defaultSkins.ContainsKey(weapon) && dataPlayer._defaultSkins[weapon].skinId == skinItem.A.Key)
                    {
                        container.Add(new CuiButton()
                        {
                            RectTransform =
                            {
                                AnchorMin = "1 1",
                                AnchorMax = "1 1",
                                OffsetMin = $"{-16} {-16}",
                                OffsetMax = $"{-5} {-5}"
                            },
                            Button =
                            {
                                Command = $"uiskinmenu setdefault {weapon} {skinItem.A.Key} {page} {itemId}",
                                Color = HexToRustFormat("#369f47"),
                                Sprite = "assets/icons/power.png",
                            },
                            Text = { Text = "" }
                        }, Layer + "-Search" + ".Player" + skinItem.B);
                    }
                    else
                    {
                        container.Add(new CuiButton()
                        {
                            RectTransform =
                            {
                                AnchorMin = "1 1",
                                AnchorMax = "1 1",
                                OffsetMin = $"{-16} {-16}",
                                OffsetMax = $"{-5} {-5}"
                            },
                            Button =
                            {
                                Command = $"uiskinmenu setdefault {weapon} {skinItem.A.Key} {page} {itemId}",
                                Color = HexToRustFormat("#fb4f3b"),
                                Sprite = "assets/icons/power.png",
                            },
                            Text = { Text = "" }
                        }, Layer + "-Search" + ".Player" + skinItem.B);
                    }
                }
            }
            CuiHelper.AddUi(player, container);

        }
        #endregion

        #region Hooks

        bool ChangeSkin(BasePlayer player)
        {
            if (player == null || player.IsDead()) return false;
            if (cfg.Market.costChange <= 0) return true;
            switch (cfg.Market.WhoMarket)
            {
                case "Scrap":
                    {
                        var scrap = player.inventory.AllItems().FirstOrDefault(p =>
                            p.info.shortname == "scrap" && p.skin == 0 && p.amount >= cfg.Market.costChange);
                        if (scrap == null)
                        {
                            SendReply(player, lang.GetMessage("NEEDMORESCRAP", this, player.UserIDString));
                            return false;
                        }
                        if (scrap.amount == cfg.Market.costChange)
                        {
                            scrap.RemoveFromContainer();
                            scrap.RemoveFromWorld();
                        }
                        else
                        {
                            scrap.amount = (int)(scrap.amount - cfg.Market.costChange);
                            scrap.MarkDirty();
                        }

                        return true;
                    }
                case "ServerRewards":
                    {
                        var checkPoint = ServerRewards?.Call("CheckPoints", player.userID);
                        if (checkPoint == null)
                        {
                            return false;
                        }

                        if ((int)checkPoint < cfg.Market.costChange)
                        {
                            SendReply(player, lang.GetMessage("NEEDMOREMONEY", this, player.UserIDString));
                            return false;
                        }
                        else
                        {
                            ServerRewards?.Call("TakePoints", player.userID, cfg.Market.costChange);
                        }
                        return true;
                    }
                case "Economics":
                    {
                        double checkPoint = (double)Economics?.Call("Balance", player.userID);
                        if (checkPoint <= 0)
                        {
                            return false;
                        }
                        if (checkPoint < cfg.Market.costChange)
                        {
                            SendReply(player, lang.GetMessage("NEEDMOREMONEY", this, player.UserIDString));
                            return false;
                        }
                        else
                        {
                            Economics?.Call("Withdraw", player.userID, cfg.Market.costChange);
                        }
                        return true;
                    }
                default:
                    return false;
            }
        }
        bool OpenPay(BasePlayer player)
        {
            if (player == null || player.IsDead()) return false;
            if (cfg.Market.costOpen <= 0) return true;
            switch (cfg.Market.WhoMarket)
            {
                case "Scrap":
                    {
                        var scrap = player.inventory.AllItems().FirstOrDefault(p =>
                            p.info.shortname == "scrap" && p.skin == 0 && p.amount >= cfg.Market.costOpen);
                        if (scrap == null)
                        {
                            SendReply(player, lang.GetMessage("NEEDMORESCRAP", this, player.UserIDString));
                            return false;
                        }
                        if (scrap.amount == cfg.Market.costOpen)
                        {
                            scrap.RemoveFromContainer();
                            scrap.RemoveFromWorld();
                        }
                        else
                        {
                            scrap.amount = (int)(scrap.amount - cfg.Market.costOpen);
                            scrap.MarkDirty();
                        }

                        return true;
                    }
                case "ServerRewards":
                    {
                        var checkPoint = ServerRewards?.Call("CheckPoints", player.userID);
                        if (checkPoint == null)
                        {
                            return false;
                        }

                        if ((int)checkPoint < cfg.Market.costOpen)
                        {
        
// ... [Code preview truncated due to length. Full source in attached file] ...

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

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

Сверху