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);
    }
Beispiel #2
0
        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);
        }
Beispiel #3
0
    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;
                }
            }
        }
    }