C#:
using System;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("MetabolicRespawn", "itswut", "1.0.0")]
[Description("Manages player health, hunger, thirst, and temperature values on respawn based on permissions")]
class MetabolicRespawn : RustPlugin
{
#region Configuration
private const string PermissionPrefix = "metabolicrespawn";
#endregion
#region Permissions
private readonly string[] permissionNames = { "health", "hunger", "thirst", "temperature", "all" };
private void RegisterPermissions()
{
foreach (var perm in permissionNames)
{
permission.RegisterPermission($"{PermissionPrefix}.{perm}", this);
}
}
#endregion
#region Hooks
private void Init()
{
RegisterPermissions();
Puts("MetabolicRespawn initialized");
}
private void OnPlayerRespawned(BasePlayer player)
{
if (!IsPlayerValid(player)) return;
string userId = player.UserIDString;
if (HasPermission(userId, "all"))
{
ApplyAllMetabolics(player);
}
else
{
ApplyIndividualMetabolics(player, userId);
}
}
#endregion
#region Helper Methods
private bool IsPlayerValid(BasePlayer player)
{
return player != null && player.IsConnected;
}
private bool HasPermission(string userId, string permName)
{
return permission.UserHasPermission(userId, $"{PermissionPrefix}.{permName}");
}
private void ApplyAllMetabolics(BasePlayer player)
{
SetPlayerHealth(player);
SetPlayerHunger(player);
SetPlayerThirst(player);
SetPlayerTemperature(player);
}
private void ApplyIndividualMetabolics(BasePlayer player, string userId)
{
if (HasPermission(userId, "health"))
{
SetPlayerHealth(player);
}
if (HasPermission(userId, "hunger"))
{
SetPlayerHunger(player);
}
if (HasPermission(userId, "thirst"))
{
SetPlayerThirst(player);
}
if (HasPermission(userId, "temperature"))
{
SetPlayerTemperature(player);
}
}
private void SetPlayerHealth(BasePlayer player)
{
player.health = player.MaxHealth();
}
private void SetPlayerHunger(BasePlayer player)
{
player.metabolism.calories.value = player.metabolism.calories.max;
}
private void SetPlayerThirst(BasePlayer player)
{
player.metabolism.hydration.value = player.metabolism.hydration.max;
}
private void SetPlayerTemperature(BasePlayer player)
{
player.metabolism.temperature.value = 20;
player.metabolism.temperature.min = 20;
}
#endregion
}
}