s&box constraints: create as child GameObjects with ConstraintCleanup, not directly on target objects
s&box: Traverse all connected contraption objects via Rigidbody.Joints + Collider.Joints + ManualLink recursively
s&box Stats: use Sandbox.Services.Stats.Increment() on the owning client only...
s&box PlayerData respawn: use MarkForRespawn() + OnUpdate() timeout (4s) as a...
s&box loadout persistence: serialize inventory as List<LoadoutEntry> (PrefabP...
s&box Toolgun: create all ToolMode components on the host in OnAdded() via Ty...
s&box Physgun: store grab state as a [Sync] struct (GrabState).
s&box per-player spawn limits: track by SteamId dict, lazy-prune on count, expose as replicated ConVars
s&box prop ownership: store owner as Guid (not Connection), implement IPhysgunEvent/IToolgunEvent for access control
s&box UndoSystem: per-player stacks keyed by SteamId, bounded at 128, RemovePlayer on disconnect, Rpc.FilterInclude for notices
s&box weapon architecture: AimRay context resolution, EffectiveAttacker, and host-side TraceAttack RPC
s&box NPC architecture: ScheduleBase (task sequence) + TaskBase (atomic action) with ShouldCancel() interrupt
s&box: Scene cleanup without player disconnect — capture baseline on load, diff and restore on cleanup command
s&box: Use INetworkListener.AcceptConnection to reject banned players at connection time, persist bans via LocalData
s&box: Two-tier player event system — Local.IPlayerEvents (hierarchy-scoped) vs Global.IPlayerEvents (scene-wide)
s&box: Correct damage pipeline order — pre-event, armour, health, OnDeath, then Kill()
s&box: Network.Refresh(component) does not replicate — use Network.Refresh() (full GameObject) instead
s&box: Implement IScenePhysicsEvents.OnOutOfBounds to destroy rigidbodies that fall out of the world