Help Database (#61)

(an instance of Generic Help Database made by Hacker)

     The object $help is the main help database. For every help topic there is a corresponding property on $help, interpreted as follows:
     
     $help.(topic) = string - one-line help text.
     $help.(topic) = {"*verb*",@args} - call this:verb(args,{}) to get text
     $help.(topic) = any other list - multi-line help text
     
     There is also a "" property which applies in the case of `help' typed without any arguments.
     
     See the description of $generic_help for more detail.



VERB SOURCE CODE:

player_quota:
return $player.ownership_quota;
.


prog_quota:
return $prog.ownership_quota;
.


get_topic:
text = pass(@args);
if ((text != E_PROPNF) || (!valid(object = $string_utils:match_object(what = args[1], 
player.location))))
    return text;
elseif (ohelp = (object = $string_utils:match_object(what, player.location)):help_msg() 
|| object.help_msg)
    "...geez. life is simple if we set -d...";
    return {tostr(object.name, " (", object, "):"), "----", @(typeof(ohelp) == LIST) 
? ohelp | {ohelp}};
else
    about = $object_utils:has_verb(object, "about");
    return {tostr("Sorry, but no help is available on ", object.name, " (", object, 
")."), tostr("Try `@examine ", what, "'", @about ? {" or `about ", what, "'"} | {}, 
".")};
endif
.


find_topics:
topiclist = pass(@args);
if (topiclist || (!args))
    return topiclist;
elseif (valid(o = $string_utils:match_object(what = args[1], player.location)))
    return {what};
else
    return {};
endif
.


full_index:
text = {};
for db in ($code_utils:help_db_list())
    if ($object_utils:has_callable_verb(db, "index"))
        text = {@text, @db:index({tostr(db.name, " (", db, ")")})};
    endif
endfor
return text;
.


index_list:
hdr = "Available Help Indices";
text = {"", hdr, $string_utils:space(hdr, "-")};
for db in ($code_utils:help_db_list())
    if ($object_utils:isa(db, $generic_help))
        for p in (properties(db))
            if ((h = db.(p)) && ("*index*" in h))
                text = {@text, tostr($string_utils:left(p, 14), " -- ", h[2] || db.name, 
" (", db, ")")};
            endif
        endfor
    endif
endfor
for p in (properties(this))
    if (this.(p) && (this.(p)[1] == "*full_index*"))
        return {@text, "", tostr($string_utils:left(p, 14), " -- ", "EVERYTHING")};
    endif
endfor
return text;
.


wizard_list:
wizzes = {#2, @$list_utils:randomly_permute(setremove($object_utils:leaves($wiz), 
#2))};
numwiz = length(wizzes);
hlist = {"ArchWizard:", "Wizard" + ((numwiz == 2) ? ":" | "s:"), @$list_utils:make(max(0, 
numwiz - 2), "")};
slist = {};
su = $string_utils;
for i in [1..numwiz]
    wiz = wizzes[i];
    slist = {@slist, tostr(su:left(hlist[i], 13), su:left(wiz.name, 16), (wpi = wiz.public_identity.name) 
? (" (a.k.a. " + wpi) + ")" | "")};
endfor
return slist;
.


dump_topic:
if (((text = pass(@args)) != E_PROPNF) || ((!valid(object = $string_utils:match_object(what 
= args[1], player.location))) || (!$object_utils:has_property(object, "help_msg"))))
    return text;
else
    return {tostr(";;", $code_utils:corify_object(object), ".help_msg = $command_utils:read_lines()"), 
@$command_utils:dump_lines((typeof(text = object.help_msg) == LIST) ? text | {text})};
endif
.



PROPERTY DATA:
      @locations
      @uptime
      @mailoptions
      @sort-owned
      @verify-owned
      @add-owned
      @mail-options
      wizard-list
      @wrap
      full-index
      index
      gen-index
      mail-forwarding
      @pagelength
      @more
      programming
      @forward
      @subscribe
      @rn
      @unsubscribe
      @skip
      negative_quota
      zombie-messages
      message-sequences
      common_quota
      @recreate
      @linelength
      room-messages
      @unrmmail
      @gaglist
      ::
      @comment
      @remove-entrance
      @remove-exit
      @parents
      @contents
     
      spoofing
      privacy
      @realm
      @resident
      @examine
      security
      @sweep
      @paranoid
      @check
      @reply
      @eject
      @quit
      whereis
      @suggest
      @idea
      @bug
      @typo
      @renumber
      @notedit
      editors
      @prev
      @unlock_for_open
      @lock_for_open
      @opacity
      container-messages
      @memory
      "
      :
      @lastlog
      @version
      miscellaneous
      insert
      information
      ?
      put
      remove
      burn
      letters
      decrypt
      encrypt
      delete
      erase
      write
      read
      examine
      hand
      key-representation
      keys
      @unlock
      @lock
      locking
      thing-messages
      throw
      take
      @messages
      pronouns
      exit-messages
      messages
      descriptions
      @describe
      @add-entrance
      @add-exit
      topology
      @classes
      @audit
      @count
      @quota
      @create
      tinymud
      @next
      @answer
      @rmmail
      @read
      @send
      mail
      @gripe
      creation
      @mail
      @listgag
      @ungag
      @gag
      go
      @password
      @sethome
      @who
      introduction
      give
      news
      gagging
      @dig
      @move
      inventory
      @entrances
      @exits
      @gender
      @recycle
      @rename
      containers
      notes
      look
      drop
      get
      manipulation
      help
      rooms
      movement
      home
      communication
      say
      whisper
      page
      emote
      building
      players
      summary
      @edit-options
      @editoptions
      @add-feature
      @remove-feature
      @features
      features
      @dump
      me
      @rmalias
      @addalias
      commands
      name
      alias
      @setprop
      @set
      @peek
      @subscribed
      @request-character
      player-names
      @registerme
      @netforward
      @eject!
      gopher
      @builder-options
      @builderoptions
      @buildoptions
      @build-options
      osummary