KillZone.cs
using Sandbox;
using System.Linq;

public sealed class KillZone : Component, Component.ITriggerListener
{
    public void OnTriggerEnter( Collider other )
    {
        if ( !other.IsValid() || !other.GameObject.IsValid() ) return;

        var targetObj = other.GameObject.Root;

        if ( targetObj == GameObject ) return;

        // Находим объект локального игрока в сцене
        var localPush = Scene.GetAllComponents<PushAbility>().FirstOrDefault( x => !x.IsProxy );
        var localPlayerObj = localPush?.GameObject.Root;

        // Определяем, кто упал: вы или бот
        if ( localPlayerObj.IsValid() && targetObj == localPlayerObj )
        {
            // Упал ваш игрок -> засчитываем смерть (-20 очков, +1 смерть)
            ScoreManager.Instance?.AddDeath();
        }
        else
        {
            // Упал бот -> начисляем +1 очко за сбитие
            ScoreManager.Instance?.AddScore( 1 );
        }

        // Возвращаем на спавн
        var spawn = Scene.GetAllComponents<SpawnPoint>().FirstOrDefault();
        Vector3 targetPosition = spawn.IsValid() ? spawn.WorldPosition : new Vector3( 0, 0, 250 );

        targetObj.WorldPosition = targetPosition;

        var character = targetObj.Components.Get<CharacterController>( true );
        if ( character.IsValid() )
        {
            character.Velocity = Vector3.Zero;
        }

        var rb = targetObj.Components.Get<Rigidbody>( true );
        if ( rb.IsValid() )
        {
            rb.Velocity = Vector3.Zero;
            rb.AngularVelocity = Vector3.Zero;
        }

        Log.Info( $"Объект {targetObj.Name} упал в KillZone и телепортирован обратно!" );
    }

    public void OnTriggerExit( Collider other ) { }
}