C#:
using System.Collections.Generic;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins;
[Info("FOvenRemove", "fufeldev", "1.0.0")]
public class FOvenRemove : RustPlugin
{
private const string Layer = "FOvenRemove.Layer";
private readonly Dictionary<ulong, ulong> _openedOvens = new Dictionary<ulong, ulong>();
private void Unload()
{
foreach (BasePlayer player in BasePlayer.activePlayerList)
CuiHelper.DestroyUi(player, Layer);
_openedOvens.Clear();
}
private void OnEntityKill(BaseOven oven)
{
if (oven?.net == null) return;
ClearEntity(oven.net.ID.Value);
}
private void OnLootEntity(BasePlayer player, BaseOven oven)
{
if (player == null || oven == null || oven.net == null) return;
if (!oven.ShortPrefabName.Contains("furnace")) return;
_openedOvens[player.userID] = oven.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_OVEN_REMOVE remove {oven.net.ID.Value}" },
Text = { Text = string.Empty }
}, Layer);
CuiHelper.AddUi(player, container);
}
private void OnLootEntityEnd(BasePlayer player, BaseOven oven)
{
ClearPlayer(player);
}
private void OnPlayerDisconnected(BasePlayer player)
{
ClearPlayer(player);
}
[ConsoleCommand("UI_OVEN_REMOVE")]
private void OvenRemoveUI(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 ovenId)) return;
if (!_openedOvens.TryGetValue(player.userID, out ulong openedId) || openedId != ovenId) return;
BaseOven oven = BaseNetworkable.serverEntities.Find(new NetworkableId(ovenId)) as BaseOven;
if (oven == null || oven.IsDestroyed || !oven.ShortPrefabName.Contains("furnace"))
{
ClearPlayer(player);
return;
}
ClearPlayer(player);
player.EndLooting();
oven.Kill(BaseNetworkable.DestroyMode.Gib);
}
private void ClearEntity(ulong ovenId)
{
foreach (BasePlayer player in BasePlayer.activePlayerList)
if (_openedOvens.TryGetValue(player.userID, out ulong openedId) && openedId == ovenId)
ClearPlayer(player);
}
private void ClearPlayer(BasePlayer player)
{
if (player == null) return;
_openedOvens.Remove(player.userID);
CuiHelper.DestroyUi(player, Layer);
}
}