C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Oxide.Core;
using System.Linq;
using Oxide.Core.Plugins;
using UnityEngine;
using Facepunch;
namespace Oxide.Plugins
{
[Info("Offline Ladder Block", "Chepzz", "1.0.1")]
[Description("Prevents ladders being placed if the entity owner is offline.")]
public class OfflineLadderBlock : RustPlugin
{
#region Fields
const string bypassPerm = "offlineladderblock.bypass";
#endregion
#region Configuration
Configuration config;
public class Configuration
{
[JsonProperty(PropertyName = "OfflineLadderBlock Options")]
public PluginOptions POptions = new PluginOptions();
}
public class PluginOptions
{
[JsonProperty(PropertyName = "Chat Icon (Steam64ID)")]
public ulong chatIcon = 0;
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
config = Config.ReadObject<Configuration>();
if (config == null) throw new Exception();
}
catch
{
PrintError("Your configuration file contains an error.Using default configuration values.");
LoadDefaultConfig();
}
}
protected override void LoadDefaultConfig() => config = new Configuration();
protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Localization
private new void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
["TargetOffline"] = "<color=#C0C0C0>The owner of the base you are trying to ladder in to is offline.</color>"
}, this);
}
#endregion
#region Core Methods
private void Loaded()
{
permission.RegisterPermission(bypassPerm, this);
}
object CanBuild(Planner planner, Construction prefab, Construction.Target target)
{
if (planner == null || prefab == null || target.entity == null) return null;
BasePlayer player = planner.GetOwnerPlayer();
var targetPlayer = BasePlayer.Find(target.entity.OwnerID.ToString());
if (targetPlayer == null || !targetPlayer.IsConnected)
{
PrintMsg(player, Lang("TargetOffline", player.UserIDString));
return true;
}
return null;
}
#endregion
#region Helpers
private void PrintMsg(BasePlayer player, string message) => Player.Message(player, message, config.POptions.chatIcon);
string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
#endregion
}
}