C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Terrain Blocker", "Slut", "2.0.0")]
class TerrainBlocker : RustPlugin
{
Configuration config;
public class Configuration
{
[JsonProperty("Blocked Colliders")]
public string[] BlockedColliders { get; set; }
[JsonProperty("Blacklist/Whitelist")]
public Blacklist blacklist;
public class Blacklist
{
[JsonProperty("Prefabs (Leave empty to ignore)")]
public string[] Prefabs { get; set; }
[JsonProperty("Blacklist = True | Whitelist = False")]
public bool _Blacklist { get; set; }
}
public static Configuration LoadDefaults()
{
return new Configuration
{
BlockedColliders = new string[]
{
"iceberg",
"ice_berg",
"ice_sheet",
"icesheet",
},
blacklist = new Blacklist
{
Prefabs = new string[]
{
"prefab.fullname"
},
_Blacklist = true
}
};
}
}
protected override void LoadDefaultConfig()
{
PrintWarning("Generating new configuration!");
config = Configuration.LoadDefaults();
}
protected override void LoadConfig()
{
base.LoadConfig();
config = Config.ReadObject<Configuration>();
}
protected override void SaveConfig() => Config.WriteObject(config);
private void Loaded()
{
permission.RegisterPermission(adminPermission, this);
}
const string adminPermission = "icebergblocker.admin";
private object CanBuild(Planner plan, Construction prefab)
{
var player = plan.GetOwnerPlayer();
Vector3 pos = plan.transform.position;
if (player != null && !permission.UserHasPermission(player.UserIDString, adminPermission))
{
List<Collider> list = new List<Collider>();
Vis.Colliders(pos, 5f, list);
if (list.Any(x => config.BlockedColliders.Any(x.name.StartsWith)))
{
if (config.blacklist.Prefabs.Length > 0)
{
bool contains = config.blacklist.Prefabs.Contains(prefab.fullName);
if ((config.blacklist._Blacklist && !contains) || (!config.blacklist._Blacklist && contains))
{
return null;
}
}
return false;
}
}
return null;
}
}
}