using CustomPlayerEffects; using InventorySystem.Items.Usables.Scp330; using LabApi.Events.Arguments.PlayerEvents; using LabApi.Events.Arguments.Scp0492Events; using LabApi.Events.Arguments.ServerEvents; using LabApi.Events.Handlers; using LabApi.Features; using LabApi.Features.Wrappers; using LabApi.Loader.Features.Plugins; namespace GrowingZombies; public class GrowingZombies : Plugin { private readonly Dictionary _zombieCorpseCount = new(); public override string Name => "GrowingZombies"; public override string Author => "Code002Lover"; public override Version Version { get; } = new(1, 0, 0); public override string Description => "Makes zombies grow stronger as they eat more"; public override Version RequiredApiVersion { get; } = new(LabApiProperties.CompiledVersion); public override void Enable() { Scp0492Events.ConsumedCorpse += OnZombieEat; ServerEvents.RoundEnded += OnRoundEnd; PlayerEvents.Left += OnPlayerLeave; } public override void Disable() { Scp0492Events.ConsumedCorpse -= OnZombieEat; ServerEvents.RoundEnded -= OnRoundEnd; PlayerEvents.Left -= OnPlayerLeave; _zombieCorpseCount.Clear(); } private void OnRoundEnd(RoundEndedEventArgs ev) { _zombieCorpseCount.Clear(); } private void OnPlayerLeave(PlayerLeftEventArgs ev) { _zombieCorpseCount.Remove(ev.Player); } private void OnZombieEat(Scp0492ConsumedCorpseEventArgs ev) { if (!ev?.Player.ReferenceHub.playerEffectsController) return; // Increment corpse count for this zombie if (!_zombieCorpseCount.ContainsKey(ev.Player)) _zombieCorpseCount[ev.Player] = 0; _zombieCorpseCount[ev.Player]++; var corpsesEaten = _zombieCorpseCount[ev.Player]; ev.Player.MaxHealth += 50; var movementBoostIntensity = (byte)Math.Min(1 + corpsesEaten * 0.1f, 3f); ev.Player.ReferenceHub.playerEffectsController.ChangeState(movementBoostIntensity, 30); // Add damage resistance after eating multiple corpses var damageResistance = (byte)Math.Min(0.5 - corpsesEaten * 0.5f, 2f); if (corpsesEaten >= 3) ev.Player.ReferenceHub.playerEffectsController.ChangeState(damageResistance, 20); // Add regeneration effect after eating multiple corpses if (corpsesEaten < 5) return; var regenIntensity = Math.Min(1 + corpsesEaten * 0.2f, 3f); Scp330Bag.AddSimpleRegeneration(ev.Player.ReferenceHub, regenIntensity, 15f); } }