Root Class (#1)(an instance of $nothing made by The_Mayor)      VERB SOURCE CODE: initialize: if (typeof(this.owner.owned_objects) == LIST) this.owner.owned_objects = setadd(this.owner.owned_objects, this); endif if ((caller == this) || $perm_utils:controls(caller_perms(), this)) this.object_size = {0, 0}; this.key = 0; else return E_PERM; endif . recycle: if ((caller == this) || $perm_utils:controls(caller_perms(), this)) if (typeof(this.owner.owned_objects) == LIST) this.owner.owned_objects = setremove(this.owner.owned_objects, this); endif else return E_PERM; endif . set_name: "set_name(newname) attempts to change this.name to newname"; " => E_PERM if you don't own this or aren't its parent, or are a player trying to do an end-run around $player_db..."; if ((!caller_perms().wizard) && (is_player(this) || ((caller_perms() != this.owner) && (this != caller)))) return E_PERM; else return (typeof(e = this.name = args[1]) != ERR) || e; endif . title: return this.name; . titlec: return $object_utils:has_property(this, "namec") ? this.namec | $string_utils:capitalize(this:title()); . set_aliases: "set_aliases(alias_list) attempts to change this.aliases to alias_list"; " => E_PERM if you don't own this or aren't its parent"; " => E_TYPE if alias_list is not a list"; " => E_INVARG if any element of alias_list is not a string"; if (!($perm_utils:controls(caller_perms(), this) || (this == caller))) return E_PERM; elseif (typeof(aliases = args[1]) != LIST) return E_TYPE; else for s in (aliases) if (typeof(s) != STR) return E_INVARG; endif endfor this.aliases = aliases; return 1; endif . match: c = this:contents(); return $string_utils:match(args[1], c, "name", c, "aliases"); . match_object: ":match_object(string [,who])"; args[2..1] = {this}; return $string_utils:match_object(@args); . set_description: "set_description(newdesc) attempts to change this.description to newdesc"; " => E_PERM if you don't own this or aren't its parent"; if (!($perm_utils:controls(caller_perms(), this) || (this == caller))) return E_PERM; elseif (typeof(desc = args[1]) in {LIST, STR}) this.description = desc; return 1; else return E_TYPE; endif . description: return this.description; . look_self: desc = this:description(); if (desc) player:tell_lines(desc); else player:tell("You see nothing special."); endif . exam*ine: player:tell("The examine command has been renamed to @examine. Please use @examine."); . notify: if (is_player(this)) notify(this, args[1]); endif . tell: this:notify(tostr(@args)); . tell_lines: lines = args[1]; if (typeof(lines) == LIST) for line in (lines) this:tell(line); endfor else this:tell(lines); endif . accept: set_task_perms(caller_perms()); return this:acceptable(@args); . moveto: set_task_perms(this.owner); return move(this, args[1]); . eject eject_nice eject_basic: "eject(victim) --- usable by the owner of this to remove victim from this.contents. victim goes to its home if different from here, or $nothing or $player_start according as victim is a player."; "eject_basic(victim) --- victim goes to $nothing or $player_start according as victim is a player; victim:moveto is not called."; what = args[1]; nice = verb != "eject_basic"; perms = caller_perms(); if ((!perms.wizard) && (perms != this.owner)) return E_PERM; elseif ((!(what in this.contents)) || what.wizard) return 0; endif if (nice && ($object_utils:has_property(what, "home") && ((typeof(what.home) == OBJ) && ((what.home != this) && (is_player(what) ? what.home:accept_for_abode(what) | what.home:acceptable(what)))))) where = what.home; else where = is_player(what) ? $player_start | $nothing; endif if (nice) fork (0) "...Some objects like to know they've been moved..."; "... this is the best we can do. Remember :moveto() may be broken."; what:moveto(where); endfork endif return move(what, where); . is_unlocked_for: return (this.key == 0) || $lock_utils:eval_key(this.key, args[1]); . huh: set_task_perms(valid(caller_perms()) ? caller_perms() | player); $command_utils:do_huh(verb, args); . set_message: ":set_message(msg_name,new_value)"; "Does the actual dirty work of @ do_examine: "do_examine(examiner)"; "the guts of examine"; "call a series of verbs and report their return values to the player"; who = args[1]; "if (caller == this || caller == who)"; if (caller == who) "set_task_perms();"; who:notify_lines(this:examine_names(who) || {}); "this:examine_names(who);"; who:notify_lines(this:examine_owner(who) || {}); "this:examine_owner(who);"; who:notify_lines(this:examine_desc(who) || {}); "this:examine_desc(who);"; who:notify_lines(this:examine_key(who) || {}); "this:examine_key(who);"; who:notify_lines(this:examine_contents(who) || {}); who:notify_lines(this:examine_verbs(who) || {}); else return E_PERM; endif . examine_key: "examine_key(examiner)"; "return a list of strings to be told to the player, indicating what the key on this type of object means, and what this object's key is set to."; "the default will only tell the key to a wizard or this object's owner."; who = args[1]; if (((caller == this) && $perm_utils:controls(who, this)) && (this.key != 0)) return {tostr("Key: ", $lock_utils:unparse_key(this.key))}; "who:notify(tostr(\"Key: \", $lock_utils:unparse_key(this.key)));"; endif . examine_names: "examine_names(examiner)"; "Return a list of strings to be told to the player, indicating the name and aliases (and, by default, the object number) of this."; return {tostr(this.name, " (aka ", $string_utils:english_list({tostr(this), @this.aliases}), ")")}; . examine_desc: "examine_desc(who) - return the description, probably"; "who is the player examining"; "this should probably go away"; desc = this:description(); if (desc) if (typeof(desc) != LIST) desc = {desc}; endif return desc; else return {"(No description set.)"}; endif . examine_contents: "examine_contents(examiner)"; "by default, calls :tell_contents."; "Should probably go away."; who = args[1]; "if (caller == this && $object_utils:has_verb(this, \"tell_contents\"))"; if (caller == this) this:tell_contents(this.contents, this.ctype); endif . examine_verbs: "Return a list of strings to be told to the player. Standard format says \"Obvious verbs:\" followed by a series of lines explaining syntax for each usable verb."; if (caller != this) return E_PERM; endif who = args[1]; name = dobjstr; vrbs = {}; commands_ok = this:examine_commands_ok(who); dull_classes = {$root_class, $room, $player, $prog, $builder}; what = this; hidden_verbs = this:hidden_verbs(who); while (what != $nothing) $command_utils:suspend_if_needed(0); if (!(what in dull_classes)) for i in [0..length(verbs(what)) - 1] $command_utils:suspend_if_needed(0); info = verb_info(what, tostr(i)); syntax = verb_args(what, tostr(i)); if (this:examine_verb_ok(what, i, info, syntax, commands_ok, hidden_verbs)) dobj = syntax[1]; prep = syntax[2]; iobj = syntax[3]; if (syntax == {"any", "any", "any"}) prep = "none"; endif if (prep != "none") for x in ($string_utils:explode(prep, "/")) if (length(x) <= length(prep)) prep = x; endif endfor endif "This is the correct way to handle verbs ending in *"; vname = info[3]; while (i = index(vname, "* ")) vname = tostr(vname[1..i - 1], " get_message: ":get_message(msg_name)"; "Use this to obtain a given user-customizable message's raw value, i.e., the value prior to any pronoun-substitution or incorporation of any variant elements --- the value one needs to supply to :set_message()."; "=> error (use E_PROPNF if msg_name isn't recognized)"; "=> string or list-of-strings raw value"; "=> {2, @(list of {msg_name_n,rawvalue_n} pairs to give to :set_message)}"; "=> {1, other kind of raw value}"; "=> {E_NONE, error message} "; if (!((caller == this) || $perm_utils:controls(caller_perms(), this))) return E_PERM; elseif (((t = typeof(msg = this.(msgname = args[1] + "_msg"))) in {ERR, STR}) || ((t == LIST) && (typeof(msg[1]) == STR))) return msg; else return {1, msg}; endif . room_announce*_all_but: this.location:(verb)(@args); . init_for_core: if (caller_perms().wizard) vnum = 0; while (vnum <= (length(verbs(this)) - 1)) $command_utils:suspend_if_needed(0); info = verb_info(this, tostr(vnum))[3]; if (index(info, "(old)")) delete_verb(this, tostr(vnum)); else vnum = vnum + 1; endif endwhile endif . contents: "Returns a list of the objects that are apparently inside this one. Don't confuse this with .contents, which is a property kept consistent with .location by the server. This verb should be used in `VR' situations, for instance when looking in a room, and does not necessarily have anything to do with the value of .contents (although the default implementation does). `Non-VR' commands (like @contents) should look directly at .contents."; return this.contents; . examine_verb_ok: "examine_verb_ok(loc, index, info, syntax, commands_ok, hidden_verbs)"; "loc is the object that defines the verb; index is which verb on the object; info is verb_info; syntax is verb_args; commands_ok is determined by this:commands_ok, probably, but passed in so we don't have to calculate it for each verb."; "hidden_verbs is passed in for the same reasons. It should be a list, each of whose entries is either a string with the full verb name to be hidden (e.g., \"d*rop th*row\") or a list of the form {verb location, full verb name, args}."; if ((caller == this) || $perm_utils:controls(caller_perms(), this)) loc = args[1]; info = args[3]; vname = info[3]; syntax = args[4]; hidden_verbs = args[6]; return (((((syntax[2..3] != {"none", "this"}) && (!index(vname, "("))) && (args[5] || ("this" in syntax))) && verb_code(loc, tostr(args[2]))) && (!(vname in hidden_verbs))) && (!({loc, vname, syntax} in hidden_verbs)); else return E_PERM; endif . is_listening: "return 1 if the object can hear a :tell, or cares. Useful for active objects that want to stop when nothing is listening."; return 0; . hidden_verbs: "hidden_verbs(who)"; "returns a list of verbs on this that should be hidden from examine"; "the player who's examining is passed in, so objects can hide verbs from specific players"; "verbs are returned as {location, full_verb_name, args} or just full_verb_name. full_verb name is what shows up in verb_info(object, verb)[2], for example \"d*op th*row\"."; if ((caller == this) || $perm_utils:controls(caller_perms(), this)) hidden = {}; what = this; while (what != $nothing) for i in [0..length(verbs(what)) - 1] info = verb_info(what, tostr(i)); if (!index(info[2], "r")) hidden = setadd(hidden, {what, info[3], verb_args(what, tostr(i))}); endif endfor what = parent(what); endwhile return hidden; else return E_PERM; endif . examine_owner: "examine_owner(examiner)"; "Return a list of strings to be told to the player, indicating who owns this."; return {tostr("Owned by ", this.owner.name, ".")}; . announce*_all_but: return; . tell_lines_suspended: lines = args[1]; if (typeof(lines) == LIST) for line in (lines) this:tell(line); $command_utils:suspend_if_needed(0); endfor else this:tell(lines); endif . acceptable: "intended as a 'quiet' way to determine if :accept will succeed. Currently, some objects have a noisy :accept verb since it is the only thing that a builtin move() call is guaranteed to call."; "if you want to tell, before trying, whether :accept will fail, use :acceptable instead. Normally, they'll do the same thing."; return 0; . PROPERTY DATA:       key       aliases       description       object_size CHILDREN: generic room The System Object generic thing generic player generic exit Mail Distribution Center Generic Mail Recipient Generic Gendered Object Generic Database Generic Help Database The Body Bag Generic BigList Resident Verb Help DB Guest Log Player Last_huh Verbs Login Commands Generic Option Package Error Generator Network Utilities Local Clearinghouse Generic Utilities Package bowl of milk @paranoid database generic tattoo Object #1994 Object #2010 sick utilities body part plain vanilla ass key lame test cigar Geek Code Millebornes database |