& help This is the MUSH online help facility. Notes on help descriptions: [text] - Text enclosed in []'s is optional. The []'s are never typed in as part of the command. - Information parameter for a command. The <>'s are never typed in as part of the command. Syntax of help command: help [] To get a list of MUSH topics: help topics To get a list of MUSH Commands: help commands To get a list of NEVERENDING MUSH (Only) Commands: +help If there are any errors in the help text, please notify a wizard in the game, or send mail to lwl@eniac.seas.upenn.edu All commands listed in this file might not apply to all mushes running this code. This is because some of the commands/effects can be enabled or disabled by the site admin of your MUSH. If a command is not available AND it is documented, ask your site admin why it isn't enabled. You may use the "@config" command to see the MUSH configuration. & COMMANDS Help is available for the following MUSH Commands: brief DOING drop examine enter events get give goto kill leave LOGOUT look move news page pose QUIT read rpage RWHO say score slay take think use whisper WHO " : ; & + In addition to these, there are '@' commands. @-commands usually are commands which can modify and affect the database in substantial ways. There are several types of '@' commands. The following help entries list available '@' commands: @-ATTRIBUTES @-BUILDING @-GENERAL @-WIZARD & @-ATTRIBUTES '@' commands which are attribute-related set game-defined attributes. These are: @aahear @aclone @aconnect @adeath @adescribe @adisconnect @aefail @aenter @afailure @ahear @aleave @amhear @amove @apayment @asuccess @atport @ause @away @charges @cost @death @describe @drop @ealias @efail @enter @failure @filter @haven @idescribe @idle @infilter @inprefix @lalias @leave @listen @move @odeath @odescribe @odrop @oefail @oenter @ofailure @oleave @omove @opayment @osuccess @otport @ouse @oxenter @oxleave @oxtport @payment @prefix @runout @sex @startup @success @tport @use & @-BUILDING These '@' commands are building related (they modify the database): @atrlock @atrchown @chown @chzone @clone @cpattr @create @destroy @dig @elock @eunlock @link @lock @name @nuke @open @parent @set @ulock @unlink @unlock @uunlock @wipe & @-GENERAL These '@' commands are general utilities and programming commands: @@ @channel @chat @config @decompile @doing @dolist @drain @edit @emit @entrances @find @force @gedit @grep @halt @lemit @listmotd @mail @map @notify @oemit @password @pemit @ps @redirection @remit @rwall @rwallemit @rwallpose @scan @search @select @stats @sweep @switch @teleport @trigger @verb @version @wait @whereis @zemit & @-WIZARD These '@' commands are only usable by wizards: @allhalt @allquota @boot @chownall @chzoneall @comment @dbck @disable @dump @enable @fixdb @kick @motd @newpassword @pcreate @poll @poor @purge @quota @rejectmotd @shutdown @squota @toad @uptime @wall @wallemit @wallpose @wizemit @wizmotd @wizpose @wizwall & topics Help available on the following Topics: ATTRIB-OWNERSHIP ATTRIBUTES BEING KILLED BOGUS COMMANDS BOOLEAN VALUES CHAT CONTROL DROP-TO ENACTOR EVALUATION EXITS FAILURE FLAGS FUNCTIONS GENDER HERE HOMES LINKING LISTENING LISTS LOOPING MASTER ROOM NON-STANDARD ATTRIBUTES OBJECT PARENTS PARENT ROOMS PUPPETS ROBBERY SACRIFICING SEMAPHORES SPOOFING STACK SUBSTITUTIONS SUCCESS SWITCHES TYPES OF OBJECTS VERBS ZONES & SEMAPHORES SEMAPHORES Semaphores may be used for synchronizing complex objects or for enforcing mutual exclusion. Any object, of any type, that you control or that is LINK_OK can be used as a semaphore. The semaphore state of an object is shown by the SEMAPHORE attribute, which cannot be manually changed by mortals. A positive number indicates that there are that many commands awaiting "notifies" on the semaphore object; a negative number indicates that many waits on that semaphore will not block. The @wait command is used to queue commands on a semaphore, delaying them until the semaphore is notified with the "@notify" command. The @drain command and "@notify/all" clear the semaphore on the object, discarding and executing immediately all pending commands, respectively. The object which is doing the @wait executes the commands, NOT the semaphore. (See 'help semaphores2' for more) & SEMAPHORES2 You can also specify a timeout value for a semaphore wait with @wait / = (instead of the normal form of the semaphore wait command: @wait = ) If the time period expires before the semaphore is notified, then the command is executed and the semaphore count decremented, just as if the command had been run because the semaphore was notified. Examples: > @wait semaphore=:tests. > @notify semaphore Wizard tests. > @wait timer/30=:waits 30 seconds. [ 30 seconds passes. ] Wizard waits 30 seconds. See also the help for: @wait, @drain, @notify & SWITCHES SWITCHES Commands can have "switches" which modify the behavior of the command. Switches are attached after the end of a command. Most switches have a single-command short form; command switches are provided in this code to increase compatiblity with TinyMUSH 2.0, as well as to reduce the number of commadns that players need to remember. A slash ('/') is used to separate the command and switch. For example, the switch-equivalent of the "@nuke" command is "@destroy/override". In some places, the word which is usually the command argument can be used as a switch - i.e. "@sweep/connected" instead of "@sweep connected". You do not have to type the full name of the switch. & CONTROL CONTROL controls if: 1. is a wizard. 2. owns , and is a player. 3. has the same owner as , and is INHERIT. 4. has the same owner as , and the owner is INHERIT. 5. is in the same zone as , and passes the Enter lock of the zone object. Also, cannot be INHERIT, nor can it be a player. & ZONES ZONES Zones are areas of the MUSH which may be controlled by many people. Essentially, they allow group ownership of objects. The default zone is NOTHING. Any building done by a player defaults to belonging to the same zone that the player belongs to. Every zone is defined by a Zone Master Object (ZMO). The ZMO is an ordinary MUSH object owned by some player. A wizard may change the zone of an object or player to a ZMO. If the ZMO is a room, it is called a "Parent room." Most of the statements about ZMOs also apply to parent rooms; for details, see "help PARENT ROOMS". Anyone who can pass the Enter lock of the ZMO has control over all objects in that zone. This, in essence, gives that player wizard powers within that zone. For this reason, one must be extremely careful with the enter locks of ZMOs! Also, $commands on a ZMO are treated as global within that zone. The game attempts to match $commands for the ZMO of the player's location, as well as $commands for the player's own zone. For some suggestions on how to use zones, see "help zones2". & ZONES2 Some suggested uses of zones: 1. If you are working on a building project with several people, it may be useful to create a zone object and @elock it to all of you, and ask a wizard to @chzone the players involved to the zone object. That way, all of the players working on the project will be able to modify the building. 2. On a similar thread, if several players are working on a project involving only a few objects, it may be simpler to create a zone object and @chzone those few objects to the ZMO instead of resetting the zones of the players. Note that a player does not have to belong to a zone in order to change objects in that zone; all is merely required to pass the ZMO's enter lock. 3. If local wizards are desired, a zone object may be created and enter locked to the local wizard. Players building within that zone should be @chzone'd to that ZMO. The local wizard will then be able to control anything within that domain. 4. If you want restricted global commands defined over only a small area, you can define that area to be part of a zone, and place the desired $commands upon the ZMO. & PARENT ROOMS Parent rooms are a subset of zones. If a room is used as as zone oject, it is a parent room (PR). PRs are like local "master" rooms. Exits in the PR are global to that zone, and $commands on objects in the PR are global to that zone. Parent rooms are only defined if globals are used. Parent rooms should only be used for very large zones which have a lot of global exits. Otherwise, a ZMO thing should be used, because command evaluation on a parent room is slower than command evaluation on a ZMO. Large numbers of parent rooms may slow down the game significantly. See "help ZONES" and "help EVALUATION" for more information. & MASTER ROOM MASTER ROOM The Master Room enables global commands and exits. Exits in the Master Room may be used from any location on the MUSH. All objects left in the Master Room are checked for user-defined $commands. Those $commands are considered global. Normally, only wizards will have access to the Master Room. See "help EVALUATION" for details on global commands. & EVALUATION EVALUATION ORDER Commands are mated in the following order: Special game commands: WHO, QUIT, etc. "home" command Single-token commands: ", :, ;, + Exits in the room @-commands Regular game commands: get, inventory, etc. Enter aliases Leave aliases User-defined commands on nearby objects. All such $commands are matched and executed. If there are no user-defined commands nearby: If the zone of the player's location is a parent room, Parent room exits Parent room user-defined commands Else User-defined commands on the zone of the player's location If still nothing is matched: User-defined commands on the player's personal zone If nothing, including zone commands, has been matched: Global exits Global user-defined commands: all $commands in the Master Room are matched. Local commands are always checked first and ALWAYS negate global commands. IMPORTANT: This order is altered a bit when an object is redirecting. (See @redirection for further details). & OBJECT PARENTS Objects may have "parent" objects, from which they can inherit attributes. Once an object is given a parent, it may use the attributes on the parent just as if the attributes were on the object itself, including checking for $commands. Use the @parent command to change the parent of an object. See 'help @parent' for details. For the purposes of automated game checks, the following attributes are not inherited: CHARGES, EALIAS, LALIAS, LAST, LASTSITE, LISTEN, QUEUE, RQUOTA, SEMAPHORE, and STARTUP. These may be "inherited" via the use of functions like get(), but the game does not check inheritance for startup triggering, enter/leave aliases, runout checking, etc. Players cannot be @parented, but the parent of an object can be set to a player. Objects may have multiple levels of parents - thus, if #100 is the parent of #101, which is the parent of #102, object #102 checks itself, #101, and #100 for attributes. Attributes are checked on the object itself first, followed by its parent, followed by that parent's parent, and so forth. There is a (configurable) maximum number of ancestors an object may have; the default is 10. See 'help PARENTS2' for more. & PARENTS2 Note that the only properties inherited are attributes. In particular, flags and exits are NOT inherited from the parent object. Also, commands which walk the attribute list, such as "examine", the LATTR() function, @set, and @edit, only affect attributes that are on the object itself. There are some limitations to the use of @parent. The most important is that ^-pattern checking is not done on the parent of an object, regardless of what is on the child object. The attributes inherited from the parent are treated just like its own attributes by the child. Thus, when a $-command or @trigger is executed, "me", for example, refers to the child, not the parent, and the $-command's associated actions are performed by the child. Also, the uselock check is done on the child, not on the parent. Attributes with $-commands _are_ inherited from the parent and previous generations. Conflicts are resolved not by the $-command name, but by the attribute name. See 'help PARENTS3' for more. & PARENTS3 If two attributes are in "conflict", the child's attribute is used. Thus, if you have @va #10=$test:@emit I'm the child. and @va #11=$moof:@emit I'm the parent., and @parent #10=#11, and you type "moof", the parent's command will NOT be matched, because the child's VA is being used. This is true even if the child's VA contains no $-command. If instead, you have @va #11=$test:@emit I'm the parent., and you type "test", you will get #10 emitting "I'm the child." The command does not get double-matched (presuming, of course, that the parent doesn't get triggered normally by being in the same room with the person who typed "test"). Since $-command checking only goes one level back, if you had a @parent #11=#12, any $-commands on #12 would simply be ignored, regardless of what those $-commands were. See 'help PARENTS4' for more. & PARENTS4 @parent is most useful when several objects use common attributes. It is slightly faster to have $commands on the child object which in turn @trigger or otherwise retrieve attributes inherited from the parent object, rather than having the $commands checked on the parent object. Parent-object $-command checking is at its most efficient when there are few or no attributes on the child. Also, each additional level of parents further reduces efficiency. If you are "mass-marketing" your objects, you can create blank copies, and @parent those copies to a template object. You can then customize necessary attributes on the copy. When a buyer @chowns his copy, the parent does not change, so unless you're putting data into the parent that you want to make impossible to read, it's safe to allow the purchasers of your object to @chown their copy. & LASTSITE LASTSITE This attribute gives the name of the site you last connected from. Mortals cannot set it. & @mail @mail[/] [, , [= , ]] @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. @mail by itself will give you a brief list of all your mail with the user name, time the mail was sent, and will mark all NEW mail with a * in front of the message. All the numbers listed here are the ones used when you see . @mail = This sends the message to . All function subsitutes are valid in including mail(#) which will allow you to forward mail you have recieved to other users. @mail This displays the message from your mailbox that has the number ... Type 'help @mail2' to continue: & @mail2 @mail = This sends to the user that sent you the message in your mailbox that has the number . (Essentially a 'reply', but no special effects, just sends normally) @mail clear This clears ALL mail from your mailbox, unread or not. @mail clear = This clears only the message and renumbers any messages recieved after . Type 'help @mail3' to continue: & @mail3 The @mail command can also take the following switches: @mail/stats [] -- Basic mail statistics. @mail/dstats [] -- Also provides read/unread count. @mail/fstats [] -- Does all that, plus gives space usage. @mail/debug [=] Only wizards may stats players other than themselves. The mail statistics commands are computationally expensive, and thus are subject to "daytime" restrictions. They also cost the same as a @find (100 pennies). The /debug switch does sanity checking on the mail database, and may only be used by a wizard. "@mail/debug sanity" just does the check; the command "@mail/debug clear=" wipes mail for an object. & @config @config/[] This command lists the MUSH configuration parameters, indicating what special things are enabled, and the cost of certain commands. If something doesn't work the way you expected it to, it might be wise to use this command and check the configuration paramters. This command takes one of three switches: /defaults -- Lists parameters set at compile time or startup time, such as quota restrictions. /costs -- Lists costs for various commands. /globals -- Lists runtime parameters, such as logging and "daytime". & @map @map = This command takes a space-separated list of words, and performs pronoun/pattern substitution on each word, returning a list - "mapping" the function onto each item in the list. It returns the list in a MAPLIST attribute, automatically set on the object executing the @map. The set it always performed before any actions further actions are executed. Brackets are generally necessary in order to make the function substitutions evaluate correctly. See "help @map-2" for examples of @map. & @map-2 Examples of @map: @map foobar baz blech=[strlen(##)] Returns "6 3 5" in MAPLIST. @map testing map-test=[strlen(before(##, est)] Returns "1 5" in MAPLIST @map Joe Bob Ann=I know ##. Returns "I know Joe. I know Bob. I know Ann." in MAPLIST > @va Object=$test * * *:@map %0 %1 %2=[strlen(##)]; @dolist [v(maplist)] = say ## Object - Set. > test aaa bb c Object says, "3" Object says, "2" Object says, "1" & @dolist @dolist = @dolist executes the for each element in . If is a function, it will be evaluated to obtain the necessary list to use. It may be any space-separated list of strings, which can be object numbers, attributes, or arbitary words. is a command or list of commands enclosed in braces { } and is performed once for every item in . The special symbol "##" is replaced by the corresponding item from . Example: @dolist [lcon(here)] = "[name(##)] would cause you to say the name of all objects in the room. & @fixdb @fixdb/ = This directly sets a field in to . must be an integer. Note that NO ERROR CHECKING is performed, so if you mess up the setting of , you may very well crash or hang the server with your database corruption. This command is restricted to wizards only and should NEVER be used unless you know PRECISELY what you are doing. - Switch - - Players/things - - Rooms - - Exits - location container object drop-to destination contents first object carried first object nothing exits home first exit source next pointer to next in contents/exits chain & @kick @kick This wizard-only command forces the immediate execution of items from the queue. & @ealias @ealias = This allows a player to type the enter alias instead of "enter " If you have a chair, you coud "@ealias chair = sit down" and then just type "sit down" instead of "enter chair" - using the object name is not necessary. Note that the enter alias is checked after normal exits. Like an exit, it may have a semi-colon separated list of words, i.e. sit down;sit;sit on chair & @lalias @lalias = This allows a player to type the leave alias instead of the "leave" command, in a fashion similar to enter aliases (see @ealias for details). The leave alias may be a semi-colon separated list of words, such as stand up;stand;get up & @comment @comment = This is a wizard-only command which sets a COMMENT attribute on . The comment can only be seen by other wizards and royalty. & @away @away = This message is sent to a player who tries to page you when you are not connected. & @haven @haven = This message is sent to a player whose pages you are refusing, either through use of the HAVEN flag or through the use of a page lock. & @idle @idle = This message is sent in return to every page which successfully reaches you. 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. & @ulock @ulock = This type of lock is a use-lock for objects, and a page-lock for players. On an object, this restricts who may trigger the "@use" set of registers, and who may use the $commands on the objects. If the person who is trying to use the object or its special commands, cannot pass the lock, he is told, "Permission denied." On a player, it restricts who is allowed to page that person. If the paging person cannot pass the lock, the target player is treated as if he were set HAVEN. Indirect locks and other special locking styles are supported; see "help @lock" for details. Example: if I want everyone but Bob to be able to page me, I would "@ulock me=!*Bob". If I want only Bob to be able to page me, I would "@ulock me=*Bob". & @uunlock @uunlock = Page-unlocks a player or use-unlocks a thing. Someone who is page-unlocked may be paged by anyone; an object which is use-unlocked may be used by anyone. See "help @ulock" for more. & @efail @efail = This is the message shown to the player who fails to enter the object. & @oefail @oefail = This message is shown to the location of a player who fails to enter the object. & @aefail @aefail = This is the action taken by the object when a player fails to enter it. & @elock @elock = Enter-locks an object, restricting who is allowed to enter it. Special lock types are supported (see "help @lock" for details). Only objects which are ENTER_OK may be entered, regardless of the key. The enter lock of a room is its Teleport Lock. Only people who pass the room's teleport lock, are wizards or royalty, or control the room, will be allowed to @teleport into the room. (Note that this is different from NO_TEL, which prevents people from teleporting out of a room). The teleport lock is evaluated even if the room is JUMP_OK - in other words, if you are trying to teleport into a room you don't control, the room must be JUMP_OK, and you must pass the teleport lock. Note that the enter lock of an object or room being used as a Zone Master Object determines control of that zone. Please note that if you're using a room as a ZMO (i.e. as a parent room), only the controllers of that zone will be able to teleport into that room (which is a good thing for security). & @eunlock @eunlock Enter-unlocks an object, in a fashion similar to @unlock. For anyone to be able to enter an object, it must be both @eunlocked and ENTER_OK. & @nuke @nuke Destroys an object, overriding the SAFE flag. Aside from this feature, it is identical to @destroy. This command is equivalent to @destroy/override. & drop drop . Drops . Dropping a thing in the temple sacrifices it (See SACRIFICING). Otherwise, a dropped thing is relocated to the current room, unless its STICKY flag is set (See STICKY), or the room has a drop-to (See DROP-TOs). Unlinked exits can only be dropped in rooms you control. & examine examine[/] [/] Displays all available information about . may be an object, 'me' or 'here'. You must control the object to examine it. If you do not own the object, or it is not visible, you will just see the name of the object's owner. May be abbreviated 'ex '. If the attribute parameter is given, you will only see that attribute (good for looking at code). You can now wild-card match on attributes. For example. to see all the attributes that began with a 'v' you could do ex /v* Examine takes two switches, "brief" (equivalent to the "brief" command), and "debug", which is a wizard-only switch. "debug" examine will show the raw values for certain fields in an object. & brief brief . It is identical to "examine", except that it does not print the attributes on an object. This is useful for just glancing at an object to determine its home, owner, lock, etc. & get get . Picks up . can be a thing or an unlinked exit. 'take' is the same as 'get'. You can now also do get 's . It will fail if either thing is not ENTER_OK or object is locked against you. & give give =. Gives player the specified number of pennies or . You can't give someone pennies if their new total would be greater than 10000 pennies. (No reason to get greedy) You may also give players objects, but the other player must be set to enter_ok (See FLAGS) to receive something you give. & goto go[to] ; go[to] home. Goes in the specified direction. 'go home' is a special command that returns you to your starting location. The word 'go' may be omitted. 'move' is the same as 'go'. & inventory inventory. Lists what you are carrying. Can be abbreviated by just 'i', or 'inv'. & kill kill [=]. Attempts to kill the specified player. Killing costs pennies, which gives you a % chance of killing the player. Thus, spending 100 pennies always works (except against wizards, who can never be killed). Players cannot be killed in rooms which have been set HAVEN. (See FLAGS and HAVEN). If you don't specify a cost, the default is 10 (i.e. 10%). The player, if killed, receives /2 pennies in insurance. & look look[/] []. Displays the description of , or the room you're in if object is eliminated. Specifying object as or # or 'me' or 'here' is legal. 'read' is the same as 'look'. You can also use look to look at object's held by other people, just use 'look 's '. 'look' may be abbreviated 'l'. Look does take one switch, "outside". look/outside allows you to look at objects outside your current location, as long as your immediate location is not a room, and is not OPAQUE. & move Same as GO. (What, you expect me to type it out twice?) & news Shows you the current news for MUSH. It is highly recommended that you check the news daily for new information. Otherwise, the wizards will have no pity on you for messing up with the new commands. & events A file similar to news, dealing with special events and topics with the MUSH. You should check the events daily for new information, or you may rapidly become slightly lost. & page page [] [=]. This tells a player that you are looking for them, and tell the player where you are. They will get a message telling them your name and and location if you omit the message. This costs 1 penny. If you include the '=', it will tell the player your name and your message, but not your location. If a player is set to HAVEN (See FLAGS), you cannot page them, and they will not be notified that you tried. If the player is page-locked against you, he is treated as HAVEN. Page will also attempt to partial match on the name. If you omit the player, the game will attempt to page the player you paged last. If the first character of is a : or a ;, it will send the page in pose format. (see pose, : and ;) Objects may page players, but not vice versa. If an object pages a NOSPOOF player, that player will see the object's number in square brackets, in front of the message, in a fashion similar to the way NOSPOOF flags emits. & QUIT QUIT. Log out and leave the game. Must be in all capitals. & LOGOUT LOGOUT is similar to QUIT, but instead of disconnecting you from the game completely, it merely disconnects you from your current character and returns you to the opening welcome screen. This is useful if you want to disconnect and then reconnect to another character. & read See 'look'. (See move for reason you have to see look) & " See say. & : See pose. & ; This command is much like pose, however where with pose, the action and the person's name who commits the action are separated by a space, with ;, they are not. Example: ;'s watch beeps. -- The room would see 's watch beeps. & + See @chat. & & See NON-STANDARD ATTRIBUTES. & say say . Says out loud. You can also use '"'. See also 'whisper', 'pose', and ';'. (Note: Say and " append a " to whatever you type in) & score score. Displays how many pennies you are carrying. Helpful to see if any machines are looping. Also see looping, @ps, and most of the commands that start with @. & slay slay This is a Wizard command that kills players without paying any insurance to the victims. It is used in places where 'suicide' should not pay. (Su-ic-ide is pain-less... {MASH theme}) & take See 'get'. & whisper whisper =. Whispers the message to the named person, if they are in the same room as you. No one else can see the message. You can also whisper to things you are carrying, or to things that are carrying you. whisper =: also works, in a fashion similar to page-pose. 'whisper' can be abbreviated by just 'w'. & WHO WHO Displays a list of players currently connected to the MUSH. The WHO tells you how long a player has been on and how long they have been inactive. & DOING This command displays the list of players currently connected to the MUSH. For mortals, it is identical to WHO. For wizards, it displays the WHO in the format mortals see. The wizard WHO shows location and host, but does not show @doing messages. DOING shows @doing messages but not location or host. & @poll @poll This wizard-only command sets the "poll" - the Doing question. If "@poll" is used by itself, the question is reset to the default string "Doing". & @aahear An Aahear on an object is activated whenever the listen pattern matches anything done/said by anything else in the room, and itself. (Ahear ignores itself, helpful from keeping machines from triggering itself) See @listen, @ahear, @amhear. & @aclone The @aclone of an object is the action to be executed when that object is @cloned. It works just like other @a attributes. Please note that there is no @oclone, and that @clone is always a command, not an attribute. & @adescribe @adescribe = . Sets the actions to be taken when is looked at. Actions are lists of commands separated by semi-colons and these commands are executed by the object (see also PUPPET). Things can execute almost any command but rooms and exits are restricted to forcing objects/puppets to do things. Function/percent substitutions are applied to the commands b efore they are executed. can be specified as or #, or as 'me' or 'here'. May be abbreviated @adesc. See also @describe, @idescribe and @odescribe. Some people find @adescs on people to be annoying. Be aware of this before you set one. & @afailure @afailure = . Sets the actions to be taken on failure to use . Actions are lists of commands separated by semi-colons and these commands are executed by the object (see puppet). Things can execute almost any command but rooms and exits are restricted to forcing objects/puppets to do things. Gender substitutions are applied to the commands before they are executed, this allows use of the players name who caused the action. can be specified as or #, or as 'me' or 'here'. May be abbreviated @afail. See also @fail and @ofail. & @ahear @ahear = . Sets the actions to be taken after a string set in the @listen (See @listen) is matched. Actions are lists of commands separated by semi-colons and these commands are executed by the object (see puppet). Objects can execute almost any command. Gender substitutions are applied to the commands before they are executed, this allows use of the players name who caused the action. See also @aahear and @amhear. & @adeath @adeath = . Sets the actions to be taken after is killed. Actions are lists of commands separated by semi colons and these commands are executed by the object (see puppet) Objects can execute almost any command. Gender substitutions are applied to the commands before they are executed, this allows use of the players name who caused the action. See also @odeath and @death. & @amhear @amhear is like @ahear, only the @listen string/pattern is only applied to statements/strings that the object itself generates. @amhear and @ahear together equal @aahear. See @ahear, @listen, and @aahear. & @apayment @apayment = . Sets the actions to be taken after a player gives object pennies (see @cost). Actions are lists of commands separated by semi-colons and these commands are executed by the object (see puppet). Objects can execute almost any command. Gender substitutions are applied to the commands before they are executed, which allows use of the player's name who caused the action. May be abbreviated @apay. See also @pay and @opay. & @ause @ause = . Sets the actions to be taken when an object is succesfully "used". Actions are lists of commands separated by semi-colons. This functions in a similar manner to the other @a-attributes, such as @asuccess and @apayment. & @asuccess @asuccess = . Sets the actions to be taken on successful usage of . Actions are lists of commands separated by semi-colons and these commands are executed by the object (see puppet). Objects can execute almost any command. Gender substitutions are applied to the commands before they are executed, this allows use of the players name who caused the action. It can be abbreviated @asucc. can be specified as or #, or as 'me' or 'here'. See also @success and @osuccess. & @adrop = . Sets the actions to be taken when is dropped. See "help @asuccess" for a more detailed explanation of action attributes. & use use Attempts to use an object, triggering its @use/@ouse/@ause attributes. The person using the object must pass its uselock; no inheritance check is necessary. This is may be done remotely, by using a dbref number; it provides an easy way for non-INHERIT objects to perform commands on INHERIT objects. & @boot @boot or @boot/port Disconnects the player from the game. The /port switch takes a descriptor number instead (the "Port" number in WHO for wizards). Only Wizards can use this command, so you better not be naughty! Heh! (Well, you can be naughty... it's annoying that gets on the nerves of wizards real quickly. Ex: @adesc me = kill %N = 100 will get you @booted real quickly.) & @charges @charges = . Allows you to limit the # of times an action can be used. If there is a charges attribute it is decremented each time an action is triggered, once it reaches zero actions are disabled. See also @runout. & @chown @chown =. Changes the ownership of to . Objects may be things, rooms or exits. To chown things, you have to be carrying the thing. For rooms or exits, you have to be in the room. Objects must have the chown_ok flag set before it can be @chowned (See FLAGS). In a room, the command used must be @chown here = , and for an object, you must be very specific. Note: @chown DOES understand the pronoun me. Players can't be @chowned; they always own themselves. & @chzone @chzone =. Changes the zone of to . If is "none", the zone is reset to NOTHING. @chzone'ing a player does not automatically change the zone of his objects. Anyone may reset the zone of an object he owns; the zone he changes the object zone must either be "none", or must be owned by him. Only wizards may @chzone an object to an arbitrary zone object. Players may @chzone themselves to an object they own; otherwise, only wizards may @chzone players. @chzone'ing resets the WIZARD, ROYALTY, and INHERIT flags on non-player objects. See "help ZONES" for an explanation of zones. & @chzoneall @chzoneall =. Changes the zone of all objects owned by to . If is "none", the zone is reset to NOTHING. Only wizards may use this command. & @clone @clone For objects, creates an exact duplicate of it and puts it in the current room. For exits, it creates an exact duplicate of that exit, except the clone's source is the current room rather than whatever the original exit's source was. & @cost @cost = number of pennies that need to be given to an object to trigger @pay, @opay and @apay. Example: @cost exit-machine=10 @apay exit-machine=@open %N-exit @pay exit-machine=Your exit has been created. & @create @create [=]. Creates a thing with the specified name. Creation costs either pennies or 10 pennies, whichever is greater. The value of a thing is proportional to its cost. To be exact, value=(cost/5)-1. Value cannot be greater than 100, any values that would be greater than 100 are rounded down to 100. (see give re: greed) & @describe @describe [=]. can be a thing, player, exit, or room, specified as or # or 'me' or 'here'. This sets the description a player sees when they use the command 'look '. Without a description argument, it clears the message. It can be abbreviated @desc. @desc's on everything that isn't dark is considered to be Good Building Practice. & @destroy @destroy[/override] Recycles and returns the player's investment (the cost of @create) You should always @destroy objects you no longer need; this keeps the database down to a manageable size. @destroy may be used to recycle any object but will have a delayed effect on rooms. Rooms are removed approximately every ten minutes, until then, they have the Going (G) flag set on them. Should you change your mind, simply@set = !Going. The queue for destroyed objects is automatically cleared. In addition, the equivalent of a @drain is performed: all commands waiting on it as a semaphore are immediately discarded(not run at all). You should always @destroy objects that you no longer need. This keeps the database down to a manageable size. The SAFE flag protects objects from destruction. The /override switch negates this protection (and is equivalent to "@nuke"). The DESTROY_OK flag allows anyone who is holding an object to @destroy it. This is good for "temporary" objects like "Can of Cola". & @dig @dig[/teleport] [= [;]*[,[;]*]] Creates a new room with the specified name and displays its number. This costs 10 pennies. If the [= ....*] option is used, the exit will be opened and linked for you. The [,...*] option will link a reverse exit for you. If the "teleport" switch is supplied, the digger will be teleported into the new room automatically. Example: @dig Kitchen = Kitchen;k;north;n will dig a room called Kitchen, and open an exit called 'Kitchen' in your current room. Example 2: @dig Kitchen = Kitchen;k;north;n,out;o;south;s will dig a room called Kitchen, open an exit called 'Kitchen' in the current room, AND open an exit 'out' in the room 'Kitchen' leading to the current room. The ; symbol means that you may enter the exit by typing 'k','north' or 'n' also. Only the first Exit name is displayed in the Obvious exits list. & @drop @drop [=]. can be a thing, player, exit, or room, specified as or # or 'me' or 'here'. Sets the drop message for . The message is displayed when a player drops . Without a message argument, it clears the message. See also @odrop and @adrop. & @gedit @edit now takes wildcard patterns, so this command is merely an alias for @edit, kept for backwards compatbility. See "@edit" for details. & @edit @edit / = , @edit / = $, @edit / = ^, This is useful when you don't want to have to retype those obnoxiously long descriptions just to make one little change. Instead, search and replace via @edit. is a pattern, optionally containing wildcards, for the attribute names you wish to edit. Only attributes already defined on may be edited. and are two strings. It's also possible to use "$" and "^" to signal appending and prepending text, respectively. If the text contains commas, precent signs, or similar special characters, it usually must be enclosed in curly braces. See also ATTRIBUTES. & @grep @grep[/] [/]= This command searches attributes in an object for . It can taken one of two switches, "list" and "print". The default is "list", and simply lists the attributes in the object which contain the pattern. The "print" switch prints out all the attributes which contain the pattern, hiliting the pattern itself in boldface (you must be ANSI_DISPLAY in order to use this switch). You must be able to see attributes on (i.e. you must control the object, it must be VISUAL, or you must be a Wizard or Royalty). is an optional wildcard pattern specifying attributes to match (much like @edit). If is not provided, all attributes are assumed (just as if you had provided "*"). is not treated as a wildcard pattern, so you can grep for patterns containing '*', '?', etc. Also, is NOT PARSED, so '[v(0)]' and the like can be searched for. & @emit @emit [/room] This send message to every person in the current room. However, no identifier marking it as being sent by you is shown. For example, @emit foo would show 'foo' to every object in the room. The /room switch makes this command equivalent to "@lemit". See also @pemit, @remit, @oemit, @lemit, NOSPOOF and SPOOFING. & @failure @failure [=]. can be a thing, player, exit, or room, specified as or # or 'me' or 'here'. Sets the fail message for . The message is displayed when a player fails to use . Without a message argument, it clears the message. May be abbreviated @fail. See also @afail and @ofail. Putting @fails on all exits and objects that are locked is Good Building Practice. & @find @find [] [=,] Displays the name and number of every room, thing, or player that you control whose name matches . Because the command is computationally expensive, this costs 100 pennies. You can limit the range of the @find by specifying and , where these are the first and last dbrefs to examine. & @force @force =. Forces the game to act as though had entered . Only wizards may force players. May be abbreviated @fo. Wizards cannot be forced by players. Hard luck. You can always force objects you control, especially puppets. Puppets can be given abbreviated commands in the form of . #'s are necessary if the puppet is not in the same room as you. See Puppets. & @death @death [=]. can be specified as or # or 'me' or 'here'. Sets the death message for . The message is displayed when is killed. Without a message argument, it clears the message. See also @adeath and @odeath. & @idescribe @idescribe [=]. Sets object's internal description. The internal description of an object will be shown to any object entering it. Without a message argument, it shows the usual @desc. (see enter, @enter, @oenter, and enter_ok). May be abbreviated @idesc & @link @link =; @link =here; @link |=home. Links to room specified by . For things and players, sets the home room (See HOMES). For rooms, sets the drop-to room (See DROP-TOs). For exits, sets the target room; exits must be unlinked, and you must own/control the target room unless its LINK_OK flag is set. Linking an exit costs 1 penny. If the exit was owned by someone else, the former owner is reimbursed 1 penny. (see @open, @dig) LINK_OK objects can also be used as semaphores, and any object can be @parented to them. & @listen @listen = . A wildcard pattern for an object to listen for. If/when is heard, the object's ahear is triggered. Note: if @listen is matched the objects contents will also hear the message. See "help LISTEN" for more details. & @lock @lock[/] = Locks to a specific key(s). can be specified as or #, or as 'me' or 'here'. Boolean expressions are allowed, using '&' (and), '|' (or), '!' (not), and parentheses ('(' and ')') for grouping. To lock to a player, prefix their name with '*' (ex. '*Moonchilde'). The available switches on this command are /enter, /tport, /use, and /page. The first two are equivalent to @elock, and the latter two to @ulock. Example: @lock Purse = me|*Darling will lock object purse so that only you or player Darling can take it. See "help @lock2" for more. & @lock2 There are six types of special locks: Indirect, Carry, Is, Owner, Attribute, and Evaluation locks. Indirect locks -- locks an object to the lock of the specified object. Good if you have many locks with the same key, simply lock all the locks to one object, then lock that object to the common key. Example: @lock foo=@bar locks foo to bar's key. Carry lock -- You can go though only if you carry foo. Example: @lock bar = +foo Is lock -- You can only go through if you ARE foo. Example: @lock bar = =foo The last two are different from @lock foo = bar in that @lock foo=bar will let you pass either if you carry bar or are bar. See "help @lock3" for more. & @lock3 Owner lock -- You can only go through if you have the same owner as foo. Example: @lock bar = $foo Attribute lock -- You can only go through if you have an attribute set on yourself which matches the value of the attribute lock. The value is a string which may contain wildcards, greater than, and less than. The locked object must be able to read the attribute from the thing trying to pass the lock; if it cannot do so, the thing cannot pass the lock. (So, mortals can generally only usefully lock to public attributes like 'sex', or to attributes on their own objects). All attribute locks take the format @lock thing=attribuate:value Example: @lock thing=sex:m* will lock thing to anyone whose sex attribute starts with an 'm'. @lock exit=name: and comparing it to ; a lock is passed if these are equal. may be thought of much like a user-defined function; its contents are evaluated with the equivalent of EVAL(thing, attribute) For the purposes of evaluation, the player trying to pass the lock on thing is the enactor (%N) and the thing is "me" (%!) Example: @lock thing = Ispuppet/1 &Ispuppet thing = [hasflag(%#, PUPPET)] This locks thing to puppets only. If player tries to pass the lock on thing, Ispuppet evaluates to: [hasflag(, PUPPET)] and the function returns 0 or 1 depending on whether or not player is a puppet. The lock is passed if the evaluation equals "1". See "help @lock5" for more. & @lock5 Evaluation locks are extremely flexible; you can even use them to imitate other types of locks. For example, instead of @lock object = #5 you can use @lock object = VA/#5 and @va object = %# (This is somewhat foolish, but you can do it if you want to.) These locks are evaluated with the priviledges of the locked object; thus, if you @lock object = VA/5 and @va object = [strlen(get(%#/VZ))] and the object does not have permission to read VZ from the player trying to pass the lock, the player automatically fails to pass the lock. & @name @name = []. Changes the name of . can be a thing, player, exit, or room, specified as or # or 'me' or 'here'. For a player, it requires the player's password. & @newpassword @newpassword =. Only wizards may use this command. Changes 's password, informing that you changed it. Must be typed in full. If you forget your password, log on as guest (password = guest) and talk to a Wizard. & @odescribe @odescribe [=]. The odescribe message, prefixed by the player's name, is shown to others when the player looks at . Without a message argument, it clears the message. can be specified as or #, or as 'me' or 'here'. May be abbreviated @odesc. See also @describe, @adescribe and @idescribe. & @odrop @odrop [=]. The @odrop message, prefixed by the player's name, is shown to others when the player drops . Without a message argument, it clears the message. can be specified as or #, or as 'me' or 'here'. See also @drop and @adrop. & @ofailure @ofailure [=]. The @ofail message, prefixed by the player's name, is shown to others when the player fails to use . Without a message argument, it clears the message. can be specified as or #, or as 'me' or 'here'. May be abbreviated @ofail. See also @afail and @fail. (Note: @ofails on locked exits and objects is considered Good Building Practice.) & @odeath @odeath [=]. The @odeath message, prefixed by the player's name, is shown to others when the player is killed. Without a message argument, it clears the message. can be specified as or #, or as 'me' or 'here'. See also @adeath and @death. & @opayment @opayment [=]. The opay message, prefixed by the object's name, is shown to others in the room with object when someone 'pays' for something. Without a message argument, it clears the message. can be specified as or #, or as 'me' or 'here'. May be abbreviated @opay. See also @apay, @pay, and @cost. & @open @open [;]* [=][,[; is specified, it is linked to that room. Otherwise, it is created unlinked. You or anyone else may use the '@link' command to specify where the unlinked exit leads. Opening an exit costs 1 penny. If you specify , linking costs 1 more penny. If you specify a room, you may also specify an exit leading from that room back to the current room. This second back exit costs the same as the forward one. See also @link and @dig. & @osuccess @osuccess [=]. The @osuccess message, prefixed by the player's name, is shown to others when the player successfully uses . Without a message argument, it clears the @osuccess message. It can be abbreviated @osucc. can be specified as or #, or as 'me' or 'here'. See also @success and @asuccess. (Putting @osuccs on all useable exits and takeable objects is considered Good Building Practice, especially if it allows people to follow people w/o shouting out which exit to take each time you leave a room.) & @ouse @ouse [=]. The @use message, prefixed by the player's name, is shown to others when a player successfully does a "use" on the object. Without a message argument, it clears the @ouse message. See also @use and @ause. & @tport @tport [=] Sets the shown to when is teleported. & @otport @otport [=] Sets the , which will be prefixed by 's name, that will be shown to the others in the room that the is teleported to. & @atport @atport [=] Sets the list of actions that will perform when it is teleported. These actions are done after has arrived in its new location. & @oxtport @oxtport [=] Sets the , which will be prefixed by 's name, that will be shown to those in the room that the object has left via @teleport. & @password @password =. This changes your password. It can be abbreviated @pass. & @payment @payment [=]. The pay message is shown to the player who paid the object. Without a message argument, it clears the message. can be specified as or #, or as 'me' or 'here'. May be abbreviated @pay. See also @apay, @opay, and @cost. & @pemit @pemit[/] = The basic form of this command sends to directly. It is very similar in its effects to @emit except only one object will see the message. You may @pemit to objects in the same room, objects you are carrying, and to objects that are carrying you, or @pemit remotely, using # or *. The @pemit command can also take the following switches: /contents -- equivalent to @remit. /silent -- does not tell the @pemit'ing object a confirmation message. See also @emit, @oemit, @remit, NOSPOOF, and SPOOFING. & pose pose . Displays your name followed by the statement you posed. May be abbreviated by the ':' symbol. Example: > If you are player Bob, and you type in ':laughs out loud' everybody in the room will see: "Bob laughs out loud" The "pose" command is obsolete and has been completely replaced by ':' & @runout @runout = This is an action to be taken when charges reach zero (See '@charges'). Actions are lists of commands separated by semi-colons, and these commands are executed by the object (see puppet). Things can execute almost any command but rooms and exits are restricted to forcing puppets to do things. Gender substitutions are applied to the commands before they are executed, this allows use of the players name who caused the action. & @search @search [] [=] [,,] This command searches the database and lists objects which meet user specified search criteria. You can limit the scope of the search by specifying and as the first and last dbrefs to search. If a argument is supplied, only objects owned by that player will be listed. If a argument is supplied only objects of a certain class will be listed. Possible es include (TYPE, NAME, ZONE, PARENT, EXITS, OBJECTS, ROOMS, PLAYERS, and FLAGS). If =TYPE, possible s include (OBJECTS, ROOMS, EXITS, PLAYERS). If =NAME, only objects whose name begin with the string will be listed. If =ZONE, only objects in the zone will be listed. If =PARENT, only children of parent will be listed. For ZONE and PARENT, must be specified as a dbref number. 'help @search2' for more. & @search2 If =EXITS, OBJECTS, ROOMS, or PLAYERS, only objects of that type and whose name begin with the string will be listed. Finally if =FLAGS, only objects with the list of flags specified by will be listed. Flag names should be specified by single letters. Flag names are case-sensitive. For the class TYPE=PLAYER, and for PLAYER=, anyone may obtain information on any player. In all other cases, only wizards may obtain information about other players. This is computationally expensive, costing 100 pennies. It is generally faster than @find. Examples: @search flags=Wc <-- search for connected wizards. @search type=rooms <-- list all rooms owned by me. @search zone=#50 <-- list all objects belong to zone #50. @search Joe,100,200 <-- list all objects from #100-#200 owned by Joe. & @set @set = @set =!; @ = @set =: @set =:_/ The first two forms set (and unset) a flag on . The third form sets a pre-defined attribute (such as MOVE, FAIL, etc.) on . The fourth form sets an arbitrary attribute with on . The final form is used for copying attributes. It sets an attribute on with the contents of 's attribute. (For example: @set me=TEST1:_fluff/fail would copy the contents of the object "fluff"'s FAIL attribute into an attribute called TEST1 on me) See also FLAGS, NON-STANDARD ATTRIBUTES. & @sex @sex = Used for pronoun substitution, normally male or female. Visible to all. Examples: @sex me = Male @sex me = No thank you (silly, but possible) & @shutdown @shutdown. Only wizards may use this command. Shuts down the game. Must be typed in full. & @startup @startup = . This is an action list that gets triggered the first time the mud comes up. If the mud crashes, this list will be triggered when the mud comes back up. Thus, you can retrigger objects that need to be running continuously. Setting or resetting this attribute automatically sets or resets the STARTUP (z) flag. & @stats @stats. 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. & @success @success [=]. Sets the success message for . The message is displayed when a player successfully uses . Without a message argument, it clears the message. It can be abbreviated @succ. can be specified as or #, or as 'me' or 'here'. See also @osuccess and @asuccess. & @use @use [=]. Sets the use message for . The message is displayed when a player successfully does a "use" on the object. Without a message argument, it clears the message. & @teleport @teleport [=] . Teleports to . must be a thing; if you do not supply a thing, the object is assumed to be yourself. The destination must be either JUMP_OK or controlled by you, and you must either control or 's current location. Also, the destination, if a room, cannot be teleport-locked against . Mortals cannot teleport Royalty or Wizards. If the target room has a drop-to, will go to the drop-to room instead. Wizards can teleport things into players' inventories. 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 is an exit. See also: JUMP_OK, NO_TEL, @oxtport, @tport, @otport, @atport, @elock & @unlink @unlink ; @unlink here. Removes the link on the exit in the specified direction, or removes the drop-to on the room. Unlinked exits may be picked up and dropped elsewhere. Be careful, anyone can relink an unlinked exit, becoming its new owner (but you will be reimbursed your 1 penny). See @link. & @unlock @unlock [/] . Removes the lock on . See @lock. It can take four switches: /enter, /tport, /use, and /page. The first two are equivalent to @eunlock, and the latter two are equivalent to @uunlock. & @wall @wall [/] . Only wizards may use this command. In its default form, this command allows the player to shout a message to every player connected. It must be typed in full. It can also take the following switches: /wizard : broadcast to wizards (like @wizwall) /royalty : broadcast to wizards and royalty (like @rwall) /pose : pose a message to all (like @wallpose) /emit : emit a message to all (like @wallemit) & @rwall @rwall Only wizards and royalty may use this command. It broadcasts a message to all connected wizards and royals, prefixed with "Admin:". If the first character is : or ; it does the same thing as @wizpose. & @rwallpose @rwallpose Only wizards and royalty may use this command. It's a variant of @rwall, using a pose, and is identical to "@rwall :" & @rwallemit @rwallemit Only wizards and royalty may use this command. It is similar to @wizemit, but broadcasts the message to all connected wizards and royals. & @wizwall @wizwall . Only wizards may use this command. Shouts to all wizards logged in. If the first character is a : or ; it does the same thing as @wizpose. (; doesn't attach the space) & @wizpose @wizpose . Only wizards may use this command. Shows the to all wizards logged on in pose format. & @wizemit @wizemit . Only wizards may use this command. Shows to all wizards logged on in emit format. & @whereis @whereis . Tells you the location of the player. If you wish to remain unlocatable, set your UNFINDABLE flag. (See FLAGS). The person being located will get a message to inform them that you have successfully or unsuccessfully located them. Ex: @whereis Moonchilde & ATTRIBUTES ATTRIBUTES The following standard attributes can be set on your character. These attributes are set by typing @ = . Typing help on the @-command associated with each attribute will get you help on that attribute. Attributes with (*) after them are special, and a) cannot be set by players and b) are possibly only visible to wizards. There is a section also on NON-STANDARD ATTRIBUTES. AAHEAR ACLONE ACONNECT ADEATH ADESCRIBE ADISCONNECT ADROP AEFAIL AENTER AFAILURE AHEAR ALEAVE AMHEAR AMOVE APAYMENT ASUCCESS AWAY CHARGES COST DEATH DESCRIBE DOES DROP EALIAS EFAIL ENTER FAILURE HAVEN IDESCRIBE IDLE LALIAS LAST (*) LASTSITE (*) LEAVE LISTEN MOVE ODEATH ODESCRIBE ODROP OEFAIL OENTER OFAILURE OLEAVE OMOVE OPAYMENT OSUCCESS OXENTER OXLEAVE PAYMENT PASSWORD (*) QUEUE (*) RQUOTA (*) RUNOUT SEX STARTUP SUCCESS Those with a (*) above have a separate help section for each of them so that you can find out what each attribute controls. Any attribute name can be shortened, but at shorter forms run the risk of conflicting with other attribute names. This could result in you setting an unwanted attribute. & LAST LAST This attribute shows the last time you connected to the MUSH. It is only visible to objects that control you (wizards, you or your objects) or if you set yourself VISUAL. & PASSWORD PASSWORD This attribute stores your encrypted password. It is not visible to anyone within the game, and cannot be altered except via the @password and @newpassword commands. & QUEUE QUEUE This attribute is only visible to objects that control you (wizards, yourself, and your objects) or unless you are VISUAL. It tracks how many active commands you have in the queue. & RQUOTA RQUOTA This attribute tracks building quota if it is implemented. It is settable in-game only by a wizard, and is only visible to wizards. & NON-STANDARD ATTRIBUTES NON-STANDARD ATTRIBUTES Objects now have the capability of having an unlimited number of attributes. These attributes can have any name. In order to preserve backward compatibility, the VA-VZ, WA-WZ, and XA-XZ attributes still exist in their previous form, and are set like a normal attribute. To set a new style attribute, you use the form & = OR @_ = OR @set = : All attributes have the ability to be used in attribute locks (see help @lock). Attributes also have the new ability to be 'owned' independent of object ownership (see help ATTRIB-OWNERSHIP). All attributes can be addressed in get() as well as in edit, and %-substitute form, as well as accessed via the V-function. & ATTRIB-OWNERSHIP ATTRIBUTE OWNERSHIP The first person to create an attribute on an object is said to 'own' that attribute. You must control the object in order to create an attribute on it. ***OWNERSHIP OF ATTRIBUTES IS NOT CHANGED WHEN AN OBJECT IS @CHOWNED*** This allows for 'locks' which cannot be faked as the person who controls the lock and the person who controls the attribute MUST be the same for the lock to succeed. It is also possible to 'freeze' or 'lock' an attribute so that new owners of the object can not tamper with it. This allows 'standard' commands on objects and other neat stuff. Attribute locking is controlled by the new command @atrlock and attribute ownership can be changed via the @atrchown command. & BEING KILLED 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. (Note: Killing a wizard is a quick way to discover the many uses of the @boot command... and killing anyone can be very rude.) & BOGUS COMMANDS BOGUS COMMANDS Bogus commands can be made using exits. For example, to make a 'sit' command, one could "@open sit", then "@link sit=here" (because unlinked exits can be stolen), "@lock sit=me&!me" (impossible to be both at once, therefore always fails), and "@fail sit=You sit on the chair."; "@ofail sit=sits on the chair.". Since nobody can go through it, it always fails. The @fail message is displayed to the player, and the @ofail message (preceded by the player's name) to everyone else. A better way to do user-defined commands is to use $comands on objects. These are set using & =$: If something a user types matches the command pattern, the actions are executed. In order to execute a $command, you must pass the object's uselock. Otherwise, you will get a "Permission denied." message. & CONTROL CONTROL There are 3 rules to controlling objects: 1) You control anything you own. 2) A wizard controls everything. 3) Anybody controls an unlinked exit, even if it is locked. Builders should beware of 3, lest their exits be linked or stolen. & COSTS COSTS These are usually: kill: 10 pennies (or more, up to 100 pennies) page: 1 penny @dig: 10 pennies @create: 10 pennies (or more, up to 505M), (sacrifice value=(cost/5)-1.) @find: 100 pennies @search: 100 pennies @entrances: 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' to get the costs for the particular MUSH you are on. & DROP-TO DROP-TO When the @link command is used on a room, it sets a drop-to location. Any object dropped in the room (if it isn't STICKY) will go to that location. If the room is STICKY, the drop-to will be delayed until the last person in the room has left. & EXITS EXITS An exit links one room to another room. If an exit is set DARK it will not show up in the list of obvious exits in a room. & FAILURE FAILURE You fail to use a thing when you cannot take it (because its lock fails). You fail to use an exit when you cannot go through it (because it's unlinked or locked). You fail to use a person when you fail to rob them, but you can't rob in a mush. You fail to use a room when you fail to look around (because it's locked). See ATTRIBUTES, @fail and @ofail. & FLAGS FLAGS @set = to set, @set = ! to reset. Everything in the universe of this MUSH (Rooms, Exits, Objects, Players, etc...) are represented in the same way at the program level. A room merely has the room flags set and a player has the player flags set. In addition, flags also give objects abilities or qualities. For instance, a wizard has the wizard flag set. That is what lets the program know he may use wizard abilities. An object or room may have the dark flag set. In the case of an object, this makes the object invisible to normal eye-sight. In the case of a room, the room becomes too dark to see other objects or players. For more specific information on a particular flag, request help on a flag title. Example: help ENTER_OK To get the list of flags, do "help flag list" & FLAG LIST Flag Title Flag Title Flag Title --------------------------------------------------------------------- A - ABODE flag B - BUILDER flag C - CHOWN_OK flag D - DARK flag E - EXIT flag F - FLOATING flag G - GOING flag H - HAVEN flag I - INHERIT flag J - JUMP_OK flag K - KEY flag L - LINK_OK flag M - MONITOR flag N - NOSPOOF flag O - OPAQUE flag P - PLAYER flag Q - QUIET flag R - ROOM flag S - STICKY flag T - TEMPLE flag U - UNFINDABLE flag V - VISUAL flag W - WIZARD flag X - SAFE flag Y - REDIRECT flag a - AUDIBLE flag a - ANSI_DISPLAY flag c - CONNECTED flag d - DESTROY_OK flag e - ENTER_OK flag g - GAGGED flag h - HALT flag i - IMMORTAL flag l - LISTENER flag m - MYOPIC flag n - NO_TEL flag p - PUPPET flag r - ROYALTY flag t - TRANSPARENT flag u - SUSPECT flag v - VERBOSE flag x - TERSE flag z - STARTUP flag --------------------------------------------------------------------- & ANSI_DISPLAY ANSI_DISPLAY When set on a player, this flag bold-hilites the names and owners of attributes when the player "examines" an object. This makes it much easier to pick out where attributes begin and end, when examining complex objects. You must be using a terminal which supports ANSI control codes in order for this to work. & MONITOR MONITOR When set on a player, this flag notifies that player when anyone connects to or disconnects from the MUSH. It may only be set by wizards, and is only valid for players. & AUDIBLE Exits that are AUDIBLE propagate sound to their destinations. In other words, any message - emit, say, or pose - that is heard in the source room of the exit is passed on to the contents of the exit's destination room. The message is prepended with the exit's @prefix attribute; if there is no @prefix, the default is used: "From ," Messages matching a certain pattern may be filtered out by using @filter on an exit; read 'help @filter' for more. In order for exits in a room to propagate sound, the room must also be set AUDIBLE. If the room is audible, exits that are audible show up on a @sweep, even if they are set DARK. See "help AUDIBLE2" for more. & AUDIBLE2 This flag is also valid for things. If an object is set AUDIBLE, any messages which originate from its contents will be broadcasted to the outside world. This makes it very simple to program vehicles. Like AUDIBLE on exits, the message is prepended with the thing's @prefix attribute, and messages matching certain patterns may be filtered with @filter. If there is no @prefix, the message will be prepended with "From ," The AUDIBLE object does not receive its own propagated messages. The AUDIBLE flag allows most "emitters" (objects that listen for messages and broadcast them to other rooms) to be eliminated. The message is propagated only to the next room and no farther, so there is no danger of looping. & LISTENER LISTENER When set on a thing, this flag activates the ^ listen patterns on the object. Objects which have ^ listen patterns but are not set LISTENER do not check those patterns, although they are flagged on a @sweep as listening. & STARTUP STARTUP This flag is automatically set or reset when you set or clear the STARTUP attribute on something. Players may not set this flag. The presence of this flag just shows that an object has a STARTUP attribute on it. & MYOPIC MYOPIC Myopic is a flag which suppresses the printing of an object's dbref number and abbreviated list of flags when it is looked at. It makes the world appear like you don't control any of it, even if you're a wizard or royalty. It's useful if you don't like to see object numbers. This flag is only valid for players; objects belonging to MYOPIC players are automatically considered to be MYOPIC. & INHERIT INHERIT Inherit is a security flag used to prevent objects without authorization from using @force, @set, and @trigger on other objects. Authorization is successful if: 1. The enactor is WIZARD. 2. The enactor's owner is INHERIT. 2. The enactor is INHERIT. 3. The target is not INHERIT. Only INHERIT or WIZARD objects may force their owners. Players can always @force, @set, and @trigger their objects. Read "help Inherit2" for more. & INHERIT2 Authorization is only denied if the enactor is neither a player nor INHERIT, and the target is WIZARD, INHERIT, or is a player. The INHERIT protection against @trigger may be overridden by setting the target object LINK_OK. Objects which are WIZARD are not subject to any special criterion, although they are automatically considered to be INHERIT. The normal criteria for object control still apply. For zoned objects, the INHERIT flag protects against an object from being controlled by anything not owned by its owner. This prevents someone who controls a zone from doing things like @forcing an INHERIT object to @force its owner. & VERBOSE VERBOSE An object set VERBOSE echoes the commands it executes to its owner before executing them. This differs from the PUPPET flag in that the owner sees the command itself, rather than the output from the command. This flag is extremely useful in debugging, especially if used in conjunction with the PUPPET flag. VERBOSE output follows the format "#] ". Something like "#1300] @trigger me/va" is a good example of typical VERBOSE output. & TERSE TERSE When an object is set TERSE, it does not see the descriptions or success/failure messages in rooms. This is a useful flag if you're on a slow connection or you're moving through a familiar area and don't want to see tons of text. This flag is only valid for players; objects belonging to TERSE players are automatically considered to be TERSE. & SUSPECT SUSPECT This flag is only settable by wizards. Players with this flag have their connects, disconnects, name changes, and kills reported to all connected wizards. & SAFE SAFE This flag, when set on an object, prevents the object from being destroyed via the @destroy command. The "@nuke" command must be used to recycle the object. Valuable objects should be protected by this flag. & NO_TEL NO_TEL The NO_TEL command prevents objects in a room from being @teleported; mortals in the room cannot use @teleport, nor can other objects @teleport them out. This flag is checked on the "absolute room" of an object; thus, if you are in a container in a room which is NO_TEL, you cannot use @teleport from that container. There is no way to get out of a NO_TEL room except by exiting in some "normal" manner, or by going "home". Puzzle rooms, prisons, and similar locations would probably benefit from this flag. & IMMORTAL IMMORTAL If this flag, which is settable only by wizards, is set on an object, that object may not be killed by mortals. In addition, @allhalts do not affect IMMORTAL objects. Also, commands executed by IMMORTAL objects do not cost anything. This is useful for machines which need to run continuously. & ROYALTY ROYALTY If this flag is set on any type of object, then that object will be able to @tel and examine as if it was a wizard. Royalty players do not need money, nor are they affected by quotas or restricted building. Royalty is not able to change things like a wizard could. Only wizards may set it on players, although players who are ROYALTY may set their objects ROYALTY. & TRANSPARENT TRANSPARENT If this flag is set on an exit, when a player looks at the exit they will see the description and contents of the destination room following the exit's description. The exit list and succ/fail messages of the room will NOT be displayed. If this flag is set on a room, it will display exits in "long" format. Instead of putting all the exits on one line under "Obvious exits:" it prints each exit on a line by itself, in the format: leads to . Thus, you might have: Obvious exits: South leads to Joe's Room. East leads to City Park. instead of Obvious exits: South East & ABODE ABODE If a room is set ABODE, any player can set his home there, and can set the homes of objects there. It does not mean that a player can open an exit to that room, only that they can set their home there. This flag should not be set unless you want to make the room a public 'living area'. & CHOWN_OK CHOWN_OK This flag, when set, allows you to transfer ownership to another player. To set it, you must be carrying the object. You also have to be in the room if you want to set this flag on rooms or exits. After this flag is set, the new player may gain ownership of the object by using the @chown command (See @chown). & CONNECTED CONNECTED This flag applies only to players and it shows if the player is connected or not. Thus, each time you are connected to the game, you should see the 'c' flag set, otherwise, you are DEAD! You cannot reset this flag, and it is used internally by the code for things like tabulating players for the WHO list, etc. & REDIRECT REDIRECT This flag is automatically set or reset when you start or end a redirection on something. Players may not set this flag. The presence of this flag just shows that an object is redirecting. The object redirected to is set in the 'REDIRECTION' attribute. (See @redirection for further details). & DARK DARK If a room is DARK, then no items are shown when a person 'looks' there. If a thing is DARK, then "look" does not list that object in the room's Contents:, and if an exit is DARK, it doesn't show up in the Obvious Exits: list. Puppets and objects that can listen cannot be DARK. If your god wishes it so, objects and wizards that are dark will be slightly disguised in speech and poses. Such actions by these objects will show as being from Someone or Something depending on whether it was an object or wizard. & DESTROY_OK DESTROY_OK When set on an object, it allows any player to destroy it as long as the object is not locked against them. This is good for things like notes, whereby the recipient can destroy the note after reading it, instead of having to look for you to destroy it. & ENTER_OK ENTER_OK If an object or person is ENTER_OK, other players may enter the object or person by using 'enter . Only objects which are ENTER_OK may be entered, regardless of the enter lock. Players must also have the ENTER_OK set if they wish to be able to receive things given to them by other players via the 'give = '. & GENDER GENDER @set me=sex:. Default unassigned. If a player's gender is set, %-substitutions will use the appropriate pronoun for that player. Only meaningful for players. See SUBSTITUTIONS. & GOING GOING Used internally for the @destroy command, it is set on rooms that are set to be destroyed. In the event that a player decides they don't want to destroy the room after all then they can unset it. & HAVEN HAVEN @set here=haven;@set me=haven. If a room is HAVEN, you cannot kill in that room. If a player is set HAVEN, he cannot be paged. Bummer. & KEY KEY When set on an object prevents puppets from picking it up. When it is set on an exit, it prevents puppets from going through it. Objects that are KEY go home when the thing carrying them teleports or goes home. & LINK_OK LINK_OK If a something is LINK_OK, anyone can link exits to it (but still not from it). Also, LINK_OK overrides the INHERIT protection against @trigger (although not @force or @set). See @link, INHERIT. & UNFINDABLE UNFINDABLE If a player is set UNFINDABLE, he cannot be found by the @whereis command. You also cannot use loc(), locate(), and similar functions to find his location. If a room is set UNFINDABLE, you cannot locate any of its contents via any means (@whereis, the loc() function, etc.) If a wizard is set UNFINDABLE, and he is idle past the allowable maximum idle time, he will be set DARK automatically. & FLOATING If a room is set floating, you will not be notified every 10 minutes or so that you have a disconnected room. & OPAQUE OPAQUE When set on a player, it prevents other players from seeing what you are carrying in your inventory. This applies to everyone and everything, even wizards and royalty, or to stuff that you own. & PLAYER PLAYER The PLAYER flag identifies you as a player. This flag cannot be reset by any player, not even a Wizard (not, yet, anyway *grin*). It is used mainly by the mush code to identify your commands, check for validity of commands or locks etc. Generally, just pretend it isn't even there. & JUMP_OK When a room is set JUMP_OK, then that room can be teleported into by anyone. See @teleport. & PUPPET PUPPET @set = puppet. Causes an object to grow eyes and ears, and relay all it sees and hears to its owner. See: @force, PUPPETS & ROOM ROOM This flag is automatically set on rooms when you @dig a new room. It cannot be changed. Rooms have the added advantage that they can be saved from destruction by setting the room to !GOING (SEE GOING). However, this can only be done if no other room/object was created that overwrote your room when it was set for destruction. & VISUAL VISUAL The flag a lot of players have been waiting for. When set on your object, it allows other players to examine it and see all the object's attributes as if they owned the object. They cannot make any changes to the object. & QUIET QUIET This flag when set on yourself prevents you from hearing the 'set' or 'triggered' messages from any objects you own. When set on an object, only that object will not relay its messages. & HALT HALT While this flag is set, the object cannot perform any mush actions, listen, be triggered, etc. & GAGGED GAGGED When set on a player, it disables him from doing anything except moving and looking. He cannot talk, page, build, pose, get or drop objects. (Yet another consequence of annoying the wizards.) Only wizards can set this flag. & STICKY STICKY If a thing is STICKY, it goes home when dropped (See HOMES). It also goes home when an object carrying it teleports or goes home. If a room is STICKY, its drop-to is delayed until the last person leaves (See DROP-TOs). This flag is only meaningful for things and rooms. & TEMPLE TEMPLE If a room is TEMPLE, you can sacrifice things for pennies by dropping them there. It has no meaning for players, things, or exits. Only wizards can set this flag. & BUILDER BUILDER If a player has the BUILDER flag set, it means that all the building commands will work for them. Without it, you can only explore the world but not add to it. This is only settable by Wizards. & WIZARD WIZARD If a person is WIZARD, they are a wizard, unkillable, subject to fewer restrictions, and able to use wizard commands. In general, WIZARDs can do anything using # or *. Only player #1 can set and unset the WIZARD flag of other players. No WIZARD can turn their own WIZARD flag off. & NOSPOOF NOSPOOF If an object is set NOSPOOF, @emits, @oemits, @remits and @pemits will be distinctively tagged to help prevent spoofing. This flag is only valid for players; objects belonging to NOSPOOF players are automatically considered NOSPOOF. Beware: the output format of NOSPOOF can mess up @listen and ^ patterns, giving unexpected results. See SPOOFING, @emit, @pemit, @remit, and @oemit. & LISTENING There are two ways to listen for something in a room. The easiest way is to use a combination of @listen and @ahear/@aahear/@amhear. The second way is to use a "^" pattern in an attribute, similar to the way "$" is used for user-defined commands. This takes the form of: & = ^: The criterion for triggering a pattern-listen is the same as that for triggering an @ahear - the object cannot trigger its own listen patterns. Listen patterns are checked after the object's normal @listen attribute. To activate the listen patterns, the LISTENER flag must be set on the object. Only things may have listen patterns. Example: > &TEST object = ^* screams.:"Hello, %0. Object - Set. > :screams. Amberyl screams. > Object says "Hello, Amberyl." & HERE HERE The word 'here' refers to the room you are in. For example, to rename the room you're in (if you control it), you could enter "@name here= ". & HOMES HOMES Every thing or player has a home. This is where things go when sacrificed, players when they go home, or things with the STICKY flag set go when dropped (See STICKY). Homes are set with the @link command. A thing's home defaults to the room where it was created, if you control that room, or your home. You can link an exit to send players home (with their inventory) by "@link =home". Drop-tos can also be set to 'home'. See DROP-TO and @link. & LINKING LINKING You can link to a room if you control it, or if it is set LINK_OK or ABODE. Being able to link means you can set the homes of objects or yourself to that room if it is set ABODE, and can set the destination of exits to that room if it is LINK_OK. See LINK_OK, ABODE and @link. & ME ME The word 'me' refers to yourself. Some things to do when starting out: 1) give yourself a description with "@describe me=", then look at yourself with "look me". 2) set your gender, if you wish it known, with "@set me=male" or "@set me=female" (or "@set me=neuter" to be an 'it'). & MONEY You will be given a daily allowance of pennies to spend in anything you can find to spend it on. See COSTS and SACRIFICING. & PUPPETS PUPPETS An object is made into a puppet by doing @set [object]=puppet. Once an object is a puppet it will relay all that it sees and hears to its master. All objects created by a puppet are owned by its master. When puppets spend or earn pennies they are also taken from and given to its master. In order to prevent puppets from screwing up puzzles objects may have the key flag set, which will prevent puppets from picking the object up. A puppet may be commanded by its master by: @force [object]=command or by the shorthand version, [name/# of puppet] command example: @force fred="hi there. or fred "hi there. or #4342 "hi there. & ROBBERY ROBBERY Robbing is not allowed on this MUSH. If you really need money, ask your friendly neighborhood wizard, or @destroy some objects you no longer need. & SACRIFICING SACRIFICING You sacrifice a thing by dropping it in the temple. Sacrificing an object gives you the value of an object. You can't sacrifice something you own, and get money for it. If you have >= 10000 pennies, all sacrifices are worth only 1 pennies. The sacrifice value of a thing is set at creation by "@create frob=cost", by the formula value=(cost/5)-1. Only a wizard can change the value of an object, once created. & SUBSTITUTIONS SUBSTITUTIONS All messages may contain %-substitutions, which evaluate to gender-specific pronouns if the player's gender is set. They are: %s (subjective) = Name, he, she, it. %o (objective) = Name, him, her, it. %p (possessive) = Name's, his, her, its. %N (player's name) = Name. If you need a '%', use %%. Ex. '@ofail teapot=burns %p hand on the hot teapot.' See GENDER. Other substitutions, such as %va-%vz, %wa-%wz, %xa-%xz, and %0-%9 may also be used and will be evaluated to v(?) (See V-FUNCTIONS) where ? is a-z or 0-9. In these substitutions and pronoun substituions, if the first letter of the name is capitalized, the first letter of the substitution will also be capitalized. Other possible substitutions are: %# (player number) = #. Equivalent to num(%N) %! (object number) = #. Equivalent to num(me) %l (location number) = #. Like loc(%N). This works even if the LOC() function would normally not, since the enactor has "volunteered" his location by triggering another object. %r (newline) = Carriage return and newline in output. Note that this counts as two characters, in functions like strlen(). (puts "\r\n") %t (tab) = Tab character in output. %b (blank) = Space in output. %_ This will give you the discreet value of ANY attribute you can read on the object. & SUCCESS SUCCESS You successfully use an object when you take it. You use an exit successfully when you go through it. You successfully use a room when you look around. See ATTRIBUTES, @SUCCESS and @OSUCCESS. & TYPES OF OBJECTS TYPES OF OBJECTS There are 4 types of objects: things, players, exits, and rooms. The first letter following an object's ID number indicates the type: P(layer), E(xit), R(oom), otherwise, thing. Things are inanimate objects that can be carried. Players are animate objects that can move and carry. Exits are the means by which objects move from room to room. Rooms are locations that contain objects and linked exits. & ENACTOR The enactor is the thing that is doing something. If one of your Objects does something (through a @force or @trigger) it is the enactor. If one of your links or rooms does something (through a @Asuc, @Afail or @Aenter) then YOU are the enactor and the action happens as if you typed it in directly. To determine the enactor create an object to listen for the action with @ahear = :[v(N)]. & STACK V(0) through V(9) are the ten items on the stack. Stack values can be set by either parameters after an @trigger or asterisk substitution in pattern matching. Example: @listen item=* foo *; @ahear item= [v(1)] bar [v(0)]. & @switch @switch [/] = , [,, ]... [,] This is a general control structure which can be thought of as a combination if/then/else and switch/case. It compares against the expressions , , ..., until a match is found. It then performs the associated action list. It matches all expressions which conform to the string pattern, and executes all the associated actions. (To match only the first, use "@select"). If no match is found, the is executed. Wildcards and the < and > operators are allowed in the targets. This is the default. @switch also can take two switches, /all and /first. The default is /all; /first is equivalent to @select. Example: > @va thing = $foo *:@switch %0=*a*,:acks,*b*,:bars,*c*,:cheeps,:glurps > foo abc thing acks thing bars thing cheeps > foo xxx thing glurps & @select @select = , [,, ]... [,] This is similar to @switch, except it only executes the action associated with the first expression which matches - the targets are mutually exclusive. If no target is matched, the default actions are executed. This is equivalent to "@switch/first". Example: > @va thing = $foo *:@select %0=*a*,:acks,*b*,:bars,*c*,:cheeps,:glurps > foo abc thing acks > foo xxx thing glurps & @trigger @trigger can pass control and data (on the stack) between or within items. Example: @va item=@trigger me/vb=[v(0)]; @vb item = :[v(0)]; @trigger item/va=foo. & VERBS For most verbs there are three forms: Verb (what the Enactor sees), Overb (what others in the area see) and Averb (the action to be taken when the event happens). Example: @Drop, @Odrop and @Adrop & V-function The V() function is used to get attributes on an object, as well as another form of writing certain %-substitutions. v(N) is the name of the enactor, v(#) is the number of the enactor, v(!) is the number of the current object, v(L) is the number of the enactor's location, v(0) to v(9) are the stack variables. These are equivalent to %N, %#, %!, %L, and %0 to %9, respectively. When used to get attributes, this function takes the form V(). This is equivalent to GET(me/) but V() is faster. & @scan @scan[/] @scan gives you a list of all objects containing $commands (user-defined commands) which could match . If given no switches, it checks you, your possessions, your location, objects in your location, the zone/parent 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. It does NOT scan objects that you do not control and are not set VISUAL. This command can take 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. & @sweep @sweep [connected | here | inventory | exits ] @sweep gives you a list of all objects/players that are listening in the room you are currently in, as well as 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. & @cpattr @cpattr / = / [,/,/,...] This command is used to copy on to the object-attribute pairs in a comma-separated list. For example: @cpattr test/va = test/vb, cube/va, tribble/foo would copy the VA attribute from object "test" to VB on "test", VA on "cube", and FOO on "tribble". is matched as if you were performing a @set on it. & SPOOFING Spoofing is the act of making other characters think that a person said or did something that they did not. This is very easy to accomplish, and has some good effects, which is why it is allowed. Overabuse of this feature will result in its being made a wizard only feature. (Not to mention perhaps bringing down a few @toads on people) See also @emit, @pemit, @remit, @oemit and NOSPOOF. & FUNCTIONS Functions are specialized commands used to manipulate strings and other input. Function take the general form: [FUNCTION()] The brackets are used to delimit and force evaluation of the function (or nested functions). The brackets can also be used to group functions for the purposes of string concatenation. In general, more than one pair of brackets is not required, but liberal use of them makes code easier to read. You can nest an arbitrary number of brackets. Examples: > say [first(rest(This is a nice day))] You say, "is" > @va me=This is a Wizard - Set. > @vb me=nice day Wizard - Set. > say [first([rest([v(va)] [v(vb)])])] You say, "is" See "help FUNCTION LIST" for a list of available functions. & FUNCTION LIST Several major variants of functions are available. The help topics are listed below, together with a quick summary of the function type and some examples of that type of function. Attribute functions: attribute-related manipulations (GET, UFUN) Boolean functions: produce 0 or 1 (false or true) answers (OR, AND) Dbref functions: return dbref info related to objects (LOC, LEXITS) Information functions: find out something about objects (FLAGS, MONEY) List functions: manipulate lists (REVWORDS, FIRST) Math functions: number manipuation (ADD, DIV) String functions: string manipulation (ESCAPE, FLIP) Utility functions: general utilties (TIME, COMP) & Attribute functions All these functions access attributes on an object. eval() get() grep() lattr() obj() poss() subj() ufun() v-function xget() zfun() & Boolean functions Boolean functions all return 0 or 1 as an answer. and() eq() gt() gte() lt() lte() neq() not() or() xor() & Dbref functions Dbref functions return a dbref or list of dbrefs related to some value on an object. con() home() lcon() lexits() loc() locate() lsearch() next() num() owner() parent() pmatch() rnum() room() zone() & Information functions Information functions return values related to objects. conn() elock() flags() hasflag() idlesecs() lock() lstats() lwho() mail() money() name() nearby() type() & List functions List functions take at least one space-separated list of words and return transformed lists or one or more members of those lists. after() before() extract() first() iter() match() member() remove() rest() revwords() setdiff() setinter() setunion() sort() splice() wordpos() words() & Math functions Math functions take one or more numbers and return a numeric value. abs() add() dist2d() dist3d() div() max() min() mod() mul() sign() sub() & String functions String functions take at least one string and return a transformed string, parts of a string, or a value related to the string(s). alphamin() alphamax() art() capstr() cat() comp() edit() escape() flip() lcstr() merge() mid() pos() repeat() secure() space() strcat() strlen() switch() ucstr() & Utility functions These functions don't quite fit into any other category. beep() convsecs() convtime() create() die() dig() isnum() isword() lnum() open() rand() s-function secs() time() & ISWORD() isword() This function returns 1 if every character in is a letter, or 0, if any character isn't a letter. Case does not matter. & ISNUM() isnum() This function returns 1 if is a number, and 0 if it is not. Numbers can begin with a '-' sign (for negatives), but the rest of the characters in the string must be digits. & GREP() grep(,,) This function returns a list of attributes on containing . is a wildcard pattern for attribute names to search; if you want to search all attributes, use "*". The list returned is similar to that returned by @grep/list /= Parsing _does_ occur before this function is invoked. Therefore, "special" characters will need to be escaped out. is NOT wildcard matched. & REPEAT() repeat(,) This function simply repeats , times. No spaces are inserted between each repetition. Example: > say [repeat(Test, 5)] You say, "TestTestTestTestTest" & SPLICE() splice(, , ) This function splices and together. and are space-separated lists of words If a word in is the same as , it is replaced by the word in the corresponding position in . Both lists must have the same number of words. Example: > say [splice(foo bar baz,eek moof gleep,bar)] You say, "foo moof baz" & MERGE() merge(, , ) This function merges and , depending on . If a character in is the same as , it is replaced by the character in the corresponding position in . The two strings must be of the same length. Example: > say [merge(AB--EF,abcdef,-)] You say, "ABcdEF" Spaces need to be treated specially. A null character is considered to equal a space, for . Example: > say [merge(AB[space(2)]EF,abcdef,)] You say, "ABcdEF" & EDIT() edit(, , ) edit(, $, ) edit(, ^, ) This functions in a similar way to the @edit command; instead of taking an attribute from an object, it takes an arbitrary string. The first form of the function searches for and replaces it with ; the other two forms append and prepend text to , respectively. See also "help @edit". & SWITCH() switch(, , , [, ], ...[]) This function matches against the essions, returning the corresponding . If nothing is matched, the is returned. This is similar to @switch/first, but instead of executing the list, it simply returns it. Wildcard patterns are allowed. There may be a maximum of ten arguments total to the function. Example: > say switch(test, *a*, foo, *b*, bar, *t*, neat, baz) You say, "neat" > say switch(ack, *a*, foo, *b*, bar, *t*, neat, baz) You say, "foo" > say switch(moof, *a*, foo, *b*, bar, *t*, neat, baz) You say, "baz" & REVWORDS() revwords() This function reverses the order of words in a list. Example: > say revwords(foo bar baz eep) You say, "eep baz bar foo" & SETDIFF() setdiff(, ) This function returns the difference of two sets -- i.e., the elements in that aren't in . The list that is returned is sorted. Example: > say setdiff(foo baz gleep bar, bar moof gleep) You say, "baz foo" & SETINTER() setinter(, ) This function returns the intersection of two sets -- i.e., the elements that are in both and . The list that is returned is sorted. Example: > say setinter(foo baz gleep bar, bar moof gleep) You say, "bar gleep" & SETUNION() setunion(, ) This function returns the union of two sets -- i.e., all the elements of both and , minus any duplicate elements. Think of it as CAT() without words duplicated. The list returned is sorted. Example: > say setunion(foo baz gleep bar, bar moof gleep) You say, "bar baz foo gleep moof" & CONVSECS() convsecs() This function converts seconds to a time string, based on how many seconds the number is after Jan 1, 1970. Example: > say [secs()] You say, "709395750" > say [convsecs(709395750)] You say, "Wed Jun 24 10:22:54 1992" & CONVTIME() convtime(