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  |