C#:
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("MBButtons", "Barry_Allenn", "1.1.0")]
public class MBButtons : RustPlugin
{
private const string Root = "MBButtons.Root";
private const string ButtonColor = "1 0.96 0.88 0.16";
private const string TextColor = "1 1 1 0.65";
private const float Spacing = 4f;
private const int FontSize = 10;
#region CONFIG
private ConfigData config;
private class ConfigData
{
public List<ButtonData> Buttons = new List<ButtonData>();
}
private class ButtonData
{
public string Text = "Report";
public string Command = "chat.say /report";
public string Permission = "";
}
protected override void LoadDefaultConfig()
{
config = new ConfigData
{
Buttons = new List<ButtonData>
{
new ButtonData
{
Text = "Menu",
Command = "chat.say /menu",
Permission = "mbbuttons.menu"
},
new ButtonData
{
Text = "Report",
Command = "chat.say /report",
Permission = "mbbuttons.report"
}
}
};
}
protected override void LoadConfig()
{
base.LoadConfig();
config = Config.ReadObject<ConfigData>();
SaveConfig();
}
protected override void SaveConfig()
{
Config.WriteObject(config, true);
}
#endregion
#region Hooks
private void OnServerInitialized()
{
foreach (var btn in config.Buttons)
{
if (!string.IsNullOrEmpty(btn.Permission))
permission.RegisterPermission(btn.Permission, this);
}
foreach (var player in BasePlayer.activePlayerList)
DrawButtonsArea(player);
}
private void Unload()
{
foreach (var player in BasePlayer.activePlayerList)
CuiHelper.DestroyUi(player, Root);
}
private void OnPlayerConnected(BasePlayer player)
{
if (player.IsReceivingSnapshot)
{
NextTick(() => OnPlayerConnected(player));
return;
}
DrawButtonsArea(player);
}
private void OnPlayerDeath(BasePlayer player, HitInfo info)
{
if (player == null) return;
CuiHelper.DestroyUi(player, Root);
}
private void OnPlayerRespawned(BasePlayer player)
{
if (player == null) return;
DrawButtonsArea(player);
}
#endregion
#region BUTTONS
private void DrawButtonsArea(BasePlayer player)
{
CuiHelper.DestroyUi(player, Root);
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
CursorEnabled = false,
RectTransform =
{
AnchorMin = "0.5 0.0",
AnchorMax = "0.5 0.0",
OffsetMin = "-199.5 1",
OffsetMax = "180.5 16.5"
},
Image =
{
Color = "0 0 0 0"
}
}, "Overlay", Root);
DrawButtons(container, player);
CuiHelper.AddUi(player, container);
}
private void DrawButtons(CuiElementContainer container, BasePlayer player)
{
var availableButtons = new List<ButtonData>();
foreach (var btn in config.Buttons)
{
if (string.IsNullOrEmpty(btn.Permission) ||
permission.UserHasPermission(player.UserIDString, btn.Permission))
{
availableButtons.Add(btn);
}
}
int count = availableButtons.Count;
if (count == 0) return;
float areaWidth = 380f;
float areaHeight = 15.5f;
float totalSpacing = Spacing * (count - 1);
float buttonWidth = (areaWidth - totalSpacing) / count;
float currentX = 0f;
foreach (var btn in availableButtons)
{
container.Add(new CuiButton
{
Button =
{
Command = btn.Command,
Color = ButtonColor
},
RectTransform =
{
AnchorMin = "0 0",
AnchorMax = "0 0",
OffsetMin = $"{currentX} 0",
OffsetMax = $"{currentX + buttonWidth} {areaHeight}"
},
Text =
{
Text = btn.Text,
FontSize = FontSize,
Align = TextAnchor.MiddleCenter,
Color = TextColor
}
}, Root);
currentX += buttonWidth + Spacing;
}
}
#endregion
}
}