C#:
using System;
using System.Globalization;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using System.Collections.Generic;
using Oxide.Core;
namespace Oxide.Plugins
{
[Info("PlayerRefference", "Drop Dead", "1.0.0")]
public class PlayerRefference : RustPlugin
{
public Dictionary<ulong, string> Players = new Dictionary<ulong, string>();
void SaveData()
{
Interface.Oxide.DataFileSystem.WriteObject("Refference/PlayerData", Players);
}
void LoadData()
{
Players = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, string>>("Refference/PlayerData");
}
private void Init()
{
LoadData();
foreach (var player in BasePlayer.activePlayerList)
OnPlayerConnected(player);
}
void OnServerSave()
{
SaveData();
}
void OnPlayerConnected(BasePlayer player)
{
if (player == null) return;
if (player.IsReceivingSnapshot)
{
NextTick(() => OnPlayerConnected(player));
return;
}
if (!Players.ContainsKey(player.userID))
{
var a = Core.Random.Range(1, 9);
var b = Core.Random.Range(1, 9);
var c = Core.Random.Range(1, 9);
var d = Core.Random.Range(1, 9);
Players.Add(player.userID, $"#O{a}{d}{c}R{b}");
}
DrawUI(player);
}
void Unload()
{
SaveData();
foreach (var player in BasePlayer.activePlayerList) CuiHelper.DestroyUi(player, "Layer");
}
private void DrawUI(BasePlayer player)
{
if (!Players.ContainsKey(player.userID)) return;
CuiHelper.DestroyUi(player, "Layer");
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
Image = { Color = HexToRustFormat("#FFFFFF00") },
RectTransform = { AnchorMin = "0.3442709 -0.0009259321", AnchorMax = "0.6411458 0.02407408" },
CursorEnabled = false,
}, "Hud", "Layer");
container.Add(new CuiElement
{
Parent = "Layer",
Name = "Layer" + ".Refference",
Components =
{
new CuiTextComponent { Color = HexToRustFormat("#D2D2D240"), Text = $"{player.displayName} • {Players[player.userID]}", Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "RobotoCondensed-regular.ttf" },
new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1"}
}
});
CuiHelper.AddUi(player, container);
}
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);
throw new InvalidOperationException("Cannot convert a wrong format.");
}
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 string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
}
}
}