К сожалению, из-за ошибки в предыдущем сообщении, код был неправильно сформирован и содержал неверные символы, которые могли вызвать ошибку компиляции. Пожалуйста, примите к сведению, что код для игры Rust и его плагины обычно пишутся на языке C#, а не Rust. Вот исправленный и упрощенный пример кода плагина для Oxide для Rust, который должен компилироваться без ошибок:
C#:
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("PerksMenu", "YourName", "0.1")]
public class PerksMenu : RustPlugin
{
[ChatCommand("perks")]
private void PerksCommand(BasePlayer player, string command, string[] args)
{
var elements = new CuiElementContainer();
var mainPanel = elements.Add(new CuiPanel
{
Image = { Color = "0.1 0.1 0.1 0.7" },
RectTransform = { AnchorMin = "0.3 0.3", AnchorMax = "0.7 0.7" },
CursorEnabled = true
}, "Overlay", "PerksPanel");
elements.Add(new CuiButton
{
Button = { Close = "PerksPanel", Color = "0.7 0.2 0.2 0.7" },
RectTransform = { AnchorMin = "0.9 0.9", AnchorMax = "0.99 0.99" },
Text = { Text = "X", FontSize = 22, Align = TextAnchor.MiddleCenter }
}, "PerksPanel");
CuiHelper.AddUi(player, elements);
}
}
}
Этот код создаёт базовую структуру плагина для меню привилегий в Rust, регистрирующего команду чата "perks", которая открывает игроку простое CUI-меню с кнопкой закрытия. Пожалуйста, обратите внимание, что этот код является лишь примером и не включает в себя логику покупки или присвоения привилегий.
Прошу прощения за предыдущую путаницу. Надеюсь, этот ответ окажется полезным для вашей работы с плагинами Oxide для Rust.
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("PerksMenu", "YourName", "0.2")]
public class PerksMenu : RustPlugin
{
private PluginConfig config;
private class Perk
{
public string Name { get; set; }
public string Description { get; set; }
public int Price { get; set; }
public string ImageURL { get; set; }
public string Command { get; set; } // Добавленная команда для добавления привилегии
}
private class PluginConfig
{
public List<Perk> Perks { get; set; }
public string BackgroundImage { get; set; }
public static PluginConfig DefaultConfig()
{
return new PluginConfig
{
Perks = new List<Perk>
{
new Perk
{
Name = "DoubleJump",
Description = "Allows you to double jump.",
Price = 100,
ImageURL = "",
Command = "grantperm $player.name doublejump.use" // Пример команды
}
},
BackgroundImage = "";
};
}
}
protected override void LoadDefaultConfig()
{
config = PluginConfig.DefaultConfig();
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
config = Config.ReadObject<PluginConfig>();
if (config?.Perks == null) LoadDefaultConfig();
}
catch
{
PrintWarning("Failed to load config, creating a new one.");
LoadDefaultConfig();
}
}
protected override void SaveConfig() => Config.WriteObject(config);
private void Init()
{
cmd.AddChatCommand("pmenu", this, "CmdPerksMenu");
LoadConfig();
cmd.AddConsoleCommand("closeperksmenu", this, nameof(CmdClosePerksMenu)); // Регистрация консольной команды для закрытия меню
}
void CmdPerksMenu(BasePlayer player, string command, string[] args)
{
ShowPerksMenu(player);
}
private void ShowPerksMenu(BasePlayer player)
{
CuiHelper.DestroyUi(player, "PerksMenu");
var elements = new CuiElementContainer();
var mainPanel = elements.Add(new CuiPanel
{
Image = { Color = "0.1 0.1 0.1 0.7" },
RectTransform = { AnchorMin = "0.3 0.3", AnchorMax = "0.7 0.7" },
CursorEnabled = true
}, "Overlay", "PerksMenu");
if (!string.IsNullOrEmpty(config.BackgroundImage))
{
elements.Add(new CuiElement
{
Parent = mainPanel,
Components =
{
new CuiRawImageComponent { Url = config.BackgroundImage },
new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
}
});
}
// Кнопка закрытия
elements.Add(new CuiButton
{
Button = { Command = "closeperksmenu", Color = "0.7 0.2 0.2 0.7" },
RectTransform = { AnchorMin = "0.9 0.9", AnchorMax = "0.99 0.99" },
Text = { Text = "X", FontSize = 22, Align = TextAnchor.MiddleCenter }
}, "PerksMenu");
// Добавление кнопок привилегий
var y = 0.8;
foreach (var perk in config.Perks)
{
elements.Add(new CuiButton
{
Button = { Command = $"buyperk {perk.Name}", Color = "0.5 0.5 0.5 0.7" },
RectTransform = { AnchorMin = $"0.1 {y}", AnchorMax = $"0.9 {y - 0.1}" },
Text = { Text = $"{perk.Name} - {perk.Description} - ${perk.Price}", FontSize = 14, Align = TextAnchor.MiddleLeft }
}, "PerksMenu");
y -= 0.1;
}
CuiHelper.AddUi(player, elements);
}
void CmdClosePerksMenu(ConsoleSystem.Arg args)
{
var player = args.Player();
if (player != null)
{
CuiHelper.DestroyUi(player, "PerksMenu");
}
}
[ConsoleCommand("buyperk")]
private void CmdBuyPerk(ConsoleSystem.Arg arg)
{
var player = arg.Player();
if (player == null) return;
var perkName = arg.GetString(0);
var perk = config.Perks.Find(p => p.Name == perkName);
if (perk == null) return;
var command = perk.Command.Replace("$player.name", player.UserIDString);
rust.RunServerCommand(command);
// Показать сообщение об успешной покупке или обновить UI, если требуется
}
}
}
в плагине ошибка исправь ее Error while compiling PerksMenu: } expected | Line: 43, Pos: 41