using LabApi.Events.Handlers; using LabApi.Features.Wrappers; using PlayerRoles.FirstPersonControl; using PlayerRoles.PlayableScps.Scp939; using Logger = LabApi.Features.Console.Logger; using Random = System.Random; namespace CustomClasses; public class DisableStaminaRegenEffect : CustomPlayerEffect, IStaminaModifier { public bool StaminaModifierActive => IsEnabled; public float StaminaUsageMultiplier => 1; public float StaminaRegenMultiplier => 0; public bool SprintingDisabled => false; public override EffectClassification Classification => EffectClassification.Negative; } public class BloodFueledStaminaEffect : CustomPlayerEffect, IStaminaModifier { public bool StaminaModifierActive => IsEnabled; public float StaminaUsageMultiplier => 0.1f; public float StaminaRegenMultiplier => 1; public bool SprintingDisabled => false; public override EffectClassification Classification => EffectClassification.Negative; } public class BloodFueledManager { private readonly CustomClasses _plugin; public static bool IsBloodFueled(Player player) => player.CustomInfo.Contains("Blood Fueled"); public BloodFueledManager(CustomClasses plugin) { _plugin = plugin; PlayerEvents.Hurt += ev => { if (ev.DamageHandler is not Scp939DamageHandler damageHandler) return; var attacker = Player.Get(damageHandler.Attacker.Hub); if (attacker == null) return; if (!IsBloodFueled(attacker)) return; if (ev.Player.Health <= 0) { attacker.StaminaRemaining += 0.2f; return; } attacker.StaminaRemaining += 0.1f; }; } } public class BloodFueledHandler : CustomClassHandler { public override void HandleSpawn(Player player, CustomClassConfig config, Random random) { player.SendBroadcast("You are the Blood Fueled!", CustomClasses.BroadcastDuration); const string customInfo = "Blood Fueled"; if (!Player.ValidateCustomInfo(customInfo, out var reason)) { Logger.Error($"Invalid custom info for Blood Fueled: {reason}"); } else { player.CustomInfo = customInfo; player.InfoArea |= PlayerInfoArea.CustomInfo; } player.MaxHumeShield = 0; player.HumeShield = 0; player.MaxHealth = 3500; player.Health = 3500; player.EnableEffect(1, float.PositiveInfinity); } }