@verb #53:"do_retrieve" this none this rxdo #55 @program #53:"do_retrieve" this none this if (!caller_perms().wizard) return E_PERM endif dobj = caller secure = args[1] if (parent(dobj) != $garbage) player:sub_tell("#%D~# is not garbage!") return elseif (!(g = dobj:_get_ghost())) player:sub_tell("#%D~# has no ghost image.") return elseif (g[1]) player:sub_tell("The ghost image on #%D~# might be corrupt.") if (!secure || !$command_utils:yes_or_no("Continue")) player:tell("Not retrieved.") return endif endif builtins = g[3] player:sub_tell("Attempting to retrieve %1...", builtins[1]) parents = builtins[3] for i in [2..length(parents)] if (parent(parents[i - 1]) != parents[i]) player:tell("Parent hierarchy has changed; not retrieved.") return endif endfor if (builtins[9]) player:sub_tell("#%D~# was a player object.") if (!secure || !$command_utils:yes_or_no("Continue")) player:tell("Not retrieved.") return endif endif owner = builtins[5] if (!$perm_utils:perm_f(owner, parents[1]) && owner != $repo_man) player:sub_tell("The owner %1 (#%1~#) can't create a %2 (#%2~#).", owner, parents[1]) if (!secure || !$command_utils:yes_or_no("Continue")) player:tell("Not retrieved.") return endif endif if (owner:is_over_quota()) player:sub_tell("Warning: %1 (#%1~#) is over creation quota.", owner) endif "if ((!owner.programmer) && g[5])" "I don't think we really care about that anymore. -whiz" if (0) player:sub_tell("#%D~# had verbs but %1 (#%1~#) is not a programmer.", owner) if (!secure || !$command_utils:yes_or_no("Continue")) player:tell("Not retrieved.") return endif endif if (!(e = this:request(dobj, parents[1], owner))) player:sub_tell("Couldn't request from recycler: %1", e) return endif if (!secure) set_task_perms(owner) endif if (!(e = dobj:set_name(builtins[1]))) player:sub_tell(":set_name failed -- %1.", e) endif try if (builtins[4]) player:tell("Note: object had children:", toliteral(builtins[4])) endif if (length(builtins) > 11 && builtins[12]) player:sub_tell("NOTE: #%D~# had contents: %1.", builtins[12]) endif except (ANY) "A particularly nasty bug in $recycler:do_retrieve made it impossible to retrieve something if the kid had a borked :title verb; and all the verbs seemed to be gone. No more." endtry "Set flags..." "I hate -r. -whiz" dobj.r = 1 if (builtins[7]) player:tell(".w not set!") endif dobj.f = builtins[8] if (builtins[9]) if (!(e = $wiz_utils:set_player(dobj, 1))) player:sub_tell(":set_player failed: %1", e) else dobj.programmer = builtins[10] endif endif if (builtins[11]) player:tell(".wizard not set!") endif player:tell("Builtin properties done.") suspend(0) "verbs... (oooh)" for i in [1..length(g[5])] v = g[5][i] if (v[1] != owner) `player:sub_tell("WARNING: %3:\"%1\" not chowned to %2.", v[3], v[1], tostr(dobj)) ! ANY => "Oops."' v[1] = owner endif v[2] = v[2] + "d" try add_verb(dobj, v[1..3], v[4..6]) set_verb_code(dobj, i, v[7..$]) except (ANY) player:sub_tell("WARNING: Could not add or set code for verb %3:\"%1\".", v[3], v[1], tostr(dobj)) endtry $command_utils:suspend_if_needed() endfor player:tell("Verbs done.") "properties (mmmm...)" for pset in (g[4]) on_obj = pset[1] == dobj for pi in (pset[2]) if (on_obj) if (pi[1] != owner) player:sub_tell("WARNING: #%D~#.%1 not chowned to %2.", pi[3], pi[1]) if (pi[3] == "__owned_by") pi[1] = player else pi[1] = owner endif endif add_property(dobj, pi[3], pi[4], pi[1..2]) else if (pi[1] == owner || index(pi[2], "w")) dobj.(pi[3]) = pi[4] else vname = "set_" + pi[3] if (`!($object_utils:has_callable_verb(dobj, vname) && dobj:(vname)(pi[4])) ! ANY') value = secure || index(pi[2], "r") ? $string_utils:from_value(pi[4]) | "unreadable" player:sub_tell("#%D~#.%1 is not settable (%3) by the owner (#%2~#).", pi[3], owner, value) if (secure) dobj.(pi[3]) = pi[4] endif endif endif endif $command_utils:suspend_if_needed() endfor endfor player:tell("Properties done.") player:sub_tell("Attempting to move %d~o to %1(#%1~#)...", builtins[2]) suspend(0) try dobj:moveto(builtins[2]) except (E_VERBNF) move(dobj, builtins[2]) except (ANY) "Oh well." endtry dobj:filedelete("ghost") player:tell("***DONE***") this.location:sub_announce_all(this.msg_obj_retreived) "Last modified by whiz (#3135) on Wed Jul 10 11:37:42 2002 MDT." .