6 Commits

Author SHA1 Message Date
cfe36cb3b2 Despawn safes via server onResourceStop instead of client-side stop
onClientResourceStop doesn't fire reliably for a resource's own
client scripts when it stops itself, so props never got cleaned up.
The server now broadcasts safe:despawn (the same path already used
for pickup) for every known safe on onResourceStop, right before the
resource actually goes down.

Bump to 1.1.6.
2026-08-03 12:01:58 +00:00
d21d04f606 Add debug logging to onClientResourceStop cleanup, bump to 1.1.5
Temporary tracing to diagnose why safe props still show after
resource stop despite DeleteObject being called.
2026-08-03 11:58:50 +00:00
091e4864f1 Unfreeze safe props before deleting, bump to 1.1.4
Deleting a frozen object left a stale rendered mesh on screen until
the area re-streamed. Unfreezing right before DeleteObject clears it
immediately, matching how safe:despawn already looked to behave.
2026-08-03 11:52:59 +00:00
55b4506225 Clean up spawned safe props on resource stop, bump to 1.1.3
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.
2026-08-03 11:38:57 +00:00
781607a434 Improve notify messages and fix premature pickup success notice
Distance rejection now says exactly why, the PIN rate-limit shows
remaining seconds, and the client no longer announces pickup success
before the server validates it.
2026-08-03 11:05:37 +00:00
849663708a Add safe stash resource with security hardening
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.
2026-08-03 10:57:14 +00:00