using CustomPlayerEffects; using HintServiceMeow.Core.Models.Hints; 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 { public readonly Dictionary ZombieCorpseCount = new(); public static GrowingZombies Instance { get; set; } 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; Instance = this; } public override void Disable() { Scp0492Events.ConsumedCorpse -= OnZombieEat; ServerEvents.RoundEnded -= OnRoundEnd; PlayerEvents.Left -= OnPlayerLeave; ZombieCorpseCount.Clear(); Instance = null; } 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 = Math.Min(1000, ev.Player.MaxHealth + 50); ev.Player.MaxHumeShield += 10; var movementBoostIntensity = (byte)Math.Min(1 + corpsesEaten * 0.5f, 5f); ev.Player.ReferenceHub.playerEffectsController.ChangeState(movementBoostIntensity, 120); // Add damage resistance after eating multiple corpses if (corpsesEaten >= 3) ev.Player.ReferenceHub.playerEffectsController.ChangeState((byte)(corpsesEaten*2), float.MaxValue); // 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); } }