C#:
using System;
using UnityEngine;
using System.Globalization;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Newtonsoft.Json;
namespace Oxide.Plugins {
[Info("DVInfo", "ClayMond", "0.0.1")]
[Description("Бесплатный плагин на красивую информацию в CUI для oxide-russia.ru")]
class DVInfo : RustPlugin {
#region MSG
// ЭТОТ ТЕКСТ НАСТРАИВАЕТСЯ - OXIDE/DATA
List<string> MSGList = new List<string> {
"Группа сервера - vk.com/суда вашу группу сервера", "Сайт сервера - suda-ssila.na.store", "MAX 3 / RATE X5 ", "СУДА ВАШЕ СООБЩЕНИЕ ЛЮБОЕ", "СУДА ТОЖЕ МОЖНО", "И СУДА"
}
;
#endregion
#region Config
public class DataConfig {
[JsonProperty("Интервал обновление общего онлайна")]
public int interval;
[JsonProperty("Интервал обновление сообщение")]
public int intervalmsg;
}
public DataConfig cfg;
protected override void LoadConfig() {
base.LoadConfig();
PrintWarning("Конфиг загружен");
cfg = Config.ReadObject<DataConfig>();
}
protected override void SaveConfig() {
Config.WriteObject(cfg);
}
protected override void LoadDefaultConfig() {
cfg = new DataConfig() {
intervalmsg = 10, interval = 2,
}
;
}
#endregion
#region Hook
private void OnServerInitialized() {
if (!Interface.Oxide.DataFileSystem.ExistsDatafile("DVInfo/MSGS")) {
Interface.Oxide.DataFileSystem.WriteObject("DVInfo/MSGS", MSGList);
PrintWarning("Создан файл настроек по пути [oxide/data/DVInfo/MSGS.json]");
PrintWarning("The settings file has been created along the path [oxide / data / DVInfo / MSGS.json]");
}
else {
MSGList = Interface.Oxide.DataFileSystem.ReadObject<List<string>>("DVInfo/MSGS");
PrintWarning("Загружены настройки из файла по пути [oxide/data/DVInfo/MSGS.json]");
PrintWarning("Loaded settings from a file along the path [oxide / data / DVInfo / MSGS.json]");
}
timer.Every(cfg.interval, () => {
foreach(var player in BasePlayer.activePlayerList) DrawUpper(player);
}
);
timer.Every(cfg.intervalmsg, () => {
foreach(var player in BasePlayer.activePlayerList) DrawLower(player);
}
);
PrintWarning("Плагин полностью инициализирован");
PrintWarning("Plugin full initialized");
}
void Unload() {
foreach (BasePlayer player in BasePlayer.activePlayerList) {
CuiHelper.DestroyUi(player, "DVUpper");
CuiHelper.DestroyUi(player, "DVLower");
}
}
private void OnPlayerInit(BasePlayer player) {
if (player.IsReceivingSnapshot) {
NextTick(() => OnPlayerInit(player));
return;
}
foreach (var players in BasePlayer.activePlayerList) {
DrawUpper(players);
}
DrawLower(player);
}
private void OnPlayerDisconnected(BasePlayer player, string reason) {
foreach (var players in BasePlayer.activePlayerList) {
DrawUpper(players);
}
}
#endregion
#region CONSOLE USER INTERFACE
private void DrawUpper(BasePlayer player) {
var SleepersLevel = BasePlayer.sleepingPlayerList.Count.ToString();
string DVUpper = "DVUpper";
CuiHelper.DestroyUi(player, DVUpper);
var container = new CuiElementContainer();
container.Add(new CuiPanel {
Image = {
Color = HexToRustFormat("#00000000")
}
, RectTransform = {
AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-400 -70", OffsetMax = "-3 -3"
}
, CursorEnabled = false,
}
, "Hud", DVUpper);
container.Add(new CuiElement {
Parent = DVUpper, Components = {
new CuiTextComponent {
Text = $"Онлайн игроков: <color=#9ad173>{BasePlayer.activePlayerList.Count}</color> чел. | Спящих игроков: <color=#9ad173>{SleepersLevel}</color> чел.", Align = TextAnchor.UpperCenter, FontSize = 15, Font = "RobotoCondensed-regular.ttf"
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "0.5 0.5"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1"
}
}
}
);
CuiHelper.AddUi(player, container);
}
private void DrawLower(BasePlayer player) {
string MSGS = MSGList.GetRandom();
string DVLower = "DVLower";
CuiHelper.DestroyUi(player, DVLower);
var container = new CuiElementContainer();
container.Add(new CuiPanel {
Image = {
Color = HexToRustFormat("#00000000")
}
, RectTransform = {
AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-400 -70", OffsetMax = "-3 -3"
}
, CursorEnabled = false,
}
, "Hud", DVLower);
container.Add(new CuiElement {
Parent = DVLower, Components = {
new CuiTextComponent {
Text = MSGS, Align = TextAnchor.MiddleCenter, FontSize = 11, Font = "RobotoCondensed-regular.ttf"
}
, new CuiOutlineComponent {
Color = "0 0 0 1", Distance = "0.5 0.5"
}
, new CuiRectTransformComponent {
AnchorMin = "0 0", AnchorMax = "1 1"
}
}
}
);
CuiHelper.AddUi(player, container);
}
#endregion
#region COLOR HEX
private static string HexToRustFormat(string hex) {
UnityEngine.Color color;
ColorUtility.TryParseHtmlString(hex, out color);
return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
}
#endregion
}
}