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] ...