C#:
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("MenuSystem", "Я и Я", "1.0.3")]
class MenuSystem : RustPlugin
{
#region Вар
private string Layer = "Menu_UI";
[PluginReference] Plugin ImageLibrary, GameStoresRUST, WipeCalendar, WipeBlock, ReportManager, SkillSystem, InfoMenu, TopChat, Battlepass, ShopSystemRevolution, Batia, RustKits, Cases, Clans, Craft;
Dictionary<ulong, string> ActiveButton = new Dictionary<ulong, string>();
Dictionary<ulong, string> ActiveButton2 = new Dictionary<ulong, string>();
Dictionary<ulong, string> ActiveButton3 = new Dictionary<ulong, string>();
//Управляет высотой пункта меню
readonly float HEIGHT_MENU_ELEMENT = 0.118f;
Dictionary<string, string> Command = new Dictionary<string, string>()
{
["МАГАЗИН"] = "shop",
["КВЕСТЫ"] = "pass",
["КОРЗИНА"] = "store",
["КАЛЕНДАРЬ"] = "cal",
["ВАЙПБЛОК"] = "block",
["РЕПОРТ"] = "report",
["УМЕНИЯ"] = "skill",
["ВИКИПЕДИЯ"] = "info",
["КЕЙСЫ"] = "case",
["КЛАНЫ"] = "clan",
["-"] = "-",
["НАСТРОЙКИ"] = "settings",
["СНАРЯЖЕНИЕ"] = "equipment",
["БАТЯ"] = "batia"
};
Dictionary<string, string> Equi = new Dictionary<string, string>()
{
["КРАФТ"] = "craft",
["РАЗРАБОТКА"] = "kit1"
};
Dictionary<string, string> Set = new Dictionary<string, string>()
{
["ЧАТ"] = "chat",
["ТЕЛЕПОРТ"] = "tpset",
["СКИНЫ"] = "set1",
["ХИТМАРКЕР"] = "set2"
};
void EquipmentActions(BasePlayer player, string name){
switch(name){
case "kit1": RustKits.Call("RenderKits", player);break;
case "craft": Craft.Call("CraftUI", player); break;
}
}
void SettingsActions(BasePlayer player, string name){
switch(name){
case "chat":TopChat.Call("InitializeInterface", player);break;
case "tpset":if (plugins.Find("Detonator")) plugins.Find("Detonator").Call("InitializeInterface", player);break;
case "set1":InfoMenu?.Call("CreateTab", player, "settings", 0);break;
case "set2":InfoMenu?.Call("CreateTab", player, "settings", 1);break;
case "set3":InfoMenu?.Call("CreateTab", player, "settings", 2);break;
case "set5":InfoMenu?.Call("CreateTab", player, "settings", 4);break;
}
}
#endregion
#region Хуки
void OnServerInitialized()
{
ImageLibrary.Call("AddImage", "https://ic.wampi.ru/2021/04/21/MENY.png", "Background");
}
#endregion
#region Команды
[ChatCommand("menu")]
void ChatMenu(BasePlayer player) => MenuUI(player, "info");
[ChatCommand("store")]
void ChatStore(BasePlayer player) => MenuUI(player, "store");
[ChatCommand("info")]
void ChatInfo(BasePlayer player) => MenuUI(player, "info");
[ChatCommand("wipe")]
void ChatCal(BasePlayer player) => MenuUI(player, "cal");
[ChatCommand("block")]
void ChatBlock(BasePlayer player) => MenuUI(player, "block");
[ChatCommand("report")]
void ChatReport(BasePlayer player) => MenuUI(player, "report");
[ChatCommand("skill")]
void ChatSkill(BasePlayer player) => MenuUI(player, "skill");
[ChatCommand("settings")]
void ChatSet(BasePlayer player) => MenuUI(player, "settings");
[ChatCommand("pass")]
void ChaPass(BasePlayer player) => MenuUI(player, "pass");
[ChatCommand("shop")]
void ChatShop(BasePlayer player) => MenuUI(player, "shop");
[ChatCommand("batia")]
void ChatBatia(BasePlayer player) => MenuUI(player, "batia");
[ChatCommand("case")]
void ChatCase(BasePlayer player) => MenuUI(player, "case");
[ChatCommand("clans")]
void ChatClans(BasePlayer player) => MenuUI(player, "clan");
[ConsoleCommand("closemenusystem")]
void ConsoleCloseMenu(ConsoleSystem.Arg args)
{
var player = args.Player();
DestroyUI(player);
if (plugins.Find("Menu")) plugins.Find("Menu").Call("CloseMenu", player);
player.Command("UI_Batia close");
CuiHelper.DestroyUi(player, Layer);
}
[ConsoleCommand("menu")]
void ConsoleMenu(ConsoleSystem.Arg args)
{
var player = args.Player();
ActiveButton[player.userID] = args.Args[0];
UI(player, args.Args[0]);
ButtonUI(player);
}
[ConsoleCommand("batiaMenu")]
void ConsoleBatiaMenu(ConsoleSystem.Arg args)
{
var player = args.Player();
ActiveButton[player.userID] = "batia";
MenuUI(player, "batia");
ButtonUI(player);
}
[ConsoleCommand("settings")]
void ConsoleSettings(ConsoleSystem.Arg args)
{
var player = args.Player();
SettingsUI(player);
}
[ConsoleCommand("equi")]
void ConsoleEqui(ConsoleSystem.Arg args)
{
var player = args.Player();
if (args.Args==null || args.Args.Length<1) return;
ActiveButton3[player.userID] = args.Args[0];
EquiUI(player, args.Args[0]);
}
[ConsoleCommand("set")]
void ConsoleSet(ConsoleSystem.Arg args)
{
var player = args.Player();
if (args.Args==null || args.Args.Length<1) return;
ActiveButton3[player.userID] = args.Args[0];
SettingsUI(player, args.Args[0]);
}
#endregion
#region Интерфейс
void MenuUI(BasePlayer player, string name = "info")
{
ActiveButton[player.userID] = name;
CuiHelper.DestroyUi(player, Layer);
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
CursorEnabled = true,
RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
Image = { Color = "0 0 0 0.9" },
}, "Overlay", Layer);
container.Add(new CuiElement
{
Parent = Layer,
Components =
{
new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "Background") },
new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" }
}
});
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.05 0.8", AnchorMax = "0.24 0.88", OffsetMax = "0 0" },
Image = { Color = "0 0 0 0" }
}, Layer, "Logo");
container.Add(new CuiElement
{
Parent = "Logo",
Components =
{
new CuiImageComponent { Sprite = "assets/content/ui/menuui/rustlogo-normal-transparent.png" },
new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "0 0", OffsetMax = "0 0" }
}
});
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.068 0.17", AnchorMax = "0.2 0.73", OffsetMax = "0 0" },
Image = { Color = "0 0 0 0" }
}, Layer, "Button");
container.Add(new CuiButton
{
RectTransform = { AnchorMin = "0.964 0.91", AnchorMax = $"1 1", OffsetMax = "0 0" },
Button = { Color = "0 0 0 0", Command = "closemenusystem" },
Text = { Text = $"✖", Color = "0.929 0.882 0.847 1", Align = TextAnchor.MiddleCenter, FontSize = 40, Font = "robotocondensed-bold.ttf" }
}, Layer);
container.Add(new CuiButton
{
RectTransform = { AnchorMin = "0 0.03", AnchorMax = $"0.165 0.12", OffsetMax = "0 0" },
Button = { Color = "0 0 0 0", Close = Layer },
Text = { Text = $"ЗАКРЫТЬ", Color = "0.471 0.447 0.424 1", Align = TextAnchor.MiddleCenter, FontSize = 22, Font = "robotocondensed-bold.ttf" }
}, Layer);
CuiHelper.AddUi(player, container);
ButtonUI(player);
UI(player, name);
if (plugins.Find("Menu")) plugins.Find("Menu").Call("ShowMenu", player);
}
void UI(BasePlayer player, string name)
{
DestroyUI(player);
if (name == "info")
InfoMenu?.Call("CreateMenu", player, "main");
if (name == "wiki")
InfoMenu?.Call("CreateMenu", player, "wiki");
if (name == "store")
GameStoresRUST?.Call("InitializeStore", player);
if (name == "cal")
WipeCalendar.Call("CreateGui", player);
if (name == "block")
WipeBlock.Call("DrawBlockGUI", player);
if (name == "report")
ReportManager.Call("InitializeInterface", player);
if (name == "skill")
SkillSystem.Call("SkillUI", player);
if (name == "case")
Cases.Call("RenderCases", player);
if (name == "clan")
Clans.Call("NewClanUI", player);
if (name == "equipment")
EquiUI(player);
if (name == "settings")
SettingsUI(player);
if (name == "pass")
Battlepass.Call("MainUI", player, true);
if (name == "shop")
ShopSystemRevolution.Call("ShopMainUI", player);
if (name == "batia"){
Batia.Call("DrawNPCUI", player);
}else player.Command("UI_Batia close");
}
void ButtonUI(BasePlayer player)
{
CuiHelper.DestroyUi(player, "Command");
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0 0.26", AnchorMax = "1 1", OffsetMax = "0 0" },
Image = { Color = "0 0 0 0" }
}, "Button", "Command");
float width = 1f, height = HEIGHT_MENU_ELEMENT, startxBox = -0.16f, startyBox = 1.1f - height, xmin = startxBox, ymin = startyBox;
foreach (var check in Command)
{
if (check.Key!="-"){
var color = ActiveButton[player.userID] == check.Value ? "0.929 0.882 0.847 1" : "0.471 0.447 0.424 1";
container.Add(new CuiButton
{
RectTransform = { AnchorMin = $"{xmin} {ymin}", AnchorMax = $"{xmin + width} {ymin + height * 1}", OffsetMin = "0 1", OffsetMax = "0 -1" },
Button = { Color = "0 0 0 0", Command = $"menu {check.Value}" },
Text = { Text = check.Key, Color = color, Align = TextAnchor.MiddleLeft, FontSize = 22, Font = "robotocondensed-bold.ttf" }
}, "Command");
xmin += width;
if (xmin + width >= 1)
{
xmin = startxBox;
ymin -= height;
}
}else{
ymin -= (float)(height/3);
}
}
CuiHelper.AddUi(player, container);
}
void EquiUI(BasePlayer player, string name = "craft")
{
if (player==null) return;
ActiveButton3[player.userID] = name;
CuiHelper.DestroyUi(player, "Settingsmain");
CuiHelper.DestroyUi(player, "XMenu.Content");
CuiHelper.DestroyUi(player, "Crafts");
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.260 0", AnchorMax = "0.966 1", OffsetMax = "0 0" },
Image = { Color = "0.117 0.121 0.109 0" }
}, Layer, "Settingsmain");
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0 0", AnchorMax = "0.289 1", OffsetMax = "0 0" },
Image = { Color = "0.13 0.12 0.12 1", Material = "" }
}, "Settingsmain", "Left");
container.Add(new CuiLabel
{
RectTransform = { AnchorMin = "0.09 0.91", AnchorMax = $"1 1", OffsetMax = "0 0" },
Text = { Text = $"СНАРЯЖЕНИЕ", Color = "0.929 0.882 0.847 0.8", Align = TextAnchor.MiddleLeft, FontSize = 33, Font = "robotocondensed-bold.ttf" }
}, "Left");
float width = 1f, height = 0.06f, startxBox = 0f, startyBox = 0.6f - height, xmin = startxBox, ymin = startyBox;
foreach (var check in Equi)
{
var color = ActiveButton3[player.userID] == check.Value ? "0.149 0.145 0.137 0.8" : "0 0 0 0";
container.Add(new CuiButton
{
RectTransform = { AnchorMin = $"{xmin} {ymin}", AnchorMax = $"{xmin + width} {ymin + height * 1}", OffsetMin = "0 1", OffsetMax = "0 -1" },
Button = { Color = color, Command = $"equi {check.Value}" },
Text = { Text = $"{check.Key} ", Color = "1 1 1 0.8", Align = TextAnchor.MiddleRight, FontSize = 18, Font = "robotocondensed-bold.ttf" }
}, "Left");
xmin += width;
if (xmin + width >= 1)
{
xmin = startxBox;
ymin -= height;
}
}
CuiHelper.AddUi(player, container);
EquipmentActions(player,name);
}
void SettingsUI(BasePlayer player, string name = "chat")
{
if (player==null) return;
ActiveButton3[player.userID] = name;
CuiHelper.DestroyUi(player, "Settingsmain");
CuiHelper.DestroyUi(player, "UI_SettingsLayer.WINDOW_FRAME");
CuiHelper.DestroyUi(player, "InfoMenu_base");
CuiHelper.DestroyUi(player, "InfoMenu_main");
CuiHelper.DestroyUi(player, "InfoMenu_content");
var container = new CuiElementContainer();
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.260 0", AnchorMax = "0.966 1", OffsetMax = "0 0" },
Image = { Color = "0.117 0.121 0.109 0" }
}, Layer, "Settingsmain");
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0 0", AnchorMax = "0.289 1", OffsetMax = "0 0" },
Image = { Color = "0.13 0.12 0.12 1", Material = "" }
}, "Settingsmain", "Left");
container.Add(new CuiLabel
{
RectTransform = { AnchorMin = "0.09 0.91", AnchorMax = $"1 1", OffsetMax = "0 0" },
Text = { Text = $"НАСТРОЙКИ", Color = "0.929 0.882 0.847 0.8", Align = TextAnchor.MiddleLeft, FontSize = 33, Font = "robotocondensed-bold.ttf" }
}, "Left");
float width = 1f, height = 0.06f, startxBox = 0f, startyBox = 0.6f - height, xmin = startxBox, ymin = startyBox;
foreach (var check in Set)
{
var color = ActiveButton3[player.userID] == check.Value ? "0.149 0.145 0.137 0.8" : "0 0 0 0";
container.Add(new CuiButton
{
RectTransform = { AnchorMin = $"{xmin} {ymin}", AnchorMax = $"{xmin + width} {ymin + height * 1}", OffsetMin = "0 1", OffsetMax = "0 -1" },
Button = { Color = color, Command = $"set {check.Value}" },
Text = { Text = $"{check.Key} ", Color = "1 1 1 0.8", Align = TextAnchor.MiddleRight, FontSize = 18, Font = "robotocondensed-bold.ttf" }
}, "Left");
xmin += width;
if (xmin + width >= 1)
{
xmin = startxBox;
ymin -= height;
}
}
CuiHelper.AddUi(player, container);
SettingsActions(player,name);
}
void MapUI(BasePlayer player) {
player.Command("map.open");
player.Command("map_settings");
}
#endregion
#region Хелпер
void DestroyUI(BasePlayer player)
{
CuiHelper.DestroyUi(player, "Info");
CuiHelper.DestroyUi(player, "Calendar");
CuiHelper.DestroyUi(player, "Block");
CuiHelper.DestroyUi(player, "Skill_UI");
CuiHelper.DestroyUi(player, "settings");
CuiHelper.DestroyUi(player, "Settingsmain");
CuiHelper.DestroyUi(player, "UI_SettingsLayer.WINDOW_FRAME");
CuiHelper.DestroyUi(player, "Pass");
CuiHelper.DestroyUi(player, "UI_GameStoresRUST_Store");
CuiHelper.DestroyUi(player, "UI_ReportLayer");
CuiHelper.DestroyUi(player, "InfoMenu_base");
CuiHelper.DestroyUi(player, "InfoMenu_main");
CuiHelper.DestroyUi(player, "InfoMenu_content");
CuiHelper.DestroyUi(player, "UI.Battlepass");
CuiHelper.DestroyUi(player, "SHOP_MAIN");
CuiHelper.DestroyUi(player, "UI_Batia_External");
CuiHelper.DestroyUi(player, "XMenu.Content");
CuiHelper.DestroyUi(player, "Case");
CuiHelper.DestroyUi(player, "Clan.NewLayer");
CuiHelper.DestroyUi(player, "Main");
CuiHelper.DestroyUi(player, "Crafts");
}
#endregion
}
}