C#:
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Server Info UI", "Tryhard", "1.0.1")]
[Description("In-game server stats GUI")]
public class ServerInfoUI : RustPlugin
{
ListHashSet<BasePlayer> _inUi = new ListHashSet<BasePlayer>();
private const string elemMain = "ServerInfoUI.main";
private void Init()
{
permission.RegisterPermission("ServerInfoUI.allow", this);
}
[ChatCommand("serverinfo")]
private void Serverinfo(BasePlayer player)
{
if (permission.UserHasPermission(player.UserIDString, "ServerInfoUI.allow"))
CreateUI(player);
}
[ConsoleCommand("closeUi")]
private void CloseUI(ConsoleSystem.Arg arg)
{
BasePlayer player = (BasePlayer)arg.Connection.player;
if(player == null) return;
CuiHelper.DestroyUi(player, elemMain);
_inUi.Remove(player);
}
[ConsoleCommand("updateUi")]
private void Refresh(ConsoleSystem.Arg arg)
{
BasePlayer player = (BasePlayer)arg.Connection.player;
if(player == null) return;
if (_inUi.Contains(player))
UpdateUI(player);
}
private void Unload()
{
foreach (BasePlayer player in _inUi)
{
if (player == null) return;
CuiHelper.DestroyUi(player, elemMain);
}
_inUi.Clear();
}
#region UI
private void UpdateUI(BasePlayer player)
{
CuiHelper.DestroyUi(player, elemMain);
CreateUI(player);
}
private void CreateUI(BasePlayer player)
{
var Convar = ConVar.Admin.ServerInfo();
int PlayerCount = Convar.Players;
string hostname = Convar.Hostname;
var fps = Convar.Framerate;
int JoiningCount = Convar.Joining;
int Queuecount = Convar.Queued;
int MaxPlayers = Convar.MaxPlayers;
int Uptime = Convar.Uptime / 3600;
int EntCount = Convar.EntityCount;
var container = new CuiElementContainer();
// Main panel
container.Add(new CuiElement
{
Name = elemMain,
Components =
{
new CuiImageComponent
{
Color = "0.1 0.1 0.1 0.8",
Material = "assets/content/ui/namefontmaterial.mat",
},
new CuiRectTransformComponent
{
AnchorMin = "0.32 0.32",
AnchorMax = "0.68 0.68"
},
new CuiNeedsCursorComponent()
}
});
// Main text
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Server Info for {hostname}",
Color = "1 1 1 1",
FontSize = 20,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.05 0.05",
AnchorMax = "0.95 0.95",
}
}
});
// Playercount
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Players: {PlayerCount}/{MaxPlayers}",
Color = "1 1 1 1",
FontSize = 18,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.005",
AnchorMax = "0.95 0.5",
}
}
});
// Server Fps
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Server Fps: {fps}",
Color = "1 1 1 1",
FontSize = 18,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.0098",
AnchorMax = "0.95 0.7",
}
}
});
// Entity Count
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Entity Count: {EntCount}",
Color = "1 1 1 1",
FontSize = 18,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.5 0.00357",
AnchorMax = "0.95 0.3",
}
}
});
// Queue
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Queued Players: {Queuecount}",
Color = "1 1 1 1",
FontSize = 18,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.1 0.005",
AnchorMax = "0.45 0.5",
}
}
});
// Joining
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Joining Players: {JoiningCount}",
Color = "1 1 1 1",
FontSize = 18,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.1 0.0098",
AnchorMax = "0.45 0.7",
}
}
});
// Uptime
container.Add(new CuiElement
{
Parent = elemMain,
Components =
{
new CuiTextComponent
{
Text = $"Uptime: {Uptime} hours",
Color = "1 1 1 1",
FontSize = 18,
Align = TextAnchor.UpperCenter,
},
new CuiRectTransformComponent
{
AnchorMin = "0.1 0.00357",
AnchorMax = "0.45 0.3",
}
}
});
// Close Button
container.Add(new CuiButton
{
Text =
{
Text = "X",
Color = "1 0.1 0.1 1",
Align = TextAnchor.MiddleCenter,
FontSize = 30,
},
Button =
{
Command = $"closeUi",
Color = "0.1 0.1 0.1 0.6"
},
RectTransform =
{
AnchorMin = "1 1",
AnchorMax = "1 1",
OffsetMin = "-40 -40",
OffsetMax = "0 0",
}
}, elemMain);
// Refresh Button
container.Add(new CuiButton
{
Text =
{
Text = "R",
Color = "0.1 0.5 1 1",
Align = TextAnchor.MiddleCenter,
FontSize = 30,
},
Button =
{
Command = $"updateUi",
Color = "0.1 0.1 0.1 0.6"
},
RectTransform =
{
AnchorMin = "1 1",
AnchorMax = "1 1",
OffsetMin = "-81 -40",
OffsetMax = "-41 0",
}
}, elemMain);
CuiHelper.DestroyUi(player, elemMain);
CuiHelper.AddUi(player, container);
if (!_inUi.Contains(player))
{
_inUi.Add(player);
}
}
#endregion
}
}