Skip to content

@recover

@recover[/list] [<pattern>]
@recover/type|/owner|/age <value>
@recover/count [<pattern>]
@recover/detail #<number>
@recover <object>|#<number>
@recover/exits <room>
@recover/keep #<number>[=<reason>]
@recover/unkeep #<number>
@recover/free
@recover/refs [#<number>]

A destroyed object is not deleted outright. When the purge frees it, it goes onto the recover list, still holding its number, its attributes and what it pointed at. No new object gets that number while the entry is there. @recover brings it back under the same number, so references to it, locks naming it and snapshots of it find it again.

Given an object still marked GOING, @recover spares it, as @undestroy does. RhostMUSH code that types @reclist gets @recover.

@recover with no object lists the entries you can see: those for objects you owned, or every entry if you have the See_All power. Each row shows the number, name, type, former owner, the day it was destroyed and the day it expires. /list <pattern> matches names with * and ?, /type takes PLAYER, ROOM, THING or EXIT, /owner a player, and /age <days> shows entries destroyed at least that many days ago. /count gives the number only.

@recover/detail #<number> shows one entry in full, and what a recovery of it would do.

Example:

> @recover/type thing

You may recover an entry if you control its former owner, or if you are a wizard. The object comes back with its name, flags, powers, roles, attributes, parent, zone and home, set HALT until you look it over. A character is linked to its account again if the account still exists.

When something it pointed at is gone too, the recovery falls back and says so: a thing goes to your inventory, a character to default_home, a missing parent or zone is left unset. An exit needs its room; recover the room, then @recover/exits <room> brings back the exits destroyed with it.

It does not undo what happened around the destruction: what it owned stays with the probate player, contents stay where they were sent, and deleted mail stays deleted.

Entries expire after recover_keep_players for characters (forever by default) and recover_keep_objects for everything else (30 days by default); see @config dump.

@recover/keep #<number>=<reason> marks an entry kept: it never expires and a bulk @purge leaves it alone. /unkeep clears the mark. An object a package installed is kept the same way while the package is installed, so a rollback finds it.

@purge #<number> removes one entry for good and frees its number; a kept one needs @purge/confirm #<number>. See @purge for removing many at once.

Once an entry expires or is purged, its number is free (see garbage). A new object takes the free number that has waited longest, and only once the entry would have expired, so purging early does not bring a number back sooner unless someone asks for it by number.

These need the See_All power. @recover/free lists the free numbers and when each will be reused. @recover/refs lists every attribute that names a number on the recover list, or a free number not reused yet, as a bare #<number>: code that would point at the next object to take that number. Given a number, it looks for that one alone. An objid (#<number>:<time>) is not listed, since it stops matching once its object is gone.

Example:

> @recover/refs #42

::: seealso