components/death.cs

Component attached to a game object that handles death behavior. When Should is set true it spawns a ragdoll and a spectator object at the object's position, plays a scream sound on the ragdoll, and destroys the original object.

NetworkingExternal Download
using Sandbox;

public class Death : Component
{
    [Property] public GameObject Ragdoll {get;set;}
    [Property] public GameObject Spectator {get;set;}
    [Sync] public bool Should {get;set;}
    
    SoundEvent Scream;
    protected override void OnStart()
    {if (IsProxy) return;
    Scream = ResourceLibrary.Get<SoundEvent>("prereqs/scream/scream.sound");}
    
    protected override void OnUpdate()
    {
        if (IsProxy) return;
        if (Should) Die();
    }
    
    void Die()
    {
        var ragdoll = Ragdoll.Clone(WorldPosition);
        ragdoll.NetworkSpawn(Network.Owner);
        PlaySound(ragdoll, Scream);
        
        var spectator = Spectator.Clone(WorldPosition);
        spectator.NetworkSpawn(Network.Owner);
        
        GameObject.Destroy();
    }
    
    [Rpc.Broadcast]
    public void PlaySound(GameObject go, SoundEvent s)
    {go.PlaySound(s);}
    
    [Rpc.Broadcast]
    public void Now()
    {Should = true;}
}