The cleanup loop ran on onClientResourceStart, but spawnedSafes is
already a fresh empty table by then, so it never actually deleted
anything. Props from before a restart stayed orphaned in the world
and got duplicated by the requestSync on start. Moved the cleanup to
onClientResourceStop, which runs while the entities are still known.
ExecuteCommand('restart ...') was restarting the whole FXServer
process in this environment instead of just the resource, so
/oixbupgrade now only downloads files and tells the admin to
restart manually.
Adds distance validation on placement, PIN attempt rate limiting,
proximity checks on open/pickup, and prevents item loss on pickup
when the safe still has contents.