C#:
using HarmonyLib;
using Oxide.Plugins;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("FunHighTierOnlyNoDecay", "Dopler", "2.0.0")] // Новая версия
public class FunHighTierOnlyNoDecay : RustPlugin
{
private Harmony _h;
private const BuildingGrade.Enum TargetGrade = BuildingGrade.Enum.TopTier; // МВК
private const float ProtectedMinutesValue = 43200f; // 30 дней (43200 минут)
void Init()
{
_h = new Harmony(Name);
_h.PatchAll();
}
void Unload()
{
_h?.UnpatchAll(Name);
}
// 1. ЛОГИКА: МВК блоки гниют, если нет шкафа. Не гниют, если шкаф есть.
object OnDecayDamage(DecayEntity entity)
{
var block = entity as BuildingBlock;
if (block == null || block.IsDestroyed) return null;
// Только для блоков МВК
if (block.grade == TargetGrade)
{
// Проверяем, есть ли рядом шкаф (BuildingPrivlidge)
var cupboard = block.GetBuildingPrivilege();
if (cupboard != null)
{
// Если шкаф есть — урон для МВК не проходит
return true;
}
}
// Если это не МВК, или это МВК, но шкафа нет — урон проходит (стандартное гниение)
return null;
}
// 2. ВИЗУАЛ: Заставляем UI показывать 30 дней ДЛЯ ВСЕХ ресурсов, если есть МВК-постройки
[HarmonyPatch(typeof(BuildingPrivlidge), "Save")]
static class SavePatch
{
static void Postfix(BuildingPrivlidge __instance, BaseNetworkable.SaveInfo info)
{
if (info.forDisk || info.msg?.buildingPrivilege == null) return;
var building = __instance.GetBuilding();
if (building == null || building.buildingBlocks == null) return;
bool hasHqmBlocks = false;
// Быстро проверяем, есть ли хоть один блок из МВК в этом здании
foreach (var block in building.buildingBlocks)
{
if (block != null && block.grade == TargetGrade)
{
hasHqmBlocks = true;
break; // Достаточно найти один
}
}
// Если есть МВК-блоки, принудительно устанавливаем protectedMinutes в 30 дней.
// ВНИМАНИЕ: Это затронет отображение ВСЕХ ресурсов в шкафу!
if (hasHqmBlocks)
{
float scale = ConVar.Decay.scale > 0.01f ? ConVar.Decay.scale : 1f;
info.msg.buildingPrivilege.protectedMinutes = ProtectedMinutesValue / scale;
}
}
}
}
}