@-ATTRIBUTES
These '@' commands set standard message/action sets on objects. Each comes
in 3 versions: @<whatever>, @o<whatever>, and @a<whatever>. Only the
@<whatever> version is listed below, but help is available for each:
 
  @death         @describe      @drop          @efail         @enter
  @failure       @follow        @give          @idescribe     @leave
  @lfail         @move          @payment       @receive       @success
  @tport         @ufail         @unfollow      @use           @zenter        
  @zleave
 
These '@' command set other standard attributes on objects that don't
follow the pattern above:
 
  @aahear        @aclone        @aconnect      @adisconnect   @amail
  @amhear        @away          @charges       @conformat     @cost
  @descformat    @ealias        @exitformat    @filter        @forwardlist
  @haven         @idescformat   @idle          @infilter      @inprefix
  @lalias        @listen        @nameformat    @oxenter       @oxleave
  @oxmove        @oxtport       @prefix        @runout        @sex
  @startup       
 
See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES
@-BUILDING
These '@' commands are building-related (they create or modify objects):
 
  @atrlock       @atrchown      @chown         @chzone        @clone         
  @cpattr        @create        @destroy       @dig           @elock         
  @eunlock       @firstexit     @link          @lock          @mvattr        
  @name          @nuke          @open          @parent        @recycle       
  @set           @undestroy     @ulock         @unlink        @unlock        
  @uunlock       @wipe
  
@-GENERAL
These '@' commands are general utility and programming commands:
 
  @@             @alias         @break         @channel       @chat
  @cemit         @command       @config        @decompile     @doing
  @dolist        @drain         @edit          @emit          @entrances
  @find          @force         @function      @gedit         @grep
  @halt          @lemit         @listmotd      @mail          @notify
  @nsemit        @nslemit       @nsoemit       @nspemit       @nsprompt      
  @nsremit       @nszemit       @oemit         @password      @pemit         
  @prompt        @ps            @remit         @restart       @scan          
  @search        @select        @stats         @sweep         @switch        
  @teleport      @trigger       @verb          @version       @wait          
  @whereis       @zemit
 
@-WIZARD
These '@' commands are only usable by wizards or privileged players:
 
  @allhalt       @allquota      @boot          @chownall      @chzoneall
  @comment       @dbck          @disable       @dump          @enable
  @flag          @hide          @hook          @kick          @log           
  @motd          @newpassword   @pcreate       @poll          @poor          
  @power         @purge         @quota         @readcache     @rejectmotd    
  @shutdown      @sitelock      @sql           @squota        @uptime        
  @wall          @wizmotd       @wizwall       cd             ch             
  cv
 
@@
  @@ [<text>]
 
  The "@@" command does nothing; it does not evaluate its input or show
  any messages to the executor. It can be used for commenting code.
  
  Example:
  > @va me=$testing: @emit Test ; @@ Just a test ; @vb me=Testing
  
See also: @@(), null()
@@()
  @@(<expression>)
  null(<expression>[, ... , <expression>])
 
  The @@() function does nothing and returns nothing. It does not evaluate
  its argument. It could be used for commenting, perhaps. 
 
  The null() function is similar, but does evaluate its argument(s),
  so side-effects can occur within a null(). Useful for eating the
  output of functions when you don't use that output.
  
See also: @@
@AAHEAR
  @ahear <object>[=<action list>]
  @amhear <object>[=<action list>]
  @aahear <object>[=<action list>]
 
  Sets the actions to be taken after the object's @listen is matched.
  @ahear will only be triggered by sound made by other objects, and
  @amhear is only triggered by sound made by <object> itself. @aahear 
  will be triggered by all matching sound, regardless of the source.
  
See also: @listen, LISTENING, ACTION LISTS
@ABUY
  @buy <object>[=<message>]
  @obuy <object>[=<message>]
  @abuy <object>[=<message>]
  
  These attributes contain the message shown to a player who successfully
  buys something from <object> using the "buy" command, the message shown to 
  others in the room when something is bought from <object> (prefixed with
  the buyer's name), and the actions to be taken by <object> when something
  is bought from it, respectively. Each attribute is passed the item being
  purchased as %0 and the amount paid for it as %1.
 
  Example:
    > @buy Vendor=udefault(me/buy`%0,You buy %0 for %1 [money(%1)]., %0, %1)
    > @obuy Vendor=hands some money to [name(me)] for [art(%0)] %0.
    > @abuy Vendor=:goes into the storeroom. ; @wait 2=:returns with %n's %0.
 
See also: buy, @pricelist, MONEY, @lock, VERBS, @cost, give
@ACLONE
  @aclone <object>=<action list>
 
  Sets the actions to be taken by <object> whenever it's @cloned. This 
  command can be useful for notifying the owner of a vending machine or
  parent object when someone uses the machine.
 
  Please note that there are no @clone or @oclone attributes.
  
See also: @clone, @create, ACTION LISTS
@ACONNECT
  @aconnect <object>=<action list>
 
  Sets the actions to be taken by <object> when a player connects to the game.
  @aconnects are triggered on connecting players, their locations (if the
  room_connects @config option is true), their zone object/objects in their
  zone master room, and objects in the Master Room.
 
  Note that long and spammy @aconnect messages, whether in your room or
  on a channel, are frequently found annoying by other players.
 
  One argument is passed to @aconnect:
  %1 = number of player connections (1 if this is an initial connect)
  
  Example:
    > @aconnect me=+who ; +bbscan
 
See also: @adisconnect, ACTION LISTS
@ADEATH
  @death <object>[=<message>]
  @odeath <object>[=<message>]
  @adeath <object>[=<action list>]
  
  These attributes contain the message shown to the killer, the message
  shown to others in the room, and the actions to be taken when <object>
  is killed.
 
  Example:
   > @death me=You have just slain Cyclonus!
   > @odeath me=falls to the ground and vanishes.
 
See also: kill, BEING KILLED, ACTION LISTS, VERBS
@ADESCRIBE
  @odescribe <object>[=<message>]
  @adescribe <object>[=<action list>]
  
  These attributes contain the message shown to others in the enactor's
  location when he looks at <object>, and the actions to be taken by <object>
  when someone looks at it. (See 'help @describe' for the attribute shown
  to the enactor when he looks at <object>.) When the enactor is inside
  <object>, the @oidescribe and @aidescribe attributes will be used instead,
  if set. Please note that using these attributes to show long messages is
  often found annoying.
  
  Examples:
    > @odescribe Walker=glances at Walker and sniggers.
    > @adescribe me=think %n just looked at you.
 
See also: look, @describe, @idescribe, ACTION LISTS
@ADESTROY
  @adestroy <object>[=<action list>]
 
  The adestroy attribute is triggered when <object> is @destroyed. It can
  only be set by wizards. Because the attribute is triggered when <object>
  is @destroyed, not when the object is actually purged from the database,
  it's possible for <object> to be @undestroyed after the adestroy has run.
  
  Please note that there are no destroy or odestroy attributes.
  
See also: @destroy, @undestroy
@ADISCONNECT
  @adisconnect <object>[=<action list>]
 
  Sets the actions to be taken by <object> when a player disconnects
  from the game. @adisconnects are triggered on disconnecting players,
  their locations (if the room_connects @config option is true),
  their zone object/objects in their zone master room, and objects in
  the Master Room.
 
  Several arguments are passed to @adisconnect:
   %1 = number of remaining connections (0 if a full disconnect)
   %2 = bytes received by the disconnecting descriptor
   %3 = bytes sent by the disconnecting descriptor
   %4 = commands issued by the disconnecting descriptor
   %5 = 1 if the descriptor was hidden on disconnect, 0 otherwise
  
  Example:
  > @adisconnect me = home
 
See also: @aconnect, ACTION LISTS, recv(), sent(), cmds()
@ADROP
  @drop <object>[=<message>]
  @odrop <object>[=<message>]
  @adrop <object>[=<action list>]
  
  When <object> is a player or thing, the @drop attribute is shown to whoever
  drops <object>, and @odrop to others in the location <object> is dropped
  in. The @adrop attribute is triggered when <object> is dropped.
  
  When <object> is an exit, @drop is shown to objects going through <object>,
  and @odrop is shown to objects in the exit's destination. @adrop is
  triggered when someone passes through the exit.
  
  Example:
    > @drop Box=You put the box down gently.
    > @odrop Box=puts the box down gently.
    
    > @odrop South=arrives from the North.
  
See also: drop, empty, ACTION LISTS, VERBS, @success
@AEFAIL
  @efail <object>[=<message>]
  @oefail <object>[=<message>]
  @aefail <object>[=<action list>]
  
  These attributes contain the message shown to someone who fails to enter
  <object>, the message shown to others when someone fails to enter <object>,
  and the actions to be taken when someone fails to enter it, respectively.
 
See also: enter, @enter, FAILURE, ACTION LISTS, VERBS
@AENTER
  @enter <object>[=<message>]
  @oenter <object>[=<message>]
  @oxenter <object>[=<message>]
  @aenter <object>[=<action list>]
  
  These attributes contain the messages shown to someone who enters <object>,
  the message shown to others inside <object> when someone enters it, the
  message shown to those in <object>'s location when someone enters it, and
  the actions to be taken by <object> when someone enters it, respectively.
  
  The old location of the entering object is passed in %0, if <object>
  had permission to see it there.
 
  Example:
    > @enter Sofa=You sit on the comfy sofa.
    > @oenter Sofa=sits with you on the sofa.
    > @oxenter Sofa=sits down on the sofa. It looks comfy.
    > @aenter Sofa=@pemit/silent owner(me)=%n sat down on [name(me)]!
    
See also: enter, @ealias, leave, ACTION LISTS, VERBS
@AFAILURE
  @failure <object>[=<message>]
  @ofailure <object>[=<message>]
  @afailure <object>[=<action list>]
 
  @failure contains the message shown to someone who fails to pass <object>'s
  Basic @lock. @ofailure contains the message shown to others, and @afailure
  contains the actions to be taken by <object>.
  
  For players and things, this means failure to get/take. For exits, it means
  failure to go through the exit. For rooms the lock is checked when objects
  "look" inside the room, though failure to pass the lock does not prevent
  the object from looking.
 
See also: get, move, @lock, ACTION LISTS, VERBS, @success
@AFOLLOW
  @follow <object>[=<message>]
  @ofollow <object>[= <message>]
  @aunfollow <object>[=<action list>]
  
  Sets the message shown to someone who begins following <object>,
  the message shown to others in the room, and the actions to be taken
  by <object> when someone begins following it, respectively. The name
  of the person following <object> is automatically prepended to the
  @ofollow message.
 
See also: follow, unfollow, @unfollow, followers(), ACTION LISTS, VERBS
@AGIVE
  @give <giver>[=<message>]
  @ogive <giver>[=<message>]
  @agive <giver>[=<action list>]
  
  These attributes contain the message shown to <giver> when he gives an
  object, the message shown to others in <giver>'s location when he gives an
  object, and the actions to be taken by <giver> when he gives an object,
  respectively.
  
  In all cases, %0 is the dbref of the object being given, and %1 is the
  dbref of the recipient.
 
See also: give, @receive, ACTION LISTS, VERBS
@AHEAR
  @ahear <object>[=<action list>]
  @amhear <object>[=<action list>]
  @aahear <object>[=<action list>]
 
  Sets the actions to be taken after the object's @listen is matched.
  @ahear will only be triggered by sound made by other objects, and
  @amhear is only triggered by sound made by <object> itself. @aahear 
  will be triggered by all matching sound, regardless of the source.
  
See also: @listen, LISTENING, ACTION LISTS
@AIDESCRIBE
  @idescribe <object>[=<description>]
  @oidescribe <object>[=<message>]
  @aidescribe <object>[=<action list>]
 
  @idescribe command sets the internal description for an object, which is 
  shown to anyone who enters or looks while inside the object. It's only 
  used for players and things; rooms and exits always use @describe.
  
  The @oidescribe attribute is shown to others inside <object> when someone
  looks at the @idescribe, and the @aidescribe is triggered when someone
  lookst at the @idescribe.
 
  If there is no IDESCRIBE set for an object, those who enter or look inside
  it will see its @describe. In this case, others in the object will see 
  nothing, and the @aidescribe will not be triggered. If you want to use 
  @aidescribe without @idescribe, set @idescribe to a blank string, or to
  u(describe) to show the description.
 
See also: enter, @enter, ENTER_OK, @describe, look, @idescformat, VERBS
@ALEAVE
  @leave <object>[=<message>]
  @oleave <object>[=<message>]
  @oxleave <object>[=<message>]
  @aleave <object>[=<action list>]
  
  These attributes contain the message shown to anyone leaving <object>,
  the message shown to others inside <object> when someone leaves it, the
  message shown to others in <object>'s location when someone leaves it, and 
  the actions to be taken by <object> when someone leaves it, respectively.
  
  The leaver's new location is passed in %0, if <object> has
  permission to see it there.
 
See also: leave, @oxleave, @lfail, ACTION LISTS, VERBS
@ALFAIL
  @lfail <object>[=<message>]
  @olfail <object>[=<message>]
  @alfail <object>[=<action list>]
 
  These attributes contain the message shown to objects who try to leave
  <object> and fail, the message shown to others inside <object> when
  someone fails to leave, and the actions to be taken by <object> when
  someone attempts to leave it and fails.
  
  Such a failure usually occurs because <object> is set NO_LEAVE, or
  because the person trying to leave does not pass <object>'s @lock/leave.
 
See also: leave, @leave, NO_LEAVE, locktypes, ACTION LISTS, VERBS
@ALIAS
  @alias <player>[=<name1>[;<name2>[;...;<nameN>]]]
  @alias <object>[=<string>]
 
  For players and exits, the ALIAS attribute has special meaning: it contains
  a list of aliases (separated by semicolons) which can be used instead of 
  its name to refer to the player or exit.
  
  Players can only have a limited number of aliases; the number is controlled
  by the 'max_aliases' @config option. The same rules which apply to player
  names also apply to aliases, and you cannot use another player's name as
  your alias (though you can include your own name in your aliases, and can
  change your name to one of your aliases).
  
  If the 'page_aliases' @config option is on, the first alias in the list is 
  shown along with the player's name when they page others.
  
  Exit aliases used to be a part of their name, though all newly created
  exits use @alias instead.
 
  For other types of object, @alias has no special meaning.
 
See also: @name, alias(), fullalias()
@ALLHALT
  @halt <object>[=<action list>] 
  @halt/pid <pid>
  @halt/all
  @allhalt
 
  The @halt command removes all queued actions for <object>.  If given,
  <action list> is placed in the queue for the object instead. If no action
  list is specified, the object is set HALT.
 
  If <object> is a player, it clears the queue for the player and all of 
  his objects. You can use "@halt me" to clear your own queue without 
  setting yourself HALT.
 
  Only wizards and objects with the halt @power can @halt other player's 
  objects. Note that halting an object does NOT affect any objects waiting 
  on it as a semaphore.
 
  @halt/pid will cancel a single queue entry with the given pid (the
  number in parenthesis before it in @ps). You must control the object
  that queued the command or have the halt power to do this.
 
  @halt/all is a synonym for @allhalt, and is a wizard-only command
  which halts all objects in the game in an effort to free up the queue.
  
See also: @wait, @ps, SEMAPHORES, @drain, @notify
@ALLQUOTA
  @allquota[/quiet] [<limit>]
 
  This is a God-only command which is only available if the use_quota @config
  option is true. If /quiet is not given, it displays a list of all players,
  showing how many objects they own and how many more they can create. If a
  <limit> is given, every players quota is altered either to <limit> or to
  the number of objects they currently own, whichever is higher.
  
See also: @quota, @squota
@AMAIL
  @amail <object>=<action list>
 
  Sets the actions to be taken by <object> whenever it receives @mail. 
  Admin-only, and is only triggered if enabled via the amail configuration
  option.
 
See also: @mail
@AMHEAR
  @ahear <object>[=<action list>]
  @amhear <object>[=<action list>]
  @aahear <object>[=<action list>]
 
  Sets the actions to be taken after the object's @listen is matched.
  @ahear will only be triggered by sound made by other objects, and
  @amhear is only triggered by sound made by <object> itself. @aahear 
  will be triggered by all matching sound, regardless of the source.
  
See also: @listen, LISTENING, ACTION LISTS
@AMOVE
  @move <object>[=<message>]
  @omove <object>[=<message>]
  @oxmove <object>[=<message>]
  @amove <object>[=<action list>]
  
  These attributes contain the message shown to <object> immediately after
  it moves, the message shown to others in the room <object> moves into, the
  message shown to objects in the location <object> leaves, and the actions 
  to be taken when <object> moves, respectively. Please note that long 
  @omoves are frequently found annoying.
 
  The <object>'s new location is in %0 and the old location it moved
  from in %1.
 
  Example:
   > @move me=You moved! You are now in the room: [name(here)].
   > @omove me=stalks into the room wearing a malevolent expression.
   > @oxmove me=stalks away, glaring.
 
See also: goto, @oxmove, ACTION LISTS, VERBS
@ANAME
  @oname <object>[=<message>]
  @aname <object>[=<action list>]
  
  Whenever <object>'s name is changed (via @name), others in the same
  location will see the contents of <object>'s ONAME attribute, prepended
  with <object>'s new name. At the same time, <object>'s ANAME attribute
  will be triggered. Both attributes receive the old name as %0, and the new
  name as %1.
  
    Example:
      > @oname me=has regenerated from %0!
      > @aname me=think >> Renamed from %0 to %1 at [time()] by %n(%#).
 
See also: @name, name(), VERBS
@APAYMENT
  @payment <object>[=<message>]
  @opayment <object>[=<message>]
  @apayment <object>[=<action list>]
  
  These attributes contain the messages shown to someone who pays <object> 
  pennies with the "give" command, the message shown to others when someone
  pays <object>, and the actions to be taken by <object> when it's paid. Each
  attribute is passed the number of pennies paid as %0.
 
  Example:
    > @payment Collecting Tin=Thank you for your donation!
    > @opayment Collecting Tin=makes a donation to charity.
    > @apayment Collecting Tin=&%# me=%0 at [time()]
 
See also: give, @cost, buy, MONEY, ACTION LISTS, VERBS
@ARECEIVE
  @receive <recipient>[=<message>]
  @oreceive <recipient>[=<message>]
  @areceive <recipient>[=<action list>]
 
  These attributes contain the message shown <recipient> when he receives an
  object (via 'get' or 'give'), the message shown to others in <recipient>'s
  location when he receives an object, and the actions to be taken by
  <recipient> when he receives an object, respectively.
  
  In all cases, %0 is the dbref of the object received. If the object was
  'give'n, %1 will be the dbref of the giver.
 
See also: give, get, @give, @success, ACTION LISTS, VERBS
@ASSERT
  @break[/queued]  <boolean>[=<action list>]
  @assert[/queued] <boolean>[=<action list>]
 
  @break stops the execution of further commands in the current action list
  if <boolean> is a true value. It doesn't affect new queue entries made by 
  previous commands in the action list. It can be useful for doing error 
  checking without having to nest @switches and suffer from delayed execution
  because of queueing.
  
  If <action list> is given, it is executed instead of the rest of the 
  commands in the current action list. By default, <action list> is run
  immediately, replacing the rest of the action list @break was called in. If
  the /queued switch is given, <action list> will instead be queued to be run
  later. @break also accepts an /inline switch, for Rhost compatability; this
  switch does nothing on PennMUSH.
 
  @assert does the inverse: it stops execution if <boolean> evaluates to
  false.
 
  See 'help @break2' for examples.
See also: ACTION LISTS, QUEUE, BOOLEAN VALUES, @switch
@ASSERT2
  Examples:
  > @va obj=$testme *: @pemit %#=You try a test ;
                       @break lt(%0,10)=@pemit %#=But you're too low! ;
                       @pemit %#=And you succeed!
  > testme 0
  You try a test
  But you're too low!
  
  > testme 10
  You try a test
  And you succeed!
 
  > @force me={@switch 1=1, think Third; think First; @break 1; think Second}
  First
  Third
  (The @switch is run, which queues 'think Third', think First is
   run, displaying 'First', command execution is broken (so we never
   think Second), and then the queued 'think Third' is run, displaying
   Third. If you figured that out, you have a very good understanding
   of the PennMUSH queue. :)
@ASUCCESS
  @success <object>[=<message>] 
  @osuccess <object>[=<message>]
  @asuccess <object>[=<action list>]
  
  For players and things, these attributes contain the message shown to
  someone who picks up <object> with the "get" command, the message shown
  to others when someone gets <object>, and the actions to be taken by
  <object> when someone gets it, respectively.
  
  For exits, they contain the message shown to an object passing through the
  exit <object>, the message shown in the exit's source when someone passes
  through it, and the actions to be taken by the exit when someone passes
  through it, respectively.
  
  Example:
    > @success Door=You open the door and step inside.
    > @osuccess Door=opens the door and steps inside.
    
    > @success Box=You pick up the box.
    > @osuccess Box=picks up the box.
 
See also: get, goto, @lock, SUCCESS, FAILURE, @odrop, ACTION LISTS, VERBS
@ATPORT
  @tport <object>[=<message>]
  @otport <object>[=<message>]
  @oxtport <object> [=<message>]
  @atport <object>[=<action list>]
 
  These attributes contain the message shown to <object> when it is
  teleported, the message shown to others in the room <object> is teleported
  to, the message shown to others in the room <object> is teleported from,
  and the actions to be taken by <object> when it disappears, respectively.
  
  In all of these attributes, %0 is the object which teleported <object>,
  and %1 is <object>'s old location.
  
  Example:
  > @tport me=name(%0) has teleported you from [name(%1)] to [name(here)].
  > @otport me=appears in a puff of smoke.
  > @oxtport me=disappears in a puff of smoke.
  
See also: @teleport, ACTION LISTS, VERBS
@ATRCHOWN
  @atrchown <object>/<attribute>=<new owner>
  
  This command changes the ownership of the attribute <attribute> on <object>
  to <new owner>. You can only @atrchown attributes which you can set. 
  Wizards can @atrchown to any player, while mortals can only @atrchown
  attributes to themselves. Only players can own attributes; if <new owner>
  is not a player, <new owner>'s owner is used instead.
 
See also: @atrlock, ATTRIBUTES, NON-STANDARD ATTRIBUTES
@ATRLOCK
  @atrlock <object>/<attribute>
  @atrlock <object>/<attribute=[on|off]
  
  The first form of this command tells you whether or not the given attribute
  is locked.
  
  The second form attempts to lock (for 'on') or unlock (for 'off') the given
  attribute. You automatically gain ownership of the attribute (as per 
  @atrchown) when you lock it. Locked attributes cannot be altered by anyone
  but Wizards and the attribute's owner (though the owner may be unable to
  alter the attribute for other reasons, such as not controlling <object>).
  You must be able to set an attribute in order to lock it.
 
See also: atrlock(), @atrchown, ATTRIBUTES, NON-STANDARD ATTRIBUTES
@ATTRIBUTE
  @attribute <attrib>
 
  The @attribute command displays and modifies the MUSH's standard attributes
  (see "@list/attribs" for a list of them).
  
  Since 1.8.5p1, changes to the attribute table are saved across reboots and
  shutdowns, and don't need to be placed in an @startup.
 
  The first form of the command displays the full name of the attribute
  <attrib>, along with the its attribute flags, and the dbref of the object 
  which added it to the attribute table.
  
  Continued in 'help @attribute2'.
@ATTRIBUTE2
  @attribute/access[/retroactive] <attrib>=<flag list>
  @attribute/delete <attrib>
  @attribute/rename <attrib>=<new name>
  
  @attribute/access adds <attrib> as a new standard attribute, with the
  default attribute flags <flag list>. If <attrib> is already a standard
  attribute, this command modifies its default attribute flags. Use "none"
  for <flag list> if you don't want any default attribute flags.
  
  If the /retroactive switch is given with /access, all existing copies of
  the attribute will be @atrchown'd to the player running the command, and 
  will have its flags changed to <flag list>.
  
  @attribute/delete removes a standard attribute from the table.
  @attribute/rename renames a standard attribute. 
  
  Only Wizards can modify the attribute table.
  
  Continued in 'help @attribute3'.
@ATTRIBUTE3
  @attribute/limit <attrib>=<regexp pattern>
  @attribute/enum [<delim>] <attrib>=<list of choices>
 
  @attribute/limit lets you restrict all _new_ values for an attribute to
  those that match a regexp pattern. Case insensitive. (Use (?-i) to make
  your regexp case-sensitive.)
 
  @attribute/enum lets you restrict all _new_ values for an attribute to
  match an item in a list. It will also perform partial matching on the
  list, much like a grab. Delimiter is optional, and defaults to a space.
 
  Examples:
 
    @attribute/enum sex=male female   <-- requires 'male' or 'female' as @sex
    @attribute/enum | race=Wookie|Indy 500 <- Your race can be 'wookie' or
                                              'Indy 500'
    @attribute/limit score=^\\d+$    <-- @score can only contain digits.
                                         (Remember, Penn parser eats a \)
 
See also: ATTRIBUTEs, STANDARD ATTRIBUTES, attribute flags, @set, @atrchown,
  @atrlock, @list
@AUFAIL
  @ufail <object>=[<message>]
  @oufail <object>=[<message>]
  @aufail <object>=[<action list>]
 
  Sets the message shown to a player who fails to use an object via the 'use'
  command (because they don't pass the @lock/use), the message shown to
  others in the room when a player fails to use <object>, and the actions to
  be taken by <object> when someone fails to use it, respectively.
 
  Note that these attributes are @ufail, NOT @ufailure, for
  TinyMUSH compatibility.
  
  Although the Use @lock also restricts who can trigger $-commands or
  ^-listens on an object, these attributes will not be triggered for those
  failures. Instead, the COMMAND_LOCK`* and LISTEN_LOCK`* attributes are
  triggered. See 'help failure' for more information.
  
See also: use, @use, FAILURE, ACTION LISTS, VERBS
@AUNFOLLOW
  @unfollow <object>[=<message>]
  @ounfollow <object>[=<message>]
  @aunfollow <object>[=<action list>]
  
  Sets the message shown to someone who stops following <object>,
  the message shown to others in the room, and the actions to be taken
  by <object> when someone stops following it, respectively. The name
  of the person stopping following <object> is automatically prepended
  to the @ounfollow message.
 
See also: follow, unfollow, @follow, followers(), ACTION LISTS, VERBS
@AUSE
  @use <object>[=<message>]
  @ouse <object>[=<message>]
  @ause <object>[=<action list>]
  
  These attributes contain the message shown to someone who successfully uses
  <object>, the message shown to others when someone uses <object>, and the
  actions to be taken by <object> when it is used, respectively.
  
  Note that, if <object> has a CHARGES attribute set and it does not contain
  a number greater than 0, the RUNOUT attribute is triggered instead of the
  AUSE attribute. See 'help @charges' for more information.
  
  Example:
    > @use Jack-In-The-Box=You wind the handle.
    > @ouse Jack-In-The-Box=winds the handle.
    > @ause Jack-In-The-Box=@wait 3=POSE pops up with a bang!
    > use Jack-In-The-Box
    
See also: use, @charges, @runout, ACTION LISTS, VERBS
@AWAY
  @away <player>[=<message>]
 
  If <message> evaluates to something non-null, it will be shown to anyone
  who pages <player> when she is not connected.
  
  Example: 
    > @away me=I'm not here, please send me @mail instead.
 
See also: @idle, @haven
@AZENTER
  @zenter <object>[=<message>]
  @ozenter <object>[=<message>]
  @azenter <object>[=<action list>]
  
  These attributes set the message shown to a player when he enters the zone
  <object>, the message shown to others in the room the player enters when
  he enters the zone, and the action to be taken by the zone <object> when 
  the player moves into an area zoned to it.
 
  Entry into a new zone is said to occur when a player goes from a room not 
  in the zone to a room in the zone. "Room" in this context means the 
  player's absolute room (outermost container), so entering and leaving 
  unzoned objects within a zoned room doesn't trigger these.
 
  Zone entry is assumed to occur before room entry, so these are
  triggered before the room's @[oa]enter.
 
See also: @zleave, ZONES, @zemit, zwho(), VERBS
@AZLEAVE
  @zleave <object>[=<message>]
  @ozleave <object>[=<message>]
  @azleave <object>[=<action list>]
  
  These attributes set the message shown to a player when he leaves the zone
  <object>, the message shown to others in the room he left when leaving
  the zone, and the actions to be taken by <object> with a player leaves
  an area zoned to it.
  a zone (@zleave), the message shown to others in the room in the
  old zone when the player leaves (@ozleave), and the action triggered
  by the leave-taking (@azleave).
 
  Leaving a zone is said to occur when a player goes from a room in the zone
  to a room not in the zone. "Room" in this context means the player's
  absolute room (outermost container), so entering and leaving unzoned 
  objects within a zoned room doesn't trigger these.
 
  Zone leaving is assumed to occur after room leaving, so these are
  triggered after the room's @[oa]leave.
 
See also: @zenter, ZONES, @zemit, zwho(), VERBS
@BOOT
  @boot[/silent] <player>
  @boot/port[/silent] <descriptor number>
  @boot/me
 
  The first form of this command disconnects all of <player>'s connections
  from the game.
  
  The /port switch disconnects a particular descriptor (as shown under "Des"
  in the Wizard WHO, returned by lports() and ports(), etc).
  
  If the /silent switch is given, the message telling <player> he was booted 
  is suppressed.
 
  The /me switch boots all descriptors for the player using the command 
  which have been idle for over 1 minute. Players can use this command to 
  terminate hung connections.
 
  Only admin and those with the "boot" power can @boot other players.
 
See also: QUIT, LOGOUT
@BREAK
  @break[/queued]  <boolean>[=<action list>]
  @assert[/queued] <boolean>[=<action list>]
 
  @break stops the execution of further commands in the current action list
  if <boolean> is a true value. It doesn't affect new queue entries made by 
  previous commands in the action list. It can be useful for doing error 
  checking without having to nest @switches and suffer from delayed execution
  because of queueing.
  
  If <action list> is given, it is executed instead of the rest of the 
  commands in the current action list. By default, <action list> is run
  immediately, replacing the rest of the action list @break was called in. If
  the /queued switch is given, <action list> will instead be queued to be run
  later. @break also accepts an /inline switch, for Rhost compatability; this
  switch does nothing on PennMUSH.
 
  @assert does the inverse: it stops execution if <boolean> evaluates to
  false.
 
  See 'help @break2' for examples.
See also: ACTION LISTS, QUEUE, BOOLEAN VALUES, @switch
@BREAK2
  Examples:
  > @va obj=$testme *: @pemit %#=You try a test ;
                       @break lt(%0,10)=@pemit %#=But you're too low! ;
                       @pemit %#=And you succeed!
  > testme 0
  You try a test
  But you're too low!
  
  > testme 10
  You try a test
  And you succeed!
 
  > @force me={@switch 1=1, think Third; think First; @break 1; think Second}
  First
  Third
  (The @switch is run, which queues 'think Third', think First is
   run, displaying 'First', command execution is broken (so we never
   think Second), and then the queued 'think Third' is run, displaying
   Third. If you figured that out, you have a very good understanding
   of the PennMUSH queue. :)
@BUY
  @buy <object>[=<message>]
  @obuy <object>[=<message>]
  @abuy <object>[=<message>]
  
  These attributes contain the message shown to a player who successfully
  buys something from <object> using the "buy" command, the message shown to 
  others in the room when something is bought from <object> (prefixed with
  the buyer's name), and the actions to be taken by <object> when something
  is bought from it, respectively. Each attribute is passed the item being
  purchased as %0 and the amount paid for it as %1.
 
  Example:
    > @buy Vendor=udefault(me/buy`%0,You buy %0 for %1 [money(%1)]., %0, %1)
    > @obuy Vendor=hands some money to [name(me)] for [art(%0)] %0.
    > @abuy Vendor=:goes into the storeroom. ; @wait 2=:returns with %n's %0.
 
See also: buy, @pricelist, MONEY, @lock, VERBS, @cost, give
@CEMIT
  @cemit[/nosiy|/silent][/noeval] <channel>=<message>
  @nscemit[/nosiy|/silent][/noeval] <channel>=<message>
  cemit(<channel>, <message>[, <noisy>])
  nscemit(<channel>, <message>[, <noisy>])
 
  @cemit emits <message> on <channel>. It does not include your name. The
  channel prefix is included if the /noisy switch is given, and omitted if
  /silent is given - if neither is given, the default behaviour is controlled
  by the noisy_cemit @config option. The /noeval switch prevents <message> 
  from being evaluated.
  
  You must be able to speak on the channel, or have the See_All and Pemit_All
  @powers, to @cemit on the channel.
 
  @nscemit is exactly the same, but does not produce nospoof information when
  used by players with the Can_spoof @power.
 
  cemit() and nscemit() work the same as @cemit/silent and @nscemit/silent,
  respectively. If <noisy> is given as a true value, they work like
  @cemit/noisy and @nscemit/noisy, respectively, instead.
 
  @cemit is intended for use in writing extended chat systems. 
 
See also: @chat
@CHANNEL
 
  The @channel command is used to add, join, list and modify channels in the
  chat system. It takes many different switches.
 
  Help for @channel is split into a number of topics. Please see 'help 
  @channel <topic>' for more, where <topic> is one of the words below. For
  help on a specific switch to @channel, use 'help @channel/<switch>'.
 
  Joining    - How to find, join, and leave channels
  Other      - Setting channel titles, recalling previous chat messages
  Admin      - Adding, deleting and modifying channels
 
See also: CHAT, @chat, @cemit
@CHANNEL ADMIN
  @channel/add <channel>[=<privs>]
  @channel/privs <channel>=<privs>
  @channel/describe <channel>=<description>
  @channel/buffer <channel>=<lines>
  @channel/decompile[/brief] <prefix>
 
  @channel/add creates a new channel named <channel>, with the given <privs>.
  If you don't specify the <privs>, the defaults set in the channel_flags
  @config option are used. There may be a limit on the number of channels
  mortals can create, and a charge for doing so; see '@config chat'.
 
  @channel/privs changes the privs for <channel>. See 'help @channel privs'
  for an explaination of all the possible priviledges.
 
  @channel/describe sets a description for the channel, which is shown to
  players in @channel/what. Limited to 256 characters. If the desc includes
  commas, the whole desc should be enclosed in {}s.
 
  @channel/buffer sets the maximum number of full-length lines (8192 bytes)
  that the channel will buffer for @channel/recall. Many more shorter lines
  may actually be buffered. Setting it to 0 turns off buffering.
 
  @channel/decompile produces a decompile of all channels whose name begin
  with <prefix>, showing the commands needed to recreate the channels. If
  the /brief switch is also given, commands to re-add members of the channel
  are omitted.
 
  Continued in 'help @channel admin2'.
@CHANNEL ADMIN2
  @channel/chown <channel>=<new owner>
  @channel/rename <channel>=<new name>
  @channel/wipe <channel>
  @channel/delete <channel>
 
  @channel/chown changes the owner of <channel>. It can only be used by
  Wizards.
 
  @channel/rename changes the name of <channel>.
 
  @channel/wipe removes all players from <channel>.
 
  @channel/delete completely removes <channel>. It can only be used by
  Wizards or the owner of <channel>.
 
  Continued in 'help @channel admin3'.
See also: @clock
@CHANNEL ADMIN3
  @channel/mogrifier <channel>=<object>
 
  @channel/mogrifier sets the mogrifier object for <channel>. <object> must
  be an object that you control.
 
  Mogrifiers let you tweak every aspect of a channel's output, before it
  goes to individual players' @chatformats. 
 
  Before it begins mogrifying, three mogrifiers that alter the way chats are
  handled are run, using the same arguments as @chatformat (except that %5 is
  not set). First, <object>'s MOGRIFY`BLOCK attribute is called. If 
  MOGRIFY`BLOCK returns a non-empty string, then the resultant string is sent
  back to the player, and no message is broadcast on the channel.
  
  Next, MOGRIFY`OVERRIDE is called. If it returns a true value, player's
  individual @chatformats will not be called for the message.
  
  The MOGRIFY`NOBUFFER attribute is then called. If it returns a true value,
  the message will not be included in the channel's recall buffer.
 
  Continued in 'help mogrify2'.
@CHANNEL JOINING
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL JOINING2
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL LIST
Here's the legend for reading the @channel/list output:
 
Channel Name               Num Users Num Msgs  Access Locks     Status   Buf
Sample                             1        0 [DPTWQHo jsmvh*] [On  QHC]   4
                                               ||||||| ||||||   |   |||    |
Channel is DISABLED----------------------------/|||||| ||||||   |   |||    |
Channel allows PLAYERS--------------------------/||||| ||||||   |   |||    |
Channel allows THINGS----------------------------/|||| ||||||   |   |||    |
Channel is Wizard-only (W) or Admin-only (A)------/||| ||||||   |   |||    |
Channel is QUIET-----------------------------------/|| ||||||   |   |||    |
Channel is HIDE_OK----------------------------------/| ||||||   |   |||    |
Channel is OPEN (non-members can speak on it)--------/ ||||||   |   |||    |
Channel has @clock/join set----------------------------||||||   |   |||    |
Channel has @clock/speak set----------------------------/||||   |   |||    |
Channel has @clock/mod set-------------------------------/|||   |   |||    |
Channel has @clock/see set--------------------------------/||   |   |||    |
Channel has @clock/hide set--------------------------------/|   |   |||    |
Player is the owner of the channel--------------------------/   |   |||    |
Player is currently on/off/gagging the channel------------------/   |||    |
If on, player has the channel muted---------------------------------/||    |
If on, player is hiding on the channel-------------------------------/|    |
If on, player has @channel/combined the channel-----------------------/    |
Size of the channel buffer in full-length lines----------------------------/
@CHANNEL OTHER
  @channel/title <channel>[=<message>]
  @channel/recall[/quiet] <channel>[=<lines|duration>[, <start line>]]
 
  @channel/title lets you set a channel title, which is shown before your name
  whenever you speak on a channel. If =<message> is omitted, your current
  title on the channel is shown. Use an empty <message> to clear your title.
  The maximum length of titles is set in the 'chan_title_len' @config option.
 
  @channel/recall shows you the most recent messages on the channel, if it has
  been given a recall buffer with @channel/buffer. With no extra arguments,
  the 10 most recent lines are shown. You can specify either a number of
  <lines> to show, or a <duration> (such as '1h30m') to show only that many
  lines/messages that recent. If <start line> is given, lines before the
  <start line>th will not be shown. Timestamps are shown with the messages
  unless /quiet is given.
 
See also: crecall(), cbufferadd(), @channel/buffer
@CHANNEL PRIVS
  The <privs> for @channel/add and @channel/privs should be a space-separated
  list of priv names, or a string of priv chars, from the list below:
 
  * "player" (P) - players may use the channel
  * "object" (O) - non-players may use the channel
  * "admin" (A) - only royalty/wizards/chat_privs may use the channel
  * "wizard" (W) - only wizards may use the channel
  * "quiet" (Q) - channel will not show connection messages
  * "open" (o) - you may speak even if you aren't listening to the channel
  * "hide_ok" (H) - you may hide from the channel who list
  * "notitles" (T) - chantitles are not displayed in channel messages
  * "nonames" (N) - player names are not displayed in channel messages
  * "nocemit" (C) - @cemit is prohibited on the channel
  * "interact" (I) - Interaction rules (defined in local.c) are applied to 
    the channel
  * "disabled" (D) - noone can join or speak on the channel
 
  The default privs are determined by the 'channel_flags' @config option.
 
  Example:
    > @channel/add Public=player quiet open nocemit
 
See also: cflags(), clflags()
@CHANNEL/ADD
  @channel/add <channel>[=<privs>]
  @channel/privs <channel>=<privs>
  @channel/describe <channel>=<description>
  @channel/buffer <channel>=<lines>
  @channel/decompile[/brief] <prefix>
 
  @channel/add creates a new channel named <channel>, with the given <privs>.
  If you don't specify the <privs>, the defaults set in the channel_flags
  @config option are used. There may be a limit on the number of channels
  mortals can create, and a charge for doing so; see '@config chat'.
 
  @channel/privs changes the privs for <channel>. See 'help @channel privs'
  for an explaination of all the possible priviledges.
 
  @channel/describe sets a description for the channel, which is shown to
  players in @channel/what. Limited to 256 characters. If the desc includes
  commas, the whole desc should be enclosed in {}s.
 
  @channel/buffer sets the maximum number of full-length lines (8192 bytes)
  that the channel will buffer for @channel/recall. Many more shorter lines
  may actually be buffered. Setting it to 0 turns off buffering.
 
  @channel/decompile produces a decompile of all channels whose name begin
  with <prefix>, showing the commands needed to recreate the channels. If
  the /brief switch is also given, commands to re-add members of the channel
  are omitted.
 
  Continued in 'help @channel admin2'.
@CHANNEL/BUFFER
  @channel/add <channel>[=<privs>]
  @channel/privs <channel>=<privs>
  @channel/describe <channel>=<description>
  @channel/buffer <channel>=<lines>
  @channel/decompile[/brief] <prefix>
 
  @channel/add creates a new channel named <channel>, with the given <privs>.
  If you don't specify the <privs>, the defaults set in the channel_flags
  @config option are used. There may be a limit on the number of channels
  mortals can create, and a charge for doing so; see '@config chat'.
 
  @channel/privs changes the privs for <channel>. See 'help @channel privs'
  for an explaination of all the possible priviledges.
 
  @channel/describe sets a description for the channel, which is shown to
  players in @channel/what. Limited to 256 characters. If the desc includes
  commas, the whole desc should be enclosed in {}s.
 
  @channel/buffer sets the maximum number of full-length lines (8192 bytes)
  that the channel will buffer for @channel/recall. Many more shorter lines
  may actually be buffered. Setting it to 0 turns off buffering.
 
  @channel/decompile produces a decompile of all channels whose name begin
  with <prefix>, showing the commands needed to recreate the channels. If
  the /brief switch is also given, commands to re-add members of the channel
  are omitted.
 
  Continued in 'help @channel admin2'.
@CHANNEL/CHOWN
  @channel/chown <channel>=<new owner>
  @channel/rename <channel>=<new name>
  @channel/wipe <channel>
  @channel/delete <channel>
 
  @channel/chown changes the owner of <channel>. It can only be used by
  Wizards.
 
  @channel/rename changes the name of <channel>.
 
  @channel/wipe removes all players from <channel>.
 
  @channel/delete completely removes <channel>. It can only be used by
  Wizards or the owner of <channel>.
 
  Continued in 'help @channel admin3'.
See also: @clock
@CHANNEL/COMBINE
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/DECOMPILE
  @channel/add <channel>[=<privs>]
  @channel/privs <channel>=<privs>
  @channel/describe <channel>=<description>
  @channel/buffer <channel>=<lines>
  @channel/decompile[/brief] <prefix>
 
  @channel/add creates a new channel named <channel>, with the given <privs>.
  If you don't specify the <privs>, the defaults set in the channel_flags
  @config option are used. There may be a limit on the number of channels
  mortals can create, and a charge for doing so; see '@config chat'.
 
  @channel/privs changes the privs for <channel>. See 'help @channel privs'
  for an explaination of all the possible priviledges.
 
  @channel/describe sets a description for the channel, which is shown to
  players in @channel/what. Limited to 256 characters. If the desc includes
  commas, the whole desc should be enclosed in {}s.
 
  @channel/buffer sets the maximum number of full-length lines (8192 bytes)
  that the channel will buffer for @channel/recall. Many more shorter lines
  may actually be buffered. Setting it to 0 turns off buffering.
 
  @channel/decompile produces a decompile of all channels whose name begin
  with <prefix>, showing the commands needed to recreate the channels. If
  the /brief switch is also given, commands to re-add members of the channel
  are omitted.
 
  Continued in 'help @channel admin2'.
@CHANNEL/DELETE
  @channel/chown <channel>=<new owner>
  @channel/rename <channel>=<new name>
  @channel/wipe <channel>
  @channel/delete <channel>
 
  @channel/chown changes the owner of <channel>. It can only be used by
  Wizards.
 
  @channel/rename changes the name of <channel>.
 
  @channel/wipe removes all players from <channel>.
 
  @channel/delete completely removes <channel>. It can only be used by
  Wizards or the owner of <channel>.
 
  Continued in 'help @channel admin3'.
See also: @clock
@CHANNEL/DESCRIBE
  @channel/add <channel>[=<privs>]
  @channel/privs <channel>=<privs>
  @channel/describe <channel>=<description>
  @channel/buffer <channel>=<lines>
  @channel/decompile[/brief] <prefix>
 
  @channel/add creates a new channel named <channel>, with the given <privs>.
  If you don't specify the <privs>, the defaults set in the channel_flags
  @config option are used. There may be a limit on the number of channels
  mortals can create, and a charge for doing so; see '@config chat'.
 
  @channel/privs changes the privs for <channel>. See 'help @channel privs'
  for an explaination of all the possible priviledges.
 
  @channel/describe sets a description for the channel, which is shown to
  players in @channel/what. Limited to 256 characters. If the desc includes
  commas, the whole desc should be enclosed in {}s.
 
  @channel/buffer sets the maximum number of full-length lines (8192 bytes)
  that the channel will buffer for @channel/recall. Many more shorter lines
  may actually be buffered. Setting it to 0 turns off buffering.
 
  @channel/decompile produces a decompile of all channels whose name begin
  with <prefix>, showing the commands needed to recreate the channels. If
  the /brief switch is also given, commands to re-add members of the channel
  are omitted.
 
  Continued in 'help @channel admin2'.
@CHANNEL/GAG
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/HIDE
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/JOIN
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/LEAVE
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/LIST
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/MOGRIFIER
  @channel/mogrifier <channel>=<object>
 
  @channel/mogrifier sets the mogrifier object for <channel>. <object> must
  be an object that you control.
 
  Mogrifiers let you tweak every aspect of a channel's output, before it
  goes to individual players' @chatformats. 
 
  Before it begins mogrifying, three mogrifiers that alter the way chats are
  handled are run, using the same arguments as @chatformat (except that %5 is
  not set). First, <object>'s MOGRIFY`BLOCK attribute is called. If 
  MOGRIFY`BLOCK returns a non-empty string, then the resultant string is sent
  back to the player, and no message is broadcast on the channel.
  
  Next, MOGRIFY`OVERRIDE is called. If it returns a true value, player's
  individual @chatformats will not be called for the message.
  
  The MOGRIFY`NOBUFFER attribute is then called. If it returns a true value,
  the message will not be included in the channel's recall buffer.
 
  Continued in 'help mogrify2'.
@CHANNEL/MUTE
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/NAME
  @channel/chown <channel>=<new owner>
  @channel/rename <channel>=<new name>
  @channel/wipe <channel>
  @channel/delete <channel>
 
  @channel/chown changes the owner of <channel>. It can only be used by
  Wizards.
 
  @channel/rename changes the name of <channel>.
 
  @channel/wipe removes all players from <channel>.
 
  @channel/delete completely removes <channel>. It can only be used by
  Wizards or the owner of <channel>.
 
  Continued in 'help @channel admin3'.
See also: @clock
@CHANNEL/OFF
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/ON
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/PRIVS
  @channel/add <channel>[=<privs>]
  @channel/privs <channel>=<privs>
  @channel/describe <channel>=<description>
  @channel/buffer <channel>=<lines>
  @channel/decompile[/brief] <prefix>
 
  @channel/add creates a new channel named <channel>, with the given <privs>.
  If you don't specify the <privs>, the defaults set in the channel_flags
  @config option are used. There may be a limit on the number of channels
  mortals can create, and a charge for doing so; see '@config chat'.
 
  @channel/privs changes the privs for <channel>. See 'help @channel privs'
  for an explaination of all the possible priviledges.
 
  @channel/describe sets a description for the channel, which is shown to
  players in @channel/what. Limited to 256 characters. If the desc includes
  commas, the whole desc should be enclosed in {}s.
 
  @channel/buffer sets the maximum number of full-length lines (8192 bytes)
  that the channel will buffer for @channel/recall. Many more shorter lines
  may actually be buffered. Setting it to 0 turns off buffering.
 
  @channel/decompile produces a decompile of all channels whose name begin
  with <prefix>, showing the commands needed to recreate the channels. If
  the /brief switch is also given, commands to re-add members of the channel
  are omitted.
 
  Continued in 'help @channel admin2'.
@CHANNEL/RECALL
  @channel/title <channel>[=<message>]
  @channel/recall[/quiet] <channel>[=<lines|duration>[, <start line>]]
 
  @channel/title lets you set a channel title, which is shown before your name
  whenever you speak on a channel. If =<message> is omitted, your current
  title on the channel is shown. Use an empty <message> to clear your title.
  The maximum length of titles is set in the 'chan_title_len' @config option.
 
  @channel/recall shows you the most recent messages on the channel, if it has
  been given a recall buffer with @channel/buffer. With no extra arguments,
  the 10 most recent lines are shown. You can specify either a number of
  <lines> to show, or a <duration> (such as '1h30m') to show only that many
  lines/messages that recent. If <start line> is given, lines before the
  <start line>th will not be shown. Timestamps are shown with the messages
  unless /quiet is given.
 
See also: crecall(), cbufferadd(), @channel/buffer
@CHANNEL/RENAME
  @channel/chown <channel>=<new owner>
  @channel/rename <channel>=<new name>
  @channel/wipe <channel>
  @channel/delete <channel>
 
  @channel/chown changes the owner of <channel>. It can only be used by
  Wizards.
 
  @channel/rename changes the name of <channel>.
 
  @channel/wipe removes all players from <channel>.
 
  @channel/delete completely removes <channel>. It can only be used by
  Wizards or the owner of <channel>.
 
  Continued in 'help @channel admin3'.
See also: @clock
@CHANNEL/TITLE
  @channel/title <channel>[=<message>]
  @channel/recall[/quiet] <channel>[=<lines|duration>[, <start line>]]
 
  @channel/title lets you set a channel title, which is shown before your name
  whenever you speak on a channel. If =<message> is omitted, your current
  title on the channel is shown. Use an empty <message> to clear your title.
  The maximum length of titles is set in the 'chan_title_len' @config option.
 
  @channel/recall shows you the most recent messages on the channel, if it has
  been given a recall buffer with @channel/buffer. With no extra arguments,
  the 10 most recent lines are shown. You can specify either a number of
  <lines> to show, or a <duration> (such as '1h30m') to show only that many
  lines/messages that recent. If <start line> is given, lines before the
  <start line>th will not be shown. Timestamps are shown with the messages
  unless /quiet is given.
 
See also: crecall(), cbufferadd(), @channel/buffer
@CHANNEL/UNCOMBINE
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/UNGAG
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/UNHIDE
  @channel/gag [<channel>][=<yes|no>]
  @channel/mute [<channel>][=<yes|no>]
  @channel/hide [<channel>][=<yes|no>]
  @channel/combine [<channel>][=<yes|no>]
 
  @channel/gag allows you to stay on a channel but stop receiving messages on
  it. Channels are automatically ungagged when you disconnect. You cannot
  speak on channels you're gagging unless they have the "open" priv.
 
  Channels without the 'quiet' priv broadcast messages when players connect or
  disconnect from the MUSH. You can use @channel/mute to suppress these
  messages if you don't want to see them.
 
  On channels with the 'hide_ok' priv, @channel/hide lets you hide from the
  @channel/who list if you pass the channel's @clock/hide.
 
  Connect and disconnect messages across all channels you have marked with
  @channel/combine will be combined into a single message with a |-separated
  list of all channel names. Only players can use this.
 
  For all four of these commands, you can specify a single channel to affect,
  or omit <channel> to affect all channels you're on. To undo the
  gag/mute/hide, either use @channel/<switch> [<channel>]=no or
  @channel/un<switch> [<channel>].
  
See also: @channel/who, cstatus(), cowner(), cflags(), channels(),
  @channel/privs
@CHANNEL/WHAT
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/WHO
  @channel/list [<prefix>]
  @channel/what [<prefix>]
  @channel/who <channel>
  @channel/on <channel>[=<player>]
  @channel/off <channel>[=<player>]
 
  @channel/list shows a list of all the channels you can see, along with some
  basic information such as whether you are on the channel, how it's locked,
  etc. 'help @channel list' explains the output in detail. If a <prefix> is
  given, only channels whose names begin with <prefix> are shown.
 
  @channel/what shows the name, description, owner, priv flags, mogrifier and 
  buffer size for all channels, or all channels whose names begin with
  <prefix> if one is given.
 
  @channel/who lists all the players on the given channel.
 
  @channel/on and @channel/off add or remove you from the given <channel>.
  You only hear messages for channels you're on, and most channels require you
  to join them before you can speak on them. /join and /leave are aliases for
  /on and /off.
 
  Continued in 'help @channel joining2'.
@CHANNEL/WIPE
  @channel/chown <channel>=<new owner>
  @channel/rename <channel>=<new name>
  @channel/wipe <channel>
  @channel/delete <channel>
 
  @channel/chown changes the owner of <channel>. It can only be used by
  Wizards.
 
  @channel/rename changes the name of <channel>.
 
  @channel/wipe removes all players from <channel>.
 
  @channel/delete completely removes <channel>. It can only be used by
  Wizards or the owner of <channel>.
 
  Continued in 'help @channel admin3'.
See also: @clock
@CHARGES
  @charges <object>[=<integer>]
  @runout <object>[=<action list>]
 
  These attributes can limit how many times an object can be successfully
  "use"d. When you "use" an object with a CHARGES attribute set, the object's
  AUSE attribute is only triggered if CHARGES is a positive integer. When
  CHARGES is less than 1 (or not a number), the object's RUNOUT attribute is
  triggered instead.
  
  When the CHARGES attribute is present and AUSE is triggered, the value of
  the CHARGES attribute is automatically decreased by 1. When no CHARGES 
  attribute is set, AUSE is always triggered.
  
  See 'help charges2' for an example.
 
See also: use, @ause, ACTION LISTS
@CHAT
  @chat <channel>=<message>
  +<channel> <message>
 
  The @chat command is used to speak on channels. Everyone on the channel
  will see your message, and it will be added to the channel's recall
  buffer, if it has one. If <message> begins with a ':' or ';' it will be
  posed (or semiposed) instead of spoken. You will usually need to join a
  channel before you can speak on it.
 
  +<channel> <message> is short-hand for the @chat command.
 
  Example:
  > @chat pub=Hello
  <Public> Mike says, "Hello"
  > +pub :waves
  <Public> Mike waves
 
See also: @channel, @cemit
@CHAT MOGRIFYING
  @channel/mogrifier <channel>=<object>
 
  @channel/mogrifier sets the mogrifier object for <channel>. <object> must
  be an object that you control.
 
  Mogrifiers let you tweak every aspect of a channel's output, before it
  goes to individual players' @chatformats. 
 
  Before it begins mogrifying, three mogrifiers that alter the way chats are
  handled are run, using the same arguments as @chatformat (except that %5 is
  not set). First, <object>'s MOGRIFY`BLOCK attribute is called. If 
  MOGRIFY`BLOCK returns a non-empty string, then the resultant string is sent
  back to the player, and no message is broadcast on the channel.
  
  Next, MOGRIFY`OVERRIDE is called. If it returns a true value, player's
  individual @chatformats will not be called for the message.
  
  The MOGRIFY`NOBUFFER attribute is then called. If it returns a true value,
  the message will not be included in the channel's recall buffer.
 
  Continued in 'help mogrify2'.
@CHATFORMAT
  @chatformat <object>[=<message>]
 
  The chatformat attribute is evaluated when an object receives a channel 
  message. If the attribute exists, its evaluated result is shown to the
  object instead of the default message. If the attribute exists but returns
  nothing, the object will not see anything.
  
  Registers:
    %0:  The 'type' of the message. It is a single character that
         will always be set:
           '"', ';' or ':' for say, semipose and pose, respectively.
           '|' for an @cemit.
           '@' for a "system" message - such as "Walker has connected."
    %1:  The channel name. e.g: "Public", "Admin", "Softcode"
    %2:  The message as typed (post-evaluation, if necessary) by the
         speaker. Be warned, though - if type is '@', then %2 will
         contain the entire message, and will include the name of
         the speaker that caused it.
    %3:  The speaker name, unless channel is set NO_NAME.
    %4:  The speaker's channel title, unless none is set, or the
         channel is NO_TITLE.
    %5:  The default message, as shown when no chatformat is set.
 
    If the channel is NO_NAME, and the speaker either has no title or
    the channel is also set NO_TITLE, then %3 will be "Someone".
 
  Continued in 'help @chatformat2'.
See also: @chat, @pageformat, @message, speak(), mogrify
@CHATFORMAT2
  Examples:
 
  Walker's preferred @chatformat, which strips all ansi out, wraps
  every line to your width and prefixes them with <ChannelName>:
 
    @chatformat me=<%1> [switch(%0,@,%2,edit(wrap(speak(&[if(%4,%4%b)]%3,
         %0[stripansi(%2)]),sub(width(%!),add(4,strlen(%1)))),%r,%r<%1>%b))]
 
  If you're on a system with chat_strip_quote set to "no", you might
  want to change the "%0%2" arg to speak() to '[switch(%0,",%2,%0%2)]'
 
  Suppose you want it just like the old version, but anytime somebody
  says your name, you want it all in red:
 
    @chatformat me=ansi(switch(%2,*[name(%!)]*,r,n),%5)
 
  See 'help @chatformat3' for more examples.
@CHATFORMAT3
  A popular feature in clients now available in PennMUSH directly:
  Let's suppose you want "Public" channel chatter to all be green,
  "Softcode" to be blue and "Admin" to be cyan.
 
    @chatformat me=ansi(switch(%1,Public,g,Softcode,b,Admin,c,n),%5)
 
  Maybe you dislike players who re-@name themselves a lot:
 
    &playernames me=#6061:Walker #7:Javelin #6388:Cheetah
    @chatformat me=<%1> [switch(%0,@,%2,speak(&[if(%4,%4%b)][firstof(
           after(grab(v(playernames),%#:*),:),%3)],%2))]
 
  Or you're writing a loggerbot, and you want to convert all channel
  input to HTML:
 
    @chatformat me=CHAT:%1:[edit(switch(%0,@,%2,speak(if(%4,%4%b)%3,%0%2)),
           &,&amp;,<,&lt;,>,&gt;,%r,<BR>,%b%b,%b&nbsp;)]
     or
    @chatformat me=CHAT:%1:[render(switch(%0,@,%2,speak(if(%4,%4%b)%3,%0%2)),
           html)]
    
@CHOWN
  @chown[/preserve] <object>=<player>
 
  Changes the ownership of <object> to <player>. You can chown things, rooms
  or exits. Players can't be @chown'd - they always own themselves. To chown 
  a thing, you have to be carrying it. If you do not own an object, you can 
  only chown it if it has the CHOWN_OK flag. If you're not a Wizard, you can 
  only @chown objects to yourself or a Zone Master whose zone-lock you pass.
 
  Normally, @chown'ing an object clears privileged flags and powers, and sets
  the object halt. Wizards can use @chown/preserve to avoid this. Doing this 
  to an active object with queued commands is not recommended, and may have 
  strange and insecure effects.
 
  Examples:
    > @chown here=me (for a room)
    > @chown box=Soundwave (for a thing)
 
See also: CHOWN_OK, Zone Masters, @chownall, owner()
@CHOWNALL
  @chownall[/preserve] <player>[=<new owner>]
 
  This command @chowns all objects currently owned by <player> to the player
  <new owner>, or to the person running the command if no <new owner> is
  given. All the objects will have priviledged flags and powers cleared, and 
  be set halt, unless the /preserve switch is given.
  
  This command can only be used by Wizards.
 
See also: @chown
@CHZONE
  @chzone[/preserve] <object>=<zone> 
  @chzone <object>=none
 
  The first form of this command changes the zone of <object> to
  <zone>.  This puts the object on that zone and may (if the
  zone_control_zmp_only @config option is off) allow anyone who passes
  the Zone @lock of <zone> to control <object>. Any kind of object can
  be @chzoned, and any kind of object can be used as a zone.
 
  The second form of this command removes <object> from its current
  zone, leaving it unzoned. Anyone can reset the zone of an object he
  owns.
 
  If a player is @chzoned, any objects he creates from that point on will
  automatically be on the same zone. Objects the player already owns are
  not affected. Players can only @chzone themselves to a zone if they own
  it, though wizards can @chzone players to any zone.
  
  Continued in 'help @chzone2'.  
@CHZONE2
  To see the Zone of an object, you can use either 'brief' or
  'examine' to examine it. The Zone is listed on the same line as the
  Owner of the object.
 
  Players can @chzone objects they own if they own the zone object or
  if they pass its @lock/chzone.  Wizards can @chzone objects to any
  zone.
  
  If <zone> does not have a Zone @lock when something is @chzoned to
  it, the lock is automatically set to =<zone> (see 'help @lock' for
  more info).
 
  Whenever an object besides a player is @chzoned to a zone object,
  the WIZARD, ROYALTY, and TRUST flags will be reset, as will all
  @power's (for security purposes). For similar reasons, it is
  strongly recommended that you do not @chzone admin- or wizard-owned
  objects to any zone that less privileged players have access
  to. Wizards can use the /preserve switch to prevent this reset.
 
See also: ZONES, @chzoneall, zone()
@CHZONEALL
  @chzoneall[/preserve] <player>=<zone object>
 
  Changes the zone of all objects owned by <player> to <zone object>.
  If <zone object> is "none", the zone is reset to NOTHING. Only
  wizards may use this command.
  
See also: @chzone, ZONES
@CLOCK
  @clock/join <channel>[=<key>]
  @clock/speak <channel>[=<key>]
  @clock/see <channel>[=<key>]
  @clock/hide <channel>[=<key>]
  @clock/mod <channel>[=<key>]
 
  The @clock command modifies the @lock-style lock on a chat channel. If no 
  <key> is specified, the lock is removed. See 'help lockkeys' for an
  explaination of <key>.
 
  The "join" lock restricts who can join the channel.
  The "speak" lock restricts who can speak on the channel.
  The "see" lock restricts who can see the channel on @channel/list
  The "hide" lock restricts @channel/hide if the channel is hide_ok.
  The "mod" lock restricts who can modify the channel. If you pass the
  mod lock on the channel, you can do anything short of deleting it.
 
  When new channels are added, the mod lock is set to the creator/owner
  (=<creator>), and all other locks are unlocked.
  
  Continued in 'help @clock2'.
@CLOCK2
  Locks are checked as if they were set on the object attemping to pass
  them - for example, in the channel lock:
    > @clock/join Public=test/1
  the attribute "test" will be evaluated on the object trying to join the
  Public channel.
 
  You can use indirect @clocks to lock a channel to an @lock on an object.
  Objects attempting to pass the lock must be able to see the indirect lock,
  so it's recommended you set either the lock or the object VISUAL. This
  channel can only be joined by objects which aren't set UNFINDABLE:
 
  > @clock/join unfindchannel=@#10
  > @lock/user:ChanJoinLock #10=!flag^unfindable
  > @lset #10/ChanJoinLock=VISUAL   OR   @set #10=VISUAL
 
  @clock                  Corresponding default user: lock for object
  join                    ChanJoinLock
  speak                   ChanSpeakLock
  see                     ChanSeeLock
  hide                    ChanHideLock
  mod                     ChanModLock
 
  If you want to store different locks for different channels on the same
  object, you can use a specific indirect lock instead of the default one:
 
  > @lock/user:onechanneljoin #10=flag^foo
  > @clock/join onechannel=@#10/onechanneljoin
  > @lock/user:anotherchanneljoin #10=flag^bar
  > @clock/join anotherchannel=@#10/anotherchanneljoin
 
See also: clock(), @lock
@CLONE
  @clone <object>[=<new name>[, <dbref>]]
  @clone/preserve <object>[=<new name>[, <dbref>]]
 
  This command creates a copy of <object>. The clone will have the same name
  as the original unless a <new name> is given for it. You can only clone
  things, rooms and exits, not players. You must control <object>. The new
  object will be owned by the player who performs the @clone, not the owner
  of the original <object>.
  
  When cloning things and exits, the clone will be placed in your current
  location, not the location of <object>. When cloning rooms, the exits and
  contents in the room are not cloned as well.
 
  The cloned object will have the same modification time as the original
  object, to make tracking revisions easier, but will have a different 
  creation time.
  
  Normally, the Wizard and Royalty flags, @powers and @warnings are stripped
  from the cloned object, but Wizards may use the /preserve flag to prevent
  this.
  
  The clone will normally be created with the first available dbref,
  but Wizards and objects with the pick_dbref power may specify the
  <dbref> of a garbage object to use that instead.
 
  To clone a room and all its exits, use code like:
    > @teleport setq(0,%L)[clone(here)]
    > @dolist lexits(%q0)=@clone ##
 
See also: @create, clone(), create(), @cpattr
@COMMAND
  @command <command>
  @command/<switch> <command>
  @command/alias <command>=<alias>
  @command/clone <command>=<clone>
  @command/restrict <command>=<restriction>
 
  @command can be used for adding new built-in commands, altering the way
  a built-in command works, and displaying information about how commands
  currently work.
 
  With no switches, @command shows all sorts of interesting information
  about how a command is parsed.
  
  The /alias switch creates an alias for <command>, allowing players to type
  <alias> to run <command>. The /clone switch creates a separate copy of
  <command>, which works the same initially but can be restricted, @hooked,
  etc, separately.
 
  @command/restrict can be used to restrict who can use <command>. See 'help
  restrict' for more information.
 
  Switches include:
  /add       : Add a new command that does nothing, but can be @hook'd
  /delete    : Delete a command added with @command/add or @command/alias
  /disable   : Disable a command added in the hardcode
  /enable    : Re-enable a command disabled with @command/disable
 
  The /quiet switch can be used to suppress output from @command.
 
  Continued in 'help @command2'.
@COMMAND2
  @command/add is a powerful tool that lets you create new commands which
  are matched before normal $-commands, and which can be set not to parse
  their arguments, but (via @hook) can still execute softcode like an
  $-command. Only Wizards can @command/add, and only God can @command/delete.
 
  You can use these additional switches, along with @command/add, to control
  how the new command parses its arguments:
 
  /noparse   : The command does not evaluate arguments passed to it.
  /eqsplit   : The parser parses leftside and rightside around =
  /lsargs    : Comma-separated arguments on the left side are parsed.
  /rsargs    : When used with /eqsplit, the right-side arguments are
               comma-separated and are parsed individually
 
  Any command added without the /noparse switch is provided with a
  /noeval switch itself, so if you @command/add foo, then foo's arguments
  are parsed by default, but you can call foo/noeval. Note: the $-command
  needs to make allowances for the /noeval switch in it's matching.
 
  Commands added with @command/add, like other standard commands,
  are never case-sensitive. Commands can also be added in the alias.cnf file.
 
  See 'help @command3' for examples.
See also: @hook, RESTRICT, EVALUATION ORDER
@COMMAND3
  Examples:
    > @create Dining Machine
    > &eat dining=$eat *:@remit %L=%n takes a bite of %0.
    > @command/add/noparse eat
    > @hook/override eat=dining machine,eat
    > eat meat loaf
    Walker takes a bite of meat loaf.
    > eat randword(apple tomato pear)
    Walker takes a bite of randword(apple tomato pear)
 
    > &drink dining=$^drink(/noeval)? (.*)$:@remit %L=%n drinks %2.
    > @set dining/drink=regexp
    > @command/add drink
    > @hook/override drink=dining machine,drink
    > drink reverse(tea)
    Walker drinks aet.
    > drink/noeval reverse(tea)
    Walker drinks reverse(tea).
@COMMENT
  @comment <object>[=<comment>]
 
  This is a wizard-only command which sets a COMMENT attribute on
  <object>. The comment can only be seen by other wizards and royalty.
  
See also: @@, @@()
@CONFIG
  @config
  @config [<category>|<option>]
  @config/set <option>=<value>
  @config/save <option>=<value>
  
  With no arguments, @config lists the categories of configuration options
  for the MUSH. With an argument, @config lists the options in the given
  <category>, or shows the current value of the given <option>.
  
  The wizard-only /set switch changes the value of <option> to <value>. This
  change does not last across reboots. God can also use the /save switch,
  which attempts to save the new <value> in the mush.cnf configuration file,
  as well as changing it in-game.
 
  For information about parameters, see 'help @config parameters'
@CONFIG ATTRIBS
 These options control some attribute behavior.
 
  adestroy=<boolean>: Is the @adestroy attribute used?
  amail=<boolean>: Is the @amail attribute used?
  player_listen=<boolean>: Is @listen checked on players?
  player_ahear=<boolean>: Is @ahear triggered on players?
  startups=<boolean>: Are @startup triggered at restart?
  room_connects=<boolean>: Are @aconnect and @adisconnect triggered on rooms?
  read_remote_desc=<boolean>: Can anyone remotely retrieve @descs?
  empty_attrs=<boolean>: Can attributes be set to an empty string?
  reverse_shs=<boolean>: Reverse the endedness of the
    shs password encryption? (Playing with this will break logins)
@CONFIG CHAT
 These options control chat system settings.
 
  chan_cost=<number>: How many pennies a channel costs to create.
  max_channels=<number>: How many channels can exist total.
  max_player_chans=<number>: How many channels can each non-admin
   player create? If 0, mortals cannot create channels.
  noisy_cemit=<boolean>: Is @cemit/noisy the default?
  chan_title_len=<number>: How long can @channel/title's be?
@CONFIG CMDS
 These options affect command behavior.
 
  noisy_whisper=<boolean>: Does whisper default to whisper/noisy?
  possessive_get=<boolean>: Does "get container's object" work?
  possessive_get_d=<boolean>: Does it work on disconnected players?
  link_to_object=<boolean>: Can exits have objects as their destination?
  owner_queues=<boolean>: Are command queues kept per-owner, or per-object?
  full_invis=<boolean>: Should say by a dark player show up as
   'Someone says,'?
  wiz_noaenter=<boolean>: If yes, dark players don't trigger @aenters.
  really_safe=<boolean>: Does SAFE prevent @nuking?
  destroy_possessions=<boolean>: When a player is destroyed, are their objects
   as well?
@CONFIG COSMETIC
 These are cosmetic options of various sorts.
 
  money_singular=<string>: What is one penny called?
  money_plural=<string>: What are many pennies called?
  player_name_spaces=<boolean>: Can player names have spaces in them?
  ansi_names=<boolean>: Are names in look hilighted?
  float_precision=<numbers>: How many digits after the decimal point in
   floating point numbers are kept when formatting the result of a
   floating point function?
  comma_exit_list=<boolean>: Do exits show up like North, East, and West
   or as North East West?
  count_all=<boolean>: Does the count of connected players in WHO include
   hidden connections for mortals?
 
Continued in help @config cosmetic2
@CONFIG COSMETIC2
 More cosmetic options.
 
  page_aliases=<boolean>: Are aliases included in page listings?
   For example, Foo(F) pages: Blah
  flags_on_examine=<boolean>: Are flag names included when examining
   objects?
  ex_public_attribs=<boolean>: Show visual attributes when examining objects
   you don't control?
  wizwall_prefix=<string>: Prefix for @wizwall messages.
  rwall_prefix=<string>: Prefix for @rwall messages.
  wall_prefix=<string>: Prefix for @wall messages.
  announce_connects=<boolean>: Should (dis)connects be announced to 
    non-HEAR_CONNECT players and to channels?
  chat_strip_quote=<boolean>:  Does +chan "foo strip the "?
  newline_one_char=<boolean>: Is strlen(%r) equal to 1?
  only_ascii_in_names=<boolean>: Names are ascii-only or are extended
   characters permitted?
@CONFIG COSTS
 These options control how many pennies various things cost.
 
  object_cost=<number>: How many pennies it costs to create an object.
  exit_cost=<number>: How many pennies it costs to create an exit.
  link_cost=<number>: How many pennies it costs to use @link.
  room_cost=<number>: How many pennies it costs to @dig a room.
  queue_cost=<number>: How many pennies it costs to queue a command.
   Refunded when the command executes.
  quota_cost=<number>: How much @quota goes down by for each object.
  find_cost=<number>: How many pennies it costs to use @search, @find,
   @entrances, and their function versions.
  kill_default_cost=<number>: Default cost for kill.
  kill_min_cost=<number>: Smallest amount of pennies for kill.
  kill_bonus=<number>: What percent of the pennies spent for a successful
   kill go to the victim.
@CONFIG DB
 These are database options.
 
  player_start=<dbref>: What room newly created players are in.
  master_room=<dbref>: The location of the master room.
  ancestor_room=<dbref>: If set to a good object, this is considered a global
   parent for all rooms. If -1 or a nonexistant object, then disabled.
  ancestor_exit=<dbref>: As ancestor_room for exits.
  ancestor_thing=<dbref>: As ancestor_room for things.
  ancestor_player=<dbref>: As ancestor_room for players.
  base_room=<dbref>: The starting room used to determine if other rooms
   are disconnected.
  default_home=<dbref>: The room to send things to when they're homeless.
  exits_connect_rooms=<boolean>: Is a room with any exit at all in not
   considered disconnected for FLOATING checks?
  zone_control_zmp_only=<boolean>: Do we only perform control checks on ZMPs,
   or do we check ZMOs and ZMRs too?
@CONFIG DUMP
 These options affect database saves and other periodic checks.
 
  forking_dump=<boolean>: Does the game clone itself and save in the
   copy, or just pause while the save happens?
  dump_message=<string>: Notification message for a database save.
  dump_complete=<string>: Notification message for the end of a save.
  dump_warning_1min=<string>: Notification one minute before a save.
  dump_warning_5min=<string>: Notification five minutes before a save.
  dump_interval=<time>: Seconds between database saves.
  warn_interval=<time>: Seconds between automatic @wchecks.
  purge_interval=<time>: Seconds between automatic @purges.
  dbck_interval=<time>: Seconds between automatic @dbcks.
@CONFIG FLAGS
  These options set the default flags for newly-created objects and channels.
 
  player_flags=<string>: List of flags to set on newly created players
  room_flags=<string>: List of flags to set on newly created rooms
  thing_flags=<string>: List of flags to set on newly created things
  exit_flags=<string>: List of flags to set on newly created exits
  room_flags=<string>: List of flags to set on newly created rooms
  channel_flags=<string>: List of flags to set on newly created channels
@CONFIG FUNCS
 These options affect the behavior of some functions.
 
  safer_ufun=<boolean>: Are objects stopped from evaluting attributes on
   objects with more privileges than themselves?
  function_side_effects=<boolean>: Are function side effects (functions which
   alter the database) allowed?
@CONFIG LIMITS
 Limits and other constants.
 
  max_dbref=<dbref>: The highest dbref an object can have. If 0,
   there is no limit on database size.
  max_attrs_per_obj=<number>: The maximum attributes an object can have.
  max_logins=<number>: The maximum number of connected players.
  max_guests=<number>: The maximum number of connected guests. If 0, 
   no limit. If -1, limited by the number of guest players in the db.
  max_named_qregs=<number>: The maximum number of qregs except for a-z
   and 0-9. The limit is per-localize()-call.
  connect_fail_limit=<count>: The maximum number of times in a 10 minute
   period that an IP can attempt to log in and fail. Maximum is 50,
   0 means no limit.
  idle_timeout=<time>: The number of minutes a connection can be idle
   before getting booted. 0 means no limit.
  unconnected_idle_timeout=<time>: The number of minutes a connection can be 
   sitting at the login screen before getting booted. 0 means no limit.
 
Continued in help @config limits2
@CONFIG LIMITS2
 Limits and constants, continued.
 
  whisper_loudness=<number>: The percentage chance of a whisper/noisy
   being heard.
  starting_quota=<number>: How much quota new players get.
  starting_money=<number>: How many pennies new players get.
  paycheck=<number>: How many pennies players get each day they log on.
  max_pennies=<number>: The maximum pennies an object can have.
  mail_limit=<number>: How many @mail messages someone can have.
  max_depth=<number>: How deep can @parent chains can go.
  player_queue_limit=<number>: The number of commands a player can have
   queued at once.
  queue_loss=<number>: One in <number> times, queuing a command will cost
   an extra penny that doesn't get refunded.
  queue_chunk=<number>: How many queued commands get executed in a row when
   there's no network activity pending.
 
Continued in help @config limits3
@CONFIG LIMITS3
 Limits and constants, continued.
 
  active_queue_chunk=<number>: How many queued commands get executed in a
   row when there is network activity pending.
  function_recursion_limit=<number>: The depth to which softcode functions
   can call more functions.
  function_invocation_limit=<number>: The maximum number of softcode
   functions that can be called in one command.
  guest_paycheck=<number>: How many pennies guests get each day.
  max_guest_pennies=<number>: The maximum pennies a guest can have.
  player_name_len=<number>: The maximum length of a player name.
  queue_entry_cpu_time=<number>: The maximum number of milliseconds a
   queue entry can take to run.
  use_quota=<boolean>: Controls if quotas are used to limit the number
   of objects a player can own.
 
Continued in help @config limits4
@CONFIG LIMITS4
 Limits and constants, continued
 
  max_aliases=<number>: The maximum number of aliases a player can have.
  keepalive_timeout=<time>: How often should an 'Are you still there?' query
   be sent to clients, to stop players' routers booting idle connections?
  max_parents=<number>: The maximum number of levels of parenting allowed.
  call_limit=<number>: The maximum number of times the parser can be called
   recursively for any one expression.
  chunk_migrate=<number>: Maximum number of attributes that can be moved to
   disk cache per second.
@CONFIG LOG
 These options affect logging.
 
  log_commands=<boolean>: Are all commands logged?
  log_forces=<boolean>: Are @forces of wizard objects logged?
@CONFIG NET
 Networking and connection-related options.
 
  mud_name=<string>: The name of the mush for mudname() and @version and
   the like.
  mud_url=<string>: If this is set, the welcome message for the mush is
   bracketed in <!-- ... --> for all clients, and web browsers are
   redirected to the url described in mud_url.
  use_dns=<boolean>: Are IP addresses resolved into hostnames?
  logins=<boolean>: Are mortal logins enabled?
  player_creation=<boolean>: Can CREATE be used from the login screen?
  guests=<boolean>: Are guest logins allowed?
  pueblo=<boolean>: Is Pueblo support turned on?
  sql_platform=<string>: What kind of SQL server are we using? 
                         ("mysql" or "disabled")
  sql_host=<string>: What is the hostname or ip address of the SQL server
  ssl_require_client_cert=<boolean>: Are client certificates verified in 
    SSL connections?
@CONFIG PARAMETERS
 Many of the mush's run-time options can be set from the game by
 wizards, using @config/set <option>=<new value>. Those that can be set
 with visible changes are listed below, grouped by category. See help
 @config <category> for details on each.
 
  Attribs      Chat       Cmds        Cosmetic      Costs
  Db           Dump       Flags       Funcs         Limits
  Log          Net        Tiny
 
 The categories and groups are the same as those used by @config/list.
 Values must be of the listed type for each option. They include:
 <number>, <dbref>, <boolean> (Yes/No), <time>, or <string>.
 
 Options which take a <time> will accept either a number of seconds
 or a combination of numbers followed by 's' for seconds, 'm' for
 minutes or 'h' for hours, making 1h30m and 5400 equivalent.
 
 <dbref> options can be given with or without the leading '#', so
 '1' and '#1' are the same.
 
@CONFIG TINY
 Options that help control compability with TinyMUSH servers.
 
  null_eq_zero=<boolean>: Is a null string where a number is expected
   considered a 0?
  tiny_booleans=<boolean>: Use Tiny-style boolean values where only
   non-zero numbers are true.
  tiny_trim_fun=<boolean>: Are the second and third arguments to trim()
   reversed?
  tiny_math=<boolean>: Is a string where a number is expected considered
   a 0?
  silent_pemit=<boolean>: Does @pemit default to @pemit/silent?
@CONFORMAT
  @conformat <object>[=<format>]
 
  When set, the CONFORMAT attribute is evaluated when <object> is looked at,
  and the result is displayed instead of the usual "Contents:" (for rooms)
  or "Carrying:" (for players and things) list of contents.
  
  The dbrefs of the objects which would appear in the normal contents list
  are passed to the attribute as %0 (you can use lcon(me) for a full contents
  list). A list of the names of these objects as they would appear in the
  default contents list is passed as %1, |-delimited.
 
  Q-registers (set via setq() and similar functions) are inherited from the
  @descformat, and passed on to the @exitformat.
 
  Examples:
    Show the normal contents list, but in upper-case:
    > @conformat here=edit(ucstr(%1), |, %r)
    
    Show just the object names (with no ansi) in a table:
    > @conformat here=table(iter(%0, name(%i0), %b, |),  20, width(%#), |)
 
See also: look, @exitformat, @nameformat, @descformat, @invformat,
    @idescformat
@COST
  @cost <object>[=<amount>]
  
  The COST attribute contains the number of pennies that must be given to
  <object> to trigger its @pay/@opay/@apay attributes. If less than this
  amount is given, the money will be refused, and if more is given, the
  difference is refunded.
  
  This attribute is evaluated, with the amount being given passed as %0.
  If the attribute returns a number less than 0, the money will be refused.
  Non-players must have this attribute set in order to receive pennies.
  Players who don't have a COST always accept the amount of pennies given.
 
  Example:
    > @cost Exit Machine=10
    > @apay Exit Machine=@open %n-exit 
    > @pay Exit Machine=Your exit has been created.  
 
    > give Exit Machine=10
    Your exit has been created.
    (The exit will also have been opened by the machine.)
 
    > @cost charity=%0
    > @pay charity=Thanks for your donation of %0 [money(%0)].
 
See also: give, MONEY, @pay, money(), buy
@CPATTR
  @cpattr[/noflagcopy] <obj>/<attr>=<obj1>[/<attr1>][, ..., <objN>[/<attrN>]]
  @mvattr[/noflagcopy] <obj>/<attr>=<obj1>[/<attr1>][, ..., <objN>[/<attrN>]]
  
  @cpattr copies the <attr> attribute from <obj> to <obj1> (and any other
  objects given). By default, the new attributes will have the same name as
  the original, but you can specify a different name to be used on each
  object if you wish.
  
  @mvattr works the same, but also attempts to remove the original attribute
  after copying it.
  
  Attribute flags are copied as well, unless the /noflagcopy switch is given.
  This is recommended when copying from a non-standard attribute to a
  standard one.
 
  Example:
    > @cpattr box/test=box/test1, cube/random, tribble/describe
  would check the object "box" for an attribute named TEST and then
  copy it to the attributes TEST1 on "box", RANDOM on the object named
  "cube", and DESCRIBE on the object named "tribble".
 
    > @cpattr box/test=cube
  would copy the TEST attribute from "box" to TEST on "cube".
 
See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES, @set
@CREATE
  @create <name>[=<cost>[,<dbref>]]
 
  This command creates a new thing called <name>. Creating an object costs
  a certain number of pennies (see '@config object_cost'); you can specify
  a higher cost if you wish. This cost is refunded to you when the object 
  is destroyed.
 
  Some MUSHes choose to limit the number of objects you can create by
  setting a quota.
  
  Wizards and objects with the pick_dbref power can also specify the
  <dbref> of a garbage object to use when creating the
  object. Otherwise, the object is given the next available dbref.
 
See also: give, @quota, MONEY, @clone, create(), @dig, @open, @pcreate
@DBCK
  @dbck
  
  This is a wizard only command. It forces the database to perform a
  series of internal cleanup and consistency checks that normally run 
  approximately every 10 minutes:
 
  1. For every object, make sure its location, home, next, contents,
     parent, and zone fields are valid objects.
  2. Check for disconnected rooms that aren't set FLOATING
  3. For every exit, player, or thing, make sure there is exactly one
     way to reach it from a room by following the contents fields of
     non-exits, the next fields of non-rooms, and the exits fields of
     rooms.
  4. For every thing or player, make sure that it is in the contents
     list of its location. Make sure every exit is in the exits list
     of its location.
  5. Check that objects being used as zones have a @lock/zone.
 
  @dbck no longer performs an @purge. The results of @dbck are written
  to the game's error log, and not reported to the Wizard.
 
@DEATH
  @death <object>[=<message>]
  @odeath <object>[=<message>]
  @adeath <object>[=<action list>]
  
  These attributes contain the message shown to the killer, the message
  shown to others in the room, and the actions to be taken when <object>
  is killed.
 
  Example:
   > @death me=You have just slain Cyclonus!
   > @odeath me=falls to the ground and vanishes.
 
See also: kill, BEING KILLED, ACTION LISTS, VERBS
@DEBUGFORWARDLIST
  @debugforwardlist <object>[=<list of dbrefs>]
 
  When <object> has an @debugforwardlist attribute set, any debug output it
  produces (either because it has the DEBUG flag set, or because an attribute
  with the DEBUG attribute flag is evaluated) is forwarded to all the dbrefs
  listed in the debugforwardlist.
 
  The @debugforwardlist must be a space-seperated list of dbrefs. In order to 
  forward to an object, you must either control it, have the pemit_all power, 
  or pass its @lock/forward.
 
See also: DEBUG, @forwardlist, @lock
@DECOMPILE
  @decompile[/<switches>] <object>[=<prefix>]
  @decompile[/<switches>] <object>/<attribute patterns>[=<prefix>]
 
  @decompile outputs a list of the commands that you would have to enter 
  in order to recreate <object>. Useful for either copying objects from 
  one MUSH to another, or for making logs of important objects to protect 
  against an accidental @nuke or a crash.
 
  All output lines are prefixed with <prefix>, if one is given. This is
  useful for creating client-side scripts for editing code.
 
  You can either @decompile an entire object, or just certain parts of it.
  To @decompile just a few attributes, for example, you could type:
 
      @decompile <object>/<attribute pattern> [ ... <attribute patternN>]
 
  including each attribute. Attribute patterns can be wildcards.
 
  Continued in 'help @decompile2'.
@DECOMPILE2
  @decompile takes the following switches, which can be combined:
 
  @decompile/name
    This switch causes @decompile to use the object's name, instead of its
    dbref. This is the default.
  @decompile/db
    This switch makes @decompile use the object's dbref instead of its name, 
    which is useful for editing code off-MUSH.
  @decompile/flags
    Only the code to @create the object and set flags/powers/locks is printed.
    When an <attribute pattern> is given, this switch is ignored, and
    @decompile only prints the matching attributes.
  @decompile/attribs
    Only the code to set the object's attributes is printed. Same as
    @decompile <object>/**
  @decompile/skipdefaults
    Don't output commands to set attribute flags if those flags are the
    defaults for that attribute on that MUSH.
  @decompile/tf
    Explained in 'help @decompile3'.
  
  Continued in 'help @decompile3'.
@DECOMPILE3
 
  @decompile/tf <object>[/<attribute>]
 
  The /tf works the same as if you'd typed:
    @decompile/db <obj>[/<attrs>]=[default(me/TFPREFIX, FugueEdit >%b)]
    
  with the exception that @decompile/tf does not include commands for setting
  attribute flags. If you have a TFPREFIX attribute set, the (unevaluated) 
  contents of that attribute is used as the prefix. Otherwise, the string 
  "FugueEdit > " is used. It's useful for automatically copying @decompile 
  output into your client to alter. It is highly recommended  that you set a
  TFPREFIX attribute, to prevent others from maliciously placing code in your
  client's command line.
 
  To set up @decompile/tf:
  
    In TinyFugue:
      /def -ag -mglob -p100 -t"FugueEdit > *" fe = /grab %-2
 
    In SimpleMU:
      Set your Options -> Grab Password
      @set me=tfprefix:<grabpassword>FugueEdit >%b
 
See also: CLIENTS, ATTRIBUTES, WILDCARDS, MUSHCODE
@DESC
  @describe <object>[=<description>]
 
  This command sets the description of the object, which will be seen 
  whenever something looks at the object with the 'look' command. Every 
  object should have a description, even if just a short one describing its 
  purpose. When looking at a thing, player or exit which has no description,
  you will see the message "You see nothing special.". A room with no desc
  set shows nothing.
 
  The description can be formatted using the @descformat attribute. This is
  particularly useful for @parents and ancestors.
  
  When inside a thing or player, you will see its @idescribe instead, if
  one is set.
 
  @describe can be abbreviated as @desc.
 
See also: look, @adescribe, @idescribe, @descformat
@DESCFORMAT
  @descformat <object>[=<format>]
 
  When set, this attribute is evaluated and displayed instead of <object>'s
  @describe, when someone looks at <object>. The evaluated @describe, which
  would be shown if no @descformat were set, is passed to the @descformt
  as %0; use v(describe) to get the unevaluted description.
  
  This is primarily useful for room parents, to enforce a consistent look
  for all rooms without having to apply formatting to ever @describe. Note 
  that this object is only used with @describe - to format the @idescribe, 
  use @idescformat.
  
  Q-registers (set via setq() and similar functions) are inherited from the
  @nameformat, and passed on to the @conformat.
  
  Example:
    > @descformat Room Parent=repeat(=, width(%#))%r%0[repeat(=, width(%#))]
 
See also: look, @exitformat, @nameformat, @conformat, @idescformat,
    @invformat
@DESCRIBE
  @describe <object>[=<description>]
 
  This command sets the description of the object, which will be seen 
  whenever something looks at the object with the 'look' command. Every 
  object should have a description, even if just a short one describing its 
  purpose. When looking at a thing, player or exit which has no description,
  you will see the message "You see nothing special.". A room with no desc
  set shows nothing.
 
  The description can be formatted using the @descformat attribute. This is
  particularly useful for @parents and ancestors.
  
  When inside a thing or player, you will see its @idescribe instead, if
  one is set.
 
  @describe can be abbreviated as @desc.
 
See also: look, @adescribe, @idescribe, @descformat
@DESTINATION
  @destination <exit>[=<destination>]
  @exitto <exit>[=<destination>]
  
  The DESTINATION attribute is used by variable exits. To make a variable
  exit, you create it in the usual way (with @open), then @link it to
  "variable" instead of a dbref. When someone attempts to pass through the
  exit, the DESTINATION attribute will be evaluated, and should return a
  dbref; the dbref will be used as the location for the person to go to.
  The exit name or alias the moving player used is passed to the attribute
  as %0.
  
  The exit must be able to @link itself to the dbref returned by the
  attribute. This means the exit must control the destination, the
  destination must be set LINK_OK, or the exit must have the Link_Anywhere
  @power.
  
  If no DESTINATION attribute is set on a variable exit, the MUSH will also
  check for an EXITTO attribute, for cross-platform compatability. It works
  exactly the same as the DESTINATION attribute.
  
  Note that, unlike most attributes, @destination cannot be abbreviated and
  must be typed in full.
  
  Example:
    > @open Random Exit;re
    > @link re=variable
    > @power re=link_anywhere
    > @destination re=pickrand(#5 #123 #999 [home(%#)] %L)
  
See also: EXITS, @link, @open, LINK_OK, Link_Anywhere Power
@DESTROY
  @destroy[/override] <object>
  @nuke <object>
  @undestroy <object>
 
  The @destroy command marks <object> for destruction by setting the GOING
  flag on it. If <object> is a room, all the exits in the room are marked
  for destruction as well. If <object> is a player, and the @config option
  destroy_possessions is on, everything he owns is marked for destruction as 
  well. (If really_safe is also on, his SAFE objects will not be destroyed.)
  If the adestroy @config option is on, the ADESTROY attribute will be 
  triggered when the object is first @destroy'd.
  
  The MUSH checks for GOING objects every ten minutes or so (see '@config
  purge_interval'); each one is set with the GOING_TWICE flag, and will be
  destroyed totally on the next cycle. You can save it from destruction
  during this period using the @undestroy command, or @destroy it again to
  destroy it instantly.
  
  When an object is destroyed, any commands, @waits and semaphores it has
  queued are drained, and the object's owner has the quota for the object,
  and the initial cost of creating it, refunded.
  
  Continued in 'help @destroy2'.
@DESTROY2
 
  To destroy an object, you must either control it, control its source or
  destination room (for exits), or it must be set DESTROY_OK and you must
  pass its @lock/destroy.
  
  To destroy objects set SAFE, you must use @destroy/override or @nuke. If 
  the really_safe @config option is on, even @nuke can't destroy SAFE 
  objects, and you must clear the safe flag first.
  
  Players can only be @destroyed when they are not connected, and even then
  can only be destroyed by a Wizard player. If the destroy_possessions
  @config option is on, anything the player owns is @destroyed. If the 
  really_safe option is also on, his SAFE possessions are @chown'd to God
  instead. If the option is off, all their possessions are @chown'd to God.
 
  @recycle is an alias for @destroy. Some MUSHes disable @destroy and only
  use @recycle, to avoid players mistyping.
  
See also: @undestroy, @create, @dig, @open, DESTROY_OK, SAFE
@DIG
  @dig[/teleport] <room name>[=<exit to>, <exit from>, <room dbref>,
                               <to dbref>, <from dbref>]
  
  This command creates a new room named <room name>. Creating a room costs
  some pennies (see '@config room_cost' for exactly how many). If the
  /teleport switch is given, you will be teleported to the room after it's
  created, as per the @teleport command.
  
  If <exit to> is given, the MUSH will automatically open an exit from your 
  current location to the new room named <exit to>, if you have permission. 
  You can also specify <exit from>, to create an exit from the new room back 
  to your current location. Opening exists also costs pennies; see 
  '@config exit_cost'. The exit names may contain multiple aliases, separated 
  with semicolons, as per 'help @name'.
 
  Wizards and objects with the pick_dbref power can also specify the
  dbrefs of garbage objects to use when creating the room and the to
  and from exits.
  
  See 'help @dig2' for examples.
@DIG2
  Examples: 
    > @dig Kitchen
  This command will create a new room named 'Kitchen'. You will be informed
  what the dbref of this room is.
 
    > @dig Kitchen=Kitchen <N>;n;north;kitchen;k
  This will create the room as above, and also open an exit leading to it 
  named "Kitchen <N>" with the aliases n, north, kitchen and k. It will NOT 
  create an exit coming back from the Kitchen room.
 
    > @dig Kitchen=Kitchen <N>;n;north;kitchen;k, Out <S>;s;south;out;o
  This will do just the same as the above, except it will also create an 
  exit named "Out <S>" with the aliases s, south, out and o coming back from
  the kitchen to whatever room you are currently in.
 
See also: @open, @link, EXITS, @create, DBREF, dig()
@DISABLE
  @enable <option>
  @disable <option>
 
  These wizard-only commands allow for any boolean @config options to
  be changed (see 'help @config paramaters' for a list).
 
  @enable <option> is the same thing as @config/set <option>=yes
  @disable <option> is the same thing as @config/set <option>=no
 
See also: @config
@DOING
  @doing <object>[=<message>]
 
  With a <message> argument, this command sets <object>'s DOING attribute to
  <message>. The DOING attribute is only meaningful for players; the
  evaluated result is shown on the output of the normal MUSH WHO command, and
  on the login screen WHO.
  
  With no <message> the attribute is cleared.
  
  To change the message shown above player @doings in WHO, use @poll.
 
See also: @poll, WHO, doing()
@DOLIST
  @dolist[/notify][/delimit <delim>] <list>=<action list>
  
  @dolist queues the <action list> for execution once for each element in 
  <list>. <list> is space-separated, unless the /delimit switch is given, 
  in which case it is a <delim>-separated list.
  
  If the string "##" appears anywhere in <action list>, it will be replaced
  with the current element of <list>. The string "#@" is replaced with the
  position of the current element in the list. Note that these replacements
  occur before evaluation, so are unsafe on user input, and cannot be used
  in nested in nested @dolists. It is HIGHLY recommended that you use itext()
  and inum() instead, which serve the same purpose but are evaluated normally
  and can be used with nested @dolists. The %iL substitution safely refers to
  the outermost @dolist, much the same as ##.
 
  If the /notify switch is given, the command "@notify me" is queued after 
  all copies of <action list> have been queued. This is useful for object
  synchronization with semaphores.
 
  See 'help @dolist2' for examples.  
See also: iter(), itext(), map(), @notify, SEMAPHORES, ACTION LISTS
@DOLIST2
 
  Examples:
    > @dolist a b c=say %i0 is number [inum(0)]
    You say, "a is number 1"
    You say, "b is number 2"
    You say, "c is number 3"
 
   > &test me=$test: say Starting ; @wait me={say Done} ;
                     @dolist/notify a b c=say %i0 is [inum(0)]
   > test
   You say, "Starting"
   You say, "a is 1"
   You say, "b is 2"
   You say, "c is 3"
   Notified.
   You say, "Done"
   
   > @dolist a b c=@dolist 1 2 3=say %iL/%i0
   You say, "a/1"
   You say, "a/2"
   You say, "a/3"
   You say, "b/1"
   You say, "b/2"
   You say, "b/3"
   You say, "c/1"
   You say, "c/2"
   You say, "c/3"
 
@DRAIN
  @drain[/any][/all] <object>[/<attribute>][=<number>]
  
  This command discards commands waiting on a semaphore without
  executing them.
 
  If the /any switch is given, then all semaphores associated with
  <object> are @drained.  Otherwise, only the specified semaphore
  attribute (or SEMAPHORE if no <attribute> is specified) is @drained.
 
  If the /all switch is given, then all queue entries associated with the
  selected semaphore(s) are discarded, and the semaphore attribute(s)
  are cleared.  Otherwise, only the indicated <number> of queue entries are
  discarded. If no <number> is given, then the /all switch is assumed.
 
  You may not specify both the /any switch and a specific attribute.
  Similarly, you may not specify both the /all switch and a number.
 
See also: SEMAPHORES, @wait, @notify
@DROP
  @drop <object>[=<message>]
  @odrop <object>[=<message>]
  @adrop <object>[=<action list>]
  
  When <object> is a player or thing, the @drop attribute is shown to whoever
  drops <object>, and @odrop to others in the location <object> is dropped
  in. The @adrop attribute is triggered when <object> is dropped.
  
  When <object> is an exit, @drop is shown to objects going through <object>,
  and @odrop is shown to objects in the exit's destination. @adrop is
  triggered when someone passes through the exit.
  
  Example:
    > @drop Box=You put the box down gently.
    > @odrop Box=puts the box down gently.
    
    > @odrop South=arrives from the North.
  
See also: drop, empty, ACTION LISTS, VERBS, @success
@DUMP
  @dump
  @dump[/paranoid|/debug] [<check interval>]
 
  This is a wizard-only command which saves a copy of the database from
  memory into the outdb file on disk. The MUSH saves the game automatically
  at a regular interval, controlled by the "dump_interval" @config option.
 
  If the /paranoid switch is given, the game performs additional consistency
  checking which corrects possible data corruption in the copy of the db 
  written to disk. If a check interval is specified, the game writes 
  confirmation of the dump to the checkpoint log file every <interval> 
  objects. If no interval is specified, it is taken to be the size of the 
  database, divided by 5.
  
  @dump/debug is the same as @dump/paranoid, but also attempts to fix any
  errors found in the running (in-memory) copy of the database. In order to
  do this safely, the dump will be a non-forking dump, even if the MUSH is
  configured to do forking dumps (see "@config forking_dump").
  
  These switches should ONLY be used if a normal @dump is not being done
  correctly. They should generally only be done by wizards with access to 
  the account on which the MUSH is running, since others will not have 
  access to the checkpoint log file.
 
See also: @shutdown
@EALIAS
  @ealias <object>[=<enter alias1>[; ... ; <enter aliasN>]]
  @lalias <object>[=<leave alias1>[; ... ; <leave aliasN>]]
  
  These attributes contain lists of "enter aliases" and "leave aliases" for 
  <object> - any of the aliases can be used in place of "enter <object>" and
  "leave <object>" to enter/leave the object.
  
  These attributes only have meaning for players and things (as rooms/exits
  cannot be "enter"ed) - the aliases for exits are stored in @alias.
  
  Example:
    > @ealias Chair=Sit down;sit
    > @lalias Chair=Stand up;stand
 
See also: enter, leave, goto, ENTER_OK
@EDIT
  @edit[/first][/check][/quiet] <object>/<attributes>=<search>, <replace> 
  @edit[/check][/quiet] <object>/<attributes>=$, <string to append>
  @edit[/check][/quiet] <object>/<attributes>=^, <string to prepend>
 
  This command allows you to edit the contents of attributes, without having
  to retype the entire attribute.
  
  All the attributes on <object> whose names match the wildcard pattern
  <attributes> will be searched for the string <search>, and each occurrence
  of it will be replaced with the string <replace>.
  
  If <search> is "$", then <replace> will be added to the end of the
  attributes. When <search> is "^", <replace> will be added to the beginning
  of the attributes. (If you need to replace a single $ or ^, consider using
  @edit/regexp (see help @edit2) or the edit() function.)
  
  If the /first switch is given, only the first occurrence of <search> in
  each attribute is replaced. If the /check switch is given, the attributes
  are not altered, you'll just be shown what would be changed (with the
  changes ansi-highlighted).
  
  If the /quiet switch is given, you won't be shown the modified text, you'll
  just be told how many of the matching attributes were/weren't edited.
  Useful when edited a lot of large/spammy attributes.
  
  <search> and <replace> are not evaluated, so you don't need to escape
  special characters. If either contains commas, however, you may need to
  wrap the string in {curly braces}.
  
  Continued in 'help @edit2'.
@EDIT2
  @edit/regexp[/all][/nocase][/check][/quiet] 
                     <object>/<attributes>=<regexp>,<replace>
 
 
  When the /regexp switch is given, @edit performs a regular expression
  replacement, similar to the regedit() function. Normally, only the first
  match per attribute will be replaced; if the /all switch is given, all
  possible matches in each attribute are replaced (as per regeditall()).
  
  Regexp matches are case-sensitive by default, but the /nocase switch can
  be given to make them case-insensitive (as per regediti()/regeditalli()).
  
  The /check and /quiet switches work the same as for non-regexp @edits.
  
  Note that, unlike normal @edits, the <replace> for an @edit/regexp WILL
  be evaluated, once for each replacement made, with the $0 token being
  replaced with the overall matching text, $1 with the first subexpression,
  and so on. Named subexpressions are also possible via $<name>.
  
  Example:
  > &foo me=Block of text/Wed Feb 22 22:54:02 2012/#10010
  > @edit/regexp me/foo=^(.+)/([^/]+)/(#[0-9]+(?::[0-9]+)?)$,
                    ucstr($1) -- [convtime($2)] -- [name($3)]
  FOO - Set: BLOCK OF TEXT -- 1329951242 -- Minion
  
  Replace a literal '^' with 'v'
  > @edit/regexp me/bar=\^, v
  
See also: edit(), regedit(), ATTRIBUTES,
@EFAIL
  @efail <object>[=<message>]
  @oefail <object>[=<message>]
  @aefail <object>[=<action list>]
  
  These attributes contain the message shown to someone who fails to enter
  <object>, the message shown to others when someone fails to enter <object>,
  and the actions to be taken when someone fails to enter it, respectively.
 
See also: enter, @enter, FAILURE, ACTION LISTS, VERBS
@ELOCK
  @elock <object>[=<key>]
  @eunlock <object>
  
  @elock sets the Enter @lock for <object> to <key>, or clears the the lock
  if no <key. is given. @eunlock removes the Enter @lock for <object>.
  
  @elock and @eunlock are deprecated and uses of them should be replaced by
    @lock/enter <object>[=<key>]
  and
    @lock/enter <object>
 
See also: @lock, locktypes, enter, ENTER_OK
@EMIT
  @emit[/<switch>] <message>
  \<message>
 
  This sends <message> to everyone in your location. Nothing is added to the
  message, not even your name. If you have a SPEECHMOD attribute set, it
  will be evaluated with <message> as %0, and | as %1, and the result will be
  shown instead of <message> as long as it evaluates to a non-empty string.
 
  If the /room switch is given, this command acts like @lemit instead. The
  /silent switch can be used with it to suppress the confirmation for @lemit.
 
  The /noeval switch prevents the MUSH from evaluating <message>.
  The /spoof switch causes nospoof notifications to show the enactor's
    dbref instead of the executor's dbref, and requires control over
    the enactor or the Can_spoof power.
 
  @emit can be abbreviated "\"
 
See also: @nsemit, emit(), @pemit, @remit, @oemit, @lemit, @zemit, @cemit, 
    @speechmod, NOSPOOF and SPOOFING.
@ENABLE
  @enable <option>
  @disable <option>
 
  These wizard-only commands allow for any boolean @config options to
  be changed (see 'help @config paramaters' for a list).
 
  @enable <option> is the same thing as @config/set <option>=yes
  @disable <option> is the same thing as @config/set <option>=no
 
See also: @config
@ENTER
  @enter <object>[=<message>]
  @oenter <object>[=<message>]
  @oxenter <object>[=<message>]
  @aenter <object>[=<action list>]
  
  These attributes contain the messages shown to someone who enters <object>,
  the message shown to others inside <object> when someone enters it, the
  message shown to those in <object>'s location when someone enters it, and
  the actions to be taken by <object> when someone enters it, respectively.
  
  The old location of the entering object is passed in %0, if <object>
  had permission to see it there.
 
  Example:
    > @enter Sofa=You sit on the comfy sofa.
    > @oenter Sofa=sits with you on the sofa.
    > @oxenter Sofa=sits down on the sofa. It looks comfy.
    > @aenter Sofa=@pemit/silent owner(me)=%n sat down on [name(me)]!
    
See also: enter, @ealias, leave, ACTION LISTS, VERBS
@ENTRANCES
  @entrances[/<switch>] [<object>][=<begin>[, <end>]]
  
  This command will show you all objects linked to <object>. If you don't
  specify an <object>, your current location is used. You can limit the
  range of the dbrefs searched by specifying <begin> and <end>.
  
  You can use any combination of switches to limit the types of objects:
    /exits       show only exits linked to <object>
    /things      show only things which have their homes in <object>
    /players     show only players who have their homes in <object>
    /rooms       show only rooms which have a drop-to of <object>
    
  If you 't control <object>, or have the Search or See_All powers, all 
  objects linked to <object> are listed. Otherwise, only objects which you 
  can examine will be shown.
    
See also: @link, @search, entrances()
@EUNLOCK
  @elock <object>[=<key>]
  @eunlock <object>
  
  @elock sets the Enter @lock for <object> to <key>, or clears the the lock
  if no <key. is given. @eunlock removes the Enter @lock for <object>.
  
  @elock and @eunlock are deprecated and uses of them should be replaced by
    @lock/enter <object>[=<key>]
  and
    @lock/enter <object>
 
See also: @lock, locktypes, enter, ENTER_OK
@EXITFORMAT
  @exitformat <object>[=<format>].
 
  When set, the exitformat attribute is evaluated and shown in place of the
  "Obvious exits" list for a room. (It has no meaning when set on other types
  of object.) The dbrefs of the exits which would appear in the default
  "Obvious exits" list is passed to the attribute as %0 as a space-separated
  list; you can use lexits(me) to get all the exits in the room.
 
  Q-registers (set via setq() and similar functions) are inherited from the
  @conformat.
 
  Example:
    > @exitformat here=Exits: [itemize(iter(%0, name(%i0)))]
 
See also: TRANSPARENT, @conformat, @nameformat, @descformat
@EXITTO
  @destination <exit>[=<destination>]
  @exitto <exit>[=<destination>]
  
  The DESTINATION attribute is used by variable exits. To make a variable
  exit, you create it in the usual way (with @open), then @link it to
  "variable" instead of a dbref. When someone attempts to pass through the
  exit, the DESTINATION attribute will be evaluated, and should return a
  dbref; the dbref will be used as the location for the person to go to.
  The exit name or alias the moving player used is passed to the attribute
  as %0.
  
  The exit must be able to @link itself to the dbref returned by the
  attribute. This means the exit must control the destination, the
  destination must be set LINK_OK, or the exit must have the Link_Anywhere
  @power.
  
  If no DESTINATION attribute is set on a variable exit, the MUSH will also
  check for an EXITTO attribute, for cross-platform compatability. It works
  exactly the same as the DESTINATION attribute.
  
  Note that, unlike most attributes, @destination cannot be abbreviated and
  must be typed in full.
  
  Example:
    > @open Random Exit;re
    > @link re=variable
    > @power re=link_anywhere
    > @destination re=pickrand(#5 #123 #999 [home(%#)] %L)
  
See also: EXITS, @link, @open, LINK_OK, Link_Anywhere Power
@FAILURE
  @failure <object>[=<message>]
  @ofailure <object>[=<message>]
  @afailure <object>[=<action list>]
 
  @failure contains the message shown to someone who fails to pass <object>'s
  Basic @lock. @ofailure contains the message shown to others, and @afailure
  contains the actions to be taken by <object>.
  
  For players and things, this means failure to get/take. For exits, it means
  failure to go through the exit. For rooms the lock is checked when objects
  "look" inside the room, though failure to pass the lock does not prevent
  the object from looking.
 
See also: get, move, @lock, ACTION LISTS, VERBS, @success
@FILTER
  @filter <object>[=<pattern1>[, <pattern2>[, ..., <patternN>]]
 
  The filter attribute is used in conjunction with the AUDIBLE flag. When
  set, sound which matches any of the comma-separated list of wildcard
  patterns in this attribute is not propagated through the audible object.
 
  @filter uses the type of matching described in HELP SWITCH WILDCARDS.
 
  If you need to use a comma in one of the patterns, put a \ before it,
  do not use {} curly braces.
 
  You can set the regexp flag on the filter attribute to use regular 
  expressions instead of wildcard patterns, and can set the case flag to make
  the patterns case-sensitive.
  
  Sounds are only forwarded if the speaker also passes <object>'s
  @lock/filter, which receives the sound heard as %0.
  
  See 'help @filter2' for an example.
  
See also: AUDIBLE, @infilter, attribute flags, LISTENING, @forwardlist,
  @prefix
@FILTER2
 
  Example: 
  An audible exit leads from the room where Wizard is standing to another
  room where the puppet "Wiztoy" is standing.
  
    > @prefix exit=From inside,
    > :tests.
    Wizard tests.
    Wiztoy> From inside, Wizard tests.
 
    > @filter exit=* jumps.,* tests.
    > :jumps.
    Wizard jumps.
    > :tests.
    Wizard tests.
 
    > :tests again.
    Wizard tests again.
    Wiztoy> From inside, Wizard tests again.
@FIND
  @find [<name>][=<begin>, <end>]
 
  Displays the name and dbref of every room, thing, or player you control
  whose name matches <name>. If <begin> and <end> are given, @find will start
  at the <begin>th object in the database, and will not search past the
  <end>th object.
 
  You may wish to use the @search command instead, which can filter the
  results more complexly.
 
See also: @search, lsearch(), @entrances
@FIRSTEXIT
  @firstexit <exit1>[, ... , <exitN>]
  
  Normally, exits appear in a room's Obvious exits list in the order they
  were created, most recent first. You can use this command to rearrange
  them. @firstexit moves each exit, in the order given, to the top of the
  Obvious exits list for its source room. You must control the room.
  
  Example:
    > @dig/teleport Test Room
    > @open Two ; @open Three ; @open One
    > look
    Test Room(#3Rn)
    Obvious exits:
    One, Three, and Two
    > @firstexit two, one
    > look
    Test Room(#3Rn)
    Obvious exits:
    One, Two, and Three
 
See also: EXITS, @open, @link
@FLAG
  @flag <flag name>
  @flag/list [<flag name pattern>]
  @flag/add <flag name>=[<letter>], [<type(s)>], [<setperms>], [<unsetperms>]
  @flag/delete <flag name>
  @flag/alias <flag name>=<alias>
  @flag/letter <flag name>[=<letter>]
  @flag/restrict <flag name>=[<setperms>], [<unsetperms>]
  @flag/type <flag name>=<type(s)>
  @flag/enable <flag name>
  @flag/disable <flagname>
 
  This command manipulates the list of flags in the database.
  When given a flag name as an argument, the command displays information
  about the flag, including aliases and permissions. @flag/list
  lists names of enabled flags, and may be given a wildcarded pattern
  to restrict which names it will show.
 
  All other switches to this command are restricted to God:
    /disable disables a flag, making it invisible and unusable
    /enable re-enables a disabled flag
    /alias adds a new alias for an existing flag; use !<alias> to delete one.
    /letter changes or removes a single-letter alias for an existing flag.
    /restrict changes flag permissions (see help @flag2)
    /type changes flag type(s) (see help @flag2)
    /delete deletes a flag completely, removing it from all objects
      in the database and the removing it permanently from the 
      flag table. It requires the exact flag name or alias to be used.
      Be very very careful with this. 
 
  See 'help @flag2' for information on @flag/add.
  
See also: FLAGS, @set, @power, flag permissions
@FLAG2
  @flag/add is used to add a new flag with the given name. Arguments
  other than the flag name are optional:
 
  <letter> gives the flag's one-letter abbreviation, which must
    not conflict with the one-letter abbreviation of another flag that
    could be applied to the same object type(s). It defaults to none, which 
    means it won't appear in a list of flag characters but can still be 
    tested for with hasflag(), andlflags(), and orlflags(). 
  <type> specifies the space-separated list of types to which the flag
    applies, and may be 'any' or one or more of 'room', 'thing', 'player',
    or 'exit'. It defaults to 'any'.
  <setperms> specifies the space-separated list of permissions for who can
    set and/or see the flag. See 'help flag permissions' for details.
    It defaults to 'any'
  <unsetperms> specifies the space-separated list of permissions for who
    can clear the flag on an object they control. It defaults to 
    whatever <setperms> is given, or 'any'.
 
  Flags added with @flag/add are saved with the database when it
  is dumped, and do not need to be re-added at startup. They are
  treated exactly as any other flag in the server.
@FOLLOW
  @follow <object>[=<message>]
  @ofollow <object>[= <message>]
  @aunfollow <object>[=<action list>]
  
  Sets the message shown to someone who begins following <object>,
  the message shown to others in the room, and the actions to be taken
  by <object> when someone begins following it, respectively. The name
  of the person following <object> is automatically prepended to the
  @ofollow message.
 
See also: follow, unfollow, @unfollow, followers(), ACTION LISTS, VERBS
@FORCE
  @force[/noeval][/inline] <object>=<action list>
 
  This command forces <object> to queue the given action list, as if the
  object had entered the action list itself. You must control <object> to
  @force it. @force is useful for manipulating puppets. 
 
  If /inline is given, <object> will run <action list> _now_, instead of
  being queued for execution later. By default, <action list> will be able
  to see/alter q-registers in the calling action list, and any @breaks in
  <action list> will also stop the calling action list. The following switches
  alter that behaviour:
   /nobreak:   @breaks in <action list> will not stop the calling action list
   /localize:  q-registers will be saved before <action list> is run, and
               restored after.
   /clearregs: q-registers will all be reset before <action list> is run.
               You'll usually want to use /localize as well with this.
               
  @force/inplace is an alias for @force/inline/nobreak/localize.
 
  @force can be abbreviated as
    <dbref> <action list>
 
  Continued in 'help @force2'.
@FORCE2
  Normally, the action list is evaluated twice - once when @force is run, and 
  again when <object> runs the action list. If the /noeval switch is given, 
  <action list> is not evaluated until it is run by <object>.
 
  Examples:
    > @create Lackey
    Created: Object #103 
    > @force Lackey=go east
    Lackey goes east.
    Lackey has left.
    > @force #103=page Cyclonus=Hi there!
    Lackey pages: Hi there!
    > #103 page Cyclonus=Whee
    Lackey pages: Whee
 
  Continued in 'help @force3'.
@FORCE3
  Normally, @force creates a new queue entry. @force/inline does not.
 
  Examples:
    > @create Lackey
    Created: Object #103 
    > &order me=$order *:say Lackey, %0 ; @force Lackey=%0 ; say Done?
    > order pose salutes!
    You say, "Lackey, pose salutes!"
    You say, "Done?"
    Lackey salutes!
 
    > &order me=$order *:say Lackey, %0 ; @force/inline Lackey=%0 ; say Done?
    > order pose salutes!
    You say, "Lackey, pose salutes!"
    Lackey salutes!
    You say, "Done?"
 
See also: PUPPET, DBREF, objeval()
@FORWARDLIST
  @forwardlist <object>[=<list of dbrefs>]
 
  If <object> is set AUDIBLE, any sound it hears which passes its @filter
  and @lock/filter will be forwarded (prefixed with its @prefix) to each
  of the dbrefs given  in its @forwardlist attribute, in much the same way
  as puppets forward sound to their owners.
 
  In order to forward to an object, you must either control it, have the 
  pemit_all power, or pass its @lock/forward. (If you want to allow all
  objects you own to forward to you, regardless of whether or not they
  control you, use @lock/forward me=$me)
 
See also: @filter, @prefix, AUDIBLE, PUPPET, @debugforwardlist, @lock
@FUNCTION
  @function [<function name>]
  @function[/preserve] <name>=<obj>, <attrib>[, <min args>,
     <max args>[, <restrictions>]]
  @function <function name>=<object>/<attribute>
  @function/<switch> <function name>
  @function/restrict[/builtin] <function name>=<restrictions>
  @function/alias <function name>=<alias>
  @function/clone <function name>=<clone>
  
  When used without any arguments, this command lists all global
  user-defined functions. For wizards and others with the Functions
  power, it also lists the dbref number and attribute corresponding to
  the listed functions.
 
  When used with a function name, it displays some information about
  how that function is parsed, and how many arguments it takes.
  
  <switch> can be one of:
  /disable, to disable a function.
  /enable, to re-enable it.
  /delete, to remove a user-defined or cloned function, or allow a built-in
           function to be overriden by a user-defined one.
  /restrict, to change the restriction flags on an existing function.
  
  @function/alias creates an alias for the built-in function <function name>
  so that it can also be called as <alias>. @function/clone creates a new
  copy of <function name> named <clone>, which works the same initially but
  can be restricted separately. You cannot alias or clone @functions, or
  alias cloned functions.
 
  Otherwise, this command defines a global function with the name
  <function name>, which evaluates to <attribute> on <object>.
  
  Continued in 'help @function2'.
@FUNCTION2
  <object> can be anything that the player using the @function command
  controls (if safer_ufun is enabled) or can examine (if not).
  <function name> must be 30 characters or less.
 
  A function defined using @function works just like any of the normal
  MUSH functions, from the user's perspective. The functions are
  executed by the object, with its powers.
 
  Functions defined via @function should follow the format used by
  UFUN() - %0 is the first argument passed, %1 is the second argument
  passed, and so forth. Optional third and fourth arguments to
  @function can be used to set a parser-enforced number of arguments
  for the function.  If the maximum arguments is negative, any
  additional comments are treated as part of the text of the last
  argument. An optional fifth argument will set restriction flags.
 
  The /preserve switch, for MUX compability, does the same thing as
  the 'localize' restriction - treats the attribute that's evaluated
  as if it were called with ulocal() instead of u().
  
  Example:
  
    > &WORD_CONCAT #10=%0 %1
    > say u(#10/word_concat, foo, bar)
    You say, "foo bar"
  
    > @function word_concat=#10, word_concat
    > say word_concat(foo,bar)
    You say, "foo bar"
 
  Continued in 'help @function3'.
@FUNCTION3
  Global user-defined functions are not automatically loaded when the
  game is restarted. In order to avoid objects which attempt to use
  functions that have not been loaded, a @startup containing @function
  commands should be set on a wizard object with as low a dbref number
  as possible; God (#1) is suggested for this use. You can also create
  functions from the alias.cnf file.
 
  For example, if you have one object that stores all your global
  functions, you could set the following command (the object is #100
  in the example):
 
    @startup #1=@dolist lattr(#100)=@function ##=#100,##
 
  And then store each function as an attribute of the same name on
  object #100.
  
  Continued in 'help @function4'.
@FUNCTION4
  Normally, built in functions cannot be overriden by @functions. However,
  if a built-in function is deleted with @function/delete, you can then 
  make a @function with the same name. "Deleted" built-ins can still be
  called through the FN() function, and can have restrictions applied with 
  @function/restrict/builtin.  @function/restore will delete the @function
  and turn the built in version back on.
 
  Using @function on an already-added @function will delete the old one and 
  install a new function with none of the settings of the old one kept.
 
  Example:
    > @function/delete ansi
    > &ansi_fun #1234=%1
    > @function ansi=#1234, ansi_fun, 2, -2, noguest
 
  This creates a new version of ansi() that doesn't do any colorization,
  and that needs two arguments, like the built-in version. It will be
  restricted to non-guest players.
 
See also: RESTRICT, FUNCTIONS, @startup, fn(), valid()
@GEDIT
  @edit[/first][/check][/quiet] <object>/<attributes>=<search>, <replace> 
  @edit[/check][/quiet] <object>/<attributes>=$, <string to append>
  @edit[/check][/quiet] <object>/<attributes>=^, <string to prepend>
 
  This command allows you to edit the contents of attributes, without having
  to retype the entire attribute.
  
  All the attributes on <object> whose names match the wildcard pattern
  <attributes> will be searched for the string <search>, and each occurrence
  of it will be replaced with the string <replace>.
  
  If <search> is "$", then <replace> will be added to the end of the
  attributes. When <search> is "^", <replace> will be added to the beginning
  of the attributes. (If you need to replace a single $ or ^, consider using
  @edit/regexp (see help @edit2) or the edit() function.)
  
  If the /first switch is given, only the first occurrence of <search> in
  each attribute is replaced. If the /check switch is given, the attributes
  are not altered, you'll just be shown what would be changed (with the
  changes ansi-highlighted).
  
  If the /quiet switch is given, you won't be shown the modified text, you'll
  just be told how many of the matching attributes were/weren't edited.
  Useful when edited a lot of large/spammy attributes.
  
  <search> and <replace> are not evaluated, so you don't need to escape
  special characters. If either contains commas, however, you may need to
  wrap the string in {curly braces}.
  
  Continued in 'help @edit2'.
@GIVE
  @give <giver>[=<message>]
  @ogive <giver>[=<message>]
  @agive <giver>[=<action list>]
  
  These attributes contain the message shown to <giver> when he gives an
  object, the message shown to others in <giver>'s location when he gives an
  object, and the actions to be taken by <giver> when he gives an object,
  respectively.
  
  In all cases, %0 is the dbref of the object being given, and %1 is the
  dbref of the recipient.
 
See also: give, @receive, ACTION LISTS, VERBS
@GREP
  @grep[/<switches>] <object>[/<attrs>]=<pattern>
  
  @grep returns a list of all attributes on <object> which match <pattern>.
  If <attrs> is specified, only attributes which match the wildcard pattern
  <attrs> are checked; it defaults to "*". Use "**" for all attributes.
  
  By default, attributes which contain the string <pattern> are returned.
  However, if the /wild switch is given, <pattern> is treated as a wildcard
  pattern, and attributes which match the pattern are returned. If the
  /regexp switch is given, <pattern> is treated as a regular expression,
  and attributes matching the regexp are returned. Please note that <pattern>
  will NOT be evaluated, so you can easily grep for code strings.
  
  All matches are case-sensitive, unless the /nocase switch is given.
  
  @grep only shows a list of matching attributes. However, you can specify
  the /print switch, in which case attribute values are also shown, with the
  matching substrings ansi-highlighted if appropriate.
 
  Continued in 'help @grep2'.
@GREP2
 
  For backwards compatability, the /list switch provides the default
  behaviour of listing attributes without printing the values, and /ilist and
  /iprint are aliases for /list/nocase and /print/nocase.
   
See also: grep(), wildgrep(), regrep(), WILDCARDS
@HALT
  @halt <object>[=<action list>] 
  @halt/pid <pid>
  @halt/all
  @allhalt
 
  The @halt command removes all queued actions for <object>.  If given,
  <action list> is placed in the queue for the object instead. If no action
  list is specified, the object is set HALT.
 
  If <object> is a player, it clears the queue for the player and all of 
  his objects. You can use "@halt me" to clear your own queue without 
  setting yourself HALT.
 
  Only wizards and objects with the halt @power can @halt other player's 
  objects. Note that halting an object does NOT affect any objects waiting 
  on it as a semaphore.
 
  @halt/pid will cancel a single queue entry with the given pid (the
  number in parenthesis before it in @ps). You must control the object
  that queued the command or have the halt power to do this.
 
  @halt/all is a synonym for @allhalt, and is a wizard-only command
  which halts all objects in the game in an effort to free up the queue.
  
See also: @wait, @ps, SEMAPHORES, @drain, @notify
@HAVEN
  @haven <player>[=<message>]
 
  When someone attempts to page <player> and is unable to, either because
  <player> is set HAVEN or because of his page lock, they will be shown
  <message>, if it evaluates to something non-null.
 
  Example:
    > @set me=HAVEN
    > @haven me=I'm AFK and can't answer pages. Please @mail instead.
 
See also: HAVEN, page, @lock, @away, @idle
@HIDE
  @hide[/<switch>] <descriptor>
  @hide[/<switch>] [<player>]
 
  This command allows players to hide their online status. Hidden connections
  don't show up on WHO, in lwho(), etc, when used by players without see_all.
  
  The first form of this command affects the single connection specified by
  <descriptor> (as returned by ports(), or shown on the admin WHO). The 
  second affects all connections for the given <player>, or the enactor if 
  no <player> is given. You must be a Wizard, Royalty, or have the Hide
  @power to affect your own connections; only Wizards can affect other
  players' connections.
  
  The /on and /yes switches hide connections, while /off and /no unhide
  connections. If no switch is given, the command acts as a toggle: for a
  single descriptor, the hide status is reversed. For a player, if all his
  connections are hidden, they will be unhidden. If any are unhidden, they
  will all be hidden.
 
See also: hidden(), WHO, lwho(), lports(), ports()
@HOOK
  @hook/<switch> <command>[=<object>, <attribute>]
  @hook/list [<command>]
 
  @hook makes the command parser evaluate given attributes at certain points
  in command evaluation. The possible points, indicated by the proper switch:
 
  @hook/ignore: The attribute is evaluated before the built-in command is run.
                If it returns a false value, the command is skipped
                (the input is still matched against softcoded commands)
  @hook/override: The object/attribute is matched for a $command,
                and if it matches, it is run instead of the built-in command,
                but with the precedence of the built-in command (thus
                overriding not only the built-in command but any local
                $commands that might match). If the match fails, normal
                built-in command processing continues. Note that all locks
                and flags on the object (HALT, etc.) still apply.
  @hook/override/inline: Same as @hook/override, but the resulting matches
                are run immediately - not queued for later execution!
  @hook/before: The attribute is evaluated before the built-in command is run.
  @hook/after: The attribute is evaluated after the built-in command is run.
 
  In all cases, %# is the dbref of the object doing the command, and all
  hooks share the same set of q-registers. With /before and /after, 
  the results of the evaluated attribute is thrown away like it was
  wrapped in a call of null(). Also, in cases where a command and function
  do the same thing (e.g., @pemit and pemit()), only the command gets
  the hooks.
  
  Hooks can also be set in the alias.cnf file.
 
  Leaving out the object and attribute clears an existing hook. Wizards can
  see existing hooks with @command or @hook/list.
 
  See 'help @hook2' for more information about @hook/override/inline,
  and 'help @hook3' for examples.
@HOOK2
 
  @hook/override/inline allows you to write softcoded commands which act
  exactly like built-in commands - because they're run immediately, instead
  of being queued, output from the command appears in the right order
  relative to other commands in the action list. By default, commands hooked
  with /inline have access to the q-registers of the calling action list, and
  @breaks in the hooked command propagate to the calling action list,
  allowing you to write your own control structures.
  
  For example, this adds a new command, @qbreak, which works like @break but
  stops command execution when %q0 contains a true value:
    > &qbreak #123=$@qbreak: @break %q0=@pemit/silent %#=Stopping.
    > @command/add @qbreak
    > @hook/override/inline @qbreak=#123, qbreak
    
  This behaviour can be altered by adding the following switches to
  @hook/inline:
    /nobreak:   @breaks in the hooked command do not stop the calling action
                list from running
    /localize:  q-registers are saved before the hooked command is run, and
                restored after it completes
    /clearregs: All q-registers are reset before the hooked command is run.
                Most useful when used with /localize.
                
  @hook/inplace is an alias for @hook/inline/localize/clearregs/nobreak.
  
  See 'help @hook4' for some examples of using @hook/inline.
@HOOK3
  An example of @hook:
 
  > &top_line #3=pemit(%#, What follows is the results of a look)
  > &bottom_line #3=pemit(%#, You're done looking.)
  > @hook/before look=#3, top_line
  > @hook/after look=#3, bottom_line
  > look
  What follows is the results of a look
  Room Zero
  You are in Room Zero. It's very dark here.
  You're done looking.
  
  > &cmd.say #3=$say *: @remit %L=if(hasflag(%#,OOC),<OOC>%b)%n says, "%0"
  > @hook/override say=#3, cmd.say
  > @set me=OOC
  > "test
  <OOC> Robert says, "test"
 
  See 'help @hook4' for /inplace examples.
@HOOK4
  > &dance me=$dance:pose sticks his right foot in ; say Do the hokey pokey
                     ; pose sticks his right foot out
  > dance
  Walker sticks his right foot in
  You say, "Do the hokey pokey"
  Walker sticks his right foot out
 
  > &cmd.say #3=$say *:@remit %l=%n declares, "%0"
  > @hook/override say=#3,cmd.say
  > dance
  Walker sticks his right foot in
  Walker sticks his right foot out
  Walker declares, "Do the hokey pokey"
 
  > @hook/override/inplace say=#3,cmd.say
  > dance
  Walker sticks his right foot in
  Walker declares, "Do the hokey pokey"
  Walker sticks his right foot out
@IDESCFORMAT
  @idescformat <object>[=<format>]
 
  When set, this attribute is evaluated and displayed instead of <object>'s
  @idescribe, when someone looks at <object> while inside it. The evaluated 
  @idescribe, which would be shown if no @idescformat were set, is passed to
  the @idescformt as %0; use v(idescribe) to get the unevaluted description.
  
  Note that this attribute is only used when an @idescribe is set. When no
  @idescribe is set, the @descformat (and @describe) attributes are used,
  even when someone "look"s inside <object>.
 
  This is useful for things like object parents that enforce a consistent
  "look" for each object's @idescribe, without having to place formatting
  into every @idescribe.
  
  Q-registers (set via setq() and similar functions) are inherited from the
  @nameformat, and passed on to the @conformat.
 
  Example:
    > @idescribe Vehicle Parent=repeat(*, width(%#))%r%0
 
See also: look, @exitformat, @nameformat, @conformat, @descformat, 
    @invformat
@IDESCRIBE
  @idescribe <object>[=<description>]
  @oidescribe <object>[=<message>]
  @aidescribe <object>[=<action list>]
 
  @idescribe command sets the internal description for an object, which is 
  shown to anyone who enters or looks while inside the object. It's only 
  used for players and things; rooms and exits always use @describe.
  
  The @oidescribe attribute is shown to others inside <object> when someone
  looks at the @idescribe, and the @aidescribe is triggered when someone
  lookst at the @idescribe.
 
  If there is no IDESCRIBE set for an object, those who enter or look inside
  it will see its @describe. In this case, others in the object will see 
  nothing, and the @aidescribe will not be triggered. If you want to use 
  @aidescribe without @idescribe, set @idescribe to a blank string, or to
  u(describe) to show the description.
 
See also: enter, @enter, ENTER_OK, @describe, look, @idescformat, VERBS
@IDLE
  @idle <player>[=<message>]
 
  This message is sent in return to every page which successfully reaches
  you if it evaluates non-null. It is useful if you are idle for long 
  periods of time and wish to inform people where you are, or if you
  are in a meeting and cannot quickly return pages.
 
  Example: 
    > @idle me=switch(idle(me),>120,I'm idle. Use @mail)
 
  Players paging me will only see the "I'm idle" message if I've been
  idle for over 2 minutes (120 seconds).
  
See also: @away, @haven
@INCLUDE
  @include[/<switches>] <object>/<attribute>[=<arg1>,<arg2>,...]
 
  @include inserts the contents of the attribute provided into the
  action list in-place, without adding a new queue entry. It is
  useful to avoid having to copy the same code into multiple commands.
  The attribute to be included must be visible to the enactor.
 
  Example:
    &CHECKS me=@assert [orflags(%#,Wr)]; @break [gt(words(lwho()),%0)]
    &CMD1 me=$cmd *: @include me/CHECKS; @pemit %#=You passed.
    &CMD2 me=$othercmd *: @include me/CHECKS; @@ Do something else...
 
  When including attribute contents, @include ignores any ^...: or $...:
  at the start, so the CHECKS attribute above could also be written
  like this, to allow for "unit testing":
 
    &CHECKS me=$testchk *: @assert [orflags(%#,Wr)]; 
                           @break [gt(words(lwho()),%0)]
 
  The including environment (%0-%9) is available to the included actions.
  If arguments are provided to @include, they are substituted for the
  environment's %0, %1, etc. while the included action list is running.
  The environment is then restored after the @include. 
  
  Continued in 'help @include2'.
@INCLUDE2
  
  @include takes the following switches to alter its behaviour:
  /nobreak:   Prevents an @break/@assert in the included attribute from
              breaking the including action list.
  /localize:  Saves all q-registers before including the attribute, and
              restores them after including the attribute.
  /clearregs: Clears all q-registers before including the attribute.
  
See also: @trigger, ufun(), @break
@INFILTER
  @infilter <object>[=<pattern 1>[, <pattern 2>[, ..., <pattern N>]]]
  
  @infilter is meant to be used on objects that have an @listen of "*"
  (ie, objects that listen to everything, which is commonly used for 
  things like chairs so that someone inside the object can hear everything 
  said/done outside it). @infilter filters out any messages that match one
  of the patterns and prevents those inside the object from hearing them. 
  It does not stop the @ahear of the listening object from being triggered
  by things that match the @listen.
 
  Sounds are only forwarded if the speaker also passes <object>'s
  @lock/infilter, which receives the sound heard as %0.
 
  For an explanation of infilter patterns, see the help for "@filter".
 
See also: @filter, @listen, @inprefix, AUDIBLE, LISTENING
@INPREFIX
  @inprefix <object>[=<message>]
  
  When an object has an @listen, any string it hears which is propagated to
  its contents will be prefixed with <message>. Useful for vehicles, etc,
  which have an @listen of "*".
  
  Example:
    > @create Vehicle
    Created: Object #103.
    > @create Test
    Created: Object #104.
    > @inprefix Vehicle=From outside,
    > @listen Vehicle=*
    > enter Vehicle
    > @force #104=:bounces.
    From outside, Test bounces.
 
See also: @prefix, @listen, @infilter
@INVFORMAT
  @invformat <object>[=<format>]
 
  When set, this attribute is evaluated and displayed instead of the usual
  "You are carrying:" list of objects when <object> uses the "inventory"
  command. The list of objects that would normally appear in the inventory
  is passed as %0, and a list of the names as they would appear in the
  default display, |-delimited, is passed as %1.
 
  Example:
    > @invformat me=You're holding: [itemize(iter(%0, name(%i0), %b, |), |)]
    > inventory
    You're holding: Red Ball, Pickle, and Piano
 
See also: inventory, @conformat, @exitformat, @nameformat, @descformat,
    @idescformat
@KICK
  @kick <number>
  
  This wizard-only command forces the immediate execution of <number>
  items from the queue. Rarely useful. If your MUSH is lagging badly,
  chances are high that it stems from network problems. Check the queue
  before using this command.
 
See also: @ps, QUEUE
@LALIAS
  @ealias <object>[=<enter alias1>[; ... ; <enter aliasN>]]
  @lalias <object>[=<leave alias1>[; ... ; <leave aliasN>]]
  
  These attributes contain lists of "enter aliases" and "leave aliases" for 
  <object> - any of the aliases can be used in place of "enter <object>" and
  "leave <object>" to enter/leave the object.
  
  These attributes only have meaning for players and things (as rooms/exits
  cannot be "enter"ed) - the aliases for exits are stored in @alias.
  
  Example:
    > @ealias Chair=Sit down;sit
    > @lalias Chair=Stand up;stand
 
See also: enter, leave, goto, ENTER_OK
@LEAVE
  @leave <object>[=<message>]
  @oleave <object>[=<message>]
  @oxleave <object>[=<message>]
  @aleave <object>[=<action list>]
  
  These attributes contain the message shown to anyone leaving <object>,
  the message shown to others inside <object> when someone leaves it, the
  message shown to others in <object>'s location when someone leaves it, and 
  the actions to be taken by <object> when someone leaves it, respectively.
  
  The leaver's new location is passed in %0, if <object> has
  permission to see it there.
 
See also: leave, @oxleave, @lfail, ACTION LISTS, VERBS
@LEMIT
  @lemit[/<switch>] <message>
 
  Emits a message to the outermost container object. For example, if you
  are carrying a bird, and are inside a vehicle which is in room #10, and
  you force the bird to @lemit "Cheep", everyone in room #10 will hear
  "Cheep". This command is the same as "@emit/room". 
 
  With the /silent switch, no confirmation message is shown. With /noisy, it
  is. If neither is given, the silent_pemit option determines if it is shown.
  The /silent switch suppresses the normal confirmation message.
  The /noeval switch prevents <message> from being evaluated.
  The /spoof switch causes nospoof notifications to show the enactor's
    dbref instead of the executor's dbref, and requires control over
    the enactor or the Can_spoof power.
 
See also: @remit, @nslemit
@LFAIL
  @lfail <object>[=<message>]
  @olfail <object>[=<message>]
  @alfail <object>[=<action list>]
 
  These attributes contain the message shown to objects who try to leave
  <object> and fail, the message shown to others inside <object> when
  someone fails to leave, and the actions to be taken by <object> when
  someone attempts to leave it and fails.
  
  Such a failure usually occurs because <object> is set NO_LEAVE, or
  because the person trying to leave does not pass <object>'s @lock/leave.
 
See also: leave, @leave, NO_LEAVE, locktypes, ACTION LISTS, VERBS
@LINK
  @link[/preserve] <object>=[<dbref> | here | home | variable]
 
  Links <object> to either a room or a thing. If a thing or player is
  linked, that sets the object's HOME. If a room is linked, that sets 
  the object's drop-to room, which is where objects that are dropped
  in the room will be sent to.
 
  Most often, @link is used to link or relink an exit to a destination 
  room. In order to link an exit to a room, you must either own or
  control the room, OR the room must be set LINK_OK. If the exit is
  currently unlinked, and you pass its @lock/link, you may link it even
  if you do not own it. In this case, the exit will be @chowned to you
  (and set HALT). Linking an exit may have a cost (usually 1 penny.)
  The Wizard-only /preserve switch can be used to link without @chowning
  and HALTing the exit.
 
  If the destination of an exit is "variable", its destination is
  determined at the time of travel by the attribute DESTINATION on the
  exit, which is evaluated like a U()-function. You must have permission
  to link to whatever the DESTINATION evaluates to in order for the exit
  to work. If there's no DESTINATION attribute, the EXITTO attribute
  is also tried.
 
  If the destination is "home", those who travel through the exit will
  be sent to their homes.
 
  LINK_OK objects can also be used as semaphores, and any object can be
  @parented to them.
 
See also: EXITS, @open, @dig, DROP-TO, HOME
@LIST
  @list/<switch>
  @list[/lowercase] <switch>
 
  The @list command lists useful MUSH information.
 
  Switches include:
  motd        : Alias for @listmotd, shows current messages of the day.
  functions   : Lists all built-in functions and @functions.
  commands    : Lists all built-in commands and @commands.
  attribs     : Lists all standard attributes.
  locks       : Lists the built-in lock types.
  flags       : Alias for @flag/list, shows all flags.
  powers      : Alias for @powers/list, shows all powers.
  allocations : Information about memory allocations. Admin-only.
  
  By default, information is shown in upper-case. Add the /lowercase switch
  to show output in lowercase instead.
  
  "commands" and "functions" show built-in and local commands/functions by
  default. The /builtin or /local switches can be given to limit this.
 
See also: list(), @config, config(), functions(), @stats, @command,
    @function, @flag, @power, @attribute, @listmotd, @motd, locktypes
@LISTEN
  @listen <object> = <string>
 
  Sets the object's listen pattern to <string>, which can have wildcards.
  Whenever something the object hears matches the pattern, the object's
  ahear/amhear/aahear attribute will be triggered. In addition, anything 
  inside the object will hear it as well, if the speaker passes 
  @lock/infilter.
 
  For example:
  > @listen Chair=*  
    Since the wildcard (*) matches anything, anyone inside the object will
    hear anything said outside it.
  > @listen Butler=* has arrived.
  > @ahear Butler=:walks over to the new arrival and takes %p coat.
    In this case, the listen pattern is met whenever someone 'arrives' in
    the room, and then the object does whatever is inside its @ahear 
    attribute.
  Cyclonus has arrived.
  Butler walks over to the new arrival and takes his coat.
 
  Continued in 'help @listen2'.
@LISTEN2
  An object "hears" anything that another player standing in the same room
  would hear. For example, if you type in a command, the object does NOT
  hear it. If the command has a result that people in the room hear, the
  object will hear it.
 
  For example:
  > @listen Recorder=@emit *
  > @ahear Recorder=:records %0
  > @emit Whee!
  Whee!
    In this example, the Recorder's listen-pattern is NOT matched, because
    it doesn't hear the '@emit Whee!', it only hears the 'Whee!' part, which
    doesn't match.
 
  > @listen Recorder=Cyclonus says, "*"
  > say Whee!
  Cyclonus says, "Whee!"
  Recorder records: Whee!
 
See also: LISTENING, @ahear, @amhear, @aahear
@LISTMOTD
  @listmotd
 
  This command lists the current MOTD (message of the day) for the MUSH.
  If used by a wizard or admin, it will also include the wizard, full, and
  down MOTDs to the user.
  
  There are two sets of MotDs: permanant ones defined in mush.cnf, and
  temporary ones set in-game with @motd. Only the messages defined with
  @motd are shown.
 
See also: @motd, @list
@LOCK
  @lock[/<switch>] <object>=<key> 
  
  This command "locks" the object, specifying a key which determines who or
  what can do certain things with the object. There are many different types
  of locks, all of which are described in 'help locktypes' and which are 
  designated by the switch. The "basic" lock determines, for players and 
  things, who can pick them up. For exits, it determines who can go through 
  the exit. All other locks can be set the same way as the basic lock.
 
  Whenever you "pass" the basic lock, you succeed in doing something with 
  the object. This triggers the @success/@osuccess/@asuccess messages and 
  actions. If you fail to pass the basic lock, you trigger the 
  @failure/@ofailure/@afailure messages and actions. Other locktypes may 
  also have such success/failure messages: see 'help failure' for info.
 
  Just like attributes, locks can be inherited from parents. By default,
  locks are set no_inherit, but this flag can be cleared using @lset. More
  details and a list of flags can be found in 'help @lset'.
 
  A listing of lock types, such as pagelocks, look at 'help locktypes'.
  For the available key types, such as how to check an attribute on an
  object trying to pass a lock, see 'help lockkeys'.
 
See also: @lock-simple, locktypes, lockkeys, @clock, failure, success.
  elock(), lock(), @lset, @clock, testlock(), locks(), lockflags(),
  lockowner(), clock(), llocks()
@LOCK-ATTRIBUTE
ATTRIBUTE LOCKS
  You can lock an object to an attribute on the person trying to pass
  the lock (as long as the object can "see" that attribute):
 
    @lock <object>=<attribute>:<value>
 
  <value> can contain wildcards (*), greater than (>) or less than (<)
  symbols.
 
  For example:
    @lock Men's Room = sex:m*
      This would lock the exit "Men's Room" to anyone with a SEX
      attribute starting with the letter "m".
    @lock A-F = icname:<g
      This would lock the exit "A-F" to anyone with a ICNAME attribute
      starting with a letter "less than" the letter "g". This assumes
      that ICNAME is visual or the object with the lock can see it.
 
@LOCK-BIT
BIT LOCKS
  You can test for set flags, powers, or object types in a lock
  directly, without using an evaluation lock, with these formats:
 
    @lock <object>=flag^<flag>
    @lock <object>=type^<type>
    @lock <object>=power^<power>
 
  These locks act like the object the lock is on does a hasflag(%#,
  <flag>), hastype(%#, <type>), or haspower(%#, <power>) succeeding if
  the flag is set.
 
  For example,
    @lock/use Admin Commands=flag^wizard|flag^royalty
 
  You can also test for channel membership with:
 
    @lock <object>=channel^<channel>
 
@LOCK-CARRY
OWNER LOCK
 
  An "owner" lock allows you to lock something to anything owned by
  the same player:
    @lock Box = $My Toy
  This locks "Box" to anything owned by the owner of "My Toy"
   (since players own themselves, that includes the owner as well).
 
CARRY LOCK
  You can lock an object to something that has to be carried:
    @lock Door = +Secret Door Key
      This locks the exit "Door" to someone carrying the object "Secret Door
      Key". Anyone carrying that object will be able to go through the exit.
 
  You can lock an object to -either- an object or to someone carrying the
  object with:
    @lock Disneyworld Entrance = Child
      This locks the exit "Disneyworld Entrance" to either the object 
      "Child" -or- to someone carrying the object "Child". (OK, so it's
      a weird example.)
      
  This is the same as @lock Entrance=+Child|=Child.
 
@LOCK-CHANNEL
BIT LOCKS
  You can test for set flags, powers, or object types in a lock
  directly, without using an evaluation lock, with these formats:
 
    @lock <object>=flag^<flag>
    @lock <object>=type^<type>
    @lock <object>=power^<power>
 
  These locks act like the object the lock is on does a hasflag(%#,
  <flag>), hastype(%#, <type>), or haspower(%#, <power>) succeeding if
  the flag is set.
 
  For example,
    @lock/use Admin Commands=flag^wizard|flag^royalty
 
  You can also test for channel membership with:
 
    @lock <object>=channel^<channel>
 
@LOCK-COMPLEX
  A lock key can be negated by prefixing the key with an "!". For example:
  
    > @lock North=flag^wizard
    > @lock South=!flag^wizard
 
  only lets those with the Wizard flag pass through the North exit, while
  only allowin those who do NOT have the Wizard flag to go South.
  
  You can combine keys, either allowing someone to pass a lock if they pass
  any of the keys given, or requiring that they pass all of the keys, using
  the "|" (or) and "&" (and) symbols. For example:
  
    > @lock OOC Room= status:OOC | power^guest
    
  locks the exit "OOC Room" so that only those with their STATUS attribute
  set to "OOC", or those with the Guest @power, can pass, while
  
    > @lock Men's Room= Sex:Male & +Bathroom Key
    
  only allows those with their @sex set to Male who are carrying a "Bathroom 
  Key" object to pass.
  
  You can group together different sets of keys by enclosing each group in
  parenthesis "()". For instance,
  
    > @lock Entrance=!type^player | (type^player & !flag^unregistered)
    
  allows non-players to pass, or players who do not have the "unregistered"
  flag set.  
  
See also: @lock, locktypes, @clock, objid()
@LOCK-DBREFLIST
LIST LOCK
  You can test to see if the enactor is a member of a space-separated
  list of dbrefs or objids on an attribute on the object, with:
 
    @lock <object>=dbreflist^<attributename>
 
  For example,
    &allow Commands = #1 #7 #23 #200:841701384
    &deny commands = #200 #1020
    @lock/use commands = !dbreflist^deny & dbreflist^allow 
 
@LOCK-EVAL2
 
  Example:
    @lock Thursday Cafe = whichday/Thu
    &whichday Thursday Cafe = first(time())
      This locks the object "Thursday Cafe" (probably an exit) unless today
      is Thursday.
 
      Whenever someone tries to pass through the exit, the attribute
      "whichday" will be evaluated, extracting the first word returned from
      time() (the day of the week). The result is compared with the value in
      the lock ("Thu"), and the lock will only be passable when the strings
      match--Only on Thursdays.
 
  If you have an evaluation lock that just does [hasflag(%#,FLAGNAME)],
  you should probably use a bit lock instead.
 
See also: @lock-bit
@LOCK-EVALUATION
EVALUATION LOCK
  An evaluation lock is set using this format:
 
    @lock <object>=<attribute>/<value>
 
  The difference between this and an attribute lock is that the
  <attribute> is taken from <object> rather than from the person
  trying to pass the lock. When someone tries, <attribute> is
  evaluated, and the result is compared to <value>. If it matches,
  then the person passes the lock.
 
  The person trying to pass the lock is %# and <object> is %! when the
  evaluation takes place. The evaluation is done with the powers of
  <object>. If you try to do something (like [get(%#/<attribute>)])
  and <object> doesn't have permission to do that, the person will
  automatically fail to pass the lock.
 
  Continued in 'help @lock-eval2'.
@LOCK-EVALUATION2
 
  Example:
    @lock Thursday Cafe = whichday/Thu
    &whichday Thursday Cafe = first(time())
      This locks the object "Thursday Cafe" (probably an exit) unless today
      is Thursday.
 
      Whenever someone tries to pass through the exit, the attribute
      "whichday" will be evaluated, extracting the first word returned from
      time() (the day of the week). The result is compared with the value in
      the lock ("Thu"), and the lock will only be passable when the strings
      match--Only on Thursdays.
 
  If you have an evaluation lock that just does [hasflag(%#,FLAGNAME)],
  you should probably use a bit lock instead.
 
See also: @lock-bit
@LOCK-FLAG
BIT LOCKS
  You can test for set flags, powers, or object types in a lock
  directly, without using an evaluation lock, with these formats:
 
    @lock <object>=flag^<flag>
    @lock <object>=type^<type>
    @lock <object>=power^<power>
 
  These locks act like the object the lock is on does a hasflag(%#,
  <flag>), hastype(%#, <type>), or haspower(%#, <power>) succeeding if
  the flag is set.
 
  For example,
    @lock/use Admin Commands=flag^wizard|flag^royalty
 
  You can also test for channel membership with:
 
    @lock <object>=channel^<channel>
 
@LOCK-HOST
HOST LOCKS
 
  You can check to make sure an object is owned by a player connected from 
  a specific host or IP address using the following:
  
    @lock <object>=ip^<ipaddress>
    @lock <object>=hostname^<hostname>
    
  <ipaddress> and <hostname> can contain wildcards. <object> must be able
  to see the LASTIP attribute (for ip locks) or LASTSITE attribute (for
  hostname locks) on the enactor's owner.
  
  For example:
    @lock <object>=ip^127.0.0.1
      This locks <object> to players (and the objects of players) currently
      connected from the computer the MUSH is running on.
      
See also: ipaddr(), hostname(), LASTSITE
@LOCK-INDIRECT
INDIRECT LOCKS
  An "indirect" lock allows you to lock something to the same thing as
  another object (very useful in setting channel locks; see help
  @clock):
    @lock Second Puppet = @First Puppet
      This locks the object "Second Puppet" to whatever the object
      "First Puppet" is locked to. Normally, the lock type that is
      checked is the same as the lock on the first. You can specify a
      different lock type with @object/LOCKNAME. For example:
    @lock Second Puppet = @First Puppet/Use
      Second Puppet's basic lock now checks First Puppet's use lock.
 
@LOCK-LIST
LIST LOCK
  You can test to see if the enactor is a member of a space-separated
  list of dbrefs or objids on an attribute on the object, with:
 
    @lock <object>=dbreflist^<attributename>
 
  For example,
    &allow Commands = #1 #7 #23 #200:841701384
    &deny commands = #200 #1020
    @lock/use commands = !dbreflist^deny & dbreflist^allow 
 
@LOCK-NAME
NAME LOCKS
  You can test for objects matching a given name by using the below format
 
    @lock <object>=name^<pattern>
 
  It is similar to performing strmatch(%n,<pattern>), though will also match
  for a player/exit with <pattern> as one of its @aliases.
 
  For example, to lock "Bob's Tools" to only people with a name beginning
  with Bob:
    @lock/use Bob's Tools=name^bob*
 
@LOCK-OBJID
SIMPLE LOCKS
 
  You can lock an object in several different ways. The simplest lock
  is one that always succeeds (#true) or always fails (#false), or
  that matches a specific object by prefixing it with an "=":
 
   > @lock My Toy = #false
     This lock will always fail.
 
   > @lock My Toy = =me
     This locks the object "My Toy" to you and you alone. It is recommended
     that you @lock me = =me in order to prevent anyone else from picking 
     you up. The two = signs are NOT a typo! The first is part of the @lock 
     syntax (as shown at the top of 'help @lock') the second is a lock key 
     that means "only this exact object".
  
  For backwards compatability, OBJID^<object> is an alias for =<object>.
 
@LOCK-OWNER
OWNER LOCK
 
  An "owner" lock allows you to lock something to anything owned by
  the same player:
    @lock Box = $My Toy
  This locks "Box" to anything owned by the owner of "My Toy"
   (since players own themselves, that includes the owner as well).
 
CARRY LOCK
  You can lock an object to something that has to be carried:
    @lock Door = +Secret Door Key
      This locks the exit "Door" to someone carrying the object "Secret Door
      Key". Anyone carrying that object will be able to go through the exit.
 
  You can lock an object to -either- an object or to someone carrying the
  object with:
    @lock Disneyworld Entrance = Child
      This locks the exit "Disneyworld Entrance" to either the object 
      "Child" -or- to someone carrying the object "Child". (OK, so it's
      a weird example.)
      
  This is the same as @lock Entrance=+Child|=Child.
 
@LOCK-POWER
BIT LOCKS
  You can test for set flags, powers, or object types in a lock
  directly, without using an evaluation lock, with these formats:
 
    @lock <object>=flag^<flag>
    @lock <object>=type^<type>
    @lock <object>=power^<power>
 
  These locks act like the object the lock is on does a hasflag(%#,
  <flag>), hastype(%#, <type>), or haspower(%#, <power>) succeeding if
  the flag is set.
 
  For example,
    @lock/use Admin Commands=flag^wizard|flag^royalty
 
  You can also test for channel membership with:
 
    @lock <object>=channel^<channel>
 
@LOCK-SIMPLE
SIMPLE LOCKS
 
  You can lock an object in several different ways. The simplest lock
  is one that always succeeds (#true) or always fails (#false), or
  that matches a specific object by prefixing it with an "=":
 
   > @lock My Toy = #false
     This lock will always fail.
 
   > @lock My Toy = =me
     This locks the object "My Toy" to you and you alone. It is recommended
     that you @lock me = =me in order to prevent anyone else from picking 
     you up. The two = signs are NOT a typo! The first is part of the @lock 
     syntax (as shown at the top of 'help @lock') the second is a lock key 
     that means "only this exact object".
  
  For backwards compatability, OBJID^<object> is an alias for =<object>.
 
@LOCK-TYPE
BIT LOCKS
  You can test for set flags, powers, or object types in a lock
  directly, without using an evaluation lock, with these formats:
 
    @lock <object>=flag^<flag>
    @lock <object>=type^<type>
    @lock <object>=power^<power>
 
  These locks act like the object the lock is on does a hasflag(%#,
  <flag>), hastype(%#, <type>), or haspower(%#, <power>) succeeding if
  the flag is set.
 
  For example,
    @lock/use Admin Commands=flag^wizard|flag^royalty
 
  You can also test for channel membership with:
 
    @lock <object>=channel^<channel>
 
@LOCK/BASIC
  @lock/basic
    For exits, this lock controls who can pass through the exit.
    For players and things, it controls who can "get" the object.
    For rooms, it determines whether the @success or @failure verbs are
      triggered when someone "look"s at the room. However, even when the
      lock is failed, the "look" still occurs.
  See also: @success, @failure, goto, get, look
      
  @lock/enter
    For players and things, the Enter lock controls who can "enter" an
      ENTER_OK object, as well as who can "empty" it. It has no meaning for 
      exits or rooms.
  See also: @enter, @efail, ENTER_OK, enter, empty
    
  @lock/leave
    For players, things and rooms, the Leave lock controls who can leave
      the object, via "leave", "@teleport" or "goto". It has no meaning for
      exits.
  See also: @leave, @lfail, leave
      
  @lock/teleport
    For rooms, the Teleport lock controls who can "@teleport" into the room,
      if it has the JUMP_OK flag set. It has no meaning for players, things 
      or exits.
  See also: JUMP_OK, @teleport
 
See also: @lock, locktypes, lockkeys
@LOCK/CHZONE
  @lock/zone
    Objects which pass a SHARED player's @lock/zone control all the objects
      the shared player owns. If the zone_control_zmp_only @config option is
      off, anything passing the @lock/zone of other objects will control 
      everything @chzoned to the object.
  See also: @chzone, SHARED, ZONES, ZMR
  
  @lock/chzone
    If set, controls who can @chzone an object to this zone.
  See also: @chzone, ZONES
    
  @lock/parent
    Controls who can @parent something to this LINK_OK object.
  See also: @parent, LINK_OK
  
  @lock/link
    Controls who can @link this unlinked exit, or who can @link an exit to
      this LINK_OK room/thing.
  See also: @link, LINK_OK, LINK_ANYWHERE POWER
  
  @lock/open
    Controls who can @open an exit from this OPEN_OK room.
  See also: @open, @dig, OPEN_OK, OPEN_ANYWHERE POWER
@LOCK/COMMAND
  @lock/use
    For players, things and rooms, this lock controls who may "use" the
      object. You must also pass an object's Use lock to trigger $-commands
      or ^-listens on it (as well as the Command/Listen lock; see below).
    When an object is used as a Channel Mogrifier, only players who pass the
      object's Use lock will have their speech on the channel mogrified.
    Has no meaning for exits.
  See also: @use, @ufail, use, $-commands, ^, MOGRIFY
  
  @lock/command
    For players, things and rooms, you must pass this lock (as well as the
      Use lock) to trigger $-commands on the object. Meaningless for exits.
  See also: $-commands, FAILURE
    
  @lock/listen
    For players, things and rooms, you must pass this lock (as well as the
      Use lock) to trigger ^-listen patterns on the object when it's set
      MONITOR. Meaningless for exits.
  See also: ^
  
See also: @lock, locktypes, lockkeys
@LOCK/CONTROL
  @lock/control
    Allows objects which would not normally control something to do so. Does
      not work for players.
  See also: CONTROL
    
  @lock/destroy
    Limits who can @destroy a DESTROY_OK object.
  See also: @destroy, DESTROY_OK
  
  @lock/examine
    Limits who can examine a VISUAL object.
  See also: examine, VISUAL
@LOCK/DESTROY
  @lock/control
    Allows objects which would not normally control something to do so. Does
      not work for players.
  See also: CONTROL
    
  @lock/destroy
    Limits who can @destroy a DESTROY_OK object.
  See also: @destroy, DESTROY_OK
  
  @lock/examine
    Limits who can examine a VISUAL object.
  See also: examine, VISUAL
@LOCK/DROP
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/DROPIN
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/DROPTO
  @lock/follow
    For players and things, controls who may "follow" the object. Has no
      meaning for rooms or exits.
  See also: follow, FAILURE
    
  @lock/forward
    For players, things and rooms, controls who can forward sound to an 
      object, via @forwardlist or @debugforwardlist. Meaningless for exits.
  See also: @forwardlist, @debugforwardlist, @lock/mailforward
  
  @lock/dropto
    For rooms, only objects which pass this lock will be sent to the rooms
    Drop-To. Has no meaning for players, things or exits.
  See also: DROP-TOS, drop, empty
 
See also: @lock, locktypes, lockkeys
@LOCK/ENTER
  @lock/basic
    For exits, this lock controls who can pass through the exit.
    For players and things, it controls who can "get" the object.
    For rooms, it determines whether the @success or @failure verbs are
      triggered when someone "look"s at the room. However, even when the
      lock is failed, the "look" still occurs.
  See also: @success, @failure, goto, get, look
      
  @lock/enter
    For players and things, the Enter lock controls who can "enter" an
      ENTER_OK object, as well as who can "empty" it. It has no meaning for 
      exits or rooms.
  See also: @enter, @efail, ENTER_OK, enter, empty
    
  @lock/leave
    For players, things and rooms, the Leave lock controls who can leave
      the object, via "leave", "@teleport" or "goto". It has no meaning for
      exits.
  See also: @leave, @lfail, leave
      
  @lock/teleport
    For rooms, the Teleport lock controls who can "@teleport" into the room,
      if it has the JUMP_OK flag set. It has no meaning for players, things 
      or exits.
  See also: JUMP_OK, @teleport
 
See also: @lock, locktypes, lockkeys
@LOCK/EXAMINE
  @lock/control
    Allows objects which would not normally control something to do so. Does
      not work for players.
  See also: CONTROL
    
  @lock/destroy
    Limits who can @destroy a DESTROY_OK object.
  See also: @destroy, DESTROY_OK
  
  @lock/examine
    Limits who can examine a VISUAL object.
  See also: examine, VISUAL
@LOCK/FILTER
  @lock/filter
  @lock/infilter
    These are lock versions of @filter and @infilter, respectively. Anyone
      who fails to pass the lock will have their speech filtered. The sound
      being made is passed to evaluation locks as %0.
  See also: @filter, @infilter
@LOCK/FOLLOW
  @lock/follow
    For players and things, controls who may "follow" the object. Has no
      meaning for rooms or exits.
  See also: follow, FAILURE
    
  @lock/forward
    For players, things and rooms, controls who can forward sound to an 
      object, via @forwardlist or @debugforwardlist. Meaningless for exits.
  See also: @forwardlist, @debugforwardlist, @lock/mailforward
  
  @lock/dropto
    For rooms, only objects which pass this lock will be sent to the rooms
    Drop-To. Has no meaning for players, things or exits.
  See also: DROP-TOS, drop, empty
 
See also: @lock, locktypes, lockkeys
@LOCK/FORWARD
  @lock/follow
    For players and things, controls who may "follow" the object. Has no
      meaning for rooms or exits.
  See also: follow, FAILURE
    
  @lock/forward
    For players, things and rooms, controls who can forward sound to an 
      object, via @forwardlist or @debugforwardlist. Meaningless for exits.
  See also: @forwardlist, @debugforwardlist, @lock/mailforward
  
  @lock/dropto
    For rooms, only objects which pass this lock will be sent to the rooms
    Drop-To. Has no meaning for players, things or exits.
  See also: DROP-TOS, drop, empty
 
See also: @lock, locktypes, lockkeys
@LOCK/FROM
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/GIVE
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/INFILTER
  @lock/filter
  @lock/infilter
    These are lock versions of @filter and @infilter, respectively. Anyone
      who fails to pass the lock will have their speech filtered. The sound
      being made is passed to evaluation locks as %0.
  See also: @filter, @infilter
@LOCK/INTERACT
  @lock/page
    For players, things and rooms, you must pass this lock to page or @pemit
      to the object, or @remit inside it. Meaningless for exits. 
  See also: FAILURE, @haven
  
  @lock/speech
    Controls who can speak (via say, pose, @*emit or teach) inside an object.
    Meaningless for exits.
  See also: FAILURE
  
  @lock/mail
    Controls who can send @mail to this object.
  See also: @mail, FAILURE
  
  @lock/mailforward
    Controls who can forward @mail to this object via @mailforward.
  See also: @mail, @mailforward, @lock/forward
  
  @lock/interact
    Controls who can send sound of any kind (page, say, channels, etc) to
    you. Note that players who fail to pass your interact lock will not be
    informed you're not receiving their messages, so you may also wish to
    @lock/page them and set a haven message.
  
See also: @lock, locktypes, lockkeys
@LOCK/LEAVE
  @lock/basic
    For exits, this lock controls who can pass through the exit.
    For players and things, it controls who can "get" the object.
    For rooms, it determines whether the @success or @failure verbs are
      triggered when someone "look"s at the room. However, even when the
      lock is failed, the "look" still occurs.
  See also: @success, @failure, goto, get, look
      
  @lock/enter
    For players and things, the Enter lock controls who can "enter" an
      ENTER_OK object, as well as who can "empty" it. It has no meaning for 
      exits or rooms.
  See also: @enter, @efail, ENTER_OK, enter, empty
    
  @lock/leave
    For players, things and rooms, the Leave lock controls who can leave
      the object, via "leave", "@teleport" or "goto". It has no meaning for
      exits.
  See also: @leave, @lfail, leave
      
  @lock/teleport
    For rooms, the Teleport lock controls who can "@teleport" into the room,
      if it has the JUMP_OK flag set. It has no meaning for players, things 
      or exits.
  See also: JUMP_OK, @teleport
 
See also: @lock, locktypes, lockkeys
@LOCK/LINK
  @lock/zone
    Objects which pass a SHARED player's @lock/zone control all the objects
      the shared player owns. If the zone_control_zmp_only @config option is
      off, anything passing the @lock/zone of other objects will control 
      everything @chzoned to the object.
  See also: @chzone, SHARED, ZONES, ZMR
  
  @lock/chzone
    If set, controls who can @chzone an object to this zone.
  See also: @chzone, ZONES
    
  @lock/parent
    Controls who can @parent something to this LINK_OK object.
  See also: @parent, LINK_OK
  
  @lock/link
    Controls who can @link this unlinked exit, or who can @link an exit to
      this LINK_OK room/thing.
  See also: @link, LINK_OK, LINK_ANYWHERE POWER
  
  @lock/open
    Controls who can @open an exit from this OPEN_OK room.
  See also: @open, @dig, OPEN_OK, OPEN_ANYWHERE POWER
@LOCK/LISTEN
  @lock/use
    For players, things and rooms, this lock controls who may "use" the
      object. You must also pass an object's Use lock to trigger $-commands
      or ^-listens on it (as well as the Command/Listen lock; see below).
    When an object is used as a Channel Mogrifier, only players who pass the
      object's Use lock will have their speech on the channel mogrified.
    Has no meaning for exits.
  See also: @use, @ufail, use, $-commands, ^, MOGRIFY
  
  @lock/command
    For players, things and rooms, you must pass this lock (as well as the
      Use lock) to trigger $-commands on the object. Meaningless for exits.
  See also: $-commands, FAILURE
    
  @lock/listen
    For players, things and rooms, you must pass this lock (as well as the
      Use lock) to trigger ^-listen patterns on the object when it's set
      MONITOR. Meaningless for exits.
  See also: ^
  
See also: @lock, locktypes, lockkeys
@LOCK/MAIL
  @lock/page
    For players, things and rooms, you must pass this lock to page or @pemit
      to the object, or @remit inside it. Meaningless for exits. 
  See also: FAILURE, @haven
  
  @lock/speech
    Controls who can speak (via say, pose, @*emit or teach) inside an object.
    Meaningless for exits.
  See also: FAILURE
  
  @lock/mail
    Controls who can send @mail to this object.
  See also: @mail, FAILURE
  
  @lock/mailforward
    Controls who can forward @mail to this object via @mailforward.
  See also: @mail, @mailforward, @lock/forward
  
  @lock/interact
    Controls who can send sound of any kind (page, say, channels, etc) to
    you. Note that players who fail to pass your interact lock will not be
    informed you're not receiving their messages, so you may also wish to
    @lock/page them and set a haven message.
  
See also: @lock, locktypes, lockkeys
@LOCK/MAILFORWARD
  @lock/page
    For players, things and rooms, you must pass this lock to page or @pemit
      to the object, or @remit inside it. Meaningless for exits. 
  See also: FAILURE, @haven
  
  @lock/speech
    Controls who can speak (via say, pose, @*emit or teach) inside an object.
    Meaningless for exits.
  See also: FAILURE
  
  @lock/mail
    Controls who can send @mail to this object.
  See also: @mail, FAILURE
  
  @lock/mailforward
    Controls who can forward @mail to this object via @mailforward.
  See also: @mail, @mailforward, @lock/forward
  
  @lock/interact
    Controls who can send sound of any kind (page, say, channels, etc) to
    you. Note that players who fail to pass your interact lock will not be
    informed you're not receiving their messages, so you may also wish to
    @lock/page them and set a haven message.
  
See also: @lock, locktypes, lockkeys
@LOCK/OPEN
  @lock/zone
    Objects which pass a SHARED player's @lock/zone control all the objects
      the shared player owns. If the zone_control_zmp_only @config option is
      off, anything passing the @lock/zone of other objects will control 
      everything @chzoned to the object.
  See also: @chzone, SHARED, ZONES, ZMR
  
  @lock/chzone
    If set, controls who can @chzone an object to this zone.
  See also: @chzone, ZONES
    
  @lock/parent
    Controls who can @parent something to this LINK_OK object.
  See also: @parent, LINK_OK
  
  @lock/link
    Controls who can @link this unlinked exit, or who can @link an exit to
      this LINK_OK room/thing.
  See also: @link, LINK_OK, LINK_ANYWHERE POWER
  
  @lock/open
    Controls who can @open an exit from this OPEN_OK room.
  See also: @open, @dig, OPEN_OK, OPEN_ANYWHERE POWER
@LOCK/PAGE
  @lock/page
    For players, things and rooms, you must pass this lock to page or @pemit
      to the object, or @remit inside it. Meaningless for exits. 
  See also: FAILURE, @haven
  
  @lock/speech
    Controls who can speak (via say, pose, @*emit or teach) inside an object.
    Meaningless for exits.
  See also: FAILURE
  
  @lock/mail
    Controls who can send @mail to this object.
  See also: @mail, FAILURE
  
  @lock/mailforward
    Controls who can forward @mail to this object via @mailforward.
  See also: @mail, @mailforward, @lock/forward
  
  @lock/interact
    Controls who can send sound of any kind (page, say, channels, etc) to
    you. Note that players who fail to pass your interact lock will not be
    informed you're not receiving their messages, so you may also wish to
    @lock/page them and set a haven message.
  
See also: @lock, locktypes, lockkeys
@LOCK/PARENT
  @lock/zone
    Objects which pass a SHARED player's @lock/zone control all the objects
      the shared player owns. If the zone_control_zmp_only @config option is
      off, anything passing the @lock/zone of other objects will control 
      everything @chzoned to the object.
  See also: @chzone, SHARED, ZONES, ZMR
  
  @lock/chzone
    If set, controls who can @chzone an object to this zone.
  See also: @chzone, ZONES
    
  @lock/parent
    Controls who can @parent something to this LINK_OK object.
  See also: @parent, LINK_OK
  
  @lock/link
    Controls who can @link this unlinked exit, or who can @link an exit to
      this LINK_OK room/thing.
  See also: @link, LINK_OK, LINK_ANYWHERE POWER
  
  @lock/open
    Controls who can @open an exit from this OPEN_OK room.
  See also: @open, @dig, OPEN_OK, OPEN_ANYWHERE POWER
@LOCK/PAY
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/RECEIVE
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/SPEECH
  @lock/page
    For players, things and rooms, you must pass this lock to page or @pemit
      to the object, or @remit inside it. Meaningless for exits. 
  See also: FAILURE, @haven
  
  @lock/speech
    Controls who can speak (via say, pose, @*emit or teach) inside an object.
    Meaningless for exits.
  See also: FAILURE
  
  @lock/mail
    Controls who can send @mail to this object.
  See also: @mail, FAILURE
  
  @lock/mailforward
    Controls who can forward @mail to this object via @mailforward.
  See also: @mail, @mailforward, @lock/forward
  
  @lock/interact
    Controls who can send sound of any kind (page, say, channels, etc) to
    you. Note that players who fail to pass your interact lock will not be
    informed you're not receiving their messages, so you may also wish to
    @lock/page them and set a haven message.
  
See also: @lock, locktypes, lockkeys
@LOCK/TAKE
  @lock/drop
 
    For players and things, controls who can drop the object. Has no
      meaning for exits. On rooms, has the same meaning as
      @lock/dropin
 
    See also: drop, empty
  
  @lock/dropin
 
    When set on a player, thing or room, controls who can drop objects
     into them. Has no meaning for exits.
 
  @lock/give
    For players and things, controls who may give the object away.
    Has no meaning for rooms or exits.
  
  @lock/from
    Controls who may give items to this object.
  
  @lock/receive
    Controls what may be given to this object.
  
  @lock/take
    Controls who can take this object.
  
See also: give, @lock/basic, @lock/enter
@LOCK/TELEPORT
  @lock/basic
    For exits, this lock controls who can pass through the exit.
    For players and things, it controls who can "get" the object.
    For rooms, it determines whether the @success or @failure verbs are
      triggered when someone "look"s at the room. However, even when the
      lock is failed, the "look" still occurs.
  See also: @success, @failure, goto, get, look
      
  @lock/enter
    For players and things, the Enter lock controls who can "enter" an
      ENTER_OK object, as well as who can "empty" it. It has no meaning for 
      exits or rooms.
  See also: @enter, @efail, ENTER_OK, enter, empty
    
  @lock/leave
    For players, things and rooms, the Leave lock controls who can leave
      the object, via "leave", "@teleport" or "goto". It has no meaning for
      exits.
  See also: @leave, @lfail, leave
      
  @lock/teleport
    For rooms, the Teleport lock controls who can "@teleport" into the room,
      if it has the JUMP_OK flag set. It has no meaning for players, things 
      or exits.
  See also: JUMP_OK, @teleport
 
See also: @lock, locktypes, lockkeys
@LOCK/USE
  @lock/use
    For players, things and rooms, this lock controls who may "use" the
      object. You must also pass an object's Use lock to trigger $-commands
      or ^-listens on it (as well as the Command/Listen lock; see below).
    When an object is used as a Channel Mogrifier, only players who pass the
      object's Use lock will have their speech on the channel mogrified.
    Has no meaning for exits.
  See also: @use, @ufail, use, $-commands, ^, MOGRIFY
  
  @lock/command
    For players, things and rooms, you must pass this lock (as well as the
      Use lock) to trigger $-commands on the object. Meaningless for exits.
  See also: $-commands, FAILURE
    
  @lock/listen
    For players, things and rooms, you must pass this lock (as well as the
      Use lock) to trigger ^-listen patterns on the object when it's set
      MONITOR. Meaningless for exits.
  See also: ^
  
See also: @lock, locktypes, lockkeys
@LOCK/USER
 
  @lock/user:<name>
    User-defined locks have no hardcoded meaning. They allow you to set locks
      for any purpose, which you can test using the elock() function. <name>
      can be anything which is a valid attribute name. For example, in a
      combat system you might use a "wield" @lock on weapons, similar to
      
        > @lock/user:wield War Hammer=strength:>20
        
      and then test it with elock(War Hammer/wield, %#).
  See also: elock(), valid()
  
See also: @lock, locktypes, lockkeys
@LOCK/USER:<NAME>
 
  @lock/user:<name>
    User-defined locks have no hardcoded meaning. They allow you to set locks
      for any purpose, which you can test using the elock() function. <name>
      can be anything which is a valid attribute name. For example, in a
      combat system you might use a "wield" @lock on weapons, similar to
      
        > @lock/user:wield War Hammer=strength:>20
        
      and then test it with elock(War Hammer/wield, %#).
  See also: elock(), valid()
  
See also: @lock, locktypes, lockkeys
@LOCK/ZONE
  @lock/zone
    Objects which pass a SHARED player's @lock/zone control all the objects
      the shared player owns. If the zone_control_zmp_only @config option is
      off, anything passing the @lock/zone of other objects will control 
      everything @chzoned to the object.
  See also: @chzone, SHARED, ZONES, ZMR
  
  @lock/chzone
    If set, controls who can @chzone an object to this zone.
  See also: @chzone, ZONES
    
  @lock/parent
    Controls who can @parent something to this LINK_OK object.
  See also: @parent, LINK_OK
  
  @lock/link
    Controls who can @link this unlinked exit, or who can @link an exit to
      this LINK_OK room/thing.
  See also: @link, LINK_OK, LINK_ANYWHERE POWER
  
  @lock/open
    Controls who can @open an exit from this OPEN_OK room.
  See also: @open, @dig, OPEN_OK, OPEN_ANYWHERE POWER
@LOG
  @log[/<switch>] <message>
  @log/recall/<switch> [<number>]
 
  This wizard-only command puts <message> in a log file, tagged with
  the time and object executing the command.  The available switches
  are /check, /cmd, /conn, /err, /trace, and /wiz, specifying which
  file to log to.  /cmd is default.
 
  Adding the /recall switch will display the last <number> lines
  written to that log file, or the entire log buffer (Which is the
  last 1 kilobyte or so of data written to the log) if omitted.
 
See also: @logwipe
@LOGWIPE
  @logwipe/<switch> <password>
 
  This God-only command erases one of the MUSH logs. Available switches
  are /check, /cmd, /conn, /trace, and /wiz. God must give the 
  log wipe password from the MUSH's configuration file to use this
  command.
 
See also: @log
@LSET
  @lset <object>/<lock type>=[!]<flag>
 
  This commands sets or clears flags on locks.
  Valid flags include:
  
  visual     (v)     This lock can be seen even if the object it's on
                     isn't visual.
  no_inherit (i)     This lock isn't inherited off of parents. All locks
                     are set no_inherit by default.
  no_clone   (c)     This lock isn't copied by @clone.
  wizard     (w)     This lock can only be set by wizards.
  locked     (+)     This lock can only be set by the owner of the lock.
 
See also: @lock, lockflags(), llockflags(), lset()
@MAIL
  @mail[/<switches>] [<msg-list>[=<target>]]
  @mail[/<switches>] <player-list>=[<subject>/]<message>
 
  @mail invokes the built-in MUSH mailer, which allows players to send
  and receive mail. Pronoun/function substitution is performed on any
  messages you may try to send.
 
  A <msg-list> is one of the following:
        A single msg # (ex: 3)
        A message range (ex: 2-5, -7, 3-)
        A folder number and message number/range (ex: 0:3, 1:2-5, 2:-7)
        A sender (ex: *paul)
        An age of mail in days (ex: ~3 (exactly 3), <2, >1)
           "days" here means 24-hour periods from the current time.
        One of the following: "read", "unread", "cleared", "tagged",
        "urgent", "all" (all messages in all folders), "folder" (all
        messages in current folder)
  A <player-list> is a space-separated list of recipients, which may be:
        Player names
        Player dbref #'s
        Message #'s, in which case you send to the sender of that message.
        An alias name (see help @malias)
 
  See also the following topics:    mail-sending   mail-reading   
      mail-folders   mail-forward   mail-other     mail-admin     
      @malias        mail-reviewing
@MAILFILTER
  The @mailfilter attribute specifies automatic filing of incoming
  @mail messages into folders. When an @mail message is received,
  the contents of @mailfilter are evaluated, with the following 
  arguments passed:
     %0     dbref of message sender
     %1     message subject
     %2     message body
     %3     message status flags (a string containing U, F, and/or R,
            for urgent, forwarded, and/or reply, respectively)
 
  If @mailfilter evaluates to a folder name or number, the message
  will be filed into that folder. If @mailfilter evaluates to a null
  string, the message remains in the incoming folder.
 
  Example: Filter urgent messages into folder 1
  > @mailfilter me=if(strmatch(%3,*U*),1)
 
See also: mail-folders
@MAILFORWARDLIST
  @mailforwardlist me = <space-separated list of dbrefs or objids>
  @lock/mailforward me = <lock>
 
  By setting a @mailforwardlist attribute, a player can direct that
  @mail they receive should be delivered to the specified list of
  dbrefs of other players. The list may include the player's own
  dbref, in which case the player will receive a copy of the message,
  or omit it, in which case the message will be delivered to those
  listed but the player will not receive a copy.
 
  To deliver messages to other players this way, you must control them
  (i.e. you're delivering to yourself or you're a wizard) or pass
  their @lock/mailforward. An empty @lock/mailforward disallows
  forwarding to you, and is the default.
@MAILSIGNATURE
 
  @mailsignature <object>[=<signature>]
  
  When set, this attribute is evaluated and appended to any @mail messages
  sent by <object>, unless the @mail/nosig command is used.
  
  Example:
  > @mailsignature me=%r%r-- %n%r%r[u(funny_quote)]
  
See also: @mail, mail-sending
@MALIAS
@malias [<alias>]
 
The @malias command is used to create, view, and manipulate @mail
aliases, or lists. An alias is a shorthand way of specifying a list of
players for @mail. Aliases begin with the '+' (plus) prefix, and
represent a list of dbrefs; aliases may not include other aliases.
 
@malias with no arguments lists aliases available for your use, and is
equivalent to @malias/list
 
@malias with a single argument (the name of an alias) lists the
members of that alias, if you're allowed to see them. Other forms of
the same command are @malias/members <alias> or @malias/who <alias>
 
See help @malias2 for more
 
@MALIAS2
@malias[/create] <alias>=<player list>
@malias/desc <alias>=<Description>
@malias/rename <alias>=<newalias>
@malias/destroy <alias>
 
The first form above creates a new alias for the given list of players.
@malias/desc sets the alias's description, which is shown when aliases
are listed.
@malias/rename renames an alias.
@malias/destroy destroys the alias completely.
 
See help @malias3 for more.
@MALIAS3
@malias/set <alias>=<player list>
@malias/add <alias>=<player list>
@malias/remove <alias>=<player list>
 
@malias/set resets the list of players on the alias to <player list>.
@malias/add adds players to the alias. Note that the same player
may be on an alias multiple times.
@malias/remove removes players from the alias. If a player is on the
alias more than once, a single remove will remove only one instance
of that player.
 
See help @malias4 for more.
@MALIAS4
@malias/use <alias>=<perm list>
@malias/see <alias>=<perm list>
 
@malias/use controls who may use an alias. Players who may use an
alias will see it in their @malias list, and can @mail to the
alias.
@malias/see controls who may list the members of an alias.
 
An empty permission list allows any player. The permission list may
also be a space-separated list of one or more of "owner", "members"
(of the alias), and "admin".
 
By default, the owner and alias members may see and use the alias, but
only the owner may list the members.  Note that admin may always list
aliases and their members, regardless of these settings, but are
treated like anyone else when trying to @mail with an alias.
 
See help @malias5 for more.
@MALIAS5
@malias/all
@malias/stat
@malias/chown <alias>=<player>
@malias/nuke
 
@malias/all is an admin-only command that lists all aliases in the MUSH.
@malias/stat is an admin-only command that displays statistics about the
number of aliases and members of aliases in use.
@malias/chown is a wizard-only command that changes the owner of an alias.
@malias/nuke is a God-only command that destroys all aliases.
@MAPSQL
  @mapsql[/notify][/colnames] <obj>/<attr>=<query>
 
  This command issues an SQL query if the MUSH supports SQL and
  can connect to an SQL server. You must be WIZARD or have the
  Sql_Ok power to use @sql.
 
  For each row returned by the query, the action list in <obj>/<attr>
  is queued, with row number passed as %0 and the columns passed as
  %1-%9. Row numbers start at 1.
 
  The /notify switch causes @mapsql to do an "@notify me" after all the
  rows are processed.
 
  The /colnames switch causes @mapsql to first queue the obj/attr with
  row number 0 and %0-%9 being the column names.
 
  Example:
  > &desctable me=think align(30 20 4 10 10,%0,%1,%2,%3,%4)
  > @mapsql me/desctable=DESCRIBE table_name
See also: sql(), sqlescape(), mapsql(), @sql
@MESSAGE
  @message[/<switches>] <recipients>=<message>,[<obj>/]<attr>
                                  [,<arg0>[, ... , <arg9>]]]
 
  @message is designed for the use of *format messages, such as
  @pageformat or @chatformat. It is intended for use with @hooking page, 
  @chat, or say/pose/emit, or for coding language systems.
 
  For each of the given <recipients>, <obj>/<attr> is evaluated (with up to
  ten arguments, as if it was ufun()'d), and the object is shown the result
  via @pemit. If the attribute does not exist, they are shown <message>
  instead.
  
  If <obj> is not given, or is given as "#-2", the attribute will be checked
  on the recipient.
 
  If one of the arguments matches "##", it will be replaced with the dbref of
  the recipient.
  
  Switches:
    /noeval   -- none of @message's arguments will be evaluated
    /spoof    -- the message will appear to be from the enactor, not the
                 recipient. Requires the Can_Spoof @power.
    /remit    -- Works like @remit, treating <recipients> as a list of rooms
                 to send <message> to
    /oemit    -- Works like @oemit, with <recipients> as a list of objects
                 not to emit to. See 'help @oemit' for more info.
    /nospoof  -- don't show nospoof info, as per @nspemit/@nsremit/@nsoemit
    /silent   -- don't show a confirmation message
    /noisy    -- show a confirmation message
 
  See 'help @message2' for examples.
See also: message(), @chatformat, @pageformat, @oemit, @remit, speak()
@MESSAGE2
 
  Example:
    > &sayformat *Mike=%n sez, '%0'
    > &sayformat *Walker=From %n: %0
    > &cmd.fsay me=$fsay *: @message/spoof *Mike *Walker *Javelin=
             %n says\, "%0", SAYFORMAT, %0
    > fsay This is a test
    
  Mike sees:
    Player sez, 'This is a test'
  Walker sees:
    From Player: This is a test
  Javelin sees:
    Player says, "This is a test"
 
  A rough implementation of @chatformat:
    > &cmd.chat Globals=$^@chat (.+?)=([\:;]?)(.+?)$: @message/spoof
         cwho(%1)=setr(0,<%1> [speak(&[squish(ctitle(%1, %#) %n)], %2%3)]),
         CHATFORMAT, firstof(%2, "), %1, %3, %n, ctitle(%1, %#), %q0
    > @set Globals/cmd.chat=regexp
 
  See 'help @message3' for more examples.
@MESSAGE3
 
  A (very) basic language system:
    > &skill`spanish Juan=2
    > &skill`spanish Bob=1
    > &cmd.spanish Globals=$+spanish *: @nspemit %#=You say (Spanish), "%0";
      @message/oemit/spoof %#=setr(0,%n says (Spanish)\, "%0"), 
                        %!/TRANSLATE, ##, SPANISH, %q0
    > &translate Globals=switch(default(%0/skill`%1, 2), 2, %2,
          speak(%#, |%2,, %!/translate`some))
    > &translate`some Globals="[iter(%0,if(rand(2),%i0,...))]"
    > +spanish The rain in Spain falls mainly on the plain
    
  You see:
    You say (Spanish), "The rain in Spain falls mainly on the plain"
  Bob sees (something like):
    Mike says (Spanish), "The rain ... ... falls ... ... ... ..."
  Juan says:
    Mike says (Spanish), "The rain in Spain falls mainly on the plain"
 
@MOTD
  @motd[/<switch>] [<message>]
 
  The default for this command (and with the /connect) switch, is a
  wizard only command that will set a temporary message that 
  will be shown to players when they connect. This MOTD is cleared
  every time the MUSH restarts.
 
  Note that @motd by itself clears the message. Use @motd/list or
  @listmotd to see the current messages.
  
  These messages are shown in addition to the permanent MotDs which are
  defined in mush.cnf (motd_file, wizmotd_file, etc).
 
  Other switches:
  /wizard : sets the message for wizards (like @wizmotd)
  /down   : sets the logins-off message (like @rejectmotd)
  /full   : sets the max-players-logged-in message
  /list   : list the MOTDs (like @listmotd, can be used by anyone)
See also: @listmotd
@MOVE
  @move <object>[=<message>]
  @omove <object>[=<message>]
  @oxmove <object>[=<message>]
  @amove <object>[=<action list>]
  
  These attributes contain the message shown to <object> immediately after
  it moves, the message shown to others in the room <object> moves into, the
  message shown to objects in the location <object> leaves, and the actions 
  to be taken when <object> moves, respectively. Please note that long 
  @omoves are frequently found annoying.
 
  The <object>'s new location is in %0 and the old location it moved
  from in %1.
 
  Example:
   > @move me=You moved! You are now in the room: [name(here)].
   > @omove me=stalks into the room wearing a malevolent expression.
   > @oxmove me=stalks away, glaring.
 
See also: goto, @oxmove, ACTION LISTS, VERBS
@MVATTR
  @cpattr[/noflagcopy] <obj>/<attr>=<obj1>[/<attr1>][, ..., <objN>[/<attrN>]]
  @mvattr[/noflagcopy] <obj>/<attr>=<obj1>[/<attr1>][, ..., <objN>[/<attrN>]]
  
  @cpattr copies the <attr> attribute from <obj> to <obj1> (and any other
  objects given). By default, the new attributes will have the same name as
  the original, but you can specify a different name to be used on each
  object if you wish.
  
  @mvattr works the same, but also attempts to remove the original attribute
  after copying it.
  
  Attribute flags are copied as well, unless the /noflagcopy switch is given.
  This is recommended when copying from a non-standard attribute to a
  standard one.
 
  Example:
    > @cpattr box/test=box/test1, cube/random, tribble/describe
  would check the object "box" for an attribute named TEST and then
  copy it to the attributes TEST1 on "box", RANDOM on the object named
  "cube", and DESCRIBE on the object named "tribble".
 
    > @cpattr box/test=cube
  would copy the TEST attribute from "box" to TEST on "cube".
 
See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES, @set
@NAME
  @name <object>=<new name>
  @name <player|exit>=<new name>[;<alias1>[;<aliasN>]]
 
  Changes the name of <object> to <new name>.
 
  Players can change their name to anything valid which is not currently in
  use by another player, as a name or alias. (They can change their name to
  something from their own @alias.)
  
  You can change the alias for a player or exit while renaming it, by giving
  the alias(es) after the new name, each separated by a semicolon. If the
  name is followed by a semicolon with no aliases, the existing alias will
  be cleared instead.
 
  When <object>'s name is changed, its ONAME and ANAME verb attributes will
  be triggered. See 'help @oname' for details.
  
  Examples:
    > @name here=My Room
    Name set.
    > @name me=Mike;Michael;m
    Alias set.
    Name set.
    > @name me=Obi Wan;
    Alias removed;
    Name set.
  
See also: @alias, @oname, name(), fullname()
Config options: player_name_spaces, player_name_len, only_ascii_in_names
@NAMEACCENT
  @nameaccent <object>[=<accent template>]
 
  When this attribute holds an accent template that is the same
  length as <object>'s @name, it is used to change the object's name
  in some situations (how it shows up in speech, look, and a few other
  commands). This allows for accented names without having to use the 
  accented characters directly in a name, which can make it harder for
  people to type.
  
  The <accent template> is explained in 'help accents'.
 
  If a container has both a @nameaccent and a @nameformat, the
  @nameformat is used.
 
See also: accent(), @nameformat, accname(), stripaccents()
@NAMEFORMAT
  @nameformat <object>[=<format>]
 
  When set, this attribute is evaluated and displayed in place of <object>'s
  name, when objects inside <object> "look". The room's dbref is passed as
  %0, and the default-formatted name (as it would be displayed with no
  @nameformat set) is passed as %1.
  
  @nameformat is not used when people who are outside the object look at it.
  
  Q-registers (set via setq() and similar functions) are passed on from the
  nameformat to the other @*format attributes used for formatting "look"
  output. Use localize() if you don't want this behaviour.
  
  Example:
    Show the room's zone after its name.
    > @nameformat here = %1 [if(zone(%0),<[name(zone(%0))]>)]
 
See also: look, @exitformat, @conformat, @descformat, @nameaccent, 
    @invformat, @idescformat
@NEWPASSWORD
  @newpassword <player>=<password>
 
  This wizard-only command changes <player>'s password. If <player> is 
  connected, she will be informed that the password was changed and who by,
  but not what it was changed to.
  
  The <player> argument is evaluated, but the <password> argument is not.
 
See also: @password, checkpass()
@NOTIFY
  @notify[/any][/all] <object>[/<attribute>][=<number>]
  @notify/setq <object>[/<attribute>]=<qreg1>,<qval1>[,...]
  
  This command notifies a semaphore, allowing commands queued for that 
  semaphore to be executed.
 
  If the /any switch is given, then all semaphores associated with <object>
  are @notified.  Otherwise, only the specified semaphore <attribute> (or 
  SEMAPHORE if no attribute is specified) is @notified.
 
  If the /all switch is given, then all queue entries associated with the
  selected semaphore(s) are executed. Otherwise, only the first <number> of
  queue entries are run.  If no <number> is given, then only one queue entry
  is run.
 
  If the /all switch was not used, and there were not enough queue entries 
  waiting to satisfy the requested <number>, then the semaphore becomes
  negative, and subsequent @waits will not block until it reaches 0 again.
  
  You may not specify both the /any switch and a specific attribute.
  Similarly, you may not specify both the /all switch and a number.
 
  Continued in 'help @notify2'.
@NOTIFY2
  @notify/setq is a special form of @notify: It requires that a queue entry
  exists and is waiting on <object>[/<attr>]. When this is the case, then
  @notify/setq will modify the Q-registers of the extant queue entry.
 
  /setq supercedes all other switches: You cannot @notify/all/setq or
  @notify/any/setq - it deals with just one queue entry.
 
  Example:
  > @wait me=think Hello, %q0!
  > @notify/setq me=0,Walker
  Hello, Walker!
 
See also: SEMAPHORES, @drain, @wait, @halt
@NSCEMIT
  @cemit[/nosiy|/silent][/noeval] <channel>=<message>
  @nscemit[/nosiy|/silent][/noeval] <channel>=<message>
  cemit(<channel>, <message>[, <noisy>])
  nscemit(<channel>, <message>[, <noisy>])
 
  @cemit emits <message> on <channel>. It does not include your name. The
  channel prefix is included if the /noisy switch is given, and omitted if
  /silent is given - if neither is given, the default behaviour is controlled
  by the noisy_cemit @config option. The /noeval switch prevents <message> 
  from being evaluated.
  
  You must be able to speak on the channel, or have the See_All and Pemit_All
  @powers, to @cemit on the channel.
 
  @nscemit is exactly the same, but does not produce nospoof information when
  used by players with the Can_spoof @power.
 
  cemit() and nscemit() work the same as @cemit/silent and @nscemit/silent,
  respectively. If <noisy> is given as a true value, they work like
  @cemit/noisy and @nscemit/noisy, respectively, instead.
 
  @cemit is intended for use in writing extended chat systems. 
 
See also: @chat
@NSEMIT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NSLEMIT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NSOEMIT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NSPEMIT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NSPROMPT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NSREMIT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NSZEMIT
  @nsemit[/<switch>] [<message>]
  @nslemit[/<switch>] <message>
  @nspemit[/switches] <object>=<message>
  @nsprompt[/switches] <object>=<message>
  @nsremit[/switches] <object>=<message>.
  @nsoemit[/<switch>] [<room>/]<object> [<object>...]=<message>
  @nszemit <zone>=<message>
 
  These commands work like @emit, @lemit, @pemit, @prompt, @remit,
  @oemit, and @zemit, respectively, but will not include nospoof
  information if used by Wizards or someone with the Can_spoof
  @power. They are meant to be used by commands in the master room
  where the nospoof information is just useless noise. They take the
  same switches as their respective commands, with a few exceptions
  (/spoof, and for @nspemit, /contents and the admin-only /port).
 
See also: @emit, @lemit, @pemit, @prompt, @remit, @oemit, @zemit, nsemit(),
  nslemit(), nspemit(), nsprompt(), nsremit(), nsoemit(), nszemit(),
  PROMPT_NEWLINES
@NUKE
  @destroy[/override] <object>
  @nuke <object>
  @undestroy <object>
 
  The @destroy command marks <object> for destruction by setting the GOING
  flag on it. If <object> is a room, all the exits in the room are marked
  for destruction as well. If <object> is a player, and the @config option
  destroy_possessions is on, everything he owns is marked for destruction as 
  well. (If really_safe is also on, his SAFE objects will not be destroyed.)
  If the adestroy @config option is on, the ADESTROY attribute will be 
  triggered when the object is first @destroy'd.
  
  The MUSH checks for GOING objects every ten minutes or so (see '@config
  purge_interval'); each one is set with the GOING_TWICE flag, and will be
  destroyed totally on the next cycle. You can save it from destruction
  during this period using the @undestroy command, or @destroy it again to
  destroy it instantly.
  
  When an object is destroyed, any commands, @waits and semaphores it has
  queued are drained, and the object's owner has the quota for the object,
  and the initial cost of creating it, refunded.
  
  Continued in 'help @destroy2'.
@OBUY
  @buy <object>[=<message>]
  @obuy <object>[=<message>]
  @abuy <object>[=<message>]
  
  These attributes contain the message shown to a player who successfully
  buys something from <object> using the "buy" command, the message shown to 
  others in the room when something is bought from <object> (prefixed with
  the buyer's name), and the actions to be taken by <object> when something
  is bought from it, respectively. Each attribute is passed the item being
  purchased as %0 and the amount paid for it as %1.
 
  Example:
    > @buy Vendor=udefault(me/buy`%0,You buy %0 for %1 [money(%1)]., %0, %1)
    > @obuy Vendor=hands some money to [name(me)] for [art(%0)] %0.
    > @abuy Vendor=:goes into the storeroom. ; @wait 2=:returns with %n's %0.
 
See also: buy, @pricelist, MONEY, @lock, VERBS, @cost, give
@ODEATH
  @death <object>[=<message>]
  @odeath <object>[=<message>]
  @adeath <object>[=<action list>]
  
  These attributes contain the message shown to the killer, the message
  shown to others in the room, and the actions to be taken when <object>
  is killed.
 
  Example:
   > @death me=You have just slain Cyclonus!
   > @odeath me=falls to the ground and vanishes.
 
See also: kill, BEING KILLED, ACTION LISTS, VERBS
@ODESCRIBE
  @odescribe <object>[=<message>]
  @adescribe <object>[=<action list>]
  
  These attributes contain the message shown to others in the enactor's
  location when he looks at <object>, and the actions to be taken by <object>
  when someone looks at it. (See 'help @describe' for the attribute shown
  to the enactor when he looks at <object>.) When the enactor is inside
  <object>, the @oidescribe and @aidescribe attributes will be used instead,
  if set. Please note that using these attributes to show long messages is
  often found annoying.
  
  Examples:
    > @odescribe Walker=glances at Walker and sniggers.
    > @adescribe me=think %n just looked at you.
 
See also: look, @describe, @idescribe, ACTION LISTS
@ODROP
  @drop <object>[=<message>]
  @odrop <object>[=<message>]
  @adrop <object>[=<action list>]
  
  When <object> is a player or thing, the @drop attribute is shown to whoever
  drops <object>, and @odrop to others in the location <object> is dropped
  in. The @adrop attribute is triggered when <object> is dropped.
  
  When <object> is an exit, @drop is shown to objects going through <object>,
  and @odrop is shown to objects in the exit's destination. @adrop is
  triggered when someone passes through the exit.
  
  Example:
    > @drop Box=You put the box down gently.
    > @odrop Box=puts the box down gently.
    
    > @odrop South=arrives from the North.
  
See also: drop, empty, ACTION LISTS, VERBS, @success
@OEFAIL
  @efail <object>[=<message>]
  @oefail <object>[=<message>]
  @aefail <object>[=<action list>]
  
  These attributes contain the message shown to someone who fails to enter
  <object>, the message shown to others when someone fails to enter <object>,
  and the actions to be taken when someone fails to enter it, respectively.
 
See also: enter, @enter, FAILURE, ACTION LISTS, VERBS
@OEMIT
  @oemit[/<switch>] [<room>/]<object> [... <object>]=<message>
 
  This command shows <message> to everyone in the location of <object>
  EXCEPT <object>. A list of objects can be given, in which case the message
  is shown in the locations of each, to everyone but those objects. If 
  <object> contains a space, it should be enclosed in double-quotes.
  
  If <room> is specified (usually as a dbref), this command shows <message> 
  to everyone in <room> except for the given <object>s. In this case, each
  <object> is matched relative to <room>. If no matching <object>s are found
  in <room>, this is the equivilent of @remit <room>=<message>
  
  The /noeval switch prevents the MUSH from evaluating <message>.
  The /spoof switch causes nospoof notifications to show the enactor's
    dbref instead of the executor's dbref, and requires control over
    the enactor or the Can_spoof power.
 
  See 'help @oemit2' for examples.
See also: @emit, @pemit, @nsoemit, oemit(), nsoemit(), NOSPOOF, SPOOFING
@OEMIT2
  Examples:
    Show a message in the locations of players Bob and Fred, to everyone
    except those two players:
    > @oemit *Bob *Fred=Bob throws a paper aeroplane at Fred.
    
    Show a message in #50 to everyone except the object 'Spy'.
    > @oemit #50/Spy=Sssh!
    
    Show a message to everyone in your current location, except the 2nd
    object called 'foo'.
    > @oemit %L/"2nd foo"=bar
@OENTER
  @enter <object>[=<message>]
  @oenter <object>[=<message>]
  @oxenter <object>[=<message>]
  @aenter <object>[=<action list>]
  
  These attributes contain the messages shown to someone who enters <object>,
  the message shown to others inside <object> when someone enters it, the
  message shown to those in <object>'s location when someone enters it, and
  the actions to be taken by <object> when someone enters it, respectively.
  
  The old location of the entering object is passed in %0, if <object>
  had permission to see it there.
 
  Example:
    > @enter Sofa=You sit on the comfy sofa.
    > @oenter Sofa=sits with you on the sofa.
    > @oxenter Sofa=sits down on the sofa. It looks comfy.
    > @aenter Sofa=@pemit/silent owner(me)=%n sat down on [name(me)]!
    
See also: enter, @ealias, leave, ACTION LISTS, VERBS
@OFAILURE
  @failure <object>[=<message>]
  @ofailure <object>[=<message>]
  @afailure <object>[=<action list>]
 
  @failure contains the message shown to someone who fails to pass <object>'s
  Basic @lock. @ofailure contains the message shown to others, and @afailure
  contains the actions to be taken by <object>.
  
  For players and things, this means failure to get/take. For exits, it means
  failure to go through the exit. For rooms the lock is checked when objects
  "look" inside the room, though failure to pass the lock does not prevent
  the object from looking.
 
See also: get, move, @lock, ACTION LISTS, VERBS, @success
@OFOLLOW
  @follow <object>[=<message>]
  @ofollow <object>[= <message>]
  @aunfollow <object>[=<action list>]
  
  Sets the message shown to someone who begins following <object>,
  the message shown to others in the room, and the actions to be taken
  by <object> when someone begins following it, respectively. The name
  of the person following <object> is automatically prepended to the
  @ofollow message.
 
See also: follow, unfollow, @unfollow, followers(), ACTION LISTS, VERBS
@OGIVE
  @give <giver>[=<message>]
  @ogive <giver>[=<message>]
  @agive <giver>[=<action list>]
  
  These attributes contain the message shown to <giver> when he gives an
  object, the message shown to others in <giver>'s location when he gives an
  object, and the actions to be taken by <giver> when he gives an object,
  respectively.
  
  In all cases, %0 is the dbref of the object being given, and %1 is the
  dbref of the recipient.
 
See also: give, @receive, ACTION LISTS, VERBS
@OIDESCRIBE
  @idescribe <object>[=<description>]
  @oidescribe <object>[=<message>]
  @aidescribe <object>[=<action list>]
 
  @idescribe command sets the internal description for an object, which is 
  shown to anyone who enters or looks while inside the object. It's only 
  used for players and things; rooms and exits always use @describe.
  
  The @oidescribe attribute is shown to others inside <object> when someone
  looks at the @idescribe, and the @aidescribe is triggered when someone
  lookst at the @idescribe.
 
  If there is no IDESCRIBE set for an object, those who enter or look inside
  it will see its @describe. In this case, others in the object will see 
  nothing, and the @aidescribe will not be triggered. If you want to use 
  @aidescribe without @idescribe, set @idescribe to a blank string, or to
  u(describe) to show the description.
 
See also: enter, @enter, ENTER_OK, @describe, look, @idescformat, VERBS
@OLEAVE
  @leave <object>[=<message>]
  @oleave <object>[=<message>]
  @oxleave <object>[=<message>]
  @aleave <object>[=<action list>]
  
  These attributes contain the message shown to anyone leaving <object>,
  the message shown to others inside <object> when someone leaves it, the
  message shown to others in <object>'s location when someone leaves it, and 
  the actions to be taken by <object> when someone leaves it, respectively.
  
  The leaver's new location is passed in %0, if <object> has
  permission to see it there.
 
See also: leave, @oxleave, @lfail, ACTION LISTS, VERBS
@OLFAIL
  @lfail <object>[=<message>]
  @olfail <object>[=<message>]
  @alfail <object>[=<action list>]
 
  These attributes contain the message shown to objects who try to leave
  <object> and fail, the message shown to others inside <object> when
  someone fails to leave, and the actions to be taken by <object> when
  someone attempts to leave it and fails.
  
  Such a failure usually occurs because <object> is set NO_LEAVE, or
  because the person trying to leave does not pass <object>'s @lock/leave.
 
See also: leave, @leave, NO_LEAVE, locktypes, ACTION LISTS, VERBS
@OMOVE
  @move <object>[=<message>]
  @omove <object>[=<message>]
  @oxmove <object>[=<message>]
  @amove <object>[=<action list>]
  
  These attributes contain the message shown to <object> immediately after
  it moves, the message shown to others in the room <object> moves into, the
  message shown to objects in the location <object> leaves, and the actions 
  to be taken when <object> moves, respectively. Please note that long 
  @omoves are frequently found annoying.
 
  The <object>'s new location is in %0 and the old location it moved
  from in %1.
 
  Example:
   > @move me=You moved! You are now in the room: [name(here)].
   > @omove me=stalks into the room wearing a malevolent expression.
   > @oxmove me=stalks away, glaring.
 
See also: goto, @oxmove, ACTION LISTS, VERBS
@ONAME
  @oname <object>[=<message>]
  @aname <object>[=<action list>]
  
  Whenever <object>'s name is changed (via @name), others in the same
  location will see the contents of <object>'s ONAME attribute, prepended
  with <object>'s new name. At the same time, <object>'s ANAME attribute
  will be triggered. Both attributes receive the old name as %0, and the new
  name as %1.
  
    Example:
      > @oname me=has regenerated from %0!
      > @aname me=think >> Renamed from %0 to %1 at [time()] by %n(%#).
 
See also: @name, name(), VERBS
@OPAYMENT
  @payment <object>[=<message>]
  @opayment <object>[=<message>]
  @apayment <object>[=<action list>]
  
  These attributes contain the messages shown to someone who pays <object> 
  pennies with the "give" command, the message shown to others when someone
  pays <object>, and the actions to be taken by <object> when it's paid. Each
  attribute is passed the number of pennies paid as %0.
 
  Example:
    > @payment Collecting Tin=Thank you for your donation!
    > @opayment Collecting Tin=makes a donation to charity.
    > @apayment Collecting Tin=&%# me=%0 at [time()]
 
See also: give, @cost, buy, MONEY, ACTION LISTS, VERBS
@OPEN
  @open <exit name>[=<destination>,<return exit name>,<source room>,<dbref>,
                     <return dbref>]
 
  This command opens an exit, named <exit name>, in your current location,
  or in <source room> if one is given. Exits can only be opened from rooms.
  If a <destination> is given, the exit will be linked (as per @link) to
  that object. If you don't have permission to link to <destination>, the
  exit will be created but unlinked.
  
  If <return exit name> is given, the MUSH will attempt to open an exit back
  from <destination> and link it to <exit name>'s source.
  
  Both <exit name> and <return exit name> can include any number of aliases
  for the exits, separated by semicolons. See 'help @name' for details.
 
  Wizards and objects with the pick_dbref power can specify garbage
  dbrefs to use for the exit and return exit.
 
  To open an exit in a room, you must control the room, have the 
  Open_Anywhere @power, or the room must be set OPEN_OK and you must pass
  its @lock/open.
 
  Example:
    > @open Up <U>;up;u;climb=#255, Down <D>;down;d;fall
  
See also: EXITS, @link, @dig, open()
@ORECEIVE
  @receive <recipient>[=<message>]
  @oreceive <recipient>[=<message>]
  @areceive <recipient>[=<action list>]
 
  These attributes contain the message shown <recipient> when he receives an
  object (via 'get' or 'give'), the message shown to others in <recipient>'s
  location when he receives an object, and the actions to be taken by
  <recipient> when he receives an object, respectively.
  
  In all cases, %0 is the dbref of the object received. If the object was
  'give'n, %1 will be the dbref of the giver.
 
See also: give, get, @give, @success, ACTION LISTS, VERBS
@OSUCCESS
  @success <object>[=<message>] 
  @osuccess <object>[=<message>]
  @asuccess <object>[=<action list>]
  
  For players and things, these attributes contain the message shown to
  someone who picks up <object> with the "get" command, the message shown
  to others when someone gets <object>, and the actions to be taken by
  <object> when someone gets it, respectively.
  
  For exits, they contain the message shown to an object passing through the
  exit <object>, the message shown in the exit's source when someone passes
  through it, and the actions to be taken by the exit when someone passes
  through it, respectively.
  
  Example:
    > @success Door=You open the door and step inside.
    > @osuccess Door=opens the door and steps inside.
    
    > @success Box=You pick up the box.
    > @osuccess Box=picks up the box.
 
See also: get, goto, @lock, SUCCESS, FAILURE, @odrop, ACTION LISTS, VERBS
@OTPORT
  @tport <object>[=<message>]
  @otport <object>[=<message>]
  @oxtport <object> [=<message>]
  @atport <object>[=<action list>]
 
  These attributes contain the message shown to <object> when it is
  teleported, the message shown to others in the room <object> is teleported
  to, the message shown to others in the room <object> is teleported from,
  and the actions to be taken by <object> when it disappears, respectively.
  
  In all of these attributes, %0 is the object which teleported <object>,
  and %1 is <object>'s old location.
  
  Example:
  > @tport me=name(%0) has teleported you from [name(%1)] to [name(here)].
  > @otport me=appears in a puff of smoke.
  > @oxtport me=disappears in a puff of smoke.
  
See also: @teleport, ACTION LISTS, VERBS
@OUFAIL
  @ufail <object>=[<message>]
  @oufail <object>=[<message>]
  @aufail <object>=[<action list>]
 
  Sets the message shown to a player who fails to use an object via the 'use'
  command (because they don't pass the @lock/use), the message shown to
  others in the room when a player fails to use <object>, and the actions to
  be taken by <object> when someone fails to use it, respectively.
 
  Note that these attributes are @ufail, NOT @ufailure, for
  TinyMUSH compatibility.
  
  Although the Use @lock also restricts who can trigger $-commands or
  ^-listens on an object, these attributes will not be triggered for those
  failures. Instead, the COMMAND_LOCK`* and LISTEN_LOCK`* attributes are
  triggered. See 'help failure' for more information.
  
See also: use, @use, FAILURE, ACTION LISTS, VERBS
@OUNFOLLOW
  @unfollow <object>[=<message>]
  @ounfollow <object>[=<message>]
  @aunfollow <object>[=<action list>]
  
  Sets the message shown to someone who stops following <object>,
  the message shown to others in the room, and the actions to be taken
  by <object> when someone stops following it, respectively. The name
  of the person stopping following <object> is automatically prepended
  to the @ounfollow message.
 
See also: follow, unfollow, @follow, followers(), ACTION LISTS, VERBS
@OUSE
  @use <object>[=<message>]
  @ouse <object>[=<message>]
  @ause <object>[=<action list>]
  
  These attributes contain the message shown to someone who successfully uses
  <object>, the message shown to others when someone uses <object>, and the
  actions to be taken by <object> when it is used, respectively.
  
  Note that, if <object> has a CHARGES attribute set and it does not contain
  a number greater than 0, the RUNOUT attribute is triggered instead of the
  AUSE attribute. See 'help @charges' for more information.
  
  Example:
    > @use Jack-In-The-Box=You wind the handle.
    > @ouse Jack-In-The-Box=winds the handle.
    > @ause Jack-In-The-Box=@wait 3=POSE pops up with a bang!
    > use Jack-In-The-Box
    
See also: use, @charges, @runout, ACTION LISTS, VERBS
@OUTPAGEFORMAT
  @outpageformat <object>[=<message>]
  @pageformat <object>[=<message>]
 
  @pageformat changes the message seen by <object> when it receives a page.
  @outpageformat sets the message seen by <object> when it sends a page.
 
  %0 will be set to the page message (not including :, ; or ").
  %1 will be set to ':' ';' or '"' for pose, semipose and normal page,
                    respectively.
  %2 will be set to the alias of the pager, if any.
  %3 will be a space-separated list of recipient dbrefs.
  %4 will be set to the default message.
 
  See 'help @pageformat2' for examples.
 
See also: page, speak(), @chatformat, @speechmod, @message
@OUTPAGEFORMAT2
  For simple page timestamps:
  > @pageformat me=\[[time()]\] %4
  > @outpageformat me=\[[time()]\] %4
 
  To obtain 'page_aliases' behavior:
  > @pageformat me=[setq(0,%n[if(%2,%b(%2))],1,switch(%3,%!,,itemize(iter(%3,
     name(##),%b,|),|)))][switch(%1,",%q0 pages[if(%q1,%b%q1)]: %0,:,From 
     afar[if(%q1,%b(to %q1))]\, %q0 %0,From afar[if(%q1,%b(to %q1))]\, %q0%0)]
 
  To obtain no 'page_aliases' behavior:
  > @pageformat me=[setq(1,switch(%3,%!,,itemize(iter(%3,name(##),%b,|),|)))]
     [switch(%1,",%n pages[if(%q1,%b%q1)]: %0,:,From afar
     [if(%q1,%b(to %q1))]\, %n %0,From afar[if(%q1,%b(to %q1))]\, %n%0)]
@OXENTER
  @enter <object>[=<message>]
  @oenter <object>[=<message>]
  @oxenter <object>[=<message>]
  @aenter <object>[=<action list>]
  
  These attributes contain the messages shown to someone who enters <object>,
  the message shown to others inside <object> when someone enters it, the
  message shown to those in <object>'s location when someone enters it, and
  the actions to be taken by <object> when someone enters it, respectively.
  
  The old location of the entering object is passed in %0, if <object>
  had permission to see it there.
 
  Example:
    > @enter Sofa=You sit on the comfy sofa.
    > @oenter Sofa=sits with you on the sofa.
    > @oxenter Sofa=sits down on the sofa. It looks comfy.
    > @aenter Sofa=@pemit/silent owner(me)=%n sat down on [name(me)]!
    
See also: enter, @ealias, leave, ACTION LISTS, VERBS
@OXLEAVE
  @leave <object>[=<message>]
  @oleave <object>[=<message>]
  @oxleave <object>[=<message>]
  @aleave <object>[=<action list>]
  
  These attributes contain the message shown to anyone leaving <object>,
  the message shown to others inside <object> when someone leaves it, the
  message shown to others in <object>'s location when someone leaves it, and 
  the actions to be taken by <object> when someone leaves it, respectively.
  
  The leaver's new location is passed in %0, if <object> has
  permission to see it there.
 
See also: leave, @oxleave, @lfail, ACTION LISTS, VERBS
@OXMOVE
  @move <object>[=<message>]
  @omove <object>[=<message>]
  @oxmove <object>[=<message>]
  @amove <object>[=<action list>]
  
  These attributes contain the message shown to <object> immediately after
  it moves, the message shown to others in the room <object> moves into, the
  message shown to objects in the location <object> leaves, and the actions 
  to be taken when <object> moves, respectively. Please note that long 
  @omoves are frequently found annoying.
 
  The <object>'s new location is in %0 and the old location it moved
  from in %1.
 
  Example:
   > @move me=You moved! You are now in the room: [name(here)].
   > @omove me=stalks into the room wearing a malevolent expression.
   > @oxmove me=stalks away, glaring.
 
See also: goto, @oxmove, ACTION LISTS, VERBS
@OXTPORT
  @tport <object>[=<message>]
  @otport <object>[=<message>]
  @oxtport <object> [=<message>]
  @atport <object>[=<action list>]
 
  These attributes contain the message shown to <object> when it is
  teleported, the message shown to others in the room <object> is teleported
  to, the message shown to others in the room <object> is teleported from,
  and the actions to be taken by <object> when it disappears, respectively.
  
  In all of these attributes, %0 is the object which teleported <object>,
  and %1 is <object>'s old location.
  
  Example:
  > @tport me=name(%0) has teleported you from [name(%1)] to [name(here)].
  > @otport me=appears in a puff of smoke.
  > @oxtport me=disappears in a puff of smoke.
  
See also: @teleport, ACTION LISTS, VERBS
@OZENTER
  @zenter <object>[=<message>]
  @ozenter <object>[=<message>]
  @azenter <object>[=<action list>]
  
  These attributes set the message shown to a player when he enters the zone
  <object>, the message shown to others in the room the player enters when
  he enters the zone, and the action to be taken by the zone <object> when 
  the player moves into an area zoned to it.
 
  Entry into a new zone is said to occur when a player goes from a room not 
  in the zone to a room in the zone. "Room" in this context means the 
  player's absolute room (outermost container), so entering and leaving 
  unzoned objects within a zoned room doesn't trigger these.
 
  Zone entry is assumed to occur before room entry, so these are
  triggered before the room's @[oa]enter.
 
See also: @zleave, ZONES, @zemit, zwho(), VERBS
@OZLEAVE
  @zleave <object>[=<message>]
  @ozleave <object>[=<message>]
  @azleave <object>[=<action list>]
  
  These attributes set the message shown to a player when he leaves the zone
  <object>, the message shown to others in the room he left when leaving
  the zone, and the actions to be taken by <object> with a player leaves
  an area zoned to it.
  a zone (@zleave), the message shown to others in the room in the
  old zone when the player leaves (@ozleave), and the action triggered
  by the leave-taking (@azleave).
 
  Leaving a zone is said to occur when a player goes from a room in the zone
  to a room not in the zone. "Room" in this context means the player's
  absolute room (outermost container), so entering and leaving unzoned 
  objects within a zoned room doesn't trigger these.
 
  Zone leaving is assumed to occur after room leaving, so these are
  triggered after the room's @[oa]leave.
 
See also: @zenter, ZONES, @zemit, zwho(), VERBS
@PAGEFORMAT
  @outpageformat <object>[=<message>]
  @pageformat <object>[=<message>]
 
  @pageformat changes the message seen by <object> when it receives a page.
  @outpageformat sets the message seen by <object> when it sends a page.
 
  %0 will be set to the page message (not including :, ; or ").
  %1 will be set to ':' ';' or '"' for pose, semipose and normal page,
                    respectively.
  %2 will be set to the alias of the pager, if any.
  %3 will be a space-separated list of recipient dbrefs.
  %4 will be set to the default message.
 
  See 'help @pageformat2' for examples.
 
See also: page, speak(), @chatformat, @speechmod, @message
@PAGEFORMAT2
  For simple page timestamps:
  > @pageformat me=\[[time()]\] %4
  > @outpageformat me=\[[time()]\] %4
 
  To obtain 'page_aliases' behavior:
  > @pageformat me=[setq(0,%n[if(%2,%b(%2))],1,switch(%3,%!,,itemize(iter(%3,
     name(##),%b,|),|)))][switch(%1,",%q0 pages[if(%q1,%b%q1)]: %0,:,From 
     afar[if(%q1,%b(to %q1))]\, %q0 %0,From afar[if(%q1,%b(to %q1))]\, %q0%0)]
 
  To obtain no 'page_aliases' behavior:
  > @pageformat me=[setq(1,switch(%3,%!,,itemize(iter(%3,name(##),%b,|),|)))]
     [switch(%1,",%n pages[if(%q1,%b%q1)]: %0,:,From afar
     [if(%q1,%b(to %q1))]\, %n %0,From afar[if(%q1,%b(to %q1))]\, %n%0)]
@PARENT
  @parent <object>[=<parent>]
 
  This command sets the parent of <object> to <parent>. If no <parent> is
  given, or <parent> is "none", <object>'s parent is cleared. You must
  control <object>, and must either control <parent> or it must be set
  LINK_OK and you must pass its @lock/parent.
  
See also: PARENTS, parent(), lparent(), ANCESTORS
@PASSWORD
  @password <old password>=<new password>
 
  This changes your password. Please note that passwords ARE case-sensitive.
  The arguments are not evaluated.
  
See also: @newpassword, checkpass()
@PAYMENT
  @payment <object>[=<message>]
  @opayment <object>[=<message>]
  @apayment <object>[=<action list>]
  
  These attributes contain the messages shown to someone who pays <object> 
  pennies with the "give" command, the message shown to others when someone
  pays <object>, and the actions to be taken by <object> when it's paid. Each
  attribute is passed the number of pennies paid as %0.
 
  Example:
    > @payment Collecting Tin=Thank you for your donation!
    > @opayment Collecting Tin=makes a donation to charity.
    > @apayment Collecting Tin=&%# me=%0 at [time()]
 
See also: give, @cost, buy, MONEY, ACTION LISTS, VERBS
@PCREATE
  @pcreate <name>=<password>[, <dbref>]
 
  This wizard-only command creates a player with the given name and password.
  If specified, <dbref> is the dbref of a garbage object to be used for the
  new player.
  
See also: pcreate()  
@PEMIT
  @pemit[/<switches>] <object>=<message>
  @pemit/list[/<switches>] <object list>=<message>
  @pemit/port[/list][/silent] <descriptor(s)>=<message>
  
  The basic form of this command sends <message> to <object> directly. It is
  very similar in its effects to @emit except only one object will see the 
  message.
 
  @pemit/list sends the message to multiple objects. You will not get a
  confirmation message when using this switch.
  
  @pemit/port can only be used by Wizards/Royalty, and sends <message> to one
  or more connections. It can be used to send messages to connections which
  are still at the login screen, or to send a message to just one of a
  player's connections when he's logged in multiple times.
 
  See 'help @pemit2' for more.
@PEMIT2
  The @pemit command can take the following additional switches:
    /contents  -- equivalent to @remit.
    /silent    -- does not tell the @pemit'ing object a confirmation message.
    /noisy     -- tells the @pemit'ing object a confirmation message.
    /noeval    -- <message> will not be evaluated for substitutions 
    /spoof     -- the enactor's dbref will be used for nospoof notifications
                  instead of the executor's dbref. Requires control
                  over enactor or Can_spoof power. 
 
  You cannot @pemit to objects set HAVEN, or objects whose @lock/page you do
  not pass, unless you are set WIZARD or have the pemit_all @power.
 
See also: @emit, @nspemit, @oemit, @remit, NOSPOOF, SPOOFING, page
@POLL
  @poll
  @poll <message>
  @poll/clear
 
  This command manipulate the message at the top of WHO/DOING. By itself,
  it displays the current poll. Wizards and those with the poll @power can
  set or clear the message.
 
See also: @doing, WHO, DOING
@POOR
  @poor <value>
  
  This command sets the pennies of every player on the MUSH to <value>. It
  can only be used by God.
 
See also: MONEY, give
@POWER
  @power/list [<power name pattern>]
  @power <power>
  @power <object>=[!]<power>
  
  @power/list lists the defined powers (see 'help powers').  A list
  of standard powers with explanations is given in 'help powers list'.
  When given a power name as an argument, @power displays information
  about a power.
 
  The third form manipulates powers on objects, and is limited to Wizards.
  @power <object>=[!]<power> sets (or clears) the given power on an
  object.
 
  God can add, delete, and otherwise manipulate power definitions.
  See help @power2 for these commands.
See also: powers(), @flag
@POWER2
  @power/add <power>=[<letter>], [<type(s)>], [<setperms>], [<unsetperms>]
  @power/delete <power>
  @power/alias <power>=<alias>
  @power/letter <power>[=<letter>]
  @power/restrict <power>=[<setperms>], [<unsetperms>]
  @power/type <power>=<type(s)>
  @power/enable <power>
  @power/disable <power>
  
  These commands manipulate power definitions. Only God may use them.
    /disable disables a power, making it invisible and unusable
    /enable re-enables a disabled power
    /alias adds a new alias for an existing power
    /letter changes or removes a single-letter alias for an existing power.
    /restrict changes power permissions (see help @power3) 
    /type changes power type(s) (see help @power3) 
    /delete deletes a power completely, removing it from all objects
      in the database and the removing it permanently from the 
      power table. It requires the exact power name or alias to be used.
      Be very very careful with this. 
  
  See help @power3 for information on @power/add
@POWER3
  @power/add is used to add a new power with the given name. Arguments
  other than the power name are optional:
  
  <letter> gives the power's one-letter abbreviation, which must
    not conflict with the one-letter abbreviation of another power that
    could be applied to the same object type(s). It defaults to none, which
    means it won't appear in a list of power characters but can still be 
    tested for with haspower(), andlpowers(), and orlpowers(). 
  <type> specifies the space-separated list of types to which the power
    applies, and may be 'any' or one or more of 'room', 'thing', 'player',
    or 'exit'. It defaults to 'any'. 
  <setperms> specifies the space-separated list of permissions for who can
    set and/or see the power. See 'help flag permissions' for details.
    It defaults to 'any'
  <unsetperms> specifies the space-separated list of permissions for who
    can clear the power on an object they control. It defaults to
    whatever <setperms> is given, or 'any'.
 
  Powers added with @power/add are saved with the database when it
  is dumped, and do not need to be re-added at startup. They are
  treated exactly as any other power in the server.
@PREFIX
  @prefix <object>[=<message>]
 
  This attribute is meant to be used in conjunction with the AUDIBLE
  flag. The @prefix of the object is prepended to messages propagated
  via AUDIBLE.   Pronoun substitution is done on @prefix messages.
  
  For example, if you have an audible exit "Outside" leading from a room 
  Garden to a room Street, with @prefix  "From the garden nearby,"  if
  Joe does a ":waves to everyone." from the Garden, the people at Street
  will see the message,   "From the garden nearby, Joe waves to everyone."
 
See also: @inprefix, AUDIBLE, @listen
@PRICELIST
  @pricelist <object>=<item1>:<price1>[,<price2>][ <item2>:...]
 
  The PRICELIST attribute is a space-delimited list of item names and prices
  that are checked when the 'buy' command is run.
  
  An item name may have '_'s where the player would use a space in the name.
 
  A price is either a number (20), a range of numbers (10-30), or a minimum 
  number (10+). An item can also have several different prices, separated by
  commas.
  
  A player must pass <object>'s @lock/pay in order to purchase from it.
 
  Example::
    > @PRICELIST vendor=mansion:1000+ large_house:100-200 house:20,30,50
 
See also: buy, @buy, MONEY, @cost, give, @lock
@PROMPT
  @prompt[/<switch>] <dbref list>[=<message>]
 
  A variation of @pemit/list that adds a telnet GOAHEAD control code to the 
  end of messages sent to players. Players with clients that handle GOAHEAD 
  may get the message as a prompt in their client's input area.
  
  If <message> is omitted, an empty prompt is sent.
 
  @prompt supports the following @pemit switches: /silent, /noisy,
  /spoof, /noeval
 
See also: @pemit, @nsprompt, prompt(), nsprompt(), PROMPT_NEWLINES
@PS
  @ps[/<switch>] [<player>]
  @ps[/debug] <pid>
  
  @ps lists all commands currently on your 'to be executed' queue, thus 
  allowing you to identify infinite (or unnecessary) loops with-out putting 
  in says or poses. It gives a count of the total commands in each of the 
  queues (Player, Object, Wait, and Semaphore), displayed in the format:
      <Number of your queued commands> / <Total number of queued commands>.
 
  Some of the queues also include a [Ndel] after the total. That number is
  the number of entries made by objects that have been halted but haven't
  been removed from the queue yet.
      
  It also shows a running load average of the number of queue entries
  executed per second for the last 1, 5 and 15 minutes.
 
  @ps with no arguments will show you your own queue. Wizards may specify
  the /all switch, and see the full queue. They may also specify a player.
  @ps/summary just displays the queue totals for the whole queue.
  @ps/quick displays the queue totals for just your queue.
  
  Continued in 'help @ps2'.
@PS2
  With a <pid> argument, @ps shows information on a single queue entry.
  The /debug switch will also display the queue entry's environment: 
  Arguments, q registers, executor, enactor and caller dbrefs.
 
  Each line includes the process id of the queue entry, the object and 
  attribute being used as a semaphore (if any), the number of seconds left
  before it executes (for waits and semaphores), the object that is going 
  to execute the entry, and the command. To halt a specific queue entry,
  use @halt/pid.
  
See also: @wait, @halt, @notify, @drain, SEMAPHORES
@PURGE
  @purge is a wizard only command that calls the internal purge routine to 
  advance the clock of each object scheduled to be destroyed, and destroy 
  those things whose time is up. The internal purge routine is normally
  run automatically approximately every 10 minutes. 
 
  The @purge command should almost never need to be performed
  manually. If you do use it manually, you may want to use it twice in
  a row to make sure that everything marked GOING is actually
  destroyed.
 
See also: @dbck
@QUOTA
  @quota [/<switch>] [<victim>]
 
  This command is only available if the quota system is enabled.
  It reports the victim's owned objects and the maximum number of objects 
  s/he may own. You must be a Wizard to see another player's quota.
 
  The /set and /all switches are equivalent to @squota and @allquota,
  respectively.
@READCACHE
  @readcache
  
  This wizard-only command reads special text files into a cache and
  rebuilds the help and news indices. This must be done every time the
  text files (connect text, help files, etc.) are changed while the
  game is running. It does not need to be used after changing the
  names.cnf file of bad player names.
 
  A site admin can achieve the same effect by sending the MUSH process
  a kill -1 or kill -HUP.
@RECEIVE
  @receive <recipient>[=<message>]
  @oreceive <recipient>[=<message>]
  @areceive <recipient>[=<action list>]
 
  These attributes contain the message shown <recipient> when he receives an
  object (via 'get' or 'give'), the message shown to others in <recipient>'s
  location when he receives an object, and the actions to be taken by
  <recipient> when he receives an object, respectively.
  
  In all cases, %0 is the dbref of the object received. If the object was
  'give'n, %1 will be the dbref of the giver.
 
See also: give, get, @give, @success, ACTION LISTS, VERBS
@RECYCLE
  @destroy[/override] <object>
  @nuke <object>
  @undestroy <object>
 
  The @destroy command marks <object> for destruction by setting the GOING
  flag on it. If <object> is a room, all the exits in the room are marked
  for destruction as well. If <object> is a player, and the @config option
  destroy_possessions is on, everything he owns is marked for destruction as 
  well. (If really_safe is also on, his SAFE objects will not be destroyed.)
  If the adestroy @config option is on, the ADESTROY attribute will be 
  triggered when the object is first @destroy'd.
  
  The MUSH checks for GOING objects every ten minutes or so (see '@config
  purge_interval'); each one is set with the GOING_TWICE flag, and will be
  destroyed totally on the next cycle. You can save it from destruction
  during this period using the @undestroy command, or @destroy it again to
  destroy it instantly.
  
  When an object is destroyed, any commands, @waits and semaphores it has
  queued are drained, and the object's owner has the quota for the object,
  and the initial cost of creating it, refunded.
  
  Continued in 'help @destroy2'.
@REJECTMOTD
  @rejectmotd <message>
 
  This is a wizard only command that will set a short (non-longterm) message 
  that will be shown to players that try to connect when logins are disabled. 
  This is the "Down MOTD" in the @listmotd listing. The siteadmin can set a
  more permanent message for this by editing the file "down.txt".
  
See also: @motd, @list, @listmotd
@REMIT
  @remit[/switches] <object>=<message>
 
  Sends the message to all contents of <object>, which can be a room,
  thing, or player. The message is also sent to the <object> itself.
  (The TinyMUSH equivalent is @pemit/contents).
 
  The /silent switch stops the remitter from getting feedback if they're
   in a different location than the target.
  The /noisy switch always gives feedback to the remitter if they are
   not in the target location. Without /silent or /noisy, the silent_pemit
   config option is used to determine noisiness.
  The /list switch will send the message to the contents of multiple
   objects at the same time. The <OBJECT> argument is treated as a
   space-separated list of targets.
  The /spoof switch causes nospoof notifications to show the enactor's
   dbref instead of the executor's dbref, and requires control over
   the enactor or the Can_spoof power.
 
See also: @emit, @pemit, @oemit, SPOOFING, NOSPOOF, CONTROL.
@RESTART
  @restart <object>
  @restart/all
  
  This command halts <object> (as described in @halt), and then triggers
  the STARTUP attribute on the object, if set. If <object> is a player,
  it affects the player and all of their objects. Players can use
  @restart me to restart their own objects. The /all switch halts
  all objects (see @allhalt) and restarts them, and can only be used
  by a wizard.
 
See also: @halt, @startup, @shutdown
@RETRY
  @retry <boolean>
  @retry <boolean>=<arg0>[,...[,<arg9>]]
 
  The @retry command restarts the current queue entry, enabling people to
  loop their command without requiring a wait for the next queue entry.
  It can be a little tricky to understand at first. It basically tells the
  parser: "If <boolean> is true, then go back to the beginning." It can also
  replace %0-%9 with the arguments passed to it. (<arg0>,...).
 
  Please note: @retry only restarts the action list it is currently in.
  If you have: "@break 1=@retry 1=hello", then the action list is only
  "@retry 1=hello" - which would thus create an infinite loop.
 
  Watch out for infinite loops! @retry does respect all the limits (cpu_limit,
  function_invocation_limit, etc). But because @retry causes the queue parser
  to repeat itself _without_ invoking a new function, it doesn't risk hitting
  any issues other than infinite loops.
 
  See 'help @retry2' for examples.
 
See also: ACTION LISTS, BOOLEAN VALUES, @break, @include
@RETRY2
  Example: 'while'
  > &sing me=$sing *:say %0 bottles of beer! ; @retry gt(%0,0)=dec(%0) ;
        say Go get some more!
  > sing 3
  You say, "3 bottles of beer!"
  You say, "2 bottles of beer!"
  You say, "1 bottles of beer!"
  You say, "0 bottles of beer!"
  You say, "Go get some more!"
 
  Implementing a folding algorithm:
  (Yes, I know lmath is better, but this is just an example! :D)
 
  > &add me=$add *:@retry words(%0)=rest(%0),add(first(%0),0%1) ; think %1
  > add 4 3 2 1
  10
 
@RUNOUT
  @charges <object>[=<integer>]
  @runout <object>[=<action list>]
 
  These attributes can limit how many times an object can be successfully
  "use"d. When you "use" an object with a CHARGES attribute set, the object's
  AUSE attribute is only triggered if CHARGES is a positive integer. When
  CHARGES is less than 1 (or not a number), the object's RUNOUT attribute is
  triggered instead.
  
  When the CHARGES attribute is present and AUSE is triggered, the value of
  the CHARGES attribute is automatically decreased by 1. When no CHARGES 
  attribute is set, AUSE is always triggered.
  
  See 'help charges2' for an example.
 
See also: use, @ause, ACTION LISTS
@RWALL
  @rwall[/emit] <message>
 
  Only wizards and royalty may use this command. It broadcasts a
  message to all connected wizards and royals. If the /emit switch
  is given, it's done as a prefixed emit. Otherwise, it acts like
  a @channel.
 
See also: @wall, @wizwall
@SCAN
  @scan[/<switch>] <command>
  
  @scan gives you a list of all objects containing $-commands (user-defined
  commands) which could match <command>. If given no switches, it checks
  you, your possessions, your location, objects in your location, the
  zone/zone master room of your location, your zone, and objects in the 
  master room. It does NOT stop when it gets a match, but rather, finds all 
  possible matches. It also tells how many commands on each object were
  matched, and what attributes they are in. It does NOT scan objects
  that you do not control and are not set VISUAL.
  
  This command any combination of these four switches:
     /room     --   just matches on your location and objects in it.
     /self     --   just matches on you and anything you're carrying.
     /zone     --   just matches on zones of your location and yourself.
     /globals  --   just matches on objects in the master room.
     
  If no switch is given, all locations are checked. <command> must be
  entered exactly as you would type it (so, to match the $-command
  $foo *: you must type '@scan foo <something>', not just '@scan foo').
  
See also: $-commands, EVALUATION ORDER
@SEARCH
  @search [<player>] [<classN>=<restrictionN>[,...]][,<begin>,<end>]
  
  This command searches the database and lists objects which meet user
  specified search criteria.  You can limit the scope of the search by
  specifying <begin> and <end> as the first and last dbrefs to search.
  
  If a <player> argument is supplied, only objects owned by that player
  will be listed, or all objects if "all" is used. Mortals attempting to
  match other players (aside from ZMPs whose @lock/zone they pass) or "all"
  will only get objects which they can examine.
  
  <class> and <restriction> arguments can be given to filter the match
  results. Possible <class>es include TYPE, NAME, ZONE, PARENT, EXITS,
  THINGS (or OBJECTS), ROOMS, PLAYERS, FLAGS, LFLAGS, POWERS, ELOCK,
  COMMAND, LISTEN, EVAL, EPLAYER, EROOM, EEXIT, and ETHING (or EOBJECT).
 
  If <class>=TYPE, possible <restriction>s include THING (or OBJECT), ROOM,
  EXIT, PLAYER, GARBAGE. This shows all objects of the specified type.
  
  If <class>=NAME, only objects whose name begin with the string <restriction>
  will be listed. If <class>=EXITS, OBJECTS, ROOMS or PLAYERS, only objects
  of that type whose name begins with <restriction> are listed.
  
  If <class>=ZONE, only objects in the zone <restriction> will be listed.
  If <class>=PARENT, only children of parent <restriction> will be listed.
  For ZONE and PARENT, <restriction> must be specified as a dbref number.
  
  Continued in 'help @search2'.
@SEARCH2
  If <class>=FLAGS or LFLAGS, only objects with the list of flags
  specified by <restriction> will be listed. For FLAGS, flags to match
  should be given as a string of single flag letters, with appropriate
  case. For LFLAGS, flags to match should be given as a space-separated
  list of flag names.
 
  If <class>=POWERS, only objects with the given powers are listed.
  <restriction> should be a space-separated list of power names.
 
  If <class>=ELOCK, only objects that pass the given lock string (as in
  help @lock) are listed. For purposes of indirect locks (@#123), 'search'
  is the name of the lock.
  
  If <class>=EVAL, only objects for which <restriction> evaluates to a
  true boolean value will be listed. The token '##' in <restriction>, which
  is a function, is replaced by each dbref sequentially. Classes EPLAYER,
  EROOM, EEXIT, and ETHING work like EVAL but are restricted to a single type.
  
  Continued in 'help @search3' for more.
@SEARCH3
  If <class>=MINDB, only objects with dbrefs of <restriction> or
  higher will be listed. If <class>=MAXDB, only objects with dbrefs
  of <restriction> or lower will be listed.
 
  If <class>=START, then @search will start returning results at the
  <restriction>th result.
 
  If <class>=COUNT, then @search will only return up to <restriction> results.
 
  If <class>=COMMAND, then @search will only return objects that respond to
  <restriction> as an $-command.
 
  If <class>=LISTEN, then @search will only return objects that respond to
  <restriction> through a listen.
 
  Continued in 'help @search4'.
@SEARCH4
  
  For the class TYPE=PLAYER, and for PLAYER=<player-name>, anyone may
  obtain information on any player.  In all other cases, wizards may
  obtain information about other players, and players who pass a ZMP's
  zone-lock may obtain information about the ZMP.
 
  If multiple <class> and <restrictions> are given, objects must meet all
  criteria in order to match successfully. The exception to this is that if
  multiple 'type' searches (PLAYER, EROOM, etc) are used, only the last
  type given is used in the search.
 
  @search is only mildly computationally expensive for most of the search
  classes.  Computationally expensive searches are the evaluating searches
  (EVAL, EPLAYER, ETHING, EROOM, EEXIT), the attribute pattern
  searches (COMMAND, LISTEN), and ELOCK searches which perform evaluation
  searches (attr/value) or indirect locks (@obj/lock). These searches all
  cost a number of pennies (the exact amount is configurable; see 
  @config find_cost).
  
  See 'help @search5' for some examples.
See also: lsearch(), @find
@SEARCH5
  Examples:  
    @search all type=player,flags=W      <-- list all Wizard players
    @search type=room     <-- list all rooms owned by me.
    @search zone=#50      <-- list all objects belong to zone #50.
    @search Joe eval=1,100,200   <-- list objects from #100-#200 owned by Joe.
    @search eval=gt(money(##),10)     <-- list all objects owned by me  
                                          worth more than 10 coins.
    @search all elock=FLAG^WIZARD|FLAG^ROYALTY   <-- list all objects with
                                                  wizard or royalty flags.
    @search wizard_bc command=+who    <-- Forgot what object has your +who?
 
@SELECT
  @switch[/<switch>] <string>=<expr1>, <action1> [,<exprN>, 
                                 <actionN>]... [,<default>]
  @select <string>=<expr1>, <action1> [,<exprN>, <actionN>]... [,<default>]
  
  For those of you familiar with programming, these command acts like
  if/then/else or switch/case. It compares <string> against whatever each 
  <expr> evaluates to. If <string> and <expr> match, the action list 
  associated with that <expr> is carried out. If no match is found, the
  <default> action list is carried out. @switch runs <action>s for all
  matching <expr>s by default, while @select only runs the <action> for the
  first matching <expr>.
 
  If <expr> is a regexp or a wildcard glob, then $0-$9 will be set with
  capture data. (In wildcard globbing, every wildcard captures.)
 
  The string "#$" in <action>'s will be replaced with the evaluated result
  of <string> before it is acted on. Note that this replacement happens
  BEFORE the <action> is queued and executed, and does not work well in
  nested switches. It is recommended that you use the %$N substitution, or
  the stext() function, instead.
  
  @switch/all   runs <action>s for all matching <expr>s. Default for @switch.
  @switch/first runs <action> for the first matching <expr> only. Same as
                @select, and often the desired behaviour.
  @switch/notify queues "@notify me" after the last <action>. 
  @switch/inline runs all actions in place, instead of creating a new queue
                  entry for them.
  @switch/regexp makes <expr>s case-insensitive regular expressions, not
                 wildcard/glob patterns.
 
  Continued in 'help @switch2'.
@SET
  @set <object>=[!]<flag> [[!]<flag> ...]
  @<pre-defined attribute> <object>=<value>
  @set <object>=<attribute>:<value>
  @set <object>/<attribute>=[!]<atrflag>
  
  The first form sets (or unsets) flag(s) on <object>. See 'help flags'.
    Ex: @set me=VISUAL
  Flags may be specified by full name (recommended) or by flag character.
  Flags are set or reset in the order supplied.
 
  The second form sets a pre-defined attribute on <object>
    Ex: @fail Heavy Box=You can't pick that up.
 
  The third form sets an arbitrary attribute with <value> on <object>.
  You can also do this with &<attribute> <object>=<value>
    Ex: @set Test Object=random:This is a random attribute.
        &random Test Object=This is a random attribute.
  An important difference between these two forms is that @set will
  evaluate the <value> before setting it on <object>, while the
  &<attribute> form will not (and is usually what you want).
  
  The fourth form sets (or unsets) an attribute flag on the specified
  attribute. See 'help attribute flags'.
@SEX
  @sex <player>=<gender>  
 
  You can use this command to set yourself or any of your objects to be
  male, female, neuter, or plural. The SEX attribute is used for pronoun 
  substitution by the MUSH, and anything not recognizable will be treated
  as neuter. 
 
  @sex me=Male
  @sex me=Female
  @sex me=Woman
  @sex me=They
  @sex me=Plural
  @sex me=No thank you (silly, but possible)
 
See also: GENDER, subj(), poss(), aposs(), obj()
@SHUTDOWN
  @shutdown[/panic][/reboot][/paranoid]
 
  @shutdown shuts down the game. It may only be used by Wizards.
 
  @shutdown/panic performs a panic shutdown of the game, using a seperate
  database file, not the normal one. It may only be used by God.
 
  @shutdown/reboot restarts the game without disconnecting the users.
 
  If the /paranoid switch is added, the shutdown dump will be a paranoid
  dump (see @dump).
@SITELOCK
  @sitelock
  @sitelock/name <name>
  @sitelock[/player] <host-pattern>=<options>[, <name>]
  @sitelock[/<ban|register>][/player] <host-pattern>
  @sitelock/check <host>
  @sitelock/remove[/player] <string>
 
  The @sitelock command adds rules to the access.cnf file, controlling a 
  host's level of access to the MUSH, or adds banned player names to the 
  names.cnf file. Only Wizards may use @sitelock.
  
  @sitelock without arguments lists all sites in access.cnf. Rules are 
  processed in the order listed, and the first matching rule is applied. 
  @sitelock/check tells you which rule will match for a given <host>.
 
  @sitelock/name adds a name to the list of banned player names.  Use 
  !<name> to remove a name from the list.
 
  @sitelock <host-pattern>=<options>[, <name>] controls the access options
  for hosts which match <host-pattern>, which may include wildcard
  characters "*" and "?". See help @sitelock2 for the list of options, and
  help @sitelock3 for an explanation about the name argument.
 
  For backward compatibility, @sitelock/ban is shorthand for setting options
  "!connect !create !guest", and @sitelock/register is shorthand for options
  "!create register".
  
  If the /player switch is given, <host-pattern> is treated as a player name,
  and sitelock rules are added for that player's LASTIP and LASTSITE, if set.
 
Continued in 'help @sitelock2'
@SITELOCK2
 
  Sitelock allow/deny options:
   connect   --  allow this site to connect to non-guest players
   !connect  --  don't allow this site to connect to non-guest players
   guest     --  allow this site to connect to guest players
   !guest    --  don't allow this site to connect to guest players
   create    --  allow this site to create players
   !create   --  don't allow this site to create players
   default   --  allow any of the above
   none      --  don't allow any of the above
   !god      --  God can't connect from this site.
   !wizard   --  Wizards can't connect from this site.
   !admin    --  Wizards and Royalty can't connect from this site.
 
  Allow/deny options not set are assumed to be allowed.
 
  Sitelock special options:
   register    -- allow this site to use 'register <name> <email>'
                  at the connection screen to register players.
                  Players will be emailed their character's password.
                  This should be used with !create to be effective.
   suspect     -- set all players who connect from this site SUSPECT.
   deny_silent -- don't log failed access attempts from this site.
   regexp      -- Treat the hostname pattern as a regular expression
                  instead of a wildcard pattern.
 
Continued in 'help @sitelock3'
@SITELOCK3
  If you specify a character name after the options, the options
  are only checked if the host pattern matches, AND the character
  being checked for connect support matches the one you gave.
  Use it only with connect and !connect options, since they're
  the only ones where an existing character is used.
 
  For example, to disallow anyone from connecting to 'Twink' from
  one domain, but to allow connections to the character from others,
  use something like:
 
    > @sitelock *.somesite.com=!connect,Twink
 
  If you want to disallow connections to a character from anywhere,
  use @newpassword or @sitelock *=!connect,Twink.
 
  @sitelock/remove will delete entries that were added with @sitelock
  if their host-pattern matches <string> exactly. If the /player switch is
  given, <string> is treated as a player name, and entries whose
  host-patterns match the player's LASTIP or LASTSITE addresses exactly will
  be deleted.
@SLAVE
  @slave/restart [info|ssl]
 
  @slave is a wizard-only command used to control the various
  subprocesses used by the mush to do various things. The only switch
  it currently takes is /restart, which will shut down and relaunch
  the slave daemon process in question.
 
  Two different daemons are used:
 
  info: Resolves IP addresses into host names whenever a new connection
        is established.
   ssl: Handles encrypted SSL connections across @shutdown/reboots. 
 
@SOCKSET
  SOCKSET [<option>=<value>]
  @sockset [<descriptor>][=<option>, <value>[, ..., <optionN>, <valueN>]]
 
  SOCKSET is a socket commands which sets or queries socket-specific options.
  These options are usually set automatically, or negotiated by the MUSH and
  your client, but this command lets you override those settings.
  
  With no args, SOCKSET shows the current value of the socket options. With
  an <option>=<value> pair, it attempts to set the given option.
  
  @sockset is a similar in-game command, but can specify which descriptor to
  change options for, and can set multiple options at once. Only Wizards can
  change the options for other players' descriptors. <descriptor> defaults to
  your least-idle descriptor, when used by a player; for non-players, it has
  no default.
 
  Options:
    colorstyle:   See help colorstyle
    outputprefix: Same as OUTPUTPREFIX
    outputsuffix: Same as OUTPUTSUFFIX
    pueblo:       Sets Pueblo-related options. If value has md5=...", then it
                  will set the pueblo checksum. If empty, Pueblo mode is 
                  turned off.
    telnet:       Yes or no, to enable/disable telnet negotiation
    width:        Set your width(), same as SCREENWIDTH
    height:       Set your height(), same as SCREENHEIGHT
    terminaltype: Your terminal type, used by terminfo()
 
  Note that changing 'telnet' or 'pueblo' may stop your client from parsing
  or displaying output correctly; only use if you know what you're doing!
  
See also: SOCKET COMMANDS, terminfo(), Pueblo, colorstyle
@SPEECHMOD
  @speechmod <object>[=<modifier>]
  
  When set, this attribute modifies everything <object> says, poses,
  semiposes and @emits. The original text spoken/posed/emitted is passed as
  %0, with %1 passed as " (for say), : (for pose), ; (for semipose) or |
  (for @emit).
  
  If the attribute evaluates to an empty string, the original text will be
  used. Otherwise, the result of the attribute is used.
  
  Example:
    > @speechmod me=ucstr(%0)!
    > say hello
    You say, "HELLO!"
    > pose waves
    Bob WAVES!
    
    > @speechmod me=switch(%1,",ucstr(%0),:,lcstr(%0))
    > say Test
    You say, "TEST"
    > pose Test
    Bob test
    > @emit Test
    Test
    
See also: say, pose, @emit, @chatformat, @pageformat
@SQL
  @sql <query>
 
  This command issues an SQL query if the MUSH supports SQL and can connect 
  to an SQL server. You must be WIZARD or have the Sql_Ok power to use @sql.
 
  Generally, the sql() function is more useful for coding, as it delimits its
  return values, but @sql is handy for INSERT-type queries and quick checks. 
  If you pass arbitrary data to @sql, be sure you call sqlescape() on it; 
  see the example in help sql().
 
  Example:
    > @sql SHOW TABLES
 
See also: sql(), sqlescape(), mapsql(), @mapsql
@SQUOTA
  @squota <victim> [= [+|-] <amount>]
 
  This is a wizard level command that is only available if the quota
  system is enabled.  It reports the victim's owned objects, and sets
  the maximum number of objects s/he may own to <amount>. If no limit is
  specified, this shows current quota, and reminds you to set one.
  Using + or - you can add <amount> to the limit, or subtract it.
@STARTUP
  @startup <object>[=<action list>]
 
  Sets the list of actions on <object> that will happen whenever the MUSH
  is restarted. This lets you start up objects that need to be running 
  continuously. It is also useful for setting up @functions and @hooks, 
  which are not saved across restarts.
  
  @startup is also triggered when an object is @restarted or @undestroyed.
  
See also: @restart, @undestroy, ACTION LISTS, @function, @command, @hook
@STATS
  @stats [<player>]
  @stats/tables
  @stats/flags
  @stats/chunks
  @stats/regions
  @stats/paging
  @stats/freespace
 
  In its first form, display the number of objects in the game broken
  down by object types.  Wizards can supply a player name to count only
  objects owned by that player.
 
  @stats/tables displays statistics on internal tables.
  @stats/flags displays statistics about the flag and power system.
 
  In the remaining forms, display statistics or histograms about the
  chunk (attribute) memory system.
@SUCCESS
  @success <object>[=<message>] 
  @osuccess <object>[=<message>]
  @asuccess <object>[=<action list>]
  
  For players and things, these attributes contain the message shown to
  someone who picks up <object> with the "get" command, the message shown
  to others when someone gets <object>, and the actions to be taken by
  <object> when someone gets it, respectively.
  
  For exits, they contain the message shown to an object passing through the
  exit <object>, the message shown in the exit's source when someone passes
  through it, and the actions to be taken by the exit when someone passes
  through it, respectively.
  
  Example:
    > @success Door=You open the door and step inside.
    > @osuccess Door=opens the door and steps inside.
    
    > @success Box=You pick up the box.
    > @osuccess Box=picks up the box.
 
See also: get, goto, @lock, SUCCESS, FAILURE, @odrop, ACTION LISTS, VERBS
@SWEEP
  @sweep [connected | here | inventory | exits ]
 
  @sweep gives you a list of all nearby objects that are listening,
  including the room you are in and the objects you are carrying.
  Most objects only listen for a particular string or phrase, so they
  normally do not pose a problem if you need privacy. You will have to be
  careful of players and puppets since they will hear everything you say
  and do. (And might post the same to r.g.m!)
  AUDIBLE exits are also shown on an ordinary sweep, if the room is
  also AUDIBLE. (Audible exits aren't active unless the room is audible).
 
  The four command options can also be used as switches (i.e., you
  can use "@sweep/connected" instead of "@sweep connected"). 
  If the connected flag is given, only connected players and puppets
  owned by connected players will be shown in the @sweep.
  The "here" and "inventory" flags check only your location or
  inventory, respectively. "exits" only checks for AUDIBLE exits.
@SWITCH
  @switch[/<switch>] <string>=<expr1>, <action1> [,<exprN>, 
                                 <actionN>]... [,<default>]
  @select <string>=<expr1>, <action1> [,<exprN>, <actionN>]... [,<default>]
  
  For those of you familiar with programming, these command acts like
  if/then/else or switch/case. It compares <string> against whatever each 
  <expr> evaluates to. If <string> and <expr> match, the action list 
  associated with that <expr> is carried out. If no match is found, the
  <default> action list is carried out. @switch runs <action>s for all
  matching <expr>s by default, while @select only runs the <action> for the
  first matching <expr>.
 
  If <expr> is a regexp or a wildcard glob, then $0-$9 will be set with
  capture data. (In wildcard globbing, every wildcard captures.)
 
  The string "#$" in <action>'s will be replaced with the evaluated result
  of <string> before it is acted on. Note that this replacement happens
  BEFORE the <action> is queued and executed, and does not work well in
  nested switches. It is recommended that you use the %$N substitution, or
  the stext() function, instead.
  
  @switch/all   runs <action>s for all matching <expr>s. Default for @switch.
  @switch/first runs <action> for the first matching <expr> only. Same as
                @select, and often the desired behaviour.
  @switch/notify queues "@notify me" after the last <action>. 
  @switch/inline runs all actions in place, instead of creating a new queue
                  entry for them.
  @switch/regexp makes <expr>s case-insensitive regular expressions, not
                 wildcard/glob patterns.
 
  Continued in 'help @switch2'.
@SWITCH2
 
  When using @switch/inline, an @break in an <action> will stop the calling
  action list (and any further <action>s) from running. Each <action> will
  also be able to see/alter the q-registers for the calling action list. The
  following switches can be used with /inline to alter this behaviour:
   /nobreak:  @breaks in <action> do not effect to the calling action list
   /localize: q-registers are saved before each <action> is run, and restored
              after it completes
   /clearreg: q-registers are all reset before each <action> is run. Most
              useful when used in combination with /localize.
              
  @switch/inplace is an alias for @switch/inline/nobreak/localize.
 
  See 'help @switch3' for examples.
See also: switch wildcards, switch(), @break, stext(), slev()
@SWITCH3
  Examples: 
    > &SWITCH_EX thing=$foo *: @switch %0=*a*, :acks, *b*, :bars, :glurps
    > foo abc
    thing acks
    thing bars
    > foo xxx
    thing glurps
 
    > &SWITCH_EX thing=$foo *: @switch/first %0=*a*, :acks,
                                                *b*, :bars, :glurps
    > foo abc
    thing acks
 
    > &SWITCH_EX thing=$test: @switch hasflag(%#,PUPPET)=1, say Puppet!,
                                      say Not Puppet!
    > test
    thing says, "Not Puppet!"
 
    > &SWITCH_EX thing=$foo *: @switch %0=*a*,say Before: '$0'. After: '$1'
    > foo foobarbaz
    thing says, "Before: 'foob'. After: 'rbaz'
    
  Continued in 'help @switch4'
@SWITCH4
  Examples: 
    > &SWITCH_EX me=$foo *:think before ; @switch %0=1,think one ; think after
    > foo 1
    thing before
    thing after
    thing one
 
    > &SWITCH_EX me=$foo *:think before ; @switch/inline %0=1,think one ;
                    think after
    > foo 1
    thing before
    thing one
    thing after
@TELEPORT
  @teleport[/silent][/inside] [<object>=]<destination>
 
  Teleports <object> to <destination>. <object> can be a player, thing or
  exit; if you do not supply an object, it is assumed to be yourself. The
  destination must be either JUMP_OK or controlled by you, and you must
  either control <object> or <object>'s current location. Also, the
  destination, if a room, cannot be teleport-locked against <object>. Mortals
  cannot teleport HEAVY objects. If the destination is a room with a drop-to,
  <object> may go to the drop-to room instead.
  
  Admin and those with the tport_anything power can teleport an object even
  if they don't control it. Those with tport_anywhere can teleport objects 
  to any destination. You can also teleport an exit to any room if you have
  the Open_Anywhere power.
 
  Privileged players who teleport a player to another player send them to 
  the location of the target, unless the /inside switch is used, in which 
  case they are sent to the inventory of the target.
  
  Continued in 'help @teleport2.
@TELEPORT2
  Teleporting to an exit works the same as using "goto". If you don't control
  the exit and don't have the tport_anywhere power, either you or <object>
  must be nearby the exit.
 
  Teleportation from a room can be stopped by setting the NO_TEL flag.
  Royalty and Wizards can _always_ teleport to any location, regardless of 
  NO_TEL or teleport locks.
 
  Teleportation triggers the @oxtport/@tport/@otport/@atport attributes, 
  unless <room> is an exit or the /silent switch is given. With @oxtport,
  %0 is the dbref of the object causing the dbref. The others, in addition 
  to %0, get the former location of the object that was teleported passed
  in %1.
 
  As a special case, using "home" as the <room> has the same effect as the 
  home command, and does not act like a normal teleport.
 
See also: JUMP_OK, NO_TEL, Z_TEL, @tport, @lock
@TPORT
  @tport <object>[=<message>]
  @otport <object>[=<message>]
  @oxtport <object> [=<message>]
  @atport <object>[=<action list>]
 
  These attributes contain the message shown to <object> when it is
  teleported, the message shown to others in the room <object> is teleported
  to, the message shown to others in the room <object> is teleported from,
  and the actions to be taken by <object> when it disappears, respectively.
  
  In all of these attributes, %0 is the object which teleported <object>,
  and %1 is <object>'s old location.
  
  Example:
  > @tport me=name(%0) has teleported you from [name(%1)] to [name(here)].
  > @otport me=appears in a puff of smoke.
  > @oxtport me=disappears in a puff of smoke.
  
See also: @teleport, ACTION LISTS, VERBS
@TRIGGER
  @trigger <object>/<attribute> [=<value 0>,<val. 1>,...,<val 9>]
 
  @trigger can be used to set off commands stored in an attribute on 
  an object. It can also pass values to that attribute on the stack 
  as %0 - %9.
 
  Examples:
    > &GREET me=POSE waves hi.
    > @trigger me/GREET
    Cyclonus waves hi.
 
    > &GREET me=POSE waves to %0! ; say Hi there, %1.
    > @trigger me/GREET=Gears, Arcee
    Cyclonus waves to Gears.
    You say, "Hi there, Arcee."
 
  Continued in 'help @trigger2'.
@TRIGGER2
  @trigger is very useful for splitting up large commands and for making
  them neater, but it does cause a time delay in execution, because the 
  commands are put into the queue a second later. For very commonly-used
  globals that you want to execute quickly, you should probably avoid using 
  @trigger. However, in most cases, the time saved by cramming everything 
  into one attribute is outweighed by the time spent debugging.
 
See also: @include, ufun()
@TZ
 
  The time(), timefmt() and convsecs() functions have an optional time
  zone argument that's used for formatting the time. Without this time
  zone specified, the one the game's server is running under is used..
 
  If the time zone argument is a dbref, the contents of that object's
  @TZ attribute is used as the zone. The attribute is not evaluated.
  If the object doesn't have this attribute, the server's time zone
  will be used.
 
  If it's the string 'UTC', that time zone is used instead of the
  local one.
 
  If it's a number between -24 and +24, it adds that many hours from
  UTC/GMT. Fractional times are supported, e.g., -1.5 hours.
 
  If the mush supports it (See @config compile), symbolic time zone
  names can also be used.
 
 See HELP TIMEZONES2 for a list of known time zones and HELP TIME2
 for some examples.
@UFAIL
  @ufail <object>=[<message>]
  @oufail <object>=[<message>]
  @aufail <object>=[<action list>]
 
  Sets the message shown to a player who fails to use an object via the 'use'
  command (because they don't pass the @lock/use), the message shown to
  others in the room when a player fails to use <object>, and the actions to
  be taken by <object> when someone fails to use it, respectively.
 
  Note that these attributes are @ufail, NOT @ufailure, for
  TinyMUSH compatibility.
  
  Although the Use @lock also restricts who can trigger $-commands or
  ^-listens on an object, these attributes will not be triggered for those
  failures. Instead, the COMMAND_LOCK`* and LISTEN_LOCK`* attributes are
  triggered. See 'help failure' for more information.
  
See also: use, @use, FAILURE, ACTION LISTS, VERBS
@ULOCK
  @ulock <object>[=<key>]
  @uunlock <object>
 
  These commands set the Use lock for <object> to <key>, or clear the Use
  lock. They are deprecated, and should be replaced with 
 
    @lock/use <object>[=<key>]
  and
    @lock/use <object>
 
  The Use lock determines who is allowed to "use" the object or trigger any
  $-commands or ^-listens on the object.
  
  To only lock who can use $-commands, use @lock/command. To only lock who
  can trigger ^-listens, use @lock/listen.
 
  Example: if I want everyone but Bob to be able to use my toy, I would
  "@lock/use toy=!*Bob". If I want only Bob to be able to use it, I would
  "@lock/use toy==*Bob".
 
See also: @lock, use, locktypes
@UNDESTROY
  @undestroy <object>
  
  When an object has been marked for destruction using @destroy, this
  command spares it from destruction. <object>'s @startup is triggered
  when it is spared.
  
  @unrecycle is an alias for @undestroy.
  
See also: @destroy, GOING, @startup
@UNFOLLOW
  @unfollow <object>[=<message>]
  @ounfollow <object>[=<message>]
  @aunfollow <object>[=<action list>]
  
  Sets the message shown to someone who stops following <object>,
  the message shown to others in the room, and the actions to be taken
  by <object> when someone stops following it, respectively. The name
  of the person stopping following <object> is automatically prepended
  to the @ounfollow message.
 
See also: follow, unfollow, @follow, followers(), ACTION LISTS, VERBS
@UNLINK
  @unlink <exit>
  @unlink <room>
 
  The first form of this command unlinks an exit from its destination
  room. Unlinked exits may be picked up and dropped elsewhere or relinked
  by anyone else. (Note that relinking an unlinked exit will @chown it to
  you if you do not already own it.)
 
  The second form removes the DROP-TO on the room.
 
See also: @link, DROP-TO
@UNLOCK
  @unlock[/<switch>] <object>
 
  Removes the lock on <object>. It can take as many switches as @lock can. 
 
See also: @lock, locktypes
@UNRECYCLE
  @undestroy <object>
  
  When an object has been marked for destruction using @destroy, this
  command spares it from destruction. <object>'s @startup is triggered
  when it is spared.
  
  @unrecycle is an alias for @undestroy.
  
See also: @destroy, GOING, @startup
@UPTIME
  @uptime[/mortal]
  
  This command, for mortals, gives the time until the next database dump.
  For wizards, it also gives the system uptime (just as if 'uptime' had
  been typed at the shell prompt) and process statistics, some of which
  are explained in the next help entry.
  Wizards can use the /mortal switch to avoid seeing the extra process
  statistics.
 
  Continued in 'help @uptime2'.
@UPTIME2
  While the exact statistics displayed depends on the operating system
  of the game's server, typical things might include the process ID,
  the machine page size, the maximum resident set size utilized (in K),
  "integral" memory (in K x seconds-of-execution), the number of page 
  faults ("hard" ones require I/O activity, "soft" ones do not), the
  number of times the process was "swapped" out of main memory, the
  number of times the process had to perform disk I/O, the number of
  network packets sent and received, the number of context switches,
  and the number of signals delivered to the process.
 
  Under Linux, memory usage is split into a number of different categories
  including shared libraries, resident set size, stack size, and some 
  other figures. Also under linux, more information on signals is printed.
@USE
  @use <object>[=<message>]
  @ouse <object>[=<message>]
  @ause <object>[=<action list>]
  
  These attributes contain the message shown to someone who successfully uses
  <object>, the message shown to others when someone uses <object>, and the
  actions to be taken by <object> when it is used, respectively.
  
  Note that, if <object> has a CHARGES attribute set and it does not contain
  a number greater than 0, the RUNOUT attribute is triggered instead of the
  AUSE attribute. See 'help @charges' for more information.
  
  Example:
    > @use Jack-In-The-Box=You wind the handle.
    > @ouse Jack-In-The-Box=winds the handle.
    > @ause Jack-In-The-Box=@wait 3=POSE pops up with a bang!
    > use Jack-In-The-Box
    
See also: use, @charges, @runout, ACTION LISTS, VERBS
@UUNLOCK
  @ulock <object>[=<key>]
  @uunlock <object>
 
  These commands set the Use lock for <object> to <key>, or clear the Use
  lock. They are deprecated, and should be replaced with 
 
    @lock/use <object>[=<key>]
  and
    @lock/use <object>
 
  The Use lock determines who is allowed to "use" the object or trigger any
  $-commands or ^-listens on the object.
  
  To only lock who can use $-commands, use @lock/command. To only lock who
  can trigger ^-listens, use @lock/listen.
 
  Example: if I want everyone but Bob to be able to use my toy, I would
  "@lock/use toy=!*Bob". If I want only Bob to be able to use it, I would
  "@lock/use toy==*Bob".
 
See also: @lock, use, locktypes
@VERB
  @verb <victim>=<actor>,<what>,<whatd>,<owhat>,<owhatd>,<awhat>,<args>
  
  This command provides a way to do user-defined verbs with associated
  @attr/@oattr/@aattr groups. Invoking it does the following:
  
  <actor> sees the contents of <victim>'s <what> attribute, or
    <whatd> if <victim> doesn't have a <what>.
  Everyone in the same room as <actor> sees the contents of
    <victim>'s <owhat> attribute, with <actor>'s name prepended,
    or <owhatd>, also with <actor>'s name prepended, if <victim>
    doesn't have an <owhat>.
  <victim> executes the contents of his <awhat> attribute.
  
  By supplying up to ten <args>, you may pass those values on
  the stack (i.e. %0, %1, %2, etc. up through %9).
  
  Continued in 'help @verb2'.
@VERB2
  In order to use this command, at least one of the following criterion
  must apply:
    1. The object which did the @verb is a wizard.
    2. The object which did the @verb controls both <actor> and <victim>
    3. The thing which triggered the @verb (such as through a $command on
       the object which did the @verb) must be <actor>, AND the object
       which did the @verb must be either privileged or control <victim>
       or <victim> must be VISUAL.
  
  See 'help @verb3' for examples.
See also: USER-DEFINED COMMANDS, STACK, VERBS, @trigger
@VERB3
  Examples:
  
  > &VERB_EXAMPLE Test Object=$test:@verb me=%#,TEST,You just tested.,OTEST,
       just tested the example.,ATEST,%N
  > test
  You just tested.
  [others see] Cyclonus just tested the example.
 
  > &TEST Test Object=You have just tested this object!
  > &ATEST Test Object=@emit %0 has failed!
  > &OTEST Test Object=tests test object.
  > test
  You have just tested this object!
  [others see] Cyclonus tests test object.
  Cyclonus has failed!
 
  See 'help @verb4' for another example.
@VERB4
  In order to make this into a global command that anyone can use, we
  need to put it on a WIZARD object in the Master Room. 
 
  > &DO_TEST Global=$test *:@select locate(%#,%0)=#-1,
                  {@pemit %#=I don't see that here.},
                  {@verb locate(%#,%0,n)=%#,
                   TEST,You test [capstr(%0)].,
                   OTEST,tests [capstr(%0)].,
                   ATEST}
 
  > &TEST Example=You test this fun example.
  > &ATEST Example=POSE has been tested!
  > test example
  You test this fun example.
  [others see] You test Example.
  Example has been tested!
@VERSION
  @version
  Tells the player the name of the MUSH, which version of the code is 
  currently running on the system, when it was compiled, and when
  the last restart was.
  
See also: version(), numversion()
@VRML_URL
@VRML_URL Object=<URL>
 
This provides an object (usually a room) with a VRML world. When a 
Pueblo-user enters this object, the VRML World listed in @VRML_URL
will be loaded.
 
Example:
@VRML_URL here=http://www.pennmush.org/pennmush.vrml
 
To learn about the VRML Format, have a look at the Pueblo Help, which
mentions several good sites for learning.
 
See also: 'HTML'.
 
@WAIT
  @wait[/until] <time> = <command_list>
  @wait <object> = <command_list>
  @wait[/until] <object>/<time> = <command_list>  
 
  The basic form of this command puts the command list (a semicolon-separated
  list of commands) into the wait queue to execute in <time> seconds. If the
  /until switch is given, the time is taken to be an absolute value in
  seconds, not an offset.
  
  The second form sets up a semaphore wait on <object>. The enactor will
  execute <command_list> when <object> is @notified.
  
  The third form combines the first two: the enactor will execute
  <command_list> when <object> is @notified or when <time> passes,
  whichever happens first.
 
  More forms that support semaphores on arbitrary attributes are described in
  'help @wait2'.
 
See also: SEMAPHORES, @drain, @notify
@WAIT2
  Normally, a semaphore wait depends on the SEMAPHORE attribute of the object
  in question. However, it is useful to be able to use other attributes as
  semaphores, so one object can be used as the blocker for multiple different
  things at once. Possible attribute names aren't completely arbitrary. See
  'HELP SEMAPHORES5' for details.
 
  The syntax for these are:
 
  @wait <object>/<attribute> = <command list>
  @wait[/until] <object>/<attribute>/<time> = <command list>
 
  You cannot do a non-timed semaphore on an attribute with a numeric name,
  as that is taken as a timeout instead.
 
  Continued in 'help @wait3'.
@WAIT3
  @wait/pid <pid>=<seconds>
  @wait/pid <pid>=[+-]<adjustment>
  @wait/pid/until <pid>=<time>
 
  The /pid switch can be used to alter the timeout of entries in the
  wait and semaphore queues. You can set a new wait time, increase or
  decrease the current time, or set a new absolute time in seconds.
 
  You must control the object doing the wait, or have the halt @power.
@WALL
  @wall[/<switch>] <message>
 
  Only wizards can use this command, which allows the player to shout
  or pose a message to every player connected. It must be typed in full.
  It can also take the following switches
  /emit    : emit a prefixed message to all.
  /noeval  : Don't evaluate the message.
 
  You can also use @wall :<pose> to @wallpose.
 
See also: @wizwall, @rwall
@WARNINGS
  @warnings <object>=<warning list>
 
  This command will set the types of warnings which should be reported on an
  object or to a player. You must control the object to use this command.
 
  When an object is checked for warnings (via @wcheck by the owner, or
  automatically), only warnings which are set to be reported on the object 
  will be reported. If no warnings are set on the object, the owner's warning 
  settings will be used. When admin use @wcheck to check non-owned objects, 
  their personal warnings are always used.
 
  For a list of warnings, see 'help warnings list'
  See also 'help @wcheck' and 'help NO_WARN'
 
  For examples, see 'help @warnings2'
@WARNINGS2
 
  Example 1: Normal building situations
  Most people will simply want to leave their @warnings set to "normal"
  and their objects' @warnings set to "none". They will then receive 
  normal warnings for all their objects.
 
  Example 2: Warning-lover
  People who find warnings very helpful (like heavy builders) may want
  to set their personal @warnings to "extra" or "all", and keep their
  objects' warnings at "none". If a specific object should be treated 
  less strictly, set that object's @warnings differently. If an object
  shouldn't be warned on at all, set the NO_WARN flag on the object.
 
  Continued in 'help @warnings3'.
@WARNINGS3
  Example 3: Warning-hater
  People who prefer not to be warned except for specific object may
  set their personal @warnings to "none" and set the @warnings on
  those objects to appropriate levels.
 
  Example 4: I need some peace!
  Players who @set themselves NO_WARN will receive no warnings ever
  until they unset the flag.
@WCHECK
  @wcheck <object>
  @wcheck/all 
  @wcheck/me
 
  The first form of the command performs warning checks on a specific
  object. The player must own the object or be see_all. When the owner runs 
  the command, the @warnings of the object are used to determine which 
  warnings to give. If the object has no @warning's set, the @warnings of 
  the owner are used. When a non-owner runs the command, the @warnings of 
  the non-owner are used.
 
  The second form of the command runs @wcheck on every object in the
  database and informs connected owners of warnings. It is usually
  automatically run by the MUSH at intervals. Only Wizards may use
  @wcheck/all.
 
  The third runs it on all objects the player owns that aren't set NO_WARN.
 
See also: @warnings, WARNINGS, NO_WARN
@WHEREIS
  @whereis <player>
 
  If <player> is not set UNFINDABLE, this command will tell you where the 
  player is. It will also inform the player that you attempted to locate 
  their position, and whether you succeeded or not.
 
  To avoid being found this way, just do: @set me=UNFINDABLE
 
  Example: 
    > @whereis Moonchilde
 
See also: UNFINDABLE, loc()
@WIPE
  @wipe <object>[/<attribute pattern>]
  
  This command clears attributes from <object>, with the exception of
  attributes changeable only by wizards, and attributes not controlled by
  the object's owner (i.e. locked attributes owned by someone else).
  Only God may use @wipe to clear wiz-changeable-only attributes.
  The SAFE flag protects objects from @wipe.
 
  If no <pattern> is given, this gets rid of all the attributes, with
  exceptions as given above. If <pattern> is given, it gets rid of
  all attributes which match that pattern. Note that the restrictions
  above still apply.
 
  When wiping an attribute that is the root of an attribute tree, all
  attributes in that tree will also be removed.
@WIZMOTD
  @wizmotd <message>
 
  This is a wizard only command that will set a short temporary message
  that will be shown to all wizards when they connect. It is listed in
  @listmotd as the Wiz MOTD. A more permanent message can be set by
  the siteadmin by editing the file "wiz.txt".
@WIZWALL
  @wizwall[/emit] <message>
 
  This wiz-only command works similarly to @rwall or @wall, sending
  a message in either say, pose, or emit format to all wizards who
  are currently logged in. 
 
See also: @wall, @rwall
@ZEMIT
  @zemit[/silent|/noisy] <zone>=<message>
 
  Emits a message to all rooms in <zone>. You must have control <zone> in 
  order to use this command.
  
  The /silent switch suppresses the confirmation message, and /noisy causes
  it to be shown. With neither switch, the silent_pemit @config option
  determines whether or not the message is shown. The confirmation message
  is only shown if you are not in a room which would receive <message>.
  
See also: @nszemit, zemit(), zone(), zwho(), ZONES
@ZENTER
  @zenter <object>[=<message>]
  @ozenter <object>[=<message>]
  @azenter <object>[=<action list>]
  
  These attributes set the message shown to a player when he enters the zone
  <object>, the message shown to others in the room the player enters when
  he enters the zone, and the action to be taken by the zone <object> when 
  the player moves into an area zoned to it.
 
  Entry into a new zone is said to occur when a player goes from a room not 
  in the zone to a room in the zone. "Room" in this context means the 
  player's absolute room (outermost container), so entering and leaving 
  unzoned objects within a zoned room doesn't trigger these.
 
  Zone entry is assumed to occur before room entry, so these are
  triggered before the room's @[oa]enter.
 
See also: @zleave, ZONES, @zemit, zwho(), VERBS
@ZLEAVE
  @zleave <object>[=<message>]
  @ozleave <object>[=<message>]
  @azleave <object>[=<action list>]
  
  These attributes set the message shown to a player when he leaves the zone
  <object>, the message shown to others in the room he left when leaving
  the zone, and the actions to be taken by <object> with a player leaves
  an area zoned to it.
  a zone (@zleave), the message shown to others in the room in the
  old zone when the player leaves (@ozleave), and the action triggered
  by the leave-taking (@azleave).
 
  Leaving a zone is said to occur when a player goes from a room in the zone
  to a room not in the zone. "Room" in this context means the player's
  absolute room (outermost container), so entering and leaving unzoned 
  objects within a zoned room doesn't trigger these.
 
  Zone leaving is assumed to occur after room leaving, so these are
  triggered after the room's @[oa]leave.
 
See also: @zenter, ZONES, @zemit, zwho(), VERBS
ABODE
  Flag:  ABODE  (rooms)
 
  If a room has the ABODE flag set, any player or thing can set his home 
  there. It does not allow you to link exits to the room. It allows you to
  make a room a public 'living area'.
  
  To make a room your home, type '@link me=here' while standing in the
  room.
 
See also: @link, LINK_OK
ABS()
  abs(<number>)
 
  Returns the absolute value of a number.
  
  Examples:
    > say abs(-4)
    You say, "4"
    
    > say abs(2)
    You say, "2"
    
See also: sign()
ACCENT()
  accent(<string>, <template>)
 
  The accent() function will return <string>, with characters in it possibly
  changed to accented ones according to <template>. Both arguments must be 
  the same size.
 
  Whether or not the resulting string is actually displayed correctly is 
  client-dependent. Some OSes uses different character sets than the one 
  assumed (ISO 8859-1), and some clients strip these 8-bit characters.
 
  For each character in <string>, the corresponding character of <template>
  is checked according to the table in 'help accents', and a replacement 
  done. If either the current <string> or <template> characters aren't in 
  the table, the <string> character is passed through unchanged.
 
  See 'help accent2' for some examples.
 
See also: stripaccents(), NOACCENTS, @nameaccent, accname(), ACCENTS
ACCENT2
  Some examples of accent() and their expected outputs:
 
    > think accent(Aule, ---:)
    Aul(e-with-diaeresis)
 
    > think accent(The Nina was a ship, The Ni~a was a ship) 
    The Ni(n-with-~)a was a ship
 
    > think accent(Khazad ai-menu!, Khaz^d ai-m^nu!)
    Khaz(a-with-^)d ai-m(e-with-^)nu!
ACCENTS
  Below is the table of possible accents which can be used with accent()
  and @nameformat.
 
  Accent                         Template   String
  Name       Description         Character  Character
  --------------------------------------------------------------
  grave      Backward slant      `          A,E,I,O,U,a,e,i,o,u
             above letter
  acute      Forward slant       '          A,E,I,O,U,Y,a,e,i,o,u,y
             above letter
  tilde      Wavy line above     ~          A,N,O,a,n,o
             letter
  circumflex carat above         ^          A,E,I,O,U,a,e,i,o,u
             letter
  umlaut     Two dots above      :          A,E,I,O,U,,a,e,i,o,u,y
  diaeresis  letter
  ring       Small circle above  o          A,a
             letter
  cedilla    Small tail below    ,          C,c
             letter
 
  Continued in 'HELP ACCENTS2'
ACCENTS2
  These are non-accent special characters, mostly punctuation and
  non-roman letters.
 
                      Template   String
  Description         Character  Character
  --------------------------------------------------------------
  Upside-down ?       u          ?
  Upside-down !       u          !
  << quote mark       "          <
  >> quote mark       "          >
  German sharp s      B          s
  Capital thorn       |          P
  Lower-case thorn    |          p
  Capital eth         -          D
  Lower-case eth      &          o
  
  See 'HELP ACCENTS3' for examples
ACCENTS3
  Some examples of accent() and their expected outputs:
 
    > think accent(Aule, ---:)
    Aul(e-with-diaeresis)
 
    > think accent(The Nina was a ship, The Ni~a was a ship) 
    The Ni(n-with-~)a was a ship
 
    > think accent(Khazad ai-menu!, Khaz^d ai-m^nu!)
    Khaz(a-with-^)d ai-m(e-with-^)nu!
ACCNAME()
  accname(<object>)
 
  accname() returns the name of <object>, applying the object's
  @nameaccent, if any.
 
See also: name(), fullname(), iname(), ACCENTS
ACOS()
  acos(<cosine>[, <angle type>])
 
  Returns the angle that has the given <cosine> (arc-cosine), with the
  angle expressed in the given <angle type>, or radians by default.
 
  See 'HELP ANGLES' for more on the <angle type>.
 
See also: asin(), atan(), cos(), ctu(), sin(), tan()
ACTION LISTS
  An "action list" is simply a list of MUSH commands which are run together,
  one after the other. Each command in the list is separated by a semicolon.
  Action lists appear in many places: in user-defined commands, triggered in
  @a-attributes by the MUSH, and even as arguments to other commands, like
  @switch and @dolist.
 
  If part of the command (such as the text in an @emit, for example) contains
  a semi-colon, you may need to enclose that part in curly braces {}. You can
  also nest action lists inside each other by enclosing each action list in
  braces {}.
 
  Substitution will be performed on the contents of action lists before
  they are executed.
 
  See 'help action2' for some examples.
See also: @-ATTRIBUTES, VERBS, $-COMMANDS
ACTION2
  Example 1:
    > @asuccess Gift=@pemit %#={The box pops open; surprise!} ; 
        @name me=New Toy ; @desc me=A shiny new toy, just for %n!
    > take gift
    The box pops open; surprise!
    > look new toy
    New Toy
    A shiny new toy, just for Cyclonus!
            
  Example 2:
    > &TEST me=$test:@emit {Testing; testing; one, two.} ; 
        @dolist 1 2 3={think Test ##, success.}
    > test
    Testing; testing; one, two.
    Test 1, success.
    Test 2, success.
    Test 3, success.
 
See also: ATTRIBUTES, SUBSTITUTION, @asuccess, @dolist
ADD()
  add(<number>, <number>[, ... , <numberN>])
 
  Returns the sum of the given <number>s.
  
See also: MATH FUNCTIONS
AFTER()
  after(<string1>, <string2>)
 
  Returns the portion of <string1> that occurs after <string2>.  If
  <string2> isn't in <string1>, the function returns nothing.
  This is case-sensitive.
 
  Examples:
    > say after(foo bar baz,bar)
    You say, " baz"
    
    > say after(foo bar baz,ba)
    You say, "r baz"
 
See also: before(), rest()
AHELP
  ahelp [<topic>]
 
  Shows the current admin help for the MUSH. Only ROYALTY and WIZARDS
  can use this command.
 
See also: anews
ALIAS()
  alias(<object>[, <new alias>])
  fullalias(<object>)
  
  alias() returns the first of <object>'s aliases. fullalias() returns all
  the aliases set for <object>. Note that, while any object can have an alias
  set, they are only meaningful for players and exits.
  
  With two arguments, alias() attempts to change the alias for <object> to
  <new alias>, as per @alias.
  
  Example:
    > ex *Noltar/ALIAS
    ALIAS [#7$v]: $;No;Nol;Noli;Nolt
    > say alias(*Noltar)
    You say, "$"
    > say fullalias(*Noltar)
    You say, "$;No;Nol;Noli;Nolt"
 
See also: fullname()
ALIGN()
  align(<widths>, <col>[, ... , <colN>[, <filler>[, <colsep>[, <rowsep>]]]])
  lalign(<widths>, <colList>[, <delim>[, <filler>[, <colsep>[, <rowsep>]]]])
 
  Creates columns of text, each column designated by <col> arguments.
  Each <col> is individually wrapped inside its own column, allowing
  for easy creation of book pages, newsletters, or the like. In lalign(),
  <colList> is a <delim>-separated list of the columns.
 
  <widths> is a space-separated list of column widths. '10 10 10' for
  the widths argument specifies that there are 3 columns, each 10
  spaces wide. You can alter the behavior of a column in multiple ways.
  (Check 'help align2' for more details)
 
  <filler> is a single character that, if given, is the character used
  to fill empty columns and remaining spaces. <colsep>, if given, is
  inserted between every column, on every row. <rowsep>, if given, is
  inserted between every line. By default, <filler> and <colsep> are a
  space, and <rowsep> is a newline.
 
  Continued in 'help align2'
ALIGN2
  You can modify column behavior within align(). The basic format is:
 
  [justification]Width[runout][(ansi)]
 
  Justification: Placing one of these characters before the width alters
  the spacing for this column. (e.g: <30)
    < Left-justify       - Center-justify        > Right-justify
    _ Full-justify.      = Paragraph-justify.
 
  Other options: Adding these after the width will alter the column's
    behaviour in some situtations
    . Repeat for as long as there is non-repeating text in another column.
    ` Merge with the column on the left when it runs out of text.
    ' Merge with the column on the right when it runs out of text.
    $ nofill: Don't use filler after the text. If this is combined with
      merge-left, the column to its left inherits the 'nofill' when merged.
 
  Ansi: Place ansi characters (as defined in 'help ansi()') within ()s to
  define a column's ansi markup.
 
  See 'help align3' for examples.
See also: center(), ljust(), rjust(), table()
ALIGN3
  Examples:
  
    > &line me=align(<5 10 20,([left(get(%0/sex),1)]),name(%0),name(loc(%0)))
    > th iter(lwho(),u(line,##),%b,%r)
      (M) Walker     Tree
      (F) Jane Doe   Nowhere
 
    > &haiku me = Alignment function,%rIt justifies your writing,%rBut the
                  words still suck.%rLuke
 
    > th [align(5 -40 5,,[repeat(-,40)]%r[u(haiku)]%r[repeat(-,40)],,%b,+)]
 
         +----------------------------------------+
         +          Alignment function,           +     
         +       It justifies your writing,       +     
         +       But the words still suck.        +     
         +                  Luke                  +
         +----------------------------------------+
 
  See 'help align4' for more examples.
ALIGN4
  > &dropcap me=%b_______%r|__%b%b%b__|%r%b%b%b|%b|%r%b%b%b|_|
  > &story me=%r'was the night before Christmas, when all through the house%r
              Not a creature was stirring, not even a mouse.%r
              The stockings were hung by the chimney with care,%r
              In hopes that St Nicholas soon would be there.
  > th align(9'(ch) 68, u(dropcap), u(story)
  
   _______  
  |__   __| 'was the night before Christmas, when all through the house
     | |    Not a creature was stirring, not even a mouse.
     |_|    The stockings were hung by the chimney with care,
  In hopes that St Nicholas soon would be there.
  
  The dropcap 'T' will be in ANSI cyan-highlight, and merges with the 'story'
  column.
 
  > th align(>15 60,Walker,Staff & Developer,x,x)
  xxxxxxxxxWalkerxStaff & Developerxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  > th align(>15 60$,Walker,Staff & Developer,x,x)
  xxxxxxxxxWalkerxStaff & Developer
ALLOF()
  allof(<expr>[, ... , <exprN>], <osep>)
 
  Evaluates every <expr> argument (including side-effects) and returns the 
  results of those which are true, in a list separated by <osep>. The output
  separator argument is required, and can be a string of any length
  (including an empty string; use %b for a space).
 
  The meaning of true or false depends on configuration options as
  explained in the 'BOOLEAN VALUES' help topics.
 
    > &s me=Bats are similar to Rats which are afraid of Cats
    > say allof(grab(v(s),rats),grab(v(s),mats),grab(v(s),bats),)
    You say, "Rats Bats"
 
    > say allof(#-1,#101,#2970,,#-3,0,#319,null(This Doesn't Count),|)
    You say, "#101|#2970|#319"
    
    > say allof(foo, 0, #-1, bar, baz,)
    You say, "foobarbaz"
    > say allof(foo, 0, #-1, bar, baz,%b)
    You say, "foo bar baz"
 
See also: firstof(), BOOLEAN VALUES, strallof(), filter()
ALPHAMAX()
  alphamax(<word>[, ... , <wordN>])
 
  Takes any number of <word> arguments, and returns the one which is
  lexicographically biggest. That is, the <word> would be last in
  alphabetical order.
  
  This is equivilent to last(sort(<word> ... <wordN>,a)).
 
See also: alphamin(), max()
ALPHAMIN()
  alphamin(<word>[, ... , <wordN>])
 
  Takes any number of <word> arguments, and returns the one which is
  lexicographically smallest. That is, the word that would be first in
  alphabetical order.
  
  This is equivilent to first(sort(<word> ... <wordN>,a)).
 
See also: alphamax(), min()
ANCESTORS
  ANCESTORS
 
  Objects can inherit attributes and locks from other objects through the use
  of parents. An object's parent, its parent's parent, its parent's parent's
  parent, etc. constitute the object's "parent chain" and lookups work the 
  way up the chain until an inheritance occurs.
 
  Ancestors are "virtual parents" that are assumed to be last on every parent
  chain. There is one ancestor for each object type (room, exit, thing,
  player), and @config lists the dbref of each ancestor object (@config 
  ancestor_room, etc). Under normal circumstances, if an attribute/lock can't
  be retrieved from an object or any of its explicit parents, the attribute
  will be looked for on the appropriate ancestor.  The ORPHAN flag may be set
  on an object to cause lookups on that object to ignore ancestors (like the
  pre-ancestor behavior).
 
  Ancestors may themselves have parent chains, but these are (obviously) not 
  virtually terminated by ancestors.
 
  Note that the choice of which ancestor to look up is based on the type of 
  the *child* object, as is the check of the ORPHAN flag. Also note that 
  ancestors are *not* checked for $-commands or ^-commands; you should use 
  the master room for global commands, instead.
 
See also: PARENTS, ORPHAN
AND()
  and(<boolean1>, <boolean2>[, ... , <booleanN>])
  cand(<boolean1>, <boolean2>[, ... , <booleanN>])
 
  These functions take any number of boolean values, and return 1 if
  all are true, and 0 otherwise. and() will always evaluate all its
  arguments (including side effects), while cand() stops evaluation
  after the first false argument.
 
See also: BOOLEAN VALUES, nand(), or(), xor(), not()
ANDFLAGS()
  andflags(<object>, <string of flag letters>)
  andlflags(<object>, <list of flag names>)
  
  These functions return 1 if <object> has all of the given flags, and 0 if
  it does not. andflags() takes a string of single flag letters, while
  andlflags() takes a space-separated list of flag names. In both cases, a
  ! before the flag means "not flag".
  
  If any of the flags given are invalid, both functions return 
  "#-1 INVALID FLAG".
  
  Example: Check to see if %# is set Wizard and Dark, but not Ansi.
    > say andflags(%#, WD!A)
    > say andlflags(%#, wizard dark !ansi)
  
See also: orflags(), flags(), lflags()
ANDLFLAGS()
  andflags(<object>, <string of flag letters>)
  andlflags(<object>, <list of flag names>)
  
  These functions return 1 if <object> has all of the given flags, and 0 if
  it does not. andflags() takes a string of single flag letters, while
  andlflags() takes a space-separated list of flag names. In both cases, a
  ! before the flag means "not flag".
  
  If any of the flags given are invalid, both functions return 
  "#-1 INVALID FLAG".
  
  Example: Check to see if %# is set Wizard and Dark, but not Ansi.
    > say andflags(%#, WD!A)
    > say andlflags(%#, wizard dark !ansi)
  
See also: orflags(), flags(), lflags()
ANDLPOWERS()
  andlpowers(<object>, <list of powers>)
 
  This function returns 1 if <object> has all the powers in a
  specified list, and 0 if it does not. The list is a space-separated
  list of power names.  A '!' preceding a flag name means "not power".
 
  Thus, ANDLPOWERS(me, no_quota no_pay) would return 1 if I was
  powered no_quota and no_pay.  ANDLPOWERS(me, poll !guest) would
  return 1 if I had the poll power but not the guest power.
 
  If a name does not correspond to any power, andlpowers() returns 
  "#-1 INVALID POWER".
 
See also: powers(), orlpowers(), POWERS LIST, @power
ANEWS
  anews [<topic>]
 
  Shows the current admin news for the MUSH. Only ROYALTY and WIZARDS
  can use this command.
 
See also: ahelp
ANGLES
 
  In any function which accepts an angle type, the argument can be one of
  'd' for degrees, 'r' for radians, or 'g' for gradians. Gradians are not
  used often, but it's included for completeness.
 
  As a refresher, there are 180 degrees in pi radians in 200 gradians.
 
See also: acos(), asin(), atan(), cos(), ctu(), sin(), tan()
ANNOUNCE POWER
 
  The Annouce @power lets objects set the Message of the Day via @motd,
  and use the @wall command to send a message to all connected players.
  Wizards have the power implicitly.
  
See also: @wall, @motd, CHAT_PRIVS POWER, loud, CAN_SPOOF POWER
ANONYMOUS ATTRIBUTES
  In many cases where a function expects a object/attribute pair that
  refers to an attribute to evaluate, you can use the form
 
  #lambda/<code>
 
  instead, and the code will be treated as an attribute's body.  The
  code will normally be parsed twice, so special characters should be
  escaped where needed.
 
  If the #lambda just calls another function, the form
 
  #apply[<number of arguments>]/<function name>
 
  can be used instead. If the argument count is left out, it defaults
  to 1.
 
  These anonymous attributes should be used for short and simple
  pieces of code. Anything long or complicated should go in an actual
  attribute, for readability and maintainability.
 
  See 'HELP ANONYMOUS2' for examples.
ANONYMOUS2
  A typical usage of anonymous attributes would be to convert
  a list of dbrefs to names, as so:
 
  > say map(#lambda/name(\%0), #3 #12 #23)
  You say, "Joe Robert Sally"
  
  The following version uses #apply instead:
 
  > say map(#apply/name, #3 #12 #23)
 
  Because the code is parsed twice, you can actually build parts of it
  in place, which is very convenient. Consider this implementation of
  a lattrval function, which is like lattr() but it only returns
  non-empty attributes:
 
  > &lattrval me=
     filter(#lambda/hasattrval([decompose(before(%0, /))], \%0), lattr(%0))
  
  The first time '#lambda/hasattrval([decompose(before(%0, /))], \%0)' is
  parsed in a call like 'u(lattrval, #1234)', it is turned into
  '#lambda/hasattrval(#1234, %0)', thus avoiding the need for a setq()
  or the like to store the top-level %0 for use in a real attribute
  called by filter(). However, this can lead to problems with
  evaluating un-trusted code. Use decompose() where neccessary.
 
  See 'HELP ANONYMOUS3' for more examples.
ANONYMOUS3
  
  You can also use lit() to avoid having the code evaluated twice, if
  needed. For example, this code, which returns all unlinked exits in
  a room:
 
  &lunlinked me=filter(lit(#lambda/strmatch(loc(%0), #-1)), lexits(%0))
 
  This approach is useful both for security in making it harder to
  evaluate a string that shouldn't be, and for making the code look
  nicer by not having to escape percent signs, brackets, and other
  special characters. However, it also makes it harder to build the
  code string on the fly. Use what's most appropriate.
     
  Finally, a multiple argument example of #apply, which requires less
  escaping than #lambda for cases where you're just calling another
  function:
 
  > think mix(#apply2/ansi, r g b, foo bar baz)
 
  See 'HELP ANONYMOUS4' for a list of functions that support anonymous
  attributes.
ANONYMOUS4
  The following functions support anonymous attributes:
  
  filter()    filterbool()   fold()      foreach()   map()      mapsql()
  mix()       munge()        namelist()  sortby()    sortkey()  step()
ANSI
  Flag:  ANSI  (players)
  
  When set, this flag allows a player to see ANSI highlight, generated by the
  ansi(h,...) function. Some ANSI is used by the MUSH, for example to 
  highlight the names of objects (if the ansi_names @config option is on), 
  and the names of attributes.
  
  ANSI highlight can also be enabled on a per-connection basis with @sockset.
  
See also: ansi(), COLOR, XTERM256, @config, @sockset
ANSI()
  ansi(<ansi-codes>, <string>)
  ansi([<fg-color>][/<bg-color>], <string>)
 
  This allows you to mark up a string using ANSI terminal effects, 16-color
  codes, and color names and hex values.
  
  The old-style <ansi-codes> are listed in "help ansi2".
  
  <fg-color> and <bg-color> can be one of:
    * +<colorname> (for a list of valid names, see "help colors()")
    * a hexcode, optionally in angle brackets (#000000, <#ff0055>, etc)
    * a list of red, green and blue values from 0-255, in angle brackets
      (<0 0 0>, <255 0 85>, etc)
    * a number from 0-255; this is the same as using "+xterm<number>",
      for Rhost compatability.
 
  For example, "ansi(+orange/#0000ff,Test)" would color "Test" in orange,
  on a blue background. In the event that your client does not support
  those colors, PennMUSH will downgrade the color to the closest fit
  that your client can understand.
  
  If you want to mix basic ANSI codes with extended colors, the basic ANSI
  codes must come first.
  
  See 'help ansi3' for more examples.
See also: ANSI, COLOR, @sockset, colorstyle, colors()
ANSI2
  Old-style valid color codes are:
 
        f - flash                       F - not flash
        h - hilite                      H - not hilite
        u - underscore                  U - not underscore
        i - inverse                     I - not inverse
        n - normal                      
 
        d - default foreground          D - default background
        x - black foreground            X - black background
        r - red foreground              R - red background
        g - green foreground            G - green background
        y - yellow foreground           Y - yellow background
        b - blue foreground             B - blue background
        m - magenta foreground          M - magenta background
        c - cyan foreground             C - cyan background
        w - white foreground            W - white background
 
  For example, "ansi(fc, Test)" would hilight "Test" in flashing cyan.
  Default foreground and background use the client's default color for
  fore and back.
 
ANSI3
 
  Bright yellow text on a blue background:
  > think ansi(yB, foo)
  
  Orange text on an ANSI-green background:
  > think ansi(G+orange, bar)
  
  Underlined pink text on a purple background
  > think ansi(u+lightsalmon/#a020f0, ugly)
 
APOSS()
  aposs(<object>)
 
  Returns the absolute possessive pronoun - his/hers/its/theirs - for
  an object. The %a substitution returns the absolute possessive
  pronoun of the enactor.
  
See also: obj(), poss(), subj()
ART()
  art(<string>)
 
  This function returns the proper article, "a" or "an", based on
  whether or not <string> begins with a vowel.
ASIN()
  asin(<sine>[, <angle type>])
 
  Returns the angle with the given <sine> (arc-sine), with the angle
  expressed in the given <angle type>, or radians by default.
 
  See 'HELP ANGLES' for more on the angle type.
 
See also: acos(), atan(), cos(), ctu(), sin(), tan()
ATAN()
  atan(<tangent>[, <angle type>])
  atan2(<number1>, <number2>[, <angle type>])
 
  Returns the angle with the given <tangent> (arc-tangent), with the
  angle expressed in the given <angle type>, or radians by default.
 
  atan2(x, y) is like atan(fdiv(x, y)), except y can be 0, and the
  signs of both arguments are used in determining the sign of the
  result. It is useful in converting between cartesian and polar
  coordinates.
 
  See 'HELP ANGLES' for more on the angle type.
 
See also: acos(), asin(), cos(), ctu(), sin(), tan()
ATAN2()
  atan(<tangent>[, <angle type>])
  atan2(<number1>, <number2>[, <angle type>])
 
  Returns the angle with the given <tangent> (arc-tangent), with the
  angle expressed in the given <angle type>, or radians by default.
 
  atan2(x, y) is like atan(fdiv(x, y)), except y can be 0, and the
  signs of both arguments are used in determining the sign of the
  result. It is useful in converting between cartesian and polar
  coordinates.
 
  See 'HELP ANGLES' for more on the angle type.
 
See also: acos(), asin(), cos(), ctu(), sin(), tan()
ATRLOCK()
  atrlock(<object>/<attrib>[, [on|off]])
 
  When given a single <object>/<attribute> pair as an argument, returns 1
  if the attribute is locked, 0 if unlocked, and #-1 if the attribute
  doesn't exist or can't be read by the function's caller.
 
  When given a second argument of "on" (or "off"), attempts to lock
  (or unlock) the specified attribute, as per @atrlock.
  
See also: @atrlock, @atrchown, hasflag()
ATTR TREES
Attributes can be arranged in a hierarchical tree; these are called
"attribute trees", and a conceptually similar to the way that
files and directories/folders are organized on computer filesystems.
Attribute trees can be used to reduce spam when examining and to
provide organized control over permissions for related attributes.
 
Attribute trees use the backtick (`) character to separate their
components (much as filesystems use / or \). For example, the
following attribute name would be a couple levels down in its tree:
 
  CHAR`SKILLS`PHYSICAL
 
Attribute names may not start or end with the backtick, and may not
contain two backticks in a row.
 
All attributes are either branch attributes or leaf attributes.
A branch attribute is an attribute that has other branches or leaves
beneath it; a leaf attribute is one that does not. Any attribute may
act as a branch. If you try to create an unsupported leaf, branch
attributes will be created as needed to support it.
 
See 'help attribute trees2' for more information and examples.
 
ATTR TREES2
Attribute trees provide two immediate benefits. First, they reduce
spam when examining objects. The usual * and ? wildcards for attributes
do not match the ` character; the new ** wildcard does. Some
examples of using examine:
   examine obj              displays top-level attributes (plus object header)
   examine obj/*            displays top-level attributes
   examine obj/BRANCH`      displays only attributes immediately under BRANCH
   examine obj/BRANCH`*     displays only attributes immediately under BRANCH
   examine obj/BRANCH`**    displays entire tree under BRANCH
   examine obj/**           displays all attributes of object
 
The same principles apply to lattr(). @decompile obj is a special case,
and displays all attributes.
 
Branch attributes will be displayed with a ` in the attribute flags
on examine. 
 
See 'help attribute trees3' for more information and examples.
 
ATTR TREES3
The second benefit of attributes trees is convenient access control.
Attribute flags that restrict attribute access or execution
(no_inherit, no_command, mortal_dark, wizard) propagate down
attribute trees, so if a branch is set mortal_dark, mortals can
not read any of its leaves or subbranches either.
 
Attribute flags that grant access (e.g. visual) do NOT propagate down
trees.
 
These properties make attribute trees ideal for data attributes:
  &DATA bank = Data for each depositor is stored here, by dbref
  @set bank/DATA = no_command
  &DATA`#30 bank = $2000 savings:$1000 loan @ 5%
  ...
 
They're also handy for things like character attributes:
  @attribute/access CHAR = wizard mortal_dark no_clone no_inherit
  &CHAR #30 = Character data
  &CHAR`SKILLS #30 = coding:3 documentation:1 obfuscation:5
  ...
 
See 'help attribute trees4' for information about @parent and attribute trees.
 
ATTR TREES4
Attribute trees interact with @parent in several ways.
 
As usual, children inherit attributes from their parent unless the
child has its own overriding attribute. However, children that wish
to override a leaf attribute must also have their own (overriding)
copy of all branches leading to that leaf. This means that when you do:
 
  &BRANCH parent = a branch
  &BRANCH`LEAF parent = a leaf
  &BRANCH`LEAF child = a new leaf
 
In this case, a new BRANCH attribute will be created on the child,
so '-[get(child/BRANCH)]-' will return '--'. This may not be what
you actually want.
 
If a branch on the parent is set no_inherit, it will not be inherited,
regardless of any other flags that may be present. If a branch is
inherited, the child object can not loosen any access restrictions to
inherited attributes that are set by the parent (although it may loosen
access restrictions to its own attributes on the same branch). The child
object may impose stricter restrictions, however, and these may prevent
access to inherited parent data.
ATTRCNT()
  nattr(<object>[/<attribute pattern>])
  nattrp(<object>[/<attribute pattern>])
  regnattr(<object>[/<regexp>])
  regnattrp(<object>[/<regexp>])
 
  nattr() returns the number of attributes on <object> that you can see
  which match the given <attribute pattern>. It is considerably faster than
  words(lattr()) and doesn't suffer from buffer length constraints. It's 
  designed primarily for statistical purposes. <attribute pattern> defaults
  to "*", which does not include branches in attribute trees; use "**" if
  you need to count attribute trees.  
  
  regnattr() matches attribute names against the regular expression <regexp>.
 
  nattrp() and regnattrp() also count matching attributes on the parent.
  
  attrcnt() and attrpcnt() are aliases for nattr() and nattrp() respectively.
 
See also: lattr(), hasattr(), xattr(), wildcards
ATTRIB TREES
Attributes can be arranged in a hierarchical tree; these are called
"attribute trees", and a conceptually similar to the way that
files and directories/folders are organized on computer filesystems.
Attribute trees can be used to reduce spam when examining and to
provide organized control over permissions for related attributes.
 
Attribute trees use the backtick (`) character to separate their
components (much as filesystems use / or \). For example, the
following attribute name would be a couple levels down in its tree:
 
  CHAR`SKILLS`PHYSICAL
 
Attribute names may not start or end with the backtick, and may not
contain two backticks in a row.
 
All attributes are either branch attributes or leaf attributes.
A branch attribute is an attribute that has other branches or leaves
beneath it; a leaf attribute is one that does not. Any attribute may
act as a branch. If you try to create an unsupported leaf, branch
attributes will be created as needed to support it.
 
See 'help attribute trees2' for more information and examples.
 
ATTRIB TREES2
Attribute trees provide two immediate benefits. First, they reduce
spam when examining objects. The usual * and ? wildcards for attributes
do not match the ` character; the new ** wildcard does. Some
examples of using examine:
   examine obj              displays top-level attributes (plus object header)
   examine obj/*            displays top-level attributes
   examine obj/BRANCH`      displays only attributes immediately under BRANCH
   examine obj/BRANCH`*     displays only attributes immediately under BRANCH
   examine obj/BRANCH`**    displays entire tree under BRANCH
   examine obj/**           displays all attributes of object
 
The same principles apply to lattr(). @decompile obj is a special case,
and displays all attributes.
 
Branch attributes will be displayed with a ` in the attribute flags
on examine. 
 
See 'help attribute trees3' for more information and examples.
 
ATTRIB TREES3
The second benefit of attributes trees is convenient access control.
Attribute flags that restrict attribute access or execution
(no_inherit, no_command, mortal_dark, wizard) propagate down
attribute trees, so if a branch is set mortal_dark, mortals can
not read any of its leaves or subbranches either.
 
Attribute flags that grant access (e.g. visual) do NOT propagate down
trees.
 
These properties make attribute trees ideal for data attributes:
  &DATA bank = Data for each depositor is stored here, by dbref
  @set bank/DATA = no_command
  &DATA`#30 bank = $2000 savings:$1000 loan @ 5%
  ...
 
They're also handy for things like character attributes:
  @attribute/access CHAR = wizard mortal_dark no_clone no_inherit
  &CHAR #30 = Character data
  &CHAR`SKILLS #30 = coding:3 documentation:1 obfuscation:5
  ...
 
See 'help attribute trees4' for information about @parent and attribute trees.
 
ATTRIB TREES4
Attribute trees interact with @parent in several ways.
 
As usual, children inherit attributes from their parent unless the
child has its own overriding attribute. However, children that wish
to override a leaf attribute must also have their own (overriding)
copy of all branches leading to that leaf. This means that when you do:
 
  &BRANCH parent = a branch
  &BRANCH`LEAF parent = a leaf
  &BRANCH`LEAF child = a new leaf
 
In this case, a new BRANCH attribute will be created on the child,
so '-[get(child/BRANCH)]-' will return '--'. This may not be what
you actually want.
 
If a branch on the parent is set no_inherit, it will not be inherited,
regardless of any other flags that may be present. If a branch is
inherited, the child object can not loosen any access restrictions to
inherited attributes that are set by the parent (although it may loosen
access restrictions to its own attributes on the same branch). The child
object may impose stricter restrictions, however, and these may prevent
access to inherited parent data.
ATTRIB-OWNERSHIP
  ATTRIBUTE OWNERSHIP
  
  The latest person to set an attribute on an object is the owner of that 
  attribute. If you lock an attribute, using the @atrlock command, only 
  the person who owns the attribute will be able to alter the attribute. 
  This allows you to create standard commands on objects and then @chown 
  them to others without letting them alter them.
 
  Attribute ownership is NOT changed when the object itself is @chown'ed. 
  To change attribute ownership, you must use the @atrchown command.
 
  You must control an object in order to set attributes on it.
 
See also: @atrlock, @atrchown, ATTRIBUTES
ATTRIB_SET()
  attrib_set(<object>/<attrib>[, <value>])
 
  Sets or clears an attribute. With a <value>, it sets the attribute,
  without one, it clears the attribute. This is an easier-to-read
  replacement for the old set(<object>, <attrib>:<value>) notation,
  and a less destructive replacement for wipe() that won't destroy
  entire attribute trees in one shot.
 
  If there is a second argument, then attrib_set() will create an
  attribute, even if the second argument is empty (in which case
  attrib_set() will create an empty attribute).  If the empty_attrs
  configuration option is off, the attribute will be set to a single
  space. This means that attrib_set(me/foo,%0) will _always_
  create an attribute.
 
See also: set(), @set
ATTRIBUTE FLAGS
  Attribute flags are set on an object's attributes using @set, or applied
  to attributes globally using @attribute. Their names (and, when applicable,
  the character used in examine as shorthand for the flag) are shown below.
  
  These attribute flags restrict access, and are inherited down attribute
  trees (if FOO is no_command, FOO`BAR is automatically no_command too):
 
  no_command ($)    Attribute won't be checked for $-commands or 
                    ^-listen patterns.
  no_inherit (i)    Attribute will not be inherited by the children of
                    this object.
  no_clone (c)      Attribute will not be copied if the object is @clone'd.
  mortal_dark (m)   Attribute cannot be seen by mortals. This flag can only
                    be set by royalty and wizards. "hidden" is a synonym.
  wizard (w)        Attribute can only be set by wizards.
                    This flag can only be set by royalty and wizards.
  veiled (V)        Attribute value won't be shown on default examine, but 
                    is still otherwise accessible (for spammy attribs).
  nearby (n)        Even if the attribute is visual, it can only be retrieved
                    if you're near the object (see 'help nearby()').
  locked (+)        Attribute is locked with @atrlock.
  safe (S)          Attribute can't be modified without unsetting this flag.
 
  Continued in 'help attribute flags2'
ATTRIBUTE FLAGS2
  These attribute flags grant access. They are not inherited down attribute
  trees, and must be set on a branch attribute as well as a leaf to take 
  effect (to make FOO`BAR visual, FOO must be visual too):
  
  visual (v)        Attribute can be seen by anyone via get(), eval(),
                    ufun(), zfun(), and similar functions.
  public (p)        This attribute can be evaluated by any object, even
                    if safer_ufun is in use. DANGEROUS! AVOID!
 
  These attribute flags alter the way attributes are used in commands and
  ^-listens. They always only affect the attribute they're set on, regardless
  of attribute trees:
 
  debug (b)         Start showing debug output while this attr is evaluated.
  no_debug (B)      Stop showing debug output when this attr is evaluated
  regexp (R)        Match $-commands and ^-listens using regular expressions.
                    See 'help regexps'.
  case (C)          Match $-commands and ^-listens case sensitively.
  nospace (s)       Attribute won't add a space after the object name in 
                    @o-* messages. See 'help verbs'.
  noname (N)        Attribute won't show name in @o-* messages.
 
  Continued in 'help attribute flags3'
ATTRIBUTE FLAGS3
  aahear (A)        ^-listens on this attribute match like @aahear
  amhear (M)        ^-listens on this attribute match like @amhear
  prefixmatch       When set with @<attrib>, this attribute will be matched
                    down to its unique prefixes. This flag is primarily used
                    internally, but also useful in @attribute/access.
                    
  These attribute flags are only used internally. They cannot be set, but
  seen on 'examine' and flags()/lflags(), tested for with hasflag(), etc:
  branch (`)        This attribute is a branch. See: help ATTRIBUTE TREES
  
See also: @set, @attribute, ATTRIBUTE TREES
ATTRIBUTE FUNCTIONS
  The primary purpose of these functions is to access or alter information
  stored in attributes on objects.
 
  aposs()        attrib_set()   default()      edefault()     eval()
  flags()        get()          grep()         grepi()        hasattr()
  hasattrp()     hasattrval()   lattr()        lflags()       nattr()
  obj()          pfun()         poss()         reglattr()     regrep()       
  regrepi()      regxattr()     set()          subj()         udefault()     
  ufun()         ulambda()      uldefault()    ulocal()       v()            
  wildgrep()     wildgrepi()    xattr()        xget()         zfun()
 
See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES
ATTRIBUTE LIST
  Attributes with (*) after them are special, cannot be set by
  players, and may only be visible to wizards or admin. For those
  attributes, there is no @-command, so you can just type 'help
  <attribute name>' for help.  For all other attributes, type 'help
  @<attribute name>' for help.
 
Standard Attributes: (see @list/attribs for the complete list)
  AAHEAR        ACLONE        ACONNECT      ADEATH        ADESCRIBE
  ADISCONNECT   ADROP         AEFAIL        AENTER        AFAILURE
  AHEAR         ALEAVE        ALFAIL        AMHEAR        AMOVE
  APAYMENT      ASUCCESS      AWAY          CHARGES       COST 
  DEATH         DESCRIBE      DROP          EALIAS        EFAIL         
  ENTER         FAILURE       FORWARDLIST   HAVEN         IDESCRIBE     
  IDLE          LALIAS        LAST (*)      LASTIP (*)    LASTLOGOUT(*) 
  LASTSITE (*)  LEAVE         LFAIL         LISTEN        MOVE          
  ODEATH        ODESCRIBE     ODROP         OEFAIL        OENTER        
  OFAILURE      OLEAVE        OLFAIL        OMOVE         OPAYMENT      
  OSUCCESS      OXENTER       OXLEAVE       OXMOVE        PAYMENT       
  QUEUE (*)     RQUOTA (*)    RUNOUT        SEX           STARTUP       
  SUCCESS       TFPREFIX
 
  Continued in 'help attributes2'.
ATTRIBUTE TREES
Attributes can be arranged in a hierarchical tree; these are called
"attribute trees", and a conceptually similar to the way that
files and directories/folders are organized on computer filesystems.
Attribute trees can be used to reduce spam when examining and to
provide organized control over permissions for related attributes.
 
Attribute trees use the backtick (`) character to separate their
components (much as filesystems use / or \). For example, the
following attribute name would be a couple levels down in its tree:
 
  CHAR`SKILLS`PHYSICAL
 
Attribute names may not start or end with the backtick, and may not
contain two backticks in a row.
 
All attributes are either branch attributes or leaf attributes.
A branch attribute is an attribute that has other branches or leaves
beneath it; a leaf attribute is one that does not. Any attribute may
act as a branch. If you try to create an unsupported leaf, branch
attributes will be created as needed to support it.
 
See 'help attribute trees2' for more information and examples.
 
ATTRIBUTE TREES2
Attribute trees provide two immediate benefits. First, they reduce
spam when examining objects. The usual * and ? wildcards for attributes
do not match the ` character; the new ** wildcard does. Some
examples of using examine:
   examine obj              displays top-level attributes (plus object header)
   examine obj/*            displays top-level attributes
   examine obj/BRANCH`      displays only attributes immediately under BRANCH
   examine obj/BRANCH`*     displays only attributes immediately under BRANCH
   examine obj/BRANCH`**    displays entire tree under BRANCH
   examine obj/**           displays all attributes of object
 
The same principles apply to lattr(). @decompile obj is a special case,
and displays all attributes.
 
Branch attributes will be displayed with a ` in the attribute flags
on examine. 
 
See 'help attribute trees3' for more information and examples.
 
ATTRIBUTE TREES3
The second benefit of attributes trees is convenient access control.
Attribute flags that restrict attribute access or execution
(no_inherit, no_command, mortal_dark, wizard) propagate down
attribute trees, so if a branch is set mortal_dark, mortals can
not read any of its leaves or subbranches either.
 
Attribute flags that grant access (e.g. visual) do NOT propagate down
trees.
 
These properties make attribute trees ideal for data attributes:
  &DATA bank = Data for each depositor is stored here, by dbref
  @set bank/DATA = no_command
  &DATA`#30 bank = $2000 savings:$1000 loan @ 5%
  ...
 
They're also handy for things like character attributes:
  @attribute/access CHAR = wizard mortal_dark no_clone no_inherit
  &CHAR #30 = Character data
  &CHAR`SKILLS #30 = coding:3 documentation:1 obfuscation:5
  ...
 
See 'help attribute trees4' for information about @parent and attribute trees.
 
ATTRIBUTE TREES4
Attribute trees interact with @parent in several ways.
 
As usual, children inherit attributes from their parent unless the
child has its own overriding attribute. However, children that wish
to override a leaf attribute must also have their own (overriding)
copy of all branches leading to that leaf. This means that when you do:
 
  &BRANCH parent = a branch
  &BRANCH`LEAF parent = a leaf
  &BRANCH`LEAF child = a new leaf
 
In this case, a new BRANCH attribute will be created on the child,
so '-[get(child/BRANCH)]-' will return '--'. This may not be what
you actually want.
 
If a branch on the parent is set no_inherit, it will not be inherited,
regardless of any other flags that may be present. If a branch is
inherited, the child object can not loosen any access restrictions to
inherited attributes that are set by the parent (although it may loosen
access restrictions to its own attributes on the same branch). The child
object may impose stricter restrictions, however, and these may prevent
access to inherited parent data.
ATTRIBUTES
  Attributes with (*) after them are special, cannot be set by
  players, and may only be visible to wizards or admin. For those
  attributes, there is no @-command, so you can just type 'help
  <attribute name>' for help.  For all other attributes, type 'help
  @<attribute name>' for help.
 
Standard Attributes: (see @list/attribs for the complete list)
  AAHEAR        ACLONE        ACONNECT      ADEATH        ADESCRIBE
  ADISCONNECT   ADROP         AEFAIL        AENTER        AFAILURE
  AHEAR         ALEAVE        ALFAIL        AMHEAR        AMOVE
  APAYMENT      ASUCCESS      AWAY          CHARGES       COST 
  DEATH         DESCRIBE      DROP          EALIAS        EFAIL         
  ENTER         FAILURE       FORWARDLIST   HAVEN         IDESCRIBE     
  IDLE          LALIAS        LAST (*)      LASTIP (*)    LASTLOGOUT(*) 
  LASTSITE (*)  LEAVE         LFAIL         LISTEN        MOVE          
  ODEATH        ODESCRIBE     ODROP         OEFAIL        OENTER        
  OFAILURE      OLEAVE        OLFAIL        OMOVE         OPAYMENT      
  OSUCCESS      OXENTER       OXLEAVE       OXMOVE        PAYMENT       
  QUEUE (*)     RQUOTA (*)    RUNOUT        SEX           STARTUP       
  SUCCESS       TFPREFIX
 
  Continued in 'help attributes2'.
ATTRIBUTES LIST
  Attributes with (*) after them are special, cannot be set by
  players, and may only be visible to wizards or admin. For those
  attributes, there is no @-command, so you can just type 'help
  <attribute name>' for help.  For all other attributes, type 'help
  @<attribute name>' for help.
 
Standard Attributes: (see @list/attribs for the complete list)
  AAHEAR        ACLONE        ACONNECT      ADEATH        ADESCRIBE
  ADISCONNECT   ADROP         AEFAIL        AENTER        AFAILURE
  AHEAR         ALEAVE        ALFAIL        AMHEAR        AMOVE
  APAYMENT      ASUCCESS      AWAY          CHARGES       COST 
  DEATH         DESCRIBE      DROP          EALIAS        EFAIL         
  ENTER         FAILURE       FORWARDLIST   HAVEN         IDESCRIBE     
  IDLE          LALIAS        LAST (*)      LASTIP (*)    LASTLOGOUT(*) 
  LASTSITE (*)  LEAVE         LFAIL         LISTEN        MOVE          
  ODEATH        ODESCRIBE     ODROP         OEFAIL        OENTER        
  OFAILURE      OLEAVE        OLFAIL        OMOVE         OPAYMENT      
  OSUCCESS      OXENTER       OXLEAVE       OXMOVE        PAYMENT       
  QUEUE (*)     RQUOTA (*)    RUNOUT        SEX           STARTUP       
  SUCCESS       TFPREFIX
 
  Continued in 'help attributes2'.
ATTRIBUTES2
  An attribute is part of the code on an object that makes it
  unique. An attribute can contain any sort of text -- from a single
  word, to a long paragraph, to a piece of MUSHcode. Some attributes
  are standard in PennMUSH. That means that their effects are pre-set.
 
  Standard attributes can be set using one of the following commands:
    @<attribute name> <object>=<content>
    @set <object>=<attribute name>:<content>
    &<attribute name> <object>=<content>
 
  It is also possible to have non-standard attributes, which can be
  named anything you like. Please see 'help NON-STANDARD ATTRIBUTES'
  for more information on those.
 
  Continued in 'help attributes3'.
ATTRIBUTES3
  Any attribute name can be shortened, but a shorter forms run the
  risk of conflicting with other attribute names.  This could result
  in you setting an unwanted attribute.
 
  For example:
    @adesc me=think %N looks at you.
  will set your ADESCRIBE attribute just as
    @adescribe me=think %N looks at you.
  would.
 
  To see the attributes that are set on you or on any of the objects
  you own, you should use the "examine" command. See 'help examine'.
  
  Continued in 'help attributes4'.
ATTRIBUTES4
  Attributes can be owned by someone other than the object they are
  set on.  This allows the person to change the content of just that
  attribute while not the rest of the object. Attributes can also be
  locked, which prevents them from being changed by anyone.
 
  In addition to the standard attributes with pre-set effects, there
  are some special attributes that date from the days before you could
  set non-standard attributes with any name you wanted. These are the
  attributes VA-VZ, WA-WZ, XA-XZ. These attributes have no pre-set
  effects, and were just to allow players to store any text or
  MUSHcode that they wished in those attributes. Now that non-standard
  attributes are available, it is highly recommended that you instead
  use them, since you can use longer and descriptive names for
  attributes, which makes it much easier to examine and work on
  objects.
 
See also: ATTRIB-OWNERSHIP, @set, examine, @atrchown, @atrlock,
  hasattr(), get(), v(), NON-STANDARD ATTRIBUTES, SETTING-ATTRIBUTES,
  ATTRIBUTE TREES
 
ATTRPCNT()
  nattr(<object>[/<attribute pattern>])
  nattrp(<object>[/<attribute pattern>])
  regnattr(<object>[/<regexp>])
  regnattrp(<object>[/<regexp>])
 
  nattr() returns the number of attributes on <object> that you can see
  which match the given <attribute pattern>. It is considerably faster than
  words(lattr()) and doesn't suffer from buffer length constraints. It's 
  designed primarily for statistical purposes. <attribute pattern> defaults
  to "*", which does not include branches in attribute trees; use "**" if
  you need to count attribute trees.  
  
  regnattr() matches attribute names against the regular expression <regexp>.
 
  nattrp() and regnattrp() also count matching attributes on the parent.
  
  attrcnt() and attrpcnt() are aliases for nattr() and nattrp() respectively.
 
See also: lattr(), hasattr(), xattr(), wildcards
AUDIBLE
  Flag:  AUDIBLE  (all types)
 
  Objects which are set AUDIBLE forward sound in a number of ways. Only 
  sound passing the object's @filter, and its @lock/filter, is forwarded.
  The lock receives the sound heard as %0. The forwarded sound is always 
  prefixed with the object's @prefix.
  
  If an AUDIBLE object has an @forwardlist attribute set, sound heard by the
  object is forwarded to the objects listed in the @forwardlist. See 'help
  @forwardlist' for more information.
  
  When a THING is set AUDIBLE, any sound made inside it is broadcast to other
  objects in its location. This is useful for coding vehicles. Only sound 
  passing the @filter is broadcast, and is prefixed with the thing's @prefix,
  or "From [name(<thing>)], " if no @prefix is set.
  
  Setting the AUDIBLE flag on a ROOM activates audible exits in that room.
  EXITs which are set AUDIBLE propagate sound from their source room to their 
  destination, prefixed with the exit's @prefix, or "From
  [name(home(<exit>))], " if no @prefix is set.
  
See also: @forwardlist, @filter, @prefix
BAND()
  band(<integer>, <integer>[, ... , <integerN>])
 
  Does a bitwise AND of all its arguments, returning the result (a
  number with only the bits set in every argument set in it).
  
See also: BITWISE FUNCTIONS
BASECONV()
  baseconv(<number>, <from base>, <to base>)
 
  Converts <number>, which is in base <from base> into base <to base>.
  The bases can be between 2 (binary) and 64, inclusive.
 
  Numbers 36 and under use the standard numbers:
 
  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
  All bases over 36 use base64 url string:
 
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
 
  In base 63 and base 64, - is always treated as a digit.
  Using base64 as a 'from' will also treat + as 62 and / as 63.
BEEP()
  beep([<number>])
 
  Returns <number> "alert" bell characters. <number> must be in the
  range 1 to 5, or, if unspecified, defaults to 1.  This function may
  only be used by royalty and wizards.
 
BEFORE()
  before(<string1>, <string2>)
 
  Returns the portion of <string1> that occurs before <string2>. If <string2>
  isn't in <string1>, <string1> is returned. This is case-sensitive.
 
  Examples:
     > say before(foo bar baz,bar)
     You say, "foo"
     > say before(foo bar baz,r)
     You say, "foo ba"
     > say before(foo bar baz,a)
     You say, "foo b"
 
See also: after(), first()
BEING KILLED
 
  Getting killed is no big deal. If you are killed, you return to your
  home, and all things you carry return to their homes. You also
  collect 50 pennies in insurance money (unless you have >= 10000
  pennies or you were killed via the Wizard slay command). See
  'MONEY'.  Generally, killing is not encouraged unless absolutely
  necessary.  It can be extremely rude and annoying.
 
  Many MUSHes choose to disable the kill command.
 
See also: kill, slay, @death
BENCHMARK()
  benchmark(<expression>, <number>[, <sendto>])
 
  Evaluates <expression> <number> times, and returns the average, minimum,
  and maximum time it took to evaluate <expression> in microseconds. If a
  <sendto> argument is given, benchmark() instead pemits the times to the
  object <sendto>, and returns the result of the last evaluation of 
  <expression>.
 
  Example:
    > think benchmark(iter(lnum(1,100), ##), 200)
    Average: 520.47   Min: 340   Max: 1382
    > think benchmark(iter(lnum(1,100), %i0), 200)
    Average: 110.27   Min: 106   Max: 281
BITWISE FUNCTIONS
  These functions treat integers as a sequence of binary bits (either 0
  or 1) and manipulate them.
 
  For example, 2 is represented as '0010' and 4 as '0100'. If these
  two numbers are bitwise-or'ed together with BOR(), the result is 6,
  or (in binary) '0110'. These functions are useful for storing small
  lists of toggle (Yes/No) options efficiently.
 
  baseconv()    band()        bnand()       bnot()        bor()
  bxor()        shl()         shr()
 
BNAND()
  bnand(<integer1>, <integer2>)
 
  Returns <integer1> with every bit that was set in <integer2> cleared.
 
See also: BITWISE FUNCTIONS
BNOT()
  bnot(<integer>)
 
  Returns the bitwise complement of <integer>. Every bit set in it
  is cleared, and every clear bit is set.
 
See also: BITWISE FUNCTIONS
BOOLEAN FUNCTIONS
  Boolean functions all return 0 or 1 as an answer.
 
  Your MUSH may be configured to use traditional PennMUSH booleans, in
  which case non-zero numbers, non-negative db#'s, and strings are all
  considered "true" when passed to these functions.  Alternatively,
  your MUSH may be using TinyMUSH 2.2 booleans, in which case only
  non-zero numbers are "true". Check @config tiny_booleans.
 
  and()         cand()        cor()         eq()          gt()
  gte()         lt()          lte()         nand()        neq()
  nor()         not()         or()          t()           xor()
 
See also: BOOLEAN VALUES, @config
BOOLEAN VALUES
 
  A boolean variable, for those of you not familiar with programming,
  is a variable that is either true or false. Normally, a value of 1
  is considered "true" and a value of 0 is considered "false". Many
  MUSH functions return either 1 if they are true or 0 if false.  For
  example, the hasflag() function tests to see if an object has a
  certain flag set on it. If hasflag(<object>,<flag name>) is true
  (the object has the flag), it will return 1. If it is false, it will
  return 0.
 
  Other functions expect to operate on boolean values. What they
  consider "true" or "false", however, depends on the setting of the
  "tiny_booleans" config option (@config tiny will show this).
 
  Continued in 'help boolean2'.
BOOLEAN2
  If tiny_booleans is...
  no                       FALSE: null string, 0, any negative db
                           TRUE:  everything else
  yes                      TRUE:  numbers other than 0
                                  strings beginning with numbers other than 0
                           FALSE: everything else 
  
  Or, put another way:
  Value                 tiny_booleans=no        tiny_booleans=yes  Gotcha
  0                     FALSE                   FALSE
  non-zero number       TRUE                    TRUE 
  #<non-negative>       TRUE                    FALSE               *
  #<negative>           FALSE                   FALSE                
 
  null string           FALSE                   FALSE
  0<non-numbers..>      TRUE                    FALSE               *
  <non-numbers...>      TRUE                    FALSE               *
 
  Continued in 'help boolean3'.
BOOLEAN3
 
  Examples (assuming tiny_booleans is "no"):     
    not(foo) = 0  
    not(<null string>) = 1
    not(-66) = 0
    not(0) = 1
    not(#-1) = 1
    not(#12) = 0
  And so on...
  (note: These rules only apply when a function expects a Boolean
  value, not for strings that expect other values.)
 
See also: BOOLEAN FUNCTIONS, not(), t()
BOOT POWER
 
  Objects with the Boot power can @boot other players from the MUSH. Wizards
  have the power implicitly.
  
See also: @boot
BOR()
  bor(<integer>, <integer>[, ... , <integerN>])
 
  Does a bitwise OR of all its arguments, returning the result.
  (A number with a bit set if that bit appears in any of its arguments).
  
See also: BITWISE FUNCTIONS
BOUND()
  bound(<number>, <lower bound>, <higher bound>)
 
  bound() returns <number> if it is between <lower bound> and <higher
  bound>. If it's lower than <lower bound>, <lower bound> is returned.
  If it's higher than <higher bound>, <higher bound> is returned.
  
See also: ceil(), floor(), round(), trunc()
BRACKETS()
  brackets(<string>)
 
  Returns a count of the number of left and right square brackets,
  parentheses, and curly braces in the string, in that order, as a
  space-separated list of numbers. This is useful for finding missing
  or extra brackets in MUSH code. <string> is evaluated.
 
  Example:
    > @desc me=This is [ansi(h,a test)] of the { brackets() function.
    > think brackets(v(desc))
    1 1 2 2 1 0
BRIEF
  brief <object> 
 
  This command works like an abbreviated version of examine. It does not
  print out all the attributes on the object. 
 
See also: examine
BUILDER
  BUILDER 
 
  On some MUSHes, building (@dig, @open, and sometimes @create) is restricted
  to those with the BUILDER @power. You can check to see if building is
  restricted on a MUSH with '@command @dig', etc.
 
See also: POWERS, @power, @dig, @open, @create
BUILDER POWER
 
  The Builder power has no built-in meaning, but many MUSHes choose to
  restrict building and/or object creation to objects with this power.
  
See also: @dig, @open, @create, @link, PLAYER_CREATE POWER
BUY
  buy <item>[ from <vendor>][ for <cost>]
 
  When you try buying an item, PRICELIST attributes on nearby objects
  (or <vendor> if given) will be checked for matching item:costs. If <cost>
  is given, the first item that matches that cost will be purchased.
  Otherwise, the first matching item that you can afford will be purchased.
  You must pass the vendor's @lock/pay in order to purchase items.
 
  If the pricelist match contains a list of prices, ITEM:30,20,10, the first
  one you can afford will be the resulting price.
 
  Example:
    > @PRICELIST vendor=coke:20 pepsi:20
    > &drink`coke vendor=You enjoy a delicious coke.
    > &drink`pepsi vendor=It tastes like a funny coke.
    > @BUY vendor=u(drink`%0)
    > buy coke
    You enjoy a delicious coke.
 
See also: @BUY, @PRICELIST, give, @COST
BXOR()
  bxor(<integer>, <integer>[, ... , <integerN>])
 
  Does a bitwise XOR of all its arguments, returning the result.
  (A number with a bit set if it's set in only one of its arguments).
  
See also: BITWISE FUNCTIONS
CALLER
  The caller is the object which causes an attribute to be evaluated (for
  instance, by using ufun() or a similar function). The substitution %@ 
  evaluates to the caller's dbref. It's particularly useful for functions
  with side-effects, to check that the object evaluating the function has
  permission.
  
  Example:
    > &cmd_test Foo=$test: @emit ufun(Bar/fun_test)
    > &fun_test Bar=%n(%#) typed 'test', and [name(%@)](%@) ufun()'d this!
    > test
    Mike(#5) typed 'test', and Foo(#6) ufun()'d this!
    
    > &wizfun Foo=if(hasflag(%@, Wizard), ufun(wizfun2), #-1 Sorry)
    
See also: ENACTOR, EXECUTOR
CAN_DARK POWER
 
  Objects with this power can set themselves DARK, and use the "cd" command
  at the connection screen to connect set dark.
  
See also: DARK, @hide, HIDE POWER
CAN_SPOOF POWER
 
  The Can_Spoof power lets you use the @ns*emit commands and ns*emit()
  functions, which show messages without nospoof information. It also lets
  you use the /spoof switch to various @*emit commands, which shows nospoof
  information as the enactor rather than the executor. Wizards have this
  power implicitly.
  
See also: @nspemit, @pemit
CAND()
  and(<boolean1>, <boolean2>[, ... , <booleanN>])
  cand(<boolean1>, <boolean2>[, ... , <booleanN>])
 
  These functions take any number of boolean values, and return 1 if
  all are true, and 0 otherwise. and() will always evaluate all its
  arguments (including side effects), while cand() stops evaluation
  after the first false argument.
 
See also: BOOLEAN VALUES, nand(), or(), xor(), not()
CAPSTR()
  capstr(<string>)
  
  Returns <string> with the first character capitalized.
 
  Example:
    > think capstr(foo bar baz)
    Foo bar baz
 
See also: lcstr(), ucstr()
CASE()
  switch(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
  switchall(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
  case(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
  caseall(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
 
  These functions match <string> against the <expr>essions, returning
  the corresponding <list>. If nothing is matched, the <default> is returned.
  switch() and case() return the <str> for the first matching <expr>, while 
  switchall() and caseall() return the corresponding <list> for all <expr>s
  which match.
 
  switch() and switchall() use wildcard and lt/gt <expr>s, as described in 
  'help switch wildcards'. case() and caseall() do a case-sensitive exact 
  match, like member() or comp(). In this case, $0-$9 will be set to the text
  that the nth wildcard character met.
 
  If the string "#$" appears in the <list> to be evaluated, it will be 
  replaced with the evaluated value of <str> /before/ evaluation of 
  <list>. This is not done in case() and caseall(), for TinyMUSH 3
  compatibility. Note that this replacement happens before evaluation, which
  makes it unsafe when <str> contains user input, and makes it unsuitable for
  use in nested switch()es. It is strongly recommended you use the %$<n>
  substitution or stext() function instead, which solves these problems.
  
  See 'help switch2' for examples.
 
See also: reswitch(), stext(), slev(), if(), cond(), firstof()
CASEALL()
  switch(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
  switchall(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
  case(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
  caseall(<str>, <expr1>, <list1>[, ... , <exprN>, <listN>][, <default>])
 
  These functions match <string> against the <expr>essions, returning
  the corresponding <list>. If nothing is matched, the <default> is returned.
  switch() and case() return the <str> for the first matching <expr>, while 
  switchall() and caseall() return the corresponding <list> for all <expr>s
  which match.
 
  switch() and switchall() use wildcard and lt/gt <expr>s, as described in 
  'help switch wildcards'. case() and caseall() do a case-sensitive exact 
  match, like member() or comp(). In this case, $0-$9 will be set to the text
  that the nth wildcard character met.
 
  If the string "#$" appears in the <list> to be evaluated, it will be 
  replaced with the evaluated value of <str> /before/ evaluation of 
  <list>. This is not done in case() and caseall(), for TinyMUSH 3
  compatibility. Note that this replacement happens before evaluation, which
  makes it unsafe when <str> contains user input, and makes it unsuitable for
  use in nested switch()es. It is strongly recommended you use the %$<n>
  substitution or stext() function instead, which solves these problems.
  
  See 'help switch2' for examples.
 
See also: reswitch(), stext(), slev(), if(), cond(), firstof()
CAT()
  cat(<string>[, ... , <stringN>])
  strcat(<string1>[, ... , <stringN>])
 
  These functions concatenate multiple strings together. cat() adds a space
  between each string; strcat() does not.
  
  Example:
    > say cat(foo bar, baz blech)
    You say, "foo bar baz blech"
    > say strcat(foo bar, baz blech)
    You say, "foo barbaz blech"
CBUFFER()
  cdesc(<channel>)
  cusers(<channel>)
  cmsgs(<channel>)
  cbuffer(<channel>)
 
  Return the description (@channel/describe), number of users, number of
  messages in the recall buffer, or buffer size of <channel>, respectively.
  This information is also displayed in @channel/list and @channel/what.
 
See also: cbufferadd(), crecall()
CBUFFERADD()
  cbufferadd(<channel>, <text>[, <spoof>])
 
  Adds text to a channel buffer without broadcasting it to all people on
  the channel. If <spoof> is true, it will spoof the enactor (%#).
 
  This function is only usable by objects that pass the channel's @clock/mod,
  and who can use the @cemit command (or @nscemit if <spoof> is true).
  
See also: crecall(), cbuffer(), @channel/recall, @channel/buffer
CD
  cd <name> <password>
  ch <name> <password>
  cv <name> <password>
 
  Not really MUSH commands, but commands available at the connect screen.
  Wizards can use 'cd' instead of 'connect'; the new connection will be
  hidden (as per @hide), and the player will be set DARK. Mortals set
  HEAR_CONNECT will not hear dark wizards connect.
  
  Wizards, Royalty, and those with the Hide @power can use 'ch' to connect
  with the new connection hidden (as per @hide).
  
  Connecting using 'cv' causes the Dark flag to be cleared prior to
  connection messages being broadcast.
  
  None of those commands affect the hidden status of other connections, if
  you're reconnecting.
  
  See also: DARK, @hide
CDESC()
  cdesc(<channel>)
  cusers(<channel>)
  cmsgs(<channel>)
  cbuffer(<channel>)
 
  Return the description (@channel/describe), number of users, number of
  messages in the recall buffer, or buffer size of <channel>, respectively.
  This information is also displayed in @channel/list and @channel/what.
 
See also: cbufferadd(), crecall()
CEIL()
  ceil(<number>)
 
  Returns the least integral value greater than or equal to <number>.
 
See also: floor(), bound(), round(), trunc()
CEMIT()
  @cemit[/nosiy|/silent][/noeval] <channel>=<message>
  @nscemit[/nosiy|/silent][/noeval] <channel>=<message>
  cemit(<channel>, <message>[, <noisy>])
  nscemit(<channel>, <message>[, <noisy>])
 
  @cemit emits <message> on <channel>. It does not include your name. The
  channel prefix is included if the /noisy switch is given, and omitted if
  /silent is given - if neither is given, the default behaviour is controlled
  by the noisy_cemit @config option. The /noeval switch prevents <message> 
  from being evaluated.
  
  You must be able to speak on the channel, or have the See_All and Pemit_All
  @powers, to @cemit on the channel.
 
  @nscemit is exactly the same, but does not produce nospoof information when
  used by players with the Can_spoof @power.
 
  cemit() and nscemit() work the same as @cemit/silent and @nscemit/silent,
  respectively. If <noisy> is given as a true value, they work like
  @cemit/noisy and @nscemit/noisy, respectively, instead.
 
  @cemit is intended for use in writing extended chat systems. 
 
See also: @chat
CENTER()
  center(<string>, <width>[, <fill>[, <rightfill>]])
 
  This function will center <string> within a field <width> characters
  wide, using the <fill> string for padding on the left side of the
  string, and <rightfill> for padding on the right side. <rightfill>
  defaults to the mirror-image of <fill> if not specified. <fill>
  defaults to a space if neither <fill> nor <rightfill> are specified.
 
  If <string> divides <width> into uneven portions, the left side will
  be one character shorter than the right side.
 
  Examples:
    > say center(X,5,-)
    You say, "--X--"
 
    > say center(X,5,-=)
    You say, "-=X=-"
 
    > say center(.NEAT.,15,-,=)
    You say, "----.NEAT.====="
 
    > say center(hello,16,12345)
    You say, "12345hello543215"
 
See also: align(), ljust(), rjust()
CFLAGS()
  cflags(<channel>)
  cflags(<channel>, <object>)
  clflags(<channel>)
  clflags(<channel>, <object>)
 
  With one argument, cflags() returns a list of priv flags set on the given
  channel, represented as a string of characters. See 'help @channel privs'
  for the list. You must be able to see the channel to use this function.
 
  With two arguments, cflags() returns a list of flags for that object on 
  that channel, currently a string consisting of zero or more of "G" (Gag),
  "Q" (Quiet), "H" (Hide) and "C" (Combine). You must be able to see that
  channel and to examine the object to use this function. If the object is
  not on the channel, an error is returned.
 
  The clflags() versions return a space-separated list of flag names,
  rather than a string of flag characters.
  
See also: cstatus()
CH
  cd <name> <password>
  ch <name> <password>
  cv <name> <password>
 
  Not really MUSH commands, but commands available at the connect screen.
  Wizards can use 'cd' instead of 'connect'; the new connection will be
  hidden (as per @hide), and the player will be set DARK. Mortals set
  HEAR_CONNECT will not hear dark wizards connect.
  
  Wizards, Royalty, and those with the Hide @power can use 'ch' to connect
  with the new connection hidden (as per @hide).
  
  Connecting using 'cv' causes the Dark flag to be cleared prior to
  connection messages being broadcast.
  
  None of those commands affect the hidden status of other connections, if
  you're reconnecting.
  
  See also: DARK, @hide
CHAN_USEFIRSTMATCH
  Flag:  CHAN_USEFIRSTMATCH  (any type)
 
  Normally, when an object attempts to speak on the channel system with
  @chat, using an ambiguous channel name produces an error message. With
  this flag set, it will instead speak on the first channel whose name is
  a match. Other commands in the chat system are not affected by the flag.
 
See also: CHAT, @chat, @cemit
CHANGES
This is a list of changes in this patchlevel which are probably of
interest to players. More information about new commands and functions
can probably be gotten via 'help <name of whatever>'. 'help credits'
lists the [initials] of developers and porters that are used in the list 
of changes.
 
Information about changes in prior releases can be found under
help topics named for each release (e.g. 'help 1.7.2p30').
A list of the patchlevels associated with each release can
be read in 'help patchlevels'.
 
Version 1.8.5 patchlevel 3                                 Aug 23, 2012
 
Fixes:
 * Fix a crash bug in new color code. Discovered by ChaosMageX. Intrevis, [SW].
 
Functions:
 * name() with no arguments is now an error. It should always have been, but
   previously returned nothing for backwards compatability. If you still have
   code that relies on that behaviour, you are extremely lazy and should be
   ashamed of yourself. [MG]
 
CHANNEL FUNCTIONS
  Channel functions work with the channel system.
 
  cbuffer()     cbufferadd()  cdesc()       cemit()       cflags()
  channels()    clflags()     clock()       cmogrifier()  cmsgs()
  cowner()      crecall()     cstatus()     ctitle()      cusers()
  cwho()        nscemit()
 
See also: CHAT, @channel, @cemit, @clock
CHANNEL-LIST
Here's the legend for reading the @channel/list output:
 
Channel Name               Num Users Num Msgs  Access Locks     Status   Buf
Sample                             1        0 [DPTWQHo jsmvh*] [On  QHC]   4
                                               ||||||| ||||||   |   |||    |
Channel is DISABLED----------------------------/|||||| ||||||   |   |||    |
Channel allows PLAYERS--------------------------/||||| ||||||   |   |||    |
Channel allows THINGS----------------------------/|||| ||||||   |   |||    |
Channel is Wizard-only (W) or Admin-only (A)------/||| ||||||   |   |||    |
Channel is QUIET-----------------------------------/|| ||||||   |   |||    |
Channel is HIDE_OK----------------------------------/| ||||||   |   |||    |
Channel is OPEN (non-members can speak on it)--------/ ||||||   |   |||    |
Channel has @clock/join set----------------------------||||||   |   |||    |
Channel has @clock/speak set----------------------------/||||   |   |||    |
Channel has @clock/mod set-------------------------------/|||   |   |||    |
Channel has @clock/see set--------------------------------/||   |   |||    |
Channel has @clock/hide set--------------------------------/|   |   |||    |
Player is the owner of the channel--------------------------/   |   |||    |
Player is currently on/off/gagging the channel------------------/   |||    |
If on, player has the channel muted---------------------------------/||    |
If on, player is hiding on the channel-------------------------------/|    |
If on, player has @channel/combined the channel-----------------------/    |
Size of the channel buffer in full-length lines----------------------------/
CHANNEL-PRIVS
  The <privs> for @channel/add and @channel/privs should be a space-separated
  list of priv names, or a string of priv chars, from the list below:
 
  * "player" (P) - players may use the channel
  * "object" (O) - non-players may use the channel
  * "admin" (A) - only royalty/wizards/chat_privs may use the channel
  * "wizard" (W) - only wizards may use the channel
  * "quiet" (Q) - channel will not show connection messages
  * "open" (o) - you may speak even if you aren't listening to the channel
  * "hide_ok" (H) - you may hide from the channel who list
  * "notitles" (T) - chantitles are not displayed in channel messages
  * "nonames" (N) - player names are not displayed in channel messages
  * "nocemit" (C) - @cemit is prohibited on the channel
  * "interact" (I) - Interaction rules (defined in local.c) are applied to 
    the channel
  * "disabled" (D) - noone can join or speak on the channel
 
  The default privs are determined by the 'channel_flags' @config option.
 
  Example:
    > @channel/add Public=player quiet open nocemit
 
See also: cflags(), clflags()
CHANNELS
  CHAT SYSTEM
 
  PennMUSH has a built-in chat system which allows you to speak to other
  players who are on the same channel without needing to be in the same room
  as them. It supports a large number of channels which can be customized and
  restricted in various ways.
 
  Many of the chat system commands take a <channel> argument; you don't need
  to enter the entire channel name, only as many letters as needed to make it
  distinct from other channels.
 
  You can list, join, and configure channels using the @channel command.
 
  To speak on channels, use the @chat command.
 
See also: @channel, @chat, @cemit, channel functions, CHAN_USEFIRSTMATCH,
  @chatformat, @clock
CHANNELS()
  channels([<delimiter>])
  channels(<object>)
  channels(<object>[, <delimiter>])
 
  With no arguments, channels() returns the list of all channel names which
  are visible to the player. With two arguments, returns the list of channel
  names to which the object is listening, delimited by <delimiter>.
 
  With one argument, the behavior is ambiguous. If the argument matches an
  object, it returns a space-separated list of channels to which the object
  is listening. If not, it's treated as a no-argument case with a delimiter.
 
  If you can examine the object, the function returns all the channels it's
  on. Otherwise, it will only return those channels you can see that <object>
  is a member of with @channel/who.
  
See also: @channel/list, @channel/who, cwho()
CHARGES2
  
  Example:
    > @create Revolver
    > @use Revolver=You pull the trigger.
    > @ouse Revolver=pulls the trigger.
    > @charges Revolver=6
    > @ause Revolver=POSE fires into the air.
    > @runout Revolver=POSE clicks, but is out of bullets.
    
    > use revolver
    You pull the trigger.
    Revolver fires into the air.
    > ex revolver/charges
    CHARGES [#6$]: 5
    
  The next 5 "use revolver"s work the same way, decrementing CHARGES
  each time.
  
    > ex revolver/charges
    CHARGES [#6$]: 0
    > use revolver
    You pull the trigger.
    Revolver clicks, but is out of bullets.
    > ex revolver/charges
    CHARGES [#6$]: 0
CHAT
  CHAT SYSTEM
 
  PennMUSH has a built-in chat system which allows you to speak to other
  players who are on the same channel without needing to be in the same room
  as them. It supports a large number of channels which can be customized and
  restricted in various ways.
 
  Many of the chat system commands take a <channel> argument; you don't need
  to enter the entire channel name, only as many letters as needed to make it
  distinct from other channels.
 
  You can list, join, and configure channels using the @channel command.
 
  To speak on channels, use the @chat command.
 
See also: @channel, @chat, @cemit, channel functions, CHAN_USEFIRSTMATCH,
  @chatformat, @clock
CHAT MOGRIFYING
  @channel/mogrifier <channel>=<object>
 
  @channel/mogrifier sets the mogrifier object for <channel>. <object> must
  be an object that you control.
 
  Mogrifiers let you tweak every aspect of a channel's output, before it
  goes to individual players' @chatformats. 
 
  Before it begins mogrifying, three mogrifiers that alter the way chats are
  handled are run, using the same arguments as @chatformat (except that %5 is
  not set). First, <object>'s MOGRIFY`BLOCK attribute is called. If 
  MOGRIFY`BLOCK returns a non-empty string, then the resultant string is sent
  back to the player, and no message is broadcast on the channel.
  
  Next, MOGRIFY`OVERRIDE is called. If it returns a true value, player's
  individual @chatformats will not be called for the message.
  
  The MOGRIFY`NOBUFFER attribute is then called. If it returns a true value,
  the message will not be included in the channel's recall buffer.
 
  Continued in 'help mogrify2'.
CHAT SYSTEM
  CHAT SYSTEM
 
  PennMUSH has a built-in chat system which allows you to speak to other
  players who are on the same channel without needing to be in the same room
  as them. It supports a large number of channels which can be customized and
  restricted in various ways.
 
  Many of the chat system commands take a <channel> argument; you don't need
  to enter the entire channel name, only as many letters as needed to make it
  distinct from other channels.
 
  You can list, join, and configure channels using the @channel command.
 
  To speak on channels, use the @chat command.
 
See also: @channel, @chat, @cemit, channel functions, CHAN_USEFIRSTMATCH,
  @chatformat, @clock
CHAT_PRIVS POWER
 
  The Chat_Privs power allows non-wizard, non-royalty objects to use channels
  which have been restricted to 'Admin' with @channel/priv.
  
See also: @channel
CHECKPASS()
  checkpass(<player>, <string>)
 
  Returns 1 if <string> matches <player>'s password, and 0 otherwise.  If
  <player> has no password, this function will always return 1.
 
  This function can only be used by wizards.
 
See also: @password, @newpassword
CHECKSUM
  digest(list)
  digest(<algorithm>, <string>)
 
  Returns a checksum (hash, digest, etc.) of <string> using the given
  <algorithm>. The result is a unique large number represented in base
  16.
 
  Typically at least the following algorithms are supported:
 
  md4 md5 ripemd160 sha sha1 sha224 sha256 sha384 sha512 whirlpool
 
  Depending on the host's OpenSSL version and how it was configured,
  there might be more (or less) available. digest(list) returns the
  methods a particular server understands if the OpenSSL library
  version being used is recent enough (1.0.0 and higher), or '#-1
  LISTING NOT SUPPORTED' on older versions. For portable code, stick
  with MD5 and the SHA family.
 
  digest(sha, whatever) is equivalent to sha0(whatever).
 
  Example:
   > think iter(digest(list), %i0(foo) => [digest(%i0, foo)], %b, %r)
   ...
   MD4(foo) => 0ac6700c491d70fb8650940b1ca1e4b2
   MD5(foo) => acbd18db4cc2f85cedef654fccc4a4d8
   MDC2(foo) => 5da2a8f36bf237c84fddf81b67bd0afc
   RIPEMD160(foo) => 42cfa211018ea492fdee45ac637b7972a0ad6873
   SHA(foo) => 752678a483e77799a3651face01d064f9ca86779
   SHA1(foo) => 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33
   SHA224(foo) => 0808f64e60d58979fcb676c96ec938270dea42445aeefcd3a4e6f8db
   ...
  
CHILDREN()
  lsearch(<player>[, ... , <classN>, <restrictionN>])
  nlsearch(<player>[, ... , <classN>, <restrictionN>])
  lsearchr(<player>[, ... , <classN>, <restrictionN>])
  children(<object>)
  nchildren(<object>)
 
  This function is similar to the @search command, except it returns just a
  list of dbref numbers. The function must have at least three arguments. You
  can specify "all" or <player> for the <player> field; for mortals, only
  objects they can examine are included. If you do not want to restrict
  something, use "none" for <class> and <restriction>.
 
  The possible <class>es and <restriction>s are the same as those accepted
  by @search. lsearch() can accept multiple class/restriction pairs, and 
  applies them in a boolean "AND" fashion, returning only dbrefs that
  fulfill all restrictions. See 'help @search' for information about them.
 
  children() is exactly the same as lsearch([me|all], parent, <object>),
  using "all" for See_All/Search players and "me" for others.
 
  nlsearch(...) and nchildren(...) return the count of results that
  would be returned by lsearch() or children() with the same args.
    
  Continued in 'help lsearch2'.
CHOWN_OK
  Flag:  CHOWN_OK  (things, rooms, exits)
 
  You can set this flag on an object you own to allow other players to
  transfer ownership of the object to themselves (using @chown). 
  
See also: @chown
CHR()
  chr(<number>)
  ord(<character>)
 
  ord() returns the numerical value of the given character. chr()
  returns the character with the given numerical value.
 
  Examples:
    > say ord(A)
    You say, "65"
    > say chr(65)
    You say, "A"
CLFLAGS()
  cflags(<channel>)
  cflags(<channel>, <object>)
  clflags(<channel>)
  clflags(<channel>, <object>)
 
  With one argument, cflags() returns a list of priv flags set on the given
  channel, represented as a string of characters. See 'help @channel privs'
  for the list. You must be able to see the channel to use this function.
 
  With two arguments, cflags() returns a list of flags for that object on 
  that channel, currently a string consisting of zero or more of "G" (Gag),
  "Q" (Quiet), "H" (Hide) and "C" (Combine). You must be able to see that
  channel and to examine the object to use this function. If the object is
  not on the channel, an error is returned.
 
  The clflags() versions return a space-separated list of flag names,
  rather than a string of flag characters.
  
See also: cstatus()
CLIENTS
  Clients are special software programs that you can use to connect to
  MUSHes. They are usually much nicer to use than raw telnet and give
  you many additional features, such as larger text buffers (so you
  can type more), backscroll, history of previous commands, macros,
  and so on.
 
  Here is a list of common clients and the web sites where they can be
  found.  Please note that the below sites are subject to change.  The
  below are listed solely for your information and possible benefit.
  The developers of PennMUSH have nothing to do with the clients.
 
  OPERATING
  SYSTEM          CLIENT      WEB SITE
  -----------------------------------------------------------------------
  UNIX            Tinyfugue   http://tinyfugue.sourceforge.net
                  Potato      http://www.potatomushclient.com
  WINDOWS         MUSHClient  http://www.mushclient.com
                  SimpleMU    http://simplemu.onlineroleplay.com
                  MuckClient  http://www.xcalibur.co.uk/MuckClient/
                  Potato      http://www.potatomushclient.com
  MAC OS X        Savitar     http://www.heynow.com/Savitar/
                  Atlantis    http://www.riverdark.net/atlantis/
                  Unix clients will also run on OS X.
CLOCK()
  clock(<channel>[/<locktype>][, <new lock>])
 
  With one argument, returns the value of a lock on a channel, if you own the
  channel or are See_All. If no locktype is given, "JOIN" is assumed. With
  two arguments, sets the lock if you would be able to do so via @clock.
 
See also: @clock, @lock
CLONE()
  clone(<object>[, <new name>[, <dbref>]])
 
  This function clones <object>, as per @clone, and returns the dbref
  number of the clone, or #-1 if the object could not be cloned.
 
  The clone will have the same name as the original object unless you
  give a <new name> for it. Normally, the clone will be created with
  the first available dbref, but wizards and objects with the
  pick_dbref power may give the <dbref> of a garbage object to use
  instead.
 
See also: @clone, create(), dig(), open()
CLOUDY
  Flag:  CLOUDY (exits)
 
  If this flag is set on a (non-TRANSPARENT) exit, when a player looks at 
  the exit they will see the contents of the destination room following 
  the exit's description.
 
  If the flag is set on a TRANSPARENT exit, when a player looks at the exit
  they will see only the description of the destination room following the 
  exit's description, and will not see contents.
  
See also: TRANSPARENT, look
CMDS()
  cmds(<player|descriptor>)
 
  Returns the number of commands issued by a player during this
  connection as indicated by WHO.
 
  You must be a Wizard, Royalty or See_All to use this function on anyone
  but yourself.
 
See also: CONNECTION FUNCTIONS
CMOGRIFIER()
  cmogrifier(<channel>)
 
  Returns the dbref of the mogrifier of a channel.
  
See also: @channel/mogrifier, @chatformat
CMSGS()
  cdesc(<channel>)
  cusers(<channel>)
  cmsgs(<channel>)
  cbuffer(<channel>)
 
  Return the description (@channel/describe), number of users, number of
  messages in the recall buffer, or buffer size of <channel>, respectively.
  This information is also displayed in @channel/list and @channel/what.
 
See also: cbufferadd(), crecall()
CODE
PennMUSH is developed by a team of developers whose names are listed
in 'help changes'.  Suggestions, comments, and bug reports are
welcome.
 
The main PennMUSH web page is at http://www.pennmush.org
 
Report bugs and make suggestions at:  http://code.google.com/p/pennmush
 
The PennMUSH community page is at http://community.pennmush.org
 
For information about downloading PennMUSH, see 'help download'.
For information about changes in versions of the code, see 'help changes'.
COLOR
  Flag:  COLOR  (players)
  
  This flag indicates to the MUSH that the player's client can see ANSI
  colors, using the 8 standard ANSI colors plus highlight, flash, inverse,
  underline.
 
  ANSI colors can also be enabled on a per-connection basis with @sockset.
 
See also: ANSI, XTERM256, ansi(), @sockset
COLORS()
  colors()
  colors(<wildcard>)
  colors(<color>, <format>)
 
  With no arguments, colors() returns a space-separated list of colors
  that PennMUSH knows the name of. You can use these colors in
  ansi(+<colorname>,text). The colors "xterm0" to "xterm255" are not
  included in the list, but can also be used in ansi().
  
  With one argument, returns a space-separated list of colors that
  match the wildcard pattern <wildcard>.
  
  With two arguments, colors() returns information about a particular
  color. <color> must be the name of a color or a hex code, in any of
  the forms accepted by ansi(). <format> must be one of:
  
   hex:      return a hexcode in the format #rrggbb.
   xterm256: return the number of the xterm color closest to the given
              <color>.
   16color:  return the letter of the closest ANSI color code.   
   name:     return the name of the colors exactly matching the given
              <color>.
 
  It can be used for working out how certain colors will downgrade to
  people using clients which aren't fully color-capable.
  
  See 'help colors2' for examples.
See also: ansi(), colorstyle
COLORS2
 
  Examples:
    > think colors(*yellow*)
    greenyellow yellowgreen lightgoldenrodyellow lightyellow yellow
    lightyellow1 lightyellow2 lightyellow3 lightyellow4 yellow1 yellow2
    yellow3 yellow4
    
    > think colors(+yellow, hex)
    #ffff00
    
    > think colors(+yellow, xterm256)
    226
    
    > think colors(+yellow, 16color)
    y
    
    > think colors(#ffff00, name)
    yellow yellow1
 
COLORSTYLE
  SOCKSET colorstyle=<value>
 
  You can override the color format you receive from PennMUSH. Normally,
  PennMUSH tries to guess what your client is capable of through telnet
  negotiation and your player flags. @sockset lets you inform PennMUSH
  that your client can support more colors than expected.
 
  Colorstyle options are:
 
    plain: Plain text. No markup whatsoever.
    hilite: You only receive hilite text. No colors, just ansi-hilite.
    16color: You receive hilite text and the ANSI 16 colors.
    xterm256: You receive xterm-style 256 colors for text and background.
    auto: go back to what PennMUSH determined was your client's capabilities.
 
  In the event that your client receives a color that it is unable to
  display, PennMUSH will attempt to find a close match that can fit your
  client's capabilities.
 
See also: ANSI, COLOR, XTERM256
COMMANDS
Help is available for the following MUSH commands:
 
  ahelp          anews          brief          DOING          drop
  examine        enter          events         follow         get            
  give           go             index          kill           leave          
  LOGOUT         look           move           news           page           
  pose           QUIT           read           rules          say
  score          slay           teach          think          unfollow
  use            whisper        WHO            with
  "              :              ;              +              ]
 
  In addition to these, there are several types of '@' commands. @-commands 
  are usually commands which have permanent effects on the MUSH (such as
  creating a new object). Here are the help topics on @-commands:
 
  @-ATTRIBUTES   @-BUILDING     @-GENERAL      @-WIZARD
 
  Commands that can only be used by connected players are listed in
  HELP SOCKET COMMANDS.
COMMUNICATION FUNCTIONS
  Communication functions are side-effect functions that send a message
  to an object or objects.
 
  cemit()       emit()        lemit()       message()     nsemit()      
  nslemit()     nsoemit()     nspemit()     nsprompt()    nsremit()     
  nszemit()     oemit()       pemit()       prompt()      remit()       
  zemit()
  
See also: Channel functions, Mail functions
COMP()
  comp(<value1>, <value2>[, <type>])
 
  comp() compares two values.  It returns 0 if they are the same, -1 if
  <value1> is less than/precedes alphabetically <value2>, and 1 otherwise.
 
  By default the comparison is a case-sensitive lexicographic (string)
  comparison. By giving the optional <type>, the comparison can be
  specified:
 
      <type>            Comparison
        A               Maybe case-sensitive lexicographic (default)
        I               Always case-insensitive lexicographic
        D               Dbrefs of valid objects
        N               Integers
        F               Floating point numbers
 
  Whether or not the a sort type is case-sensitive or not depends on
  the particular MUSH and its environment.
See also: strmatch(), eq()
COMSYS
  CHAT SYSTEM
 
  PennMUSH has a built-in chat system which allows you to speak to other
  players who are on the same channel without needing to be in the same room
  as them. It supports a large number of channels which can be customized and
  restricted in various ways.
 
  Many of the chat system commands take a <channel> argument; you don't need
  to enter the entire channel name, only as many letters as needed to make it
  distinct from other channels.
 
  You can list, join, and configure channels using the @channel command.
 
  To speak on channels, use the @chat command.
 
See also: @channel, @chat, @cemit, channel functions, CHAN_USEFIRSTMATCH,
  @chatformat, @clock
CON()
  con(<object>)
 
  Returns the dbref of the first object in the <object>'s inventory.
 
  You can get the complete contents of any container you may examine,
  regardless of whether or not objects are dark.  You can get the
  partial contents (obeying DARK/LIGHT/etc.) of your current location
  or the enactor (%#).  You CANNOT get the contents of anything else,
  regardless of whether or not you have objects in it.
 
See also: lcon(), next()
COND()
  cond(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
  condall(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
  ncond(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
  ncondall(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
 
  cond() evaluates <cond>s until one returns a true value. Should
  none return true, <default> is returned.
 
  condall() returns all <expr>s for those <cond>s that evaluate to
  true, or <default> if none are true.
 
  ncond() and ncondall() are identical to cond(), except it returns
  <expr>s for which <cond>s evaluate to false.
 
  Examples:
    > say cond(0,This is false,#-1,This is also false,#123,This is true)
    You say, "This is true"
 
    > say ncond(0,This is false,#-1,This is also false,#123,This is true)
    You say, "This is false"
  
    > say ncondall(0,This is false,#-1,This is also false,#123,This is true)
    You say, "This is falseThis is also false"
    
See also: firstof(), allof()
CONDALL()
  cond(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
  condall(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
  ncond(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
  ncondall(<cond>, <expr>[, ... , <condN>, <exprN>][, <default>])
 
  cond() evaluates <cond>s until one returns a true value. Should
  none return true, <default> is returned.
 
  condall() returns all <expr>s for those <cond>s that evaluate to
  true, or <default> if none are true.
 
  ncond() and ncondall() are identical to cond(), except it returns
  <expr>s for which <cond>s evaluate to false.
 
  Examples:
    > say cond(0,This is false,#-1,This is also false,#123,This is true)
    You say, "This is true"
 
    > say ncond(0,This is false,#-1,This is also false,#123,This is true)
    You say, "This is false"
  
    > say ncondall(0,This is false,#-1,This is also false,#123,This is true)
    You say, "This is falseThis is also false"
    
See also: firstof(), allof()
CONFIG()
  config([<option>])
 
  With no arguments, config() returns a list of config option names.
  If <option> is given, config() returns the value of the given option
  Boolean configuration options will return values of "Yes" or "No".
 
  Example:
  > think config(money_singular)
  Penny
 
CONN()
  conn(<player|descriptor>)
 
  This function returns the number of seconds a player has been
  connected. <player> should be the full name of a player or a dbref.
  You can also use a <descriptor> to get connection information for
  a specific connection when a player is connected more than once.
  Wizards can also specify the descriptor of a connection which is still
  at the login screen.
  
  This function returns -1 for invalid <player|descriptor>s, offline 
  players and players who are dark, if the caller is not able to see them.
 
See also: CONNECTION FUNCTIONS
CONNECTED
  Flag:  CONNECTED  (players)
 
  This flag is used internally by the MUSH to track whether a player is
  currently connected. It cannot be set or cleared manually.
 
  Mortal code can't use hasflag(<x>,connected) to test if a player is
  connected. Consider using conn(), lwho(), or mwho() instead.
 
See also: conn(), lwho(), mwho()
CONNECTION FUNCTIONS
  Connection functions return information about the connections open 
  on a game, or about specific connections.
 
  cmds()        conn()        doing()       height()      host()
  hidden()      idle()        ipaddr()      lports()      lwho()
  lwhoid()      mwho()        mwhoid()      nmwho()       nwho()
  player()      ports()       pueblo()      recv()        sent()
  ssl()         terminfo()    width()       xmwho()       xmwhoid()
  xwho()        xwhoid()      zmwho()       zwho()
CONTACT
PennMUSH is developed by a team of developers whose names are listed
in 'help changes'.  Suggestions, comments, and bug reports are
welcome.
 
The main PennMUSH web page is at http://www.pennmush.org
 
Report bugs and make suggestions at:  http://code.google.com/p/pennmush
 
The PennMUSH community page is at http://community.pennmush.org
 
For information about downloading PennMUSH, see 'help download'.
For information about changes in versions of the code, see 'help changes'.
CONTROL
  Controlling an object basically means that you have the power to
  change the object's characteristics such as flags and attributes. It
  may also mean that you have the ability to destroy it.
 
  These checks are performed, from top to bottom, to see if object O
  controls object V:
   1. If O has the Guest power, O does not control V
   2. If O and V are the same object, O controls V
   3. If V is God, O does not control V
   4. If O is a Wizard, O controls V
   5. If V is a Wizard, O does not control V
   6. If V is Royalty and O is not, O does not control V
   7. If V is MISTRUST, O does not control V
   8. If O and V are owned by the same player, and either:
       a. V is not set TRUST, or
       b. O is set TRUST
      then O controls V
   9. If V is a player, or set TRUST, O does not control V
  10. If the zone_control_zmp_only @config option is set to 'No', V is on a
      Zone, and O passes the Zone's @lock/zone, O controls V
  11. If V is owned by a SHARED player, and O passes the owner's @lock/zone,
      O controls V
  12. If V has an @lock/control, and O passes the lock, O controls V
  13. O does not control V
 
See also: controls(), TRUST, MISTRUST, ZONES, SHARED PLAYERS
CONTROLS()
  controls(<object>, <victim>[/<attribute>])
  
  With no <attribute>, this function returns 1 if <object> controls
  <victim>, or 0, if it does not. With an <attribute>, it will return
  1 if <object> could successfully set <attribute> on <victim> (or
  alter <attribute>, if it already exists). If one of the objects does
  not exist, it will return #-1 ARGN NOT FOUND (where N is the
  argument which is the invalid object). If <attribute> is not a valid
  attribute name, it will return #-1 BAD ATTR NAME. You must control
  <object> or <victim>, or have the See_All power, to use this
  function.
 
See also: visible(), CONTROL
CONVSECS()
  convsecs(<seconds>[, <zone>])
  convutcsecs(<seconds>) 
 
  This function converts seconds to a time string, based on how many
  seconds the number is after Jan 1, 1970 UTC. Because it's based on
  UTC, but returns local time, convsecs(0) is not going to be "Thu Jan
  1 00:00:00 1970" unless you're in the UTC (GMT) timezone.
 
  convutcsecs(), and convsecs() with a second argument of 'utc' return
  the time based on UTC time instead of the server's local time. See
  HELP TIMEZONES for more information on the zone argument.
  
  Examples:
    > say secs()
    You say, "709395750"
    
    > say convsecs(709395750)
    You say, "Wed Jun 24 10:22:54 1992"
    
    > say convutcsecs(709395750)
    You say, "Wed Jun 24 14:22:30 1992"
 
See also: convtime(), time()
CONVTIME()
  convtime(<time string>,[utc])
  convutctime(<time string>)
 
  This functions converts a time string (in the server's time zone) to
  the number of seconds since Jan 1, 1970 GMT. A time string is of the
  format: Ddd MMM DD HH:MM:SS YYYY where Ddd is the day of the week,
  MMM is the month, DD is the day of the month, HH is the hour in
  24-hour time, MM is the minutes, SS is the seconds, and YYYY is the
  year.  If you supply an incorrectly formatted string, it will return
  -1.
 
  convutctime() and convtime() with a second argument of 'utc' assume
  the timestring is based on UTC time.
 
  If the extended convtime() is supported (See @config compile), more
  formats for the date are enabled, including ones missing the day of
  week and year, and a 'Month Day Year' format.
 
  Example:
    > say time()
    You say, "Wed Jun 24 10:22:54 1992"
    
    > say convtime(Wed Jun 24 10:22:54 1992)
    You say, "709395774"
 
See also: convsecs(), time()
CONVUTCSECS()
  convsecs(<seconds>[, <zone>])
  convutcsecs(<seconds>) 
 
  This function converts seconds to a time string, based on how many
  seconds the number is after Jan 1, 1970 UTC. Because it's based on
  UTC, but returns local time, convsecs(0) is not going to be "Thu Jan
  1 00:00:00 1970" unless you're in the UTC (GMT) timezone.
 
  convutcsecs(), and convsecs() with a second argument of 'utc' return
  the time based on UTC time instead of the server's local time. See
  HELP TIMEZONES for more information on the zone argument.
  
  Examples:
    > say secs()
    You say, "709395750"
    
    > say convsecs(709395750)
    You say, "Wed Jun 24 10:22:54 1992"
    
    > say convutcsecs(709395750)
    You say, "Wed Jun 24 14:22:30 1992"
 
See also: convtime(), time()
CONVUTCTIME()
  convtime(<time string>,[utc])
  convutctime(<time string>)
 
  This functions converts a time string (in the server's time zone) to
  the number of seconds since Jan 1, 1970 GMT. A time string is of the
  format: Ddd MMM DD HH:MM:SS YYYY where Ddd is the day of the week,
  MMM is the month, DD is the day of the month, HH is the hour in
  24-hour time, MM is the minutes, SS is the seconds, and YYYY is the
  year.  If you supply an incorrectly formatted string, it will return
  -1.
 
  convutctime() and convtime() with a second argument of 'utc' assume
  the timestring is based on UTC time.
 
  If the extended convtime() is supported (See @config compile), more
  formats for the date are enabled, including ones missing the day of
  week and year, and a 'Month Day Year' format.
 
  Example:
    > say time()
    You say, "Wed Jun 24 10:22:54 1992"
    
    > say convtime(Wed Jun 24 10:22:54 1992)
    You say, "709395774"
 
See also: convsecs(), time()
COPYRIGHT
Copyright, License, and Credits for PennMUSH 1.x. Revised March 2006.
 
I. Copyrights
 
PennMUSH 1.x
Copyright (c) 1995-2006, T. Alexander Popiel <talek@pennmush.org>
and Shawn Wagner <raevnos@pennmush.org>.
 
Some code used in this server may have been derived from the
TinyMUSH 2.2 source code, with permission. TinyMUSH 2.2 is
Copyright (c) 1994-2002, Jean Marie Diaz, Lydia Leong, and Devin Hooker.
 
Some code used in this server may have been derived from TinyMUSH 2.0.
Copyright (c) 1995, Joseph Traub, Glenn Crocker.
 
Some code used in this server may have been derived from TinyMUD.
Copyright (c) 1995, David Applegate, James Aspnes, Timothy Freeman
and Bennet Yee.
 
 *------------------------------------------------------------------------*
 
II. License
 
Because PennMUSH includes parts of multiple works, you must comply
with all of the relevant licenses of those works. The portions derived
from TinyMUD/TinyMUSH 2.0 are licensed under the following terms:
 
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that: (1) source code distributions
  retain the above copyright notice and this paragraph in its entirety, and
  (2) distributions including binary code include the above copyright 
  notice and this paragraph in its entirety in the documentation or other 
  materials provided with the distribution.  The names of the copyright 
  holders may not be used to endorse or promote products derived from 
  this software without specific prior written permission.
 
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
The portions derived from TinyMUSH 2.2 are used under the Artistic
License. The Artistic License is also the license under which you
are granted permission to copy and modify PennMUSH:
 
The Artistic License
 
Preamble
 
The intent of this document is to state the conditions under which a
Package may be copied, such that the Copyright Holder maintains some
semblance of artistic control over the development of the package,
while giving the users of the package the right to use and distribute
the Package in a more-or-less customary fashion, plus the right to make
reasonable modifications.
 
Definitions:
 
"Package" refers to the collection of files distributed by the Copyright
Holder, and derivatives of that collection of files created through
textual modification.
"Standard Version" refers to such a Package if it has not been modified,
or has been modified in accordance with the wishes of the Copyright
Holder.
"Copyright Holder" is whoever is named in the copyright or copyrights
for the package.
"You" is you, if you're thinking about copying or distributing this Package.
"Reasonable copying fee" is whatever you can justify on the basis of media
cost, duplication charges, time of people involved, and so on. (You will
not be required to justify it to the Copyright Holder, but only to the
computing community at large as a market that must bear the fee.)
"Freely Available" means that no fee is charged for the item itself,
though there may be fees involved in handling the item. It also means
that recipients of the item may redistribute it under the same conditions
they received it.
 
1. You may make and give away verbatim copies of the source form of the
Standard Version of this Package without restriction, provided that
you duplicate all of the original copyright notices and associated
disclaimers.
 
2. You may apply bug fixes, portability fixes and other modifications
derived from the Public Domain or from the Copyright Holder. A Package
modified in such a way shall still be considered the Standard Version.
 
3. You may otherwise modify your copy of this Package in any way, provided
that you insert a prominent notice in each changed file stating how and
when you changed that file, and provided that you do at least ONE of
the following:
 
 a) place your modifications in the Public Domain or otherwise make them
 Freely Available, such as by posting said modifications to Usenet or an
 equivalent medium, or placing the modifications on a major archive site
 such as ftp.uu.net, or by allowing the Copyright Holder to include your
 modifications in the Standard Version of the Package.
 
 b) use the modified Package only within your corporation or organization.
 
 c) rename any non-standard executables so the names do not conflict with
 standard executables, which must also be provided, and provide a separate
 manual page for each non-standard executable that clearly documents how
 it differs from the Standard Version.
 
 d) make other distribution arrangements with the Copyright Holder.
 
4. You may distribute the programs of this Package in object code or
executable form, provided that you do at least ONE of the following:
 
 a) distribute a Standard Version of the executables and library files,
 together with instructions (in the manual page or equivalent) on where
 to get the Standard Version.
 
 b) accompany the distribution with the machine-readable source of the
 Package with your modifications.
 
 c) accompany any non-standard executables with their corresponding
 Standard Version executables, giving the non-standard executables
 non-standard names, and clearly documenting the differences in manual
 pages (or equivalent), together with instructions on where to get the
 Standard Version.
 
 d) make other distribution arrangements with the Copyright Holder.
 
5. You may charge a reasonable copying fee for any distribution of
this Package. You may charge any fee you choose for support of this
Package. You may not charge a fee for this Package itself. However, you
may distribute this Package in aggregate with other (possibly commercial)
programs as part of a larger (possibly commercial) software distribution
provided that you do not advertise this Package as a product of your own.
 
6. The scripts and library files supplied as input to or produced as
output from the programs of this Package do not automatically fall under
the copyright of this Package, but belong to whomever generated them,
and may be sold commercially, and may be aggregated with this Package.
 
7. C or perl subroutines supplied by you and linked into this Package
shall not be considered part of this Package.
 
8. The name of the Copyright Holder may not be used to endorse or
promote products derived from this software without specific prior
written permission.
 
9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
The End
COPYRITE
Copyright, License, and Credits for PennMUSH 1.x. Revised March 2006.
 
I. Copyrights
 
PennMUSH 1.x
Copyright (c) 1995-2006, T. Alexander Popiel <talek@pennmush.org>
and Shawn Wagner <raevnos@pennmush.org>.
 
Some code used in this server may have been derived from the
TinyMUSH 2.2 source code, with permission. TinyMUSH 2.2 is
Copyright (c) 1994-2002, Jean Marie Diaz, Lydia Leong, and Devin Hooker.
 
Some code used in this server may have been derived from TinyMUSH 2.0.
Copyright (c) 1995, Joseph Traub, Glenn Crocker.
 
Some code used in this server may have been derived from TinyMUD.
Copyright (c) 1995, David Applegate, James Aspnes, Timothy Freeman
and Bennet Yee.
 
 *------------------------------------------------------------------------*
 
II. License
 
Because PennMUSH includes parts of multiple works, you must comply
with all of the relevant licenses of those works. The portions derived
from TinyMUD/TinyMUSH 2.0 are licensed under the following terms:
 
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that: (1) source code distributions
  retain the above copyright notice and this paragraph in its entirety, and
  (2) distributions including binary code include the above copyright 
  notice and this paragraph in its entirety in the documentation or other 
  materials provided with the distribution.  The names of the copyright 
  holders may not be used to endorse or promote products derived from 
  this software without specific prior written permission.
 
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
The portions derived from TinyMUSH 2.2 are used under the Artistic
License. The Artistic License is also the license under which you
are granted permission to copy and modify PennMUSH:
 
The Artistic License
 
Preamble
 
The intent of this document is to state the conditions under which a
Package may be copied, such that the Copyright Holder maintains some
semblance of artistic control over the development of the package,
while giving the users of the package the right to use and distribute
the Package in a more-or-less customary fashion, plus the right to make
reasonable modifications.
 
Definitions:
 
"Package" refers to the collection of files distributed by the Copyright
Holder, and derivatives of that collection of files created through
textual modification.
"Standard Version" refers to such a Package if it has not been modified,
or has been modified in accordance with the wishes of the Copyright
Holder.
"Copyright Holder" is whoever is named in the copyright or copyrights
for the package.
"You" is you, if you're thinking about copying or distributing this Package.
"Reasonable copying fee" is whatever you can justify on the basis of media
cost, duplication charges, time of people involved, and so on. (You will
not be required to justify it to the Copyright Holder, but only to the
computing community at large as a market that must bear the fee.)
"Freely Available" means that no fee is charged for the item itself,
though there may be fees involved in handling the item. It also means
that recipients of the item may redistribute it under the same conditions
they received it.
 
1. You may make and give away verbatim copies of the source form of the
Standard Version of this Package without restriction, provided that
you duplicate all of the original copyright notices and associated
disclaimers.
 
2. You may apply bug fixes, portability fixes and other modifications
derived from the Public Domain or from the Copyright Holder. A Package
modified in such a way shall still be considered the Standard Version.
 
3. You may otherwise modify your copy of this Package in any way, provided
that you insert a prominent notice in each changed file stating how and
when you changed that file, and provided that you do at least ONE of
the following:
 
 a) place your modifications in the Public Domain or otherwise make them
 Freely Available, such as by posting said modifications to Usenet or an
 equivalent medium, or placing the modifications on a major archive site
 such as ftp.uu.net, or by allowing the Copyright Holder to include your
 modifications in the Standard Version of the Package.
 
 b) use the modified Package only within your corporation or organization.
 
 c) rename any non-standard executables so the names do not conflict with
 standard executables, which must also be provided, and provide a separate
 manual page for each non-standard executable that clearly documents how
 it differs from the Standard Version.
 
 d) make other distribution arrangements with the Copyright Holder.
 
4. You may distribute the programs of this Package in object code or
executable form, provided that you do at least ONE of the following:
 
 a) distribute a Standard Version of the executables and library files,
 together with instructions (in the manual page or equivalent) on where
 to get the Standard Version.
 
 b) accompany the distribution with the machine-readable source of the
 Package with your modifications.
 
 c) accompany any non-standard executables with their corresponding
 Standard Version executables, giving the non-standard executables
 non-standard names, and clearly documenting the differences in manual
 pages (or equivalent), together with instructions on where to get the
 Standard Version.
 
 d) make other distribution arrangements with the Copyright Holder.
 
5. You may charge a reasonable copying fee for any distribution of
this Package. You may charge any fee you choose for support of this
Package. You may not charge a fee for this Package itself. However, you
may distribute this Package in aggregate with other (possibly commercial)
programs as part of a larger (possibly commercial) software distribution
provided that you do not advertise this Package as a product of your own.
 
6. The scripts and library files supplied as input to or produced as
output from the programs of this Package do not automatically fall under
the copyright of this Package, but belong to whomever generated them,
and may be sold commercially, and may be aggregated with this Package.
 
7. C or perl subroutines supplied by you and linked into this Package
shall not be considered part of this Package.
 
8. The name of the Copyright Holder may not be used to endorse or
promote products derived from this software without specific prior
written permission.
 
9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
The End
COR()
  or(<boolean1>, <boolean2>[, ... , <booleanN>])
  cor(<boolean1>, <boolean2>[, ... , <booleanN>])
 
  These functions take a number of boolean values, and return 1 if any of
  them are true, and 0 if all are false. or() always evaluates all of its
  arguments, while cor() stops evaluating as soon as one is true.
 
See also: BOOLEAN VALUES, and(), nor(), firstof(), allof()
COS()
  cos(<angle>[, <angle type>])
 
  Returns the cosine of <angle>. Angle must be in the given angle
  type, or radians by default.
 
  Examples:
    > say cos(90, d)
    You say, "0" 
  
    > say cos(1.570796)
    You say, "0"
 
  See 'HELP ANGLES' for more on the angle type.
 
See also: acos(), asin(), atan(), ctu(), sin(), tan()
COSTS
  Some things on the MUSH cost pennies. The default costs are shown below:
  
          kill: 10 pennies (or more, up to 100 pennies)
          @dig: 10 pennies
          @create: 10 pennies (or more)
          @search: 100 pennies *
          @link: 1 penny (if you  didn't already own it,
                          +1 to the previous owner).
          @open: 1 penny (2 pennies if linked at the same time)
  
  Type '@config/list costs' to get the costs for the MUSH you are on.
 
See also: MONEY, money(), score
COWNER()
  cowner(<channel>)
 
  Returns the dbref of the owner of a channel.
  
See also: @channel/chown
CREATE()
   create(<object>[, <cost>[, <dbref>]])
 
   This function creates an object with name <object> for <cost> pennies,
   and returns the dbref number of the created object. It returns #-1 on
   error. 
 
   Wizards may also specify a <dbref>; if this refers to a garbage object,
   the new object is created with this dbref.
   
See also: @create, pcreate(), dig(), open()
CRECALL()
  crecall(<channel>[, <lines> [, <start line> [, <osep> [, <timestamps?> ]]]])
 
  This function is the functional form of @channel/recall, and returns a
  string containing the recalled lines from the channel, separated by
  <osep> (which defaults to a space). If <timestamps?> is a true value, the
  recalled lines will be prefixed with the timestamp; otherwise, timestamps
  are omitted.
  
  <lines> can be either a number of lines (in which case that many lines will
  be returned, starting from the <start line>th line), or a duration of time 
  (for example, '5h' or '10m30s'), in which case all lines from the previous 
  <lines> time are returned.
 
See also: @channel/recall, cbufferadd()
CREDITS
  Maintainer: Raevnos [SW]
  Developers: Ervin Hearn III [EEH], Greg Millam [GM], Mike Griffiths [MG],
              Intrevis
  Past Porters: Nick Gammon [NJG] (win32), Dan Williams [DW] (MacOS), 
           Sylvia (OS/2)
  Former developers: Rhyanna [RLM], Trivian [TN], Halatir [LdW], Talek [TAP],
           Javelin
 
  The original TinyMUSH 1.0 code was written by Lawrence Foard, and
  was based upon James Aspnes' TinyMUD server. Since then, the code
  has been modified by the programmers of MicroMUSE (then MicroMUSH),
  and Joseph Traub (Moonchilde of PernMUSH).  From January 1992 to
  January 1995, Lydia Leong (Amberyl of PernMUSH / Polgara of
  Belgariad) maintained the code currently known as PennMUSH 1.50.
  From January 1995 until July 2006, Alan Schwartz (Paul of DuneMUSH /
  Javelin elsewhere) maintained this code, along with a development
  team. From July 2006 on, Raevnos has been the maintainer.
 
  Big thanks to the developers of TinyMUSH 2.0, 2.2 [2.2], 3.0 [3],
  MUX2, and Rhost [Rhost] servers, as well as to the players of
  Belgariad MUSH, DuneMUSH, and M*U*S*H, and everyone else using this
  server!
 
See also: help code, help license
CSECS()
  ctime(<object>[, <utc>])
  csecs(<object>)
 
  ctime() returns the date and time that <object> was created. The time
  returned is in the server's local timezone, unless <utc> is true, in
  which case the time is in the UTC timezone.
 
  csecs() returns the time as the number of seconds since the epoch.
  Anyone can get the creation time of any object in the game.
 
See also: mtime(), time(), secs(), objid()
CSTATUS()
  cstatus(<channel>, <object>)
 
  Returns <object>'s status with respect to <channel>, which may be
  "Off", "On", or "Gag". You must either be able to examine the
  object, or it must visible be on the channel; "Off" is returned for
  objects that you cannot see on the channel.
  
See also: cwho(), cflags(), @channel/on, @channel/gag
CTIME()
  ctime(<object>[, <utc>])
  csecs(<object>)
 
  ctime() returns the date and time that <object> was created. The time
  returned is in the server's local timezone, unless <utc> is true, in
  which case the time is in the UTC timezone.
 
  csecs() returns the time as the number of seconds since the epoch.
  Anyone can get the creation time of any object in the game.
 
See also: mtime(), time(), secs(), objid()
CTITLE()
  ctitle(<channel>, <object>)
 
  Returns <object>'s @channel/title on <channel>. You must either be able
  to examine the object, or it must be visibly on <channel>, and you must
  either be on <channel> on able to join it.
  
See also: @channel/title
CTU()
  ctu(<angle>, <from>, <to>)
 
  Converts between the different ways to measure angles.  <from>
  controls what the angle is treated as, and <to> what form it is
  turned into. See HELP ANGLES for more information.
  
  Example:
    > say 90 degrees is [ctu(90, d, r)] radians
    You say, "90 degrees is 1.570796 radians"
 
See also: acos(), asin(), atan(), cos(), sin(), tan()
CUSERS()
  cdesc(<channel>)
  cusers(<channel>)
  cmsgs(<channel>)
  cbuffer(<channel>)
 
  Return the description (@channel/describe), number of users, number of
  messages in the recall buffer, or buffer size of <channel>, respectively.
  This information is also displayed in @channel/list and @channel/what.
 
See also: cbufferadd(), crecall()
CV
  cd <name> <password>
  ch <name> <password>
  cv <name> <password>
 
  Not really MUSH commands, but commands available at the connect screen.
  Wizards can use 'cd' instead of 'connect'; the new connection will be
  hidden (as per @hide), and the player will be set DARK. Mortals set
  HEAR_CONNECT will not hear dark wizards connect.
  
  Wizards, Royalty, and those with the Hide @power can use 'ch' to connect
  with the new connection hidden (as per @hide).
  
  Connecting using 'cv' causes the Dark flag to be cleared prior to
  connection messages being broadcast.
  
  None of those commands affect the hidden status of other&