C#:
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using Oxide.Core.Plugins;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("UI Menu", "WOLF#4002", "0.0.1")]
public class WMenu : RustPlugin
{
private void OnServerInitialized()
{
ImageLibrary.Call("AddImage", "https://rustplugins.top/api/image/menu/active.png", "ac");
ImageLibrary.Call("AddImage", "https://rustplugins.top/api/image/menu/not.png", "noac");
ImageLibrary.Call("AddImage", "https://i.imgur.com/9HpLMxA.png", "ra");
ImageLibrary.Call("AddImage", "https://i.imgur.com/m86td7U.png", "po");
ImageLibrary.Call("AddImage", "https://i.imgur.com/dXNw6Kq.png", "clo");
ImageLibrary.Call("AddImage", "https://rustplugins.top/api/image/menu/Menu.png", "fon");
BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected);
}
private void OnPlayerConnected(BasePlayer player)
{
//UI(player);
//Notifi(player, GetLang("Welcom",player.UserIDString), GetLang("Online",player.UserIDString, player.displayName, player.userID, BasePlayer.activePlayerList.Count, BasePlayer.sleepingPlayerList.Count.ToString()));
}
private void OnPlayerDisconnected(BasePlayer player)
{
CuiHelper.DestroyUi(player, Men);
CuiHelper.DestroyUi(player, Poi);
CuiHelper.DestroyUi(player, Internal);
}
private void Unload()
{
foreach (var player in BasePlayer.activePlayerList)
{
CuiHelper.DestroyUi(player, Men);
CuiHelper.DestroyUi(player, Poi);
CuiHelper.DestroyUi(player, Internal);
}
}
[PluginReference] Plugin ImageLibrary, WRate, WEco, WStats;
private static string Men = "UI_Menu";
private static string Poi = "UI_Point";
private static string Internal = "WOLF";
void UI(BasePlayer player)
{
CuiElementContainer container = new CuiElementContainer();
CuiHelper.DestroyUi(player, Men);
CuiHelper.DestroyUi(player, Internal);
container.Add(new CuiPanel
{
CursorEnabled = true,
RectTransform = { AnchorMin = "0.1 0.1", AnchorMax = "0.9 0.9", OffsetMax = "0 0" },
Image = { Color = "0.25 0.50 0.50 0" },
}, "Overlay", Men);
container.Add(new CuiElement
{
Parent = Men,
Components =
{
new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "fon")},
new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "1 1" },
}
});
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.008 0.012", AnchorMax = "0.15 0.75", OffsetMax = "0 0" },
Image = { Color = "1.00 0.50 0.25 0"},
}, Men, Poi);
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.16 0.012", AnchorMax = "0.995 0.9", OffsetMax = "0 0" },
Image = { Color = "1.00 0.50 0.25 0", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat" },
}, Men, Internal);
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.16 0.91", AnchorMax = "1 0.99", OffsetMax = "0 0" },
Image = { Color = "1.00 0.50 0.25 0" },
}, Men, Men + "w");
int playersG = WEco.Call<int>("FINDGold", player);
int playersS = WEco.Call<int>("FINDSilver", player);
float playersR = WRate.Call<float>("FINDRate", player);
int playersP = WStats.Call<int>("FINDPoint", player);
container.Add(new CuiElement
{
Parent = Men + "w",
Components =
{
new CuiTextComponent {Text = $"X{playersR}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
new CuiRectTransformComponent { AnchorMin = "0.06 0.1", AnchorMax = "0.145 0.9" },
new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
}
});
container.Add(new CuiElement
{
Parent = Men + "w",
Components =
{
new CuiTextComponent {Text = $"{playersP}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
new CuiRectTransformComponent { AnchorMin = "0.21 0.1", AnchorMax = "0.295 0.9" },
new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
}
});
container.Add(new CuiElement
{
Parent = Men + "w",
Components =
{
new CuiTextComponent {Text = $"{playersG}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
new CuiRectTransformComponent { AnchorMin = "0.36 0.1", AnchorMax = "0.43 0.9" },
new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
}
});
container.Add(new CuiElement
{
Parent = Men + "w",
Components =
{
new CuiTextComponent {Text = $"{playersS}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
new CuiRectTransformComponent { AnchorMin = "0.51 0.1", AnchorMax = "0.587 0.9" },
new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
}
});
container.Add(new CuiButton
{
RectTransform = { AnchorMin = "0.93 0.01", AnchorMax = "0.99 0.99" },
Button = { Command = "menu close", Color = "1.00 0.00 0.00 0" },
Text = { Text = "", FontSize = 50, Align = TextAnchor.MiddleCenter }
}, Men + "w");
CuiHelper.AddUi(player, container);
DrawPoints(player);
}
private void DrawPoints(BasePlayer player, MenuPoint choosed = null)
{
CuiElementContainer container = new CuiElementContainer();
float marginTop = -2;
float originalHeight = 30;
float freeHeight = 20;
float padding = 0;
foreach (var point in Settings.Points)
{
CuiHelper.DestroyUi(player, Poi + Settings.Points.IndexOf(point));
string color = point == choosed ? "1.00 0.53 0.53 0.5" : "0.86 0.77 0.67 0.5";
string color1 = point == choosed ? "0.84 0.17 0.37 0" : "1 1 1 0";
string img = point == choosed ? (string) ImageLibrary.Call("GetImage", "ac") : (string) ImageLibrary.Call("GetImage", "noac");
float elementHeight = point.DisplayName.Length > 0 ? originalHeight : freeHeight;
container.Add(new CuiElement
{
Parent = Poi,
Name = Poi + Settings.Points.IndexOf(point),
Components =
{
new CuiRawImageComponent { Png = img},
new CuiRectTransformComponent{ AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = $"10 {marginTop - elementHeight}", OffsetMax = $"135 {marginTop}" },
}
});
container.Add(new CuiElement
{
Parent = Poi + Settings.Points.IndexOf(point),
Components =
{
new CuiTextComponent {Color = color,Text = point.DisplayName, Align = TextAnchor.MiddleLeft, FontSize = 12},
new CuiRectTransformComponent { AnchorMin = "0.3 0", AnchorMax = "1 1" },
new CuiOutlineComponent { Color = "0 0 0 1", Distance = "1 1" }
}
});
container.Add(new CuiButton
{
RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1" },
Button = { Command = $"menu choose {Settings.Points.IndexOf(point)}", Color = color1 },
Text = { Text = "", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 20, Color = color }
},Poi + Settings.Points.IndexOf(point));
marginTop -= elementHeight + padding;
}
CuiHelper.AddUi(player, container);
}
[ChatCommand("menu")]
private void CmdChatStore(BasePlayer player, string command, string[] args)
{
UI(player);
}
[ConsoleCommand("menu")]
private void CmdConsoleRustMenu(ConsoleSystem.Arg args)
{
var player = args.Player();
if (player == null || !args.HasArgs(1)) return;
switch (args.Args[0].ToLower())
{
case "close":
{
CuiHelper.DestroyUi(player, Men);
CuiHelper.DestroyUi(player, Poi);
CuiHelper.DestroyUi(player, Internal);
break;
}
case "choose":
{
int chooseIndex = -1;
if (!int.TryParse(args.Args[1], out chooseIndex)) return;
var chooseElement = Settings.Points.ElementAtOrDefault(chooseIndex);
if (chooseElement == null) return;
CuiHelper.DestroyUi(player, Internal);
CuiElementContainer container = new CuiElementContainer();
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.16 0.012", AnchorMax = "0.995 0.9", OffsetMax = "0 0" },
Image = { Color = "1.00 0.50 0.25 0", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat" },
}, Men, Internal);
CuiHelper.AddUi(player, container);
player.SendConsoleCommand(chooseElement.DrawMethod);
DrawPoints(player, chooseElement);
Effect effect = new Effect("assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", player, 0, new Vector3(), new Vector3());
EffectNetwork.Send(effect, player.Connection);
break;
}
}
}
private class MenuPoint
{
[JsonProperty("Name Button")]
public string DisplayName;
[JsonProperty("Button")]
public string DrawMethod;
}
private class MenuEco
{
[JsonProperty("Name Pugins")]
public string Plugins;
[JsonProperty("Hook and API")]
public string Hook;
}
private class Configuration
{
[JsonProperty("Button")]
public List<MenuPoint> Points = new List<MenuPoint>();
[JsonProperty("Economics")]
public MenuEco Eco = new MenuEco();
public static Configuration Generate()
{
return new Configuration
{
Points = new List<MenuPoint>
{
new MenuPoint
{
DisplayName = "KIT",
DrawMethod = "chat.say /kit",
},
new MenuPoint
{
DisplayName = "KITtjtjmktkfyS",
DrawMethod = "chat.say /kits",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "",
DrawMethod = "",
},
new MenuPoint
{
DisplayName = "CLOSE",
DrawMethod = "menu close",
},
},
Eco = new MenuEco
{
Plugins = "Economics",
Hook = "Balance",
},
};
}
}
private static Configuration Settings;
protected override void LoadConfig()
{
base.LoadConfig();
try
{
Settings = Config.ReadObject<Configuration>();
}
catch
{
PrintWarning($"Error reading config, creating one new config!");
LoadDefaultConfig();
}
SaveConfig();
}
protected override void LoadDefaultConfig() => Settings = Configuration.Generate();
protected override void SaveConfig() => Config.WriteObject(Settings);
}
}