C#:
using System.Collections.Generic;
using Oxide.Core;
namespace Oxide.Plugins
{
[Info("FunNoCold", "Dopler", "1.0.0")]
[Description("Убирает эффект холода у игрока при наличии соответствующего разрешения")]
public class FunNoCold : RustPlugin
{
#region Configuration
private Configuration config;
private HashSet<ulong> immunePlayers = new();
private sealed class Configuration
{
public float ImmunePlayerTemperature = 25.0f;
public VersionNumber Version = new(1, 0, 1);
}
protected override void LoadConfig()
{
base.LoadConfig();
try
{
config = Config.ReadObject<Configuration>();
if (config == null) throw new System.Exception("Config is null");
UpdateConfigValues();
}
catch
{
LoadDefaultConfig();
}
SaveConfig();
}
protected override void LoadDefaultConfig()
{
config = new Configuration();
Puts("Создана конфигурация по умолчанию.");
}
private void UpdateConfigValues()
{
if (config.Version < new VersionNumber(1, 0, 1))
{
config.Version = new VersionNumber(1, 0, 1);
}
}
#endregion
#region Hooks
private const string PermissionUse = "funnocold.use";
private void OnServerInitialized()
{
permission.RegisterPermission(PermissionUse, this);
foreach (var player in BasePlayer.activePlayerList)
{
if (permission.UserHasPermission(player.UserIDString, PermissionUse))
immunePlayers.Add(player.userID);
}
}
private void OnPlayerConnected(BasePlayer player)
{
if (permission.UserHasPermission(player.UserIDString, PermissionUse))
immunePlayers.Add(player.userID);
}
private void OnPlayerDisconnected(BasePlayer player, string reason)
{
immunePlayers.Remove(player.userID);
}
private void OnUserPermissionGranted(string id, string permName)
{
if (permName == PermissionUse && ulong.TryParse(id, out var userId))
immunePlayers.Add(userId);
}
private void OnUserPermissionRevoked(string id, string permName)
{
if (permName == PermissionUse && ulong.TryParse(id, out var userId))
immunePlayers.Remove(userId);
}
private object OnRunPlayerMetabolism(PlayerMetabolism metabolism, BaseCombatEntity entity, float delta)
{
if (metabolism == null) return null;
if (entity is not BasePlayer player || !player.IsConnected || player.IsNpc)
return null;
if (immunePlayers.Contains(player.userID))
{
metabolism.temperature.value = config.ImmunePlayerTemperature;
}
return null;
}
#endregion
}
}