RagdollController.cs
using Sandbox;
using System;
using System.Linq;
using Sandbox.Diagnostics;

namespace Facepunch.BombRoyale;

[Title( "Ragdoll Controller" )]
[Group( "Bomb Royale" )]
public sealed class RagdollController : Component
{
	[Sync( SyncFlags.FromHost )] public bool IsRagdolled { get; private set; }
	[Property] public ModelPhysics Physics { get; set; }

	[Rpc.Broadcast( NetFlags.HostOnly )]
	public void Ragdoll( Vector3 position, Vector3 force )
	{
		Physics.Enabled = true;
		IsRagdolled = true;
		Tags.Add( "corpse" );
		
		foreach ( var body in Physics.Bodies )
		{
			var component = body.Component;

			if ( component.IsValid() )
			{
				component.ApplyImpulseAt( position, force * 5000f );
			}
		}
	}

	[Rpc.Broadcast( NetFlags.HostOnly )]
	public void Unragdoll()
	{
		Physics.Enabled = false;
		IsRagdolled = false;
		Tags.Remove( "corpse" );
	}
}