Zombies can't hurt II. (#41007)

* Make zombie system not fard

* Actually who cares if our owner is not a zombie, let melee weapons be zombies that's funny as fuck

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
Princess Cheeseballs
2025-10-20 10:55:34 -07:00
committed by GitHub
parent b92f5dc533
commit 43e6c524a4

View File

@@ -236,43 +236,47 @@ namespace Content.Server.Zombies
return MathF.Max(chance, zombieComponent.MinZombieInfectionChance); return MathF.Max(chance, zombieComponent.MinZombieInfectionChance);
} }
private void OnMeleeHit(EntityUid uid, ZombieComponent component, MeleeHitEvent args) private void OnMeleeHit(Entity<ZombieComponent> entity, ref MeleeHitEvent args)
{ {
if (!TryComp<ZombieComponent>(args.User, out _)) if (!args.IsHit)
return; return;
if (!args.HitEntities.Any()) var cannotSpread = HasComp<NonSpreaderZombieComponent>(args.User);
return;
foreach (var entity in args.HitEntities) foreach (var uid in args.HitEntities)
{ {
if (args.User == entity) if (args.User == uid)
continue; continue;
if (!TryComp<MobStateComponent>(entity, out var mobState)) if (!TryComp<MobStateComponent>(uid, out var mobState))
continue; continue;
if (HasComp<ZombieComponent>(entity)) if (HasComp<ZombieComponent>(uid) || HasComp<IncurableZombieComponent>(uid))
{ {
args.BonusDamage = -args.BaseDamage; // Don't infect, don't deal damage, do not heal from bites, don't pass go!
args.Handled = true;
continue;
}
if (_mobState.IsAlive(uid, mobState))
{
_damageable.TryChangeDamage(args.User, entity.Comp.HealingOnBite, true, false);
// If we cannot infect the living target, the zed will just heal itself.
if (HasComp<ZombieImmuneComponent>(uid) || cannotSpread || _random.Prob(GetZombieInfectionChance(uid, entity.Comp)))
continue;
EnsureComp<PendingZombieComponent>(uid);
EnsureComp<ZombifyOnDeathComponent>(uid);
} }
else else
{ {
if (!HasComp<ZombieImmuneComponent>(entity) && !HasComp<NonSpreaderZombieComponent>(args.User) && _random.Prob(GetZombieInfectionChance(entity, component))) if (HasComp<ZombieImmuneComponent>(uid) || cannotSpread)
{ continue;
EnsureComp<PendingZombieComponent>(entity);
EnsureComp<ZombifyOnDeathComponent>(entity);
}
}
if (_mobState.IsIncapacitated(entity, mobState) && !HasComp<ZombieComponent>(entity) && !HasComp<ZombieImmuneComponent>(entity) && !HasComp<NonSpreaderZombieComponent>(args.User)) // If the target is dead and can be infected, infect.
{ ZombifyEntity(uid);
ZombifyEntity(entity); args.Handled = true;
args.BonusDamage = -args.BaseDamage;
}
else if (mobState.CurrentState == MobState.Alive) //heals when zombies bite live entities
{
_damageable.TryChangeDamage(uid, component.HealingOnBite, true, false);
} }
} }
} }