Для исправления ошибки CS0117, связанной с отсутствием определения дляИсправь код NoBuildZone.cs(91,53): error CS0117: `Oxide.Game.Rust.Cui.CuiHelper' does not contain a definition for `FindUi'
FindUi
в CuiHelper
, можно вместо этого использовать метод GetAllElements
для получения всех элементов GUI и проверки их имени. Вот исправленный код: C#:
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace NoBuildZonePlugin
{
[Info("NoBuildZonePlugin", "YourName", "1.0.0")]
class NoBuildZonePlugin : RustPlugin
{
private const string GuiElementPrefix = "noBuildZoneGui_";
private Dictionary<BasePlayer, string> playerGui = new Dictionary<BasePlayer, string>();
private void CreateGui(BasePlayer player)
{
string guiElement = $"{GuiElementPrefix}{player.UserIDString}";
string guiText = "Застройка здесь запрещена!";
string gui = $@"
[
{{
""name"": ""{guiElement}"",
""parent"": ""HUD/Overlay"",
""components"":
[
{{
""type"": ""UnityEngine.UI.Text"",
""text"": ""{guiText}"",
""fontSize"": 16,
""color"": ""#FF0000"",
""align"": ""MiddleCenter"",
""anchormin"": ""0.1 0.9"",
""anchormax"": ""0.9 1""
}}
]
}}
]
";
try
{
CuiHelper.AddUi(player, gui);
playerGui[player] = guiElement;
// Скрыть GUI
var elements = CuiHelper.GetAllUi(player);
foreach (var element in elements)
{
if (element.Name == guiElement)
{
CuiHelper.DestroyUi(player, guiElement);
break;
}
}
}
catch (Exception ex)
{
PrintError($"Error creating GUI for player {player.UserIDString}: {ex.Message}");
}
}
private void ShowGui(BasePlayer player)
{
if (playerGui.ContainsKey(player))
{
CuiHelper.AddUi(player, playerGui[player]);
}
}
private void HideGui(BasePlayer player)
{
if (playerGui.ContainsKey(player))
{
var elements = CuiHelper.GetAllUi(player);
foreach (var element in elements)
{
if (element.Name == playerGui[player])
{
CuiHelper.DestroyUi(player, playerGui[player]);
break;
}
}
}
}
private void OnPlayerInit(BasePlayer player)
{
CreateGui(player);
}
private void Unload()
{
foreach (var player in BasePlayer.activePlayerList)
{
if (playerGui.ContainsKey(player))
{
var elements = CuiHelper.GetAllUi(player);
foreach (var element in elements)
{
if (element.Name == playerGui[player])
{
CuiHelper.DestroyUi(player, playerGui[player]);
break;
}
}
playerGui.Remove(player);
}
}
}
// Пример команд для показа и скрытия GUI
[ChatCommand("showgui")]
private void ShowGuiCommand(BasePlayer player, string command, string[] args)
{
ShowGui(player);
}
[ChatCommand("hidegui")]
private void HideGuiCommand(BasePlayer player, string command, string[] args)
{
HideGui(player);
}
}
}
Этот код использует метод
GetAllUi
для получения всех элементов GUI и проверки их имени. Пожалуйста, попробуйте использовать этот исправленный код на вашем сервере Rust. Если у вас возникнут дополнительные вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.