C#:
using System.Collections.Generic;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins;
[Info("FCupboardRemove", "fufeldev", "1.0.0")]
public class FCupboardRemove : RustPlugin
{
private const string Layer = "FCupboardRemove.Layer";
private readonly Dictionary<ulong, ulong> _openedCupboards = new Dictionary<ulong, ulong>();
private void Unload()
{
foreach (BasePlayer player in BasePlayer.activePlayerList)
CuiHelper.DestroyUi(player, Layer);
_openedCupboards.Clear();
}
private void OnEntityKill(BuildingPrivlidge buildingPrivlidge)
{
if (buildingPrivlidge?.net == null) return;
ClearEntity(buildingPrivlidge.net.ID.Value);
}
private void OnLootEntity(BasePlayer player, BuildingPrivlidge buildingPrivlidge)
{
if (player == null || buildingPrivlidge == null || buildingPrivlidge.net == null) return;
_openedCupboards[player.userID] = buildingPrivlidge.net.ID.Value;
CuiHelper.DestroyUi(player, Layer);
CuiElementContainer container = new CuiElementContainer();
container.Add(new CuiPanel
{
RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.5 0", OffsetMin = "-8 344", OffsetMax = "180 414" },
Image = { Color = "0.969 0.922 0.882 0.037", Material = "assets/icons/greyout.mat" }
}, "Overlay", Layer, Layer);
container.Add(new CuiLabel
{
RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0" },
Text = { Text = "Удалить шкаф\nНажмите для удаления", Font = "robotocondensed-bold.ttf", Color = "1 1 1 0.2", FontSize = 16, Align = TextAnchor.MiddleCenter }
}, Layer);
container.Add(new CuiButton
{
RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0" },
Button = { Color = "0 0 0 0", Command = $"UI_CUPBOARD_REMOVE remove {buildingPrivlidge.net.ID.Value}" },
Text = { Text = string.Empty }
}, Layer);
CuiHelper.AddUi(player, container);
}
private void OnLootEntityEnd(BasePlayer player, BuildingPrivlidge buildingPrivlidge)
{
ClearPlayer(player);
}
private void OnPlayerDisconnected(BasePlayer player)
{
ClearPlayer(player);
}
[ConsoleCommand("UI_CUPBOARD_REMOVE")]
private void CupboardRemoveUI(ConsoleSystem.Arg args)
{
BasePlayer player = args?.Player();
if (player == null || !args.HasArgs(2)) return;
if (args.Args[0].ToString() != "remove") return;
if (!ulong.TryParse(args.Args[1].ToString(), out ulong cupboardId)) return;
if (!_openedCupboards.TryGetValue(player.userID, out ulong openedId) || openedId != cupboardId) return;
BuildingPrivlidge buildingPrivlidge = BaseNetworkable.serverEntities.Find(new NetworkableId(cupboardId)) as BuildingPrivlidge;
if (buildingPrivlidge == null || buildingPrivlidge.IsDestroyed)
{
ClearPlayer(player);
return;
}
ClearPlayer(player);
player.EndLooting();
buildingPrivlidge.Kill(BaseNetworkable.DestroyMode.Gib);
}
private void ClearEntity(ulong cupboardId)
{
foreach (BasePlayer player in BasePlayer.activePlayerList)
if (_openedCupboards.TryGetValue(player.userID, out ulong openedId) && openedId == cupboardId)
ClearPlayer(player);
}
private void ClearPlayer(BasePlayer player)
{
if (player == null) return;
_openedCupboards.Remove(player.userID);
CuiHelper.DestroyUi(player, Layer);
}
}