private DamageInfo DealDamageBasedOnVelocityZ() { Log.Info("My last attacker: " + Pawn.LastAttacker); var damage = GetDamageBasedOnVelocityZ(); var info = DamageInfo.Generic(damage).WithAttacker(Pawn.LastAttacker); info.HitboxIndex = 1; return(info); }
public override void TakeDamage(DamageInfo info) { if (PhysicsBody != null && PhysicsBody.BodyType == PhysicsBodyType.Dynamic && info.Attacker is ProphuntPlayer) { var damageSelf = DamageInfo.Generic(info.Damage * 0.75f) .WithAttacker(info.Attacker) .WithWeapon(info.Weapon); info.Attacker.TakeDamage(damageSelf); } base.TakeDamage(info); }
protected override void OnPhysicsCollision(CollisionEventData eventData) { if (!IsServer) { return; } if (eventData.Entity is SandboxPlayer) { return; } var propData = GetModelPropData(); var minImpactSpeed = propData.MinImpactDamageSpeed; if (minImpactSpeed <= 0.0f) { minImpactSpeed = 500; } var impactDmg = propData.ImpactDamage; if (impactDmg <= 0.0f) { impactDmg = 10; } var speed = eventData.Speed; if (speed > minImpactSpeed) { if (eventData.Entity.IsValid() && eventData.Entity != this) { var damage = speed / minImpactSpeed * impactDmg * 1.2f; eventData.Entity.TakeDamage(DamageInfo.Generic(damage) .WithFlag(DamageFlags.PhysicsImpact) .WithFlag(DamageFlags.Vehicle) .WithAttacker(Driver != null ? Driver : this, Driver != null ? this : null) .WithPosition(eventData.Position) .WithForce(eventData.PreVelocity)); if (eventData.Entity.LifeState == LifeState.Dead && eventData.Entity is not SandboxPlayer) { PhysicsBody.Velocity = eventData.PreVelocity; PhysicsBody.AngularVelocity = eventData.PreAngularVelocity; } } } }