C#:
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("DeployRestrict", "дестерн", "0.0.6")]
public class DeployRestrict : RustPlugin
{
public Dictionary<ulong, PlayerData> dictData = new Dictionary<ulong, PlayerData>();
public class PlayerData
{
public List<BaseEntity> campfires = new List<BaseEntity>();
public List<BaseEntity> furnaces = new List<BaseEntity>();
public List<BaseEntity> largeFurnaces = new List<BaseEntity>();
}
public Configuration cfg;
public class Configuration
{
[JsonProperty("Максимум костров")]
public int maxCampfires;
[JsonProperty("Максимум печей")]
public int maxFurnaces;
[JsonProperty("Максимум больших печей")]
public int maxLargeFurnaces;
[JsonProperty("Логировать в консоль случаи превышения лимита")]
public bool needLog;
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
cfg = Config.ReadObject<Configuration>();
if (cfg == null)
LoadDefaultConfig();
}
catch
{
PrintWarning("С конфигом что-то не то.Создан новый.");
LoadDefaultConfig();
}
NextTick(SaveConfig);
}
protected override void SaveConfig()
{
Config.WriteObject(cfg);
}
protected override void LoadDefaultConfig()
{
cfg = new Configuration
{
maxCampfires = 1,
maxFurnaces = 5,
maxLargeFurnaces = 2,
needLog = true
};
}
private void OnServerInitialized()
{
foreach (BasePlayer player in BasePlayer.activePlayerList)
OnPlayerInit(player);
}
private void OnEntitySpawned(BaseNetworkable ent)
{
BaseEntity entity = ent as BaseEntity;
ulong playerID = entity.OwnerID;
if (playerID == 0)
return;
if (!dictData.ContainsKey(playerID))
{
PrintWarning("Игрока почему-то нет в словаре.");
return;
}
PlayerData data = dictData[playerID];
if (entity.ShortPrefabName == "campfire")
{
if (data.campfires.Count >= cfg.maxCampfires)
{
if (cfg.needLog)
PrintWarning($"{playerID} превысил лимит по кострам.");
if (data.campfires[0].IsValid())
data.campfires[0].Kill();
data.campfires.Remove(data.campfires[0]);
data.campfires.Add(entity);
return;
}
else
{
data.campfires.Add(entity);
return;
}
}
else if (entity.ShortPrefabName == "furnace")
{
if (data.furnaces.Count >= cfg.maxFurnaces)
{
if (cfg.needLog)
PrintWarning($"{playerID} превысил лимит по печкам.");
if (data.furnaces[0].IsValid())
data.furnaces[0].Kill();
data.furnaces.Remove(data.furnaces[0]);
data.furnaces.Add(entity);
return;
}
else
{
data.furnaces.Add(entity);
return;
}
}
else if (entity.ShortPrefabName == "furnace.large")
{
if (data.largeFurnaces.Count >= cfg.maxLargeFurnaces)
{
if (cfg.needLog)
PrintWarning($"{playerID} превысил лимит по большим печкам.");
if (data.largeFurnaces[0].IsValid())
data.largeFurnaces[0].Kill();
data.largeFurnaces.Remove(data.largeFurnaces[0]);
data.largeFurnaces.Add(entity);
return;
}
else
{
data.largeFurnaces.Add(entity);
return;
}
}
}
private void OnPlayerInit(BasePlayer player)
{
if (!dictData.ContainsKey(player.userID))
{
dictData.Add(player.userID, new PlayerData());
}
}
}
}