C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("CupboardSet", "LAGZYA", "1.0.6")]
public class CupboardSet : RustPlugin
{
#region lang
protected override void LoadDefaultMessages()
{
var ru = new Dictionary<string, string>();
foreach (var rus in new Dictionary<string, string>()
{
["CS_LABLE"] = "СПИСОК ИГРОКОВ",
["CS_REMOVE"] = "удалить",
}) ru.Add(rus.Key, rus.Value);
var en = new Dictionary<string, string>();
foreach (var ens in new Dictionary<string, string>()
{
["CS_LABLE"] = "LIST PLAYERS",
["CS_REMOVE"] = "remove"
}) en.Add(ens.Key, ens.Value);
lang.RegisterMessages(ru, this, "ru");
lang.RegisterMessages(en, this, "en");
}
#endregion
private string API_KEY = "CupboardSet-213213123123saafvqasd";
private void OnServerInitialized()
{
AddImage( $"https://rustapi.top/cartinki/givecart.php?token={API_KEY}&image=remove_cupb.png",$"remove_cupboard");
AddImage( $"https://rustapi.top/cartinki/givecart.php?token={API_KEY}&image=button_cup.png",$"button_cupboard");
}
void OnLootEntity(BasePlayer player, BuildingPrivlidge entity)
{
var cont = new CuiElementContainer();
cont.Add(new CuiElement()
{
Parent = "Overlay",
Name = "CupboardSet",
Components =
{
new CuiImageComponent()
{
Color = "0 0 0 0"
},
new CuiRectTransformComponent()
{
AnchorMin = "0.5 0.6",
AnchorMax = "0.5 0.6",
}
}
});
cont.Add(new CuiElement()
{
Name = "CupboardSet" + "Global",
Parent = "CupboardSet",
Components =
{
new CuiImageComponent()
{
Png = GetImage("button_cupboard"),
Color = HexToRustFormat("#ba422a")
},
new CuiRectTransformComponent()
{
AnchorMin = "0.5 0.5",
AnchorMax = "0.5 0.5",
OffsetMin = $"-75 {208}",
OffsetMax = $"75 {230}"
}
}
});
cont.Add(new CuiElement()
{
Parent = "CupboardSet" + "Global",
Components =
{
new CuiTextComponent()
{
Text = $"{lang.GetMessage("CS_LABLE", this, player.UserIDString)}".ToUpper(),
FontSize = 12,
Align = TextAnchor.MiddleCenter
},
new CuiRectTransformComponent()
{
AnchorMin = "0 0",
AnchorMax = "1 1",
}
}
});
int i = 0;
foreach (var entityAuthorizedPlayer in entity.authorizedPlayers)
{
var min = i%2==0 ? -155 : 0;
var max = i%2==0 ? -15 : 150;
cont.Add(new CuiElement()
{
Name = "CupboardSet" + "Players" + i,
Parent = "CupboardSet",
Components =
{
new CuiImageComponent()
{
Png = GetImage("button_cupboard"),
Color = HexToRustFormat("#292f3df0")
},
new CuiRectTransformComponent()
{
AnchorMin = "0.5 0.5",
AnchorMax = "0.5 0.5",
OffsetMin = $"{min} {176 - i/2 * 31}",
OffsetMax = $"{max} {204 - i/2 * 31}"
}
}
});
var findPlayer = covalence.Players.FindPlayerById(entityAuthorizedPlayer.ToString());
string name = findPlayer?.Name ?? "Unknown";
if (name.Length > 10) name = name.Substring(0, 10);
if (findPlayer != null)
{
name = findPlayer.Name.Substring(0, Math.Min(10, findPlayer.Name.Length));
}
cont.Add(new CuiElement()
{
Parent = "CupboardSet" + "Players" + i,
Components =
{
new CuiTextComponent()
{
Text = $"{name}".ToUpper(),
FontSize = 10,
Align = TextAnchor.MiddleCenter
},
new CuiRectTransformComponent()
{
AnchorMin = "0 0",
AnchorMax = "0.8 1",
}
}
});
if (entity.OwnerID == entityAuthorizedPlayer)
{
cont.Add(new CuiElement()
{
Parent = "CupboardSet" + "Players" + i,
Components =
{
new CuiImageComponent()
{
Sprite = "assets/icons/favourite_servers.png",
},
new CuiRectTransformComponent()
{
AnchorMin = "0.05 0.25",
AnchorMax = "0.15 0.75",
}
}
});
}
cont.Add(new CuiElement()
{
Parent = "CupboardSet" + "Players" + i,
Components =
{
new CuiRawImageComponent()
{
Png = GetImage("remove_cupboard")
},
new CuiRectTransformComponent()
{
AnchorMin = "0.7 0.11",
AnchorMax = "0.98 0.89"
}
}
});
cont.Add(new CuiButton()
{
Button =
{
Color = "0 0 0 0",
Command = $"ui_cupboardset remove {entityAuthorizedPlayer} {entity.net.ID}",
},
Text =
{
Text = $"{lang.GetMessage("CS_REMOVE", this, player.UserIDString)}",
Align = TextAnchor.MiddleCenter,
FontSize = 8,
Font = "robotocondensed-regular.ttf"
},
RectTransform =
{
AnchorMin = "0.7 0.11",
AnchorMax = "0.98 0.89"
}
}, "CupboardSet" + "Players" + i);
i++;
}
CuiHelper.DestroyUi(player, "CupboardSet");
CuiHelper.AddUi(player, cont);
}
void OnPlayerLootEnd(PlayerLoot inventory)
{
if(!(inventory.entitySource is BuildingPrivlidge)) return;
CuiHelper.DestroyUi(inventory._baseEntity, "CupboardSet");
}
#region Help
[PluginReference] private Plugin ImageLibrary;
[ConsoleCommand("ui_cupboardset")]
void UICommands(ConsoleSystem.Arg arg)
{
switch (arg.Args[0])
{
case "remove":
var ent = BaseNetworkable.serverEntities.Find(new NetworkableId(ulong.Parse(arg.Args[2]))) as BuildingPrivlidge;
if (ent.authorizedPlayers.Any(p => p == arg.Player().userID))
{
if(!ent.authorizedPlayers.Any(p => p == ulong.Parse(arg.Args[1]))) return;
var friend = ent.authorizedPlayers.FirstOrDefault(p => p == ulong.Parse(arg.Args[1]));
ent.authorizedPlayers.Remove(friend);
ent.UpdateMaxAuthCapacity();
ent.SendNetworkUpdate();
OnLootEntity(arg.Player(), ent);
var target = BasePlayer.FindByID(ulong.Parse(arg.Args[1]));
if(target != null)
target.SendNetworkUpdate();
if(friend == arg.Player().userID)
{
arg.Player().EndLooting();
CuiHelper.DestroyUi(arg.Player(), "CupboardSet");
}
}
break;
}
}
public string GetImage(string shortname, ulong skin = 0) =>
(string) ImageLibrary.Call("GetImage", shortname, skin);
public bool AddImage(string url, string shortname, ulong skin = 0) =>
(bool) ImageLibrary.Call("AddImage", url, shortname, skin);
private static string HexToRustFormat(string hex)
{
if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
var str = hex.Trim('#');
if (str.Length == 6) str += "FF";
if (str.Length != 8)
{
throw new Exception(hex);
}
var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
Color color = new Color32(r, g, b, a);
return $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
}
#endregion
}
}