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:
committed by
GitHub
parent
b92f5dc533
commit
43e6c524a4
@@ -236,43 +236,47 @@ namespace Content.Server.Zombies
|
||||
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;
|
||||
|
||||
if (!args.HitEntities.Any())
|
||||
return;
|
||||
var cannotSpread = HasComp<NonSpreaderZombieComponent>(args.User);
|
||||
|
||||
foreach (var entity in args.HitEntities)
|
||||
foreach (var uid in args.HitEntities)
|
||||
{
|
||||
if (args.User == entity)
|
||||
if (args.User == uid)
|
||||
continue;
|
||||
|
||||
if (!TryComp<MobStateComponent>(entity, out var mobState))
|
||||
if (!TryComp<MobStateComponent>(uid, out var mobState))
|
||||
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
|
||||
{
|
||||
if (!HasComp<ZombieImmuneComponent>(entity) && !HasComp<NonSpreaderZombieComponent>(args.User) && _random.Prob(GetZombieInfectionChance(entity, component)))
|
||||
{
|
||||
EnsureComp<PendingZombieComponent>(entity);
|
||||
EnsureComp<ZombifyOnDeathComponent>(entity);
|
||||
}
|
||||
}
|
||||
if (HasComp<ZombieImmuneComponent>(uid) || cannotSpread)
|
||||
continue;
|
||||
|
||||
if (_mobState.IsIncapacitated(entity, mobState) && !HasComp<ZombieComponent>(entity) && !HasComp<ZombieImmuneComponent>(entity) && !HasComp<NonSpreaderZombieComponent>(args.User))
|
||||
{
|
||||
ZombifyEntity(entity);
|
||||
args.BonusDamage = -args.BaseDamage;
|
||||
}
|
||||
else if (mobState.CurrentState == MobState.Alive) //heals when zombies bite live entities
|
||||
{
|
||||
_damageable.TryChangeDamage(uid, component.HealingOnBite, true, false);
|
||||
// If the target is dead and can be infected, infect.
|
||||
ZombifyEntity(uid);
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user