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