private void BeforeDamageOnTrigger(EntityUid uid, MousetrapComponent component, BeforeDamageOnTriggerEvent args) { foreach (var slot in component.IgnoreDamageIfSlotFilled) { if (!_inventorySystem.TryGetSlotContainer(args.Tripper, slot, out var container, out _)) { continue; } // This also means that wearing slippers won't // hurt the entity. if (container.ContainedEntity != null) { args.Damage *= 0; return; } } if (TryComp(args.Tripper, out PhysicsComponent? physics) && physics.Mass != 0) { // The idea here is inverse, // Small - big damage, // Large - small damage // yes i punched numbers into a calculator until the graph looked right var scaledDamage = -50 * Math.Atan(physics.Mass - component.MassBalance) + (25 * Math.PI); args.Damage *= scaledDamage; } }
private void OnDamageTrigger(EntityUid source, EntityUid target, DamageOnTriggerComponent?component = null) { if (!Resolve(source, ref component)) { return; } var damage = new DamageSpecifier(component.Damage); var ev = new BeforeDamageOnTriggerEvent(damage, target); RaiseLocalEvent(source, ev, true); _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances); }