| 1 |
& help |
|---|
| 2 |
This is the index to the MUSH online help files. |
|---|
| 3 |
|
|---|
| 4 |
For an explanation of the help system, type: help newbie |
|---|
| 5 |
|
|---|
| 6 |
For the list of MUSH commands, type: help commands |
|---|
| 7 |
For the list of MUSH topics, type: help topics |
|---|
| 8 |
For an alphabetical list of all help entries: help entries |
|---|
| 9 |
For a list of entries that match a pattern: help <wildcard> |
|---|
| 10 |
For information about PennMUSH: help code |
|---|
| 11 |
|
|---|
| 12 |
For a list of flags: help flag list |
|---|
| 13 |
For a list of functions: help function list |
|---|
| 14 |
For a list of attributes: help attribute list |
|---|
| 15 |
To see the configuration of this MUSH: @config |
|---|
| 16 |
|
|---|
| 17 |
On many MUSHes, list local commands with: +help |
|---|
| 18 |
|
|---|
| 19 |
If there are any errors in the help text, please notify a wizard in the |
|---|
| 20 |
game, or send mail to pennmush-bugs@pennmush.org, which is the address |
|---|
| 21 |
of the team who develop PennMUSH (and its distributed help files) but |
|---|
| 22 |
probably have no relation to this MUSH in particular. |
|---|
| 23 |
|
|---|
| 24 |
& newbie |
|---|
| 25 |
|
|---|
| 26 |
If you are new to MUSHing, the help files may seem confusing. Most of |
|---|
| 27 |
them are written in a specific style, however, and once you understand |
|---|
| 28 |
it the files are extremely helpful. |
|---|
| 29 |
|
|---|
| 30 |
The first line of a help file on a command or function will normally be |
|---|
| 31 |
the syntax of the command. "Syntax" means the way the command needs to |
|---|
| 32 |
be typed in. In the help files, when the syntax of a command is described, |
|---|
| 33 |
square brackets [] mean that that part of the command is optional and |
|---|
| 34 |
doesn't have to be typed in. Also, pointy brackets <> mean that that part |
|---|
| 35 |
of the command needs to be replaced with a specific piece of information. |
|---|
| 36 |
|
|---|
| 37 |
You should not type the [] or <> brackets when entering a command. |
|---|
| 38 |
|
|---|
| 39 |
(continued in help newbie2 -- type 'help newbie2' without the single quotes) |
|---|
| 40 |
|
|---|
| 41 |
& newbie2 |
|---|
| 42 |
|
|---|
| 43 |
For example, the syntax of the help command is: |
|---|
| 44 |
|
|---|
| 45 |
help [<topic>] |
|---|
| 46 |
|
|---|
| 47 |
What this means is that to get help, you would type first the word "help" and |
|---|
| 48 |
then you could optionally type the name of a more specific topic in order |
|---|
| 49 |
to get help on that topic. Just typing "help" will work too (that's why the |
|---|
| 50 |
<topic> part is optional). |
|---|
| 51 |
|
|---|
| 52 |
Some common commands that you should look at help for are: |
|---|
| 53 |
|
|---|
| 54 |
look say go page pose take give home |
|---|
| 55 |
|
|---|
| 56 |
Just type help <command> for help. Example: help page |
|---|
| 57 |
|
|---|
| 58 |
(continued in help newbie3) |
|---|
| 59 |
& newbie3 |
|---|
| 60 |
|
|---|
| 61 |
There is help available on every standard MUSH command. If you see a command |
|---|
| 62 |
or someone mentions one to you that you want to know more about, try just |
|---|
| 63 |
typing: help <command name> -- that will most likely bring up the help |
|---|
| 64 |
file on it. |
|---|
| 65 |
|
|---|
| 66 |
Please note that just because there is help available on a command does |
|---|
| 67 |
not necessarily mean that the command can be used on this MUSH. The |
|---|
| 68 |
siteadmin of the MUSH can choose to turn off some commands. If there's |
|---|
| 69 |
something that you would like available, and it isn't, please ask a wizard |
|---|
| 70 |
why not. |
|---|
| 71 |
|
|---|
| 72 |
It is also highly recommended that any new player read the MUSH manual, |
|---|
| 73 |
written by Amberyl. It is available by anonymous FTP from: |
|---|
| 74 |
ftp.pennmush.org |
|---|
| 75 |
in the directory: |
|---|
| 76 |
/pub/PennMUSH/Manuals |
|---|
| 77 |
|
|---|
| 78 |
& topics |
|---|
| 79 |
Help is available on the following topics: |
|---|
| 80 |
|
|---|
| 81 |
ACTION LISTS ANCESTORS ANONYMOUS ATTRIBUTES |
|---|
| 82 |
ATTRIB-OWNERSHIP ATTRIBUTES BEING KILLED |
|---|
| 83 |
BOOLEAN VALUES CHAT CLIENTS |
|---|
| 84 |
CONTROL COPYRIGHT COSTS |
|---|
| 85 |
CREDITS DBREFS DROP-TO |
|---|
| 86 |
ENACTOR EVALUATION EXECUTOR |
|---|
| 87 |
EXITS FAILURE FLAGS |
|---|
| 88 |
FUNCTIONS GENDER GLOBALS |
|---|
| 89 |
HERE HOMES INTERIORS |
|---|
| 90 |
LINKING LISTENING LISTS |
|---|
| 91 |
LOOPING MASTER ROOM MATCHING |
|---|
| 92 |
|
|---|
| 93 |
(continued in help topics2) |
|---|
| 94 |
& topics2 |
|---|
| 95 |
ME MONEY MUSHCODE |
|---|
| 96 |
NON-STANDARD ATTRIBUTES PARENTS POWERS |
|---|
| 97 |
PUPPETS QUEUE REGEXPS |
|---|
| 98 |
REGISTERS SEMAPHORES SETTING-ATTRIBUTES |
|---|
| 99 |
SPOOFING STACK STRINGS |
|---|
| 100 |
SUBSTITUTIONS SUCCESS SWITCHES |
|---|
| 101 |
TYPES OF OBJECTS USER-DEFINED COMMANDS VERBS |
|---|
| 102 |
WARNINGS WILDCARDS ZONE MASTER ROOMS |
|---|
| 103 |
ZONE MASTERS ZONES |
|---|
| 104 |
|
|---|
| 105 |
Type "help <topic name>" for help. |
|---|
| 106 |
& ACTION LISTS |
|---|
| 107 |
Action lists are simply lists of actions that are all executed at once. |
|---|
| 108 |
You can have an action list in a user-defined command, in one of the |
|---|
| 109 |
a-attributes, or in many other commands. Action lists may not be |
|---|
| 110 |
executed directly from a client, except in the case of a command |
|---|
| 111 |
which forces a re-insertion into the queue such as @switch or |
|---|
| 112 |
@dolist. |
|---|
| 113 |
|
|---|
| 114 |
Actions in an action list are separated by semicolons. Each action is |
|---|
| 115 |
simply a separate MUSH command. If part of the action (such as the text |
|---|
| 116 |
in an @emit, for example) contains a semi-colon or comma, you may need |
|---|
| 117 |
to enclose that part in curly braces {}. You can also nest action lists |
|---|
| 118 |
inside each other by enclosing each action list in braces {}. |
|---|
| 119 |
|
|---|
| 120 |
Substitution will be performed on the contents of action lists before |
|---|
| 121 |
they are executed. |
|---|
| 122 |
|
|---|
| 123 |
(continued in help action2) |
|---|
| 124 |
& ACTION2 |
|---|
| 125 |
Example 1: |
|---|
| 126 |
> @asuccess Gift = @pemit %#={The box pops open; surprise!} ; |
|---|
| 127 |
@name me=New Toy ; @desc me={A shiny new toy, just for %N!} |
|---|
| 128 |
> take gift |
|---|
| 129 |
The box pops open; surprise! |
|---|
| 130 |
> look new toy |
|---|
| 131 |
New Toy |
|---|
| 132 |
A shiny new toy, just for Cyclonus! |
|---|
| 133 |
|
|---|
| 134 |
Example 2: |
|---|
| 135 |
> &TEST me=$test:@emit {Testing; testing; one, two.} ; |
|---|
| 136 |
@dolist 1 2 3={think {Test ##, success.} } |
|---|
| 137 |
> test |
|---|
| 138 |
Testing; testing; one, two. |
|---|
| 139 |
Test 1, success. |
|---|
| 140 |
Test 2, success. |
|---|
| 141 |
Test 3, success. |
|---|
| 142 |
|
|---|
| 143 |
See also: ATTRIBUTES, SUBSTITUTION, @asuccess, @dolist |
|---|
| 144 |
& ANCESTORS |
|---|
| 145 |
ANCESTORS |
|---|
| 146 |
|
|---|
| 147 |
Objects can inherit attributes from other objects through the |
|---|
| 148 |
use of parents. An object's parent, its parent's parent, its |
|---|
| 149 |
parent's parent's parent, etc. constitute the object's "parent chain" |
|---|
| 150 |
and lookups work the way up the chain until an inheritance occurs. |
|---|
| 151 |
|
|---|
| 152 |
Ancestors are "virtual parents" that are assumed to be last on every |
|---|
| 153 |
parent chain. There is one ancestor for each object type (room, exit, |
|---|
| 154 |
thing, player), and @config lists the dbref of each ancestor object |
|---|
| 155 |
(@config ancestor_room, etc.) Under normal circumstances, if an attribute |
|---|
| 156 |
can't be retrieved from an object or any of its explicit parents, |
|---|
| 157 |
the attribute will be looked for on the appropriate ancestor. |
|---|
| 158 |
The ORPHAN flag may be set on an object to cause lookups on that |
|---|
| 159 |
object to ignore ancestors (like the pre-ancestor behavior). |
|---|
| 160 |
|
|---|
| 161 |
Ancestors may themselves have parent chains, but these are (obviously) |
|---|
| 162 |
not virtually terminated by ancestors. |
|---|
| 163 |
|
|---|
| 164 |
Note that the choice of which ancestor to look up is based on the |
|---|
| 165 |
type of the *child* object, as is the check of the ORPHAN flag. |
|---|
| 166 |
Also note that ancestors are *not* checked for $-commands or |
|---|
| 167 |
^-commands; you should use the master room for global commands, |
|---|
| 168 |
instead. |
|---|
| 169 |
|
|---|
| 170 |
See also: PARENTS, ORPHAN |
|---|
| 171 |
& ANONYMOUS ATTRIBUTES |
|---|
| 172 |
& LAMBDA |
|---|
| 173 |
& #LAMBDA |
|---|
| 174 |
In many cases where a function expects a object/attribute pair |
|---|
| 175 |
that refers to an attribute to evaluate, you can use the form |
|---|
| 176 |
|
|---|
| 177 |
#lambda/<code> |
|---|
| 178 |
|
|---|
| 179 |
instead, and the code will be treated as an attribute's body. |
|---|
| 180 |
The code will normally be parsed twice, so special characters |
|---|
| 181 |
should be escaped where needed. |
|---|
| 182 |
|
|---|
| 183 |
These anonymous attributes should be used for short and simple |
|---|
| 184 |
pieces of code. Anything long or complicated should go in an |
|---|
| 185 |
actual attribute, for readability and maintainability. |
|---|
| 186 |
|
|---|
| 187 |
See 'HELP ANONYMOUS2' for examples. |
|---|
| 188 |
& ANONYMOUS2 |
|---|
| 189 |
A typical usage of anonymous attributes would be to convert |
|---|
| 190 |
a list of dbrefs to names, as so: |
|---|
| 191 |
|
|---|
| 192 |
>say map(#lambda/name(\%0), #3 #12 #23) |
|---|
| 193 |
You say, "Joe Robert Sally" |
|---|
| 194 |
|
|---|
| 195 |
Because the code is parsed twice, you can actually build parts of |
|---|
| 196 |
it in place, which is very convenient. Consider this implementation |
|---|
| 197 |
of a lattrval function, which is like lattr() but it only returns |
|---|
| 198 |
non-empty attributes: |
|---|
| 199 |
|
|---|
| 200 |
&lattrval me= |
|---|
| 201 |
filter(#lambda/hasattrval([secure(before(%0, /))], \%0), lattr(%0)) |
|---|
| 202 |
|
|---|
| 203 |
The first time '#lambda/hasattrval([secure(before(%0, /))], \%0)' is |
|---|
| 204 |
parsed in a call like 'u(lattrval, #1234)', it is turned into |
|---|
| 205 |
'#lambda/hasattrval(#1234, %0)', thus avoiding the need for a setq() or |
|---|
| 206 |
the like to store the top-level %0 for use in a real attribute called by |
|---|
| 207 |
filter(). However, this can lead to problems with evaluating un-trusted |
|---|
| 208 |
code. Use secure() or escape() where neccessary. |
|---|
| 209 |
|
|---|
| 210 |
See 'HELP ANONYMOUS3' for another example. |
|---|
| 211 |
& ANONYMOUS3 |
|---|
| 212 |
|
|---|
| 213 |
You can also use lit() to avoid having the code evaluated twice, if |
|---|
| 214 |
needed. For example, this code, which returns all unlinked exits in |
|---|
| 215 |
a room: |
|---|
| 216 |
|
|---|
| 217 |
&lunlinked me=filter(lit(#lambda/strmatch(loc(%0), #-1)), lexits(%0)) |
|---|
| 218 |
|
|---|
| 219 |
This approach is useful both for security in making it harder to evaluate |
|---|
| 220 |
a string that shouldn't be, and for making the code look nicer by not |
|---|
| 221 |
having to escape percent signs, brackets, and other special |
|---|
| 222 |
characters. However, it also makes it harder to build the code string on |
|---|
| 223 |
the fly. Use what's most appropriate. |
|---|
| 224 |
|
|---|
| 225 |
See 'HELP ANONYMOUS4' for a list of functions that support anonymous |
|---|
| 226 |
attributes. |
|---|
| 227 |
& ANONYMOUS4 |
|---|
| 228 |
The following functions support anonymous attributes: |
|---|
| 229 |
|
|---|
| 230 |
filter() filterbool() fold() foreach() map() mapsql() |
|---|
| 231 |
mix() munge() sortby() sortkey() step() |
|---|
| 232 |
& ATTRIB-OWNERSHIP |
|---|
| 233 |
ATTRIBUTE OWNERSHIP |
|---|
| 234 |
|
|---|
| 235 |
The latest person to set an attribute on an object is the owner |
|---|
| 236 |
of that attribute. If you lock an attribute, using the @atrlock command, |
|---|
| 237 |
only the person who owns the attribute will be able to alter the |
|---|
| 238 |
attribute. This allows you to create standard commands on objects and |
|---|
| 239 |
then @chown them to others without letting them alter them. |
|---|
| 240 |
|
|---|
| 241 |
Attribute ownership is NOT changed when the object itself is @chown'ed. |
|---|
| 242 |
To change attribute ownership, you must use the @atrchown command. |
|---|
| 243 |
|
|---|
| 244 |
You must control an object in order to set attributes on it. |
|---|
| 245 |
|
|---|
| 246 |
See also: @atrlock, @atrchown, ATTRIBUTES |
|---|
| 247 |
& ATTRIBUTES |
|---|
| 248 |
& ATTRIBUTES LIST |
|---|
| 249 |
& ATTRIBUTE LIST |
|---|
| 250 |
Attributes with (*) after them are special, cannot be set by players, |
|---|
| 251 |
and may only be visible to wizards or admin. For those attributes, there |
|---|
| 252 |
is no @-command, so you can just type 'help <attribute name>' for help. |
|---|
| 253 |
For all other attributes, type 'help @<attribute name>' for help. |
|---|
| 254 |
|
|---|
| 255 |
Standard Attributes: (see @list/attribs for the complete list) |
|---|
| 256 |
AAHEAR ACLONE ACONNECT ADEATH ADESCRIBE |
|---|
| 257 |
ADISCONNECT ADROP AEFAIL AENTER AFAILURE |
|---|
| 258 |
AHEAR ALEAVE ALFAIL AMHEAR AMOVE |
|---|
| 259 |
APAYMENT ASUCCESS AWAY CHARGES COST |
|---|
| 260 |
DEATH DESCRIBE DROP EALIAS EFAIL |
|---|
| 261 |
ENTER FAILURE FORWARDLIST HAVEN IDESCRIBE |
|---|
| 262 |
IDLE LALIAS LAST (*) LASTIP (*) LASTLOGOUT(*) |
|---|
| 263 |
LASTSITE (*) LEAVE LFAIL LISTEN MOVE |
|---|
| 264 |
ODEATH ODESCRIBE ODROP OEFAIL OENTER |
|---|
| 265 |
OFAILURE OLEAVE OLFAIL OMOVE OPAYMENT |
|---|
| 266 |
OSUCCESS OXENTER OXLEAVE OXMOVE PAYMENT |
|---|
| 267 |
QUEUE (*) RQUOTA (*) RUNOUT SEX STARTUP |
|---|
| 268 |
SUCCESS TFPREFIX |
|---|
| 269 |
|
|---|
| 270 |
(continued in help attributes2) |
|---|
| 271 |
& ATTRIBUTES2 |
|---|
| 272 |
An attribute is part of the code on an object that makes it unique. An |
|---|
| 273 |
attribute can contain any sort of text -- from a single word, to a long |
|---|
| 274 |
paragraph, to a piece of MUSHcode. Some attributes are standard in |
|---|
| 275 |
PennMUSH. That means that their effects are pre-set. |
|---|
| 276 |
|
|---|
| 277 |
Standard attributes can be set using one of the following commands: |
|---|
| 278 |
@<attribute name> <object>=<content> |
|---|
| 279 |
@set <object>=<attribute name>:<content> |
|---|
| 280 |
&<attribute name> <object>=<content> |
|---|
| 281 |
|
|---|
| 282 |
It is also possible to have non-standard attributes, which can be named |
|---|
| 283 |
anything you like. Please see 'help NON-STANDARD ATTRIBUTES' for more |
|---|
| 284 |
information on those. |
|---|
| 285 |
|
|---|
| 286 |
(continued in help attributes3) |
|---|
| 287 |
& ATTRIBUTES3 |
|---|
| 288 |
Any attribute name can be shortened, but a shorter forms run the risk |
|---|
| 289 |
of conflicting with other attribute names. This could result in you |
|---|
| 290 |
setting an unwanted attribute. |
|---|
| 291 |
|
|---|
| 292 |
For example: |
|---|
| 293 |
@adesc me=think %N looks at you. |
|---|
| 294 |
will set your ADESCRIBE attribute just as |
|---|
| 295 |
@adescribe me=think %N looks at you. |
|---|
| 296 |
would. |
|---|
| 297 |
|
|---|
| 298 |
To see the attributes that are set on you or on any of the objects you own, |
|---|
| 299 |
you should use the "examine" command. See 'help examine'. |
|---|
| 300 |
|
|---|
| 301 |
(continued in help attributes4) |
|---|
| 302 |
& ATTRIBUTES4 |
|---|
| 303 |
Attributes can be owned by someone other than the object they are set on. |
|---|
| 304 |
This allows the person to change the content of just that attribute while |
|---|
| 305 |
not the rest of the object. Attributes can also be locked, which prevents |
|---|
| 306 |
them from being changed by anyone. |
|---|
| 307 |
|
|---|
| 308 |
In addition to the standard attributes with pre-set effects, there are |
|---|
| 309 |
some special attributes that date from the days before you could set |
|---|
| 310 |
non-standard attributes with any name you wanted. These are the |
|---|
| 311 |
attributes VA-VZ, WA-WZ, XA-XZ. These attributes have no pre-set effects, |
|---|
| 312 |
and were just to allow players to store any text or MUSHcode that they |
|---|
| 313 |
wished in those attributes. Now that non-standard attributes are available, |
|---|
| 314 |
it is highly recommended that you instead use them, since you can use |
|---|
| 315 |
longer and descriptive names for attributes, which makes it much easier |
|---|
| 316 |
to examine and work on objects. |
|---|
| 317 |
|
|---|
| 318 |
See also: ATTRIB-OWNERSHIP, @set, examine, @atrchown, @atrlock, hasattr(), |
|---|
| 319 |
get(), v(), NON-STANDARD ATTRIBUTES, SETTING-ATTRIBUTES, ATTRIBUTE TREES |
|---|
| 320 |
|
|---|
| 321 |
& BEING KILLED |
|---|
| 322 |
|
|---|
| 323 |
Getting killed is no big deal. If you are killed, you return to |
|---|
| 324 |
your home, and all things you carry return to their homes. You |
|---|
| 325 |
also collect 50 pennies in insurance money (unless you have >= 10000 |
|---|
| 326 |
pennies or you were killed via the Wizard slay command). See 'MONEY'. |
|---|
| 327 |
Generally, killing is not encouraged unless absolutely necessary. |
|---|
| 328 |
It can be extremely rude and annoying. |
|---|
| 329 |
|
|---|
| 330 |
Many MUSHes choose to disable the kill command. |
|---|
| 331 |
|
|---|
| 332 |
See also: kill, slay, @death |
|---|
| 333 |
& BOOLEAN VALUES |
|---|
| 334 |
|
|---|
| 335 |
A boolean variable, for those of you not familiar with programming, |
|---|
| 336 |
is a variable that is either true or false. Normally, a value of |
|---|
| 337 |
1 is considered "true" and a value of 0 is considered "false". Many |
|---|
| 338 |
MUSH functions return either 1 if they are true or 0 if false. |
|---|
| 339 |
For example, the hasflag() function tests to see if an object has |
|---|
| 340 |
a certain flag set on it. If |
|---|
| 341 |
hasflag(<object>,<flag name>) |
|---|
| 342 |
is true (the object has the flag), it will return 1. If it is false, |
|---|
| 343 |
it will return 0. |
|---|
| 344 |
|
|---|
| 345 |
Other functions expect to operate on boolean values. What they |
|---|
| 346 |
consider "true" or "false", however, depends on the setting of |
|---|
| 347 |
the "tiny_booleans" config option (@config tiny will show this). |
|---|
| 348 |
|
|---|
| 349 |
(continued in help boolean2) |
|---|
| 350 |
& BOOLEAN2 |
|---|
| 351 |
If tiny_booleans is... |
|---|
| 352 |
no FALSE: null string, 0, any negative db |
|---|
| 353 |
TRUE: everything else |
|---|
| 354 |
yes TRUE: numbers other than 0 |
|---|
| 355 |
strings beginning with numbers other than 0 |
|---|
| 356 |
FALSE: everything else |
|---|
| 357 |
|
|---|
| 358 |
Or, put another way: |
|---|
| 359 |
Value tiny_booleans=no tiny_booleans=yes Gotcha |
|---|
| 360 |
0 FALSE FALSE |
|---|
| 361 |
non-zero number TRUE TRUE |
|---|
| 362 |
#<non-negative> TRUE FALSE * |
|---|
| 363 |
#<negative> FALSE FALSE |
|---|
| 364 |
|
|---|
| 365 |
null string FALSE FALSE |
|---|
| 366 |
0<non-numbers..> TRUE FALSE * |
|---|
| 367 |
<non-numbers...> TRUE FALSE * |
|---|
| 368 |
|
|---|
| 369 |
(continued in help boolean3) |
|---|
| 370 |
& BOOLEAN3 |
|---|
| 371 |
|
|---|
| 372 |
Examples (assuming tiny_booleans is "no"): |
|---|
| 373 |
not(foo) = 0 |
|---|
| 374 |
not(<null string>) = 1 |
|---|
| 375 |
not(-66) = 0 |
|---|
| 376 |
not(0) = 1 |
|---|
| 377 |
not(#-1) = 1 |
|---|
| 378 |
not(#12) = 0 |
|---|
| 379 |
And so on... |
|---|
| 380 |
(note: These rules only apply when a function expects a Boolean |
|---|
| 381 |
value, not for strings that expect other values.) |
|---|
| 382 |
|
|---|
| 383 |
See also: BOOLEAN FUNCTIONS, not(), t() |
|---|
| 384 |
& CLIENTS |
|---|
| 385 |
Clients are special software programs that you can use to connect to |
|---|
| 386 |
MUSHes. They are usually much nicer to use than raw telnet and give you |
|---|
| 387 |
many additional features, such as larger text buffers (so you can type |
|---|
| 388 |
more), backscroll, history of previous commands, macros, and so on. |
|---|
| 389 |
|
|---|
| 390 |
Here is a list of common clients and the web sites where they can be |
|---|
| 391 |
found. Please note that the below sites are subject to change. The |
|---|
| 392 |
below are listed solely for your information and possible benefit. |
|---|
| 393 |
The developers of PennMUSH have nothing to do with the clients. |
|---|
| 394 |
|
|---|
| 395 |
OPERATING |
|---|
| 396 |
SYSTEM CLIENT WEB SITE |
|---|
| 397 |
----------------------------------------------------------------------- |
|---|
| 398 |
UNIX Tinyfugue http://tinyfuge.sourceforge.net |
|---|
| 399 |
WINDOWS MUSHClient http://www.mushclient.com |
|---|
| 400 |
SimpleMU http://simplemu.onlineroleplay.com |
|---|
| 401 |
MuckClient http://www.xcalibur.co.uk/MuckClient/ |
|---|
| 402 |
MAC OS X Savitar http://www.heynow.com/Savitar/ |
|---|
| 403 |
Atlantis http://www.riverdark.net/atlantis/ |
|---|
| 404 |
Unix clients will also run on OS X. |
|---|
| 405 |
& CONTROL |
|---|
| 406 |
Controlling an object basically means that you have the power to change |
|---|
| 407 |
the object's characteristics such as flags and attributes. It may also |
|---|
| 408 |
mean that you have the ability to destroy it. |
|---|
| 409 |
|
|---|
| 410 |
Here are the conditions under which object O controls victim V: |
|---|
| 411 |
1. If V is God, O must be God |
|---|
| 412 |
2. If V is Wizard, O must be Wizard or God |
|---|
| 413 |
3. If O is a Wizard, O controls V |
|---|
| 414 |
4. If V is Royalty, O must be Royalty, Wizard or God |
|---|
| 415 |
5. If O is MISTRUST, O must be V to control V |
|---|
| 416 |
6. If V and O are owned by the same player: |
|---|
| 417 |
6a. If V is not TRUST, O controls V |
|---|
| 418 |
6b. If V is TRUST, O must be TRUST or the player must be TRUST |
|---|
| 419 |
7. If V is on a zone, and isn't a player and isn't TRUST, |
|---|
| 420 |
O controls V if O passes the zone-lock of the zone. |
|---|
| 421 |
8. If V is owned by a SHARED player, and V isn't a player and isn't set |
|---|
| 422 |
TRUST, O controls V if O passes the zone-lock of the SHARED player. |
|---|
| 423 |
|
|---|
| 424 |
Step 7 is skipped if config(zone_control_zmp_only) is on. |
|---|
| 425 |
There's also one special case: anyone can @link an unlinked exit |
|---|
| 426 |
(at which point the exit is @chowned to the linker). |
|---|
| 427 |
|
|---|
| 428 |
See also: controls(), TRUST, MISTRUST, ZONES, SHARED PLAYERS |
|---|
| 429 |
& COSTS |
|---|
| 430 |
These are usually: |
|---|
| 431 |
|
|---|
| 432 |
kill: 10 pennies (or more, up to 100 pennies) |
|---|
| 433 |
page: 0 pennies |
|---|
| 434 |
@dig: 10 pennies |
|---|
| 435 |
@create: 10 pennies (or more) |
|---|
| 436 |
@find: 100 pennies |
|---|
| 437 |
@search: 100 pennies |
|---|
| 438 |
@entrances: 100 pennies |
|---|
| 439 |
@link: 1 penny (if you didn't already own it, |
|---|
| 440 |
+1 to the previous owner). |
|---|
| 441 |
@open: 1 penny (2 pennies if linked at the same time) |
|---|
| 442 |
|
|---|
| 443 |
Type '@config/list costs' to get the costs for the MUSH you are on. |
|---|
| 444 |
|
|---|
| 445 |
See also: MONEY, money(), score |
|---|
| 446 |
& CREDITS |
|---|
| 447 |
Maintainer: Raevnos [SW] |
|---|
| 448 |
Developers: Javelin, Ervin Hearn III [EEH], Greg Millam [GM] |
|---|
| 449 |
Past Porters: Nick Gammon [NJG] (win32), Dan Williams [DW] (MacOS), |
|---|
| 450 |
Sylvia (OS/2) |
|---|
| 451 |
Former developers: Rhyanna [RLM], Trivian [TN], Halatir [LdW], Talek [TAP] |
|---|
| 452 |
|
|---|
| 453 |
The original TinyMUSH 1.0 code was written by Lawrence Foard, and |
|---|
| 454 |
was based upon James Aspnes' TinyMUD server. Since then, the code |
|---|
| 455 |
has been modified by the programmers of MicroMUSE (then MicroMUSH), |
|---|
| 456 |
and Joseph Traub (Moonchilde of PernMUSH). From January 1992 to |
|---|
| 457 |
January 1995, Lydia Leong (Amberyl of PernMUSH / Polgara of |
|---|
| 458 |
Belgariad) maintained the code currently known as PennMUSH 1.50. |
|---|
| 459 |
From January 1995 until July 2006, Alan Schwartz (Paul of DuneMUSH / |
|---|
| 460 |
Javelin elsewhere) maintained this code, along with a development |
|---|
| 461 |
team. From July 2006 on, Raevnos has been the maintainer. |
|---|
| 462 |
|
|---|
| 463 |
Big thanks to the developers of TinyMUSH 2.0, 2.2 [2.2], 3.0 [3], |
|---|
| 464 |
MUX2, and Rhost [Rhost] servers, as well as to the players of |
|---|
| 465 |
Belgariad MUSH, DuneMUSH, and M*U*S*H, and everyone else using this |
|---|
| 466 |
server! |
|---|
| 467 |
|
|---|
| 468 |
See also: help code, help license |
|---|
| 469 |
& DATABASE |
|---|
| 470 |
& DBREFS |
|---|
| 471 |
& DBREF NUMBER |
|---|
| 472 |
& DBREF # |
|---|
| 473 |
You will find the term "dbref" or "dbref number" used frequently in these |
|---|
| 474 |
help files and in MUSHcode. It is an abbreviation of "database reference |
|---|
| 475 |
number". |
|---|
| 476 |
|
|---|
| 477 |
The database is the part of MUSH that stores all the information about |
|---|
| 478 |
this particular MUSH. Players, things, rooms, and exits are all objects |
|---|
| 479 |
in the database. Each object in the database has a unique dbref number |
|---|
| 480 |
that is set when the object is created. You can use the dbref number to |
|---|
| 481 |
refer to an object that is not in your current location, and it is |
|---|
| 482 |
especially important for global code. |
|---|
| 483 |
|
|---|
| 484 |
Using DBREFs is also faster than using names, even if the object is |
|---|
| 485 |
in your location. This is because whenever you try to do something with |
|---|
| 486 |
an object (such as look at it, take it, etc.), the MUSH first has to |
|---|
| 487 |
locate the object. Since the dbref is unique, it can immediately find |
|---|
| 488 |
the object rather than checking through all the contents of your area |
|---|
| 489 |
to see if one matches the name. |
|---|
| 490 |
|
|---|
| 491 |
(continued in help dbref2) |
|---|
| 492 |
& DBREF2 |
|---|
| 493 |
|
|---|
| 494 |
If you own or control an object, you will see its dbref number listed |
|---|
| 495 |
right after its name when you look at it (unless you are set MYOPIC). |
|---|
| 496 |
|
|---|
| 497 |
Example: |
|---|
| 498 |
> look me |
|---|
| 499 |
Cyclonus(#3PWenAMc) |
|---|
| 500 |
A very short desc. |
|---|
| 501 |
|
|---|
| 502 |
The dbref number is indicated by the number/pound sign (#). Cyclonus's |
|---|
| 503 |
dbref is #3. The letters following the dbref are the abbreviations of |
|---|
| 504 |
the flags set on the object. NOTE: the abbreviation of the OPAQUE |
|---|
| 505 |
flag is 'O' (o), which looks like '0' (zero) on some clients. Make sure |
|---|
| 506 |
you have the right number before using it in your code! |
|---|
| 507 |
|
|---|
| 508 |
See also: MYOPIC, OPAQUE, MUSHCODE |
|---|
| 509 |
& DROP-TOS |
|---|
| 510 |
|
|---|
| 511 |
When you use the @link command on a room, it sets another room or |
|---|
| 512 |
object as the DROP-TO location. By default, any non-STICKY object that |
|---|
| 513 |
someone drops in the room will automatically be transported to the |
|---|
| 514 |
drop-to location, rather than staying in the room. Any STICKY object |
|---|
| 515 |
droped in the room will go to its home. |
|---|
| 516 |
|
|---|
| 517 |
If the room is set STICKY, objects dropped in the room will stay there |
|---|
| 518 |
until the last player leaves/disconnects, at which point they will be |
|---|
| 519 |
transported as described above. |
|---|
| 520 |
|
|---|
| 521 |
If the room has a @lock/dropto set on it, only objects that pass the |
|---|
| 522 |
lock will be transported (either immediately or when the last player |
|---|
| 523 |
leaves if the room is STICKY). This can be used to prevent the dropto |
|---|
| 524 |
from acting on, say, objects containing connected players. |
|---|
| 525 |
|
|---|
| 526 |
Drop-tos are useful for keeping rooms uncluttered. |
|---|
| 527 |
|
|---|
| 528 |
See also: @link, STICKY, LINK_OK, @lock |
|---|
| 529 |
& %# |
|---|
| 530 |
& %N |
|---|
| 531 |
& %~ |
|---|
| 532 |
& %: |
|---|
| 533 |
& ENACTOR |
|---|
| 534 |
The enactor is the object that does something (enacts something :). |
|---|
| 535 |
This is an important concept in MUSH, because the way many commands |
|---|
| 536 |
work will depend on who enters the command (ie, who the enactor is). |
|---|
| 537 |
Any type of object can be an enactor. |
|---|
| 538 |
|
|---|
| 539 |
There are five %-substitutions that involve the enactor: |
|---|
| 540 |
%# = the enactor's dbref |
|---|
| 541 |
%N = the enactor's name, first letter capitalized |
|---|
| 542 |
%n = the enactor's name, first letter as-is |
|---|
| 543 |
%~ = the enactor's accented name |
|---|
| 544 |
%: = the enactor's unique identifier, like objid(%#) |
|---|
| 545 |
|
|---|
| 546 |
If, for example, you have an @osucc on an object that includes the |
|---|
| 547 |
%n symbol, whenever someone picks up the object, that %n will be |
|---|
| 548 |
replaced with the name of the enactor (the person who typed 'get <object>' |
|---|
| 549 |
in this case). |
|---|
| 550 |
|
|---|
| 551 |
See also: EXECUTOR, SUBSTITUTION, DBREF |
|---|
| 552 |
& EVALUATION ORDER |
|---|
| 553 |
Whenever some text is entered by an object or thing, the MUSH program |
|---|
| 554 |
attempts to match it against a valid game command in the following |
|---|
| 555 |
order of possible commands: |
|---|
| 556 |
|
|---|
| 557 |
Special game commands: WHO, QUIT, etc. |
|---|
| 558 |
Single-token commands: ", :, ;, +, \, # |
|---|
| 559 |
Exits in the room |
|---|
| 560 |
@-commands and &attribute setting |
|---|
| 561 |
Regular game commands: get, inventory, etc. |
|---|
| 562 |
Enter aliases |
|---|
| 563 |
Leave aliases |
|---|
| 564 |
User-defined commands on nearby objects. All such $commands are matched |
|---|
| 565 |
and executed. |
|---|
| 566 |
If there are no user-defined commands nearby: |
|---|
| 567 |
If the zone of the player's location is a zone master room, |
|---|
| 568 |
Zone master room exits |
|---|
| 569 |
Zone master room user-defined commands |
|---|
| 570 |
Else |
|---|
| 571 |
User-defined commands on the zone of the player's location |
|---|
| 572 |
|
|---|
| 573 |
(continued in help evaluation2) |
|---|
| 574 |
& EVALUATION2 |
|---|
| 575 |
If still nothing is matched: |
|---|
| 576 |
User-defined commands on the player's personal zone |
|---|
| 577 |
If nothing, including zone commands, has been matched: |
|---|
| 578 |
Global exits |
|---|
| 579 |
Global user-defined commands: all $commands in the Master Room are |
|---|
| 580 |
matched. Local commands are always checked first and ALWAYS negate |
|---|
| 581 |
global commands. |
|---|
| 582 |
|
|---|
| 583 |
Because local commands overrule global commands, you can easily prevent |
|---|
| 584 |
a global command from working in a specific room by setting a copy of |
|---|
| 585 |
the global command in that room. Alternatively, if a global command is |
|---|
| 586 |
oddly not working in a room, you should check for copies of the command |
|---|
| 587 |
word in the room (using @scan). |
|---|
| 588 |
& %! |
|---|
| 589 |
& EXECUTOR |
|---|
| 590 |
The executor of a command is the object actually carrying out the command. |
|---|
| 591 |
This differs from the enactor, because the enactor is the object that sets |
|---|
| 592 |
off the command. In some cases, the enactor and the executor will be the |
|---|
| 593 |
same. There is a %-substitution, %!, that is replaced by the dbref # of |
|---|
| 594 |
the executor of the command. |
|---|
| 595 |
|
|---|
| 596 |
For example: |
|---|
| 597 |
@emit %N is the enactor and %! is the executor! |
|---|
| 598 |
> Cyclonus is the enactor and #6 is the executor! |
|---|
| 599 |
@create Box |
|---|
| 600 |
> Created: Object #10 |
|---|
| 601 |
&DO_EMIT box=$emit:@emit %N is the enactor and %! is the executor! |
|---|
| 602 |
emit |
|---|
| 603 |
> Cyclonus is the enactor and #10 is the executor! |
|---|
| 604 |
|
|---|
| 605 |
In the first case, Cyclonus directly entered the command and was therefore |
|---|
| 606 |
both the enactor and the executor. In the second, Cyclonus set off the |
|---|
| 607 |
command on the box, so Cyclonus was still the enactor, but the box was |
|---|
| 608 |
the object that was actually doing the @emit, and was thus the executor. |
|---|
| 609 |
|
|---|
| 610 |
See also: ENACTOR, SUBSTITUTION |
|---|
| 611 |
& EXITS |
|---|
| 612 |
An exit is a one-way link that takes you from its source room to its |
|---|
| 613 |
destination room. To open an exit from a room, you must control that room. |
|---|
| 614 |
To open an exit to a room, you must either control the room or it must be |
|---|
| 615 |
set LINK_OK. If an exit is set DARK is will not show up in the list of |
|---|
| 616 |
obvious exits in a room. |
|---|
| 617 |
|
|---|
| 618 |
If an exit is set TRANSPARENT, someone who looks at the exit will also |
|---|
| 619 |
see the description and contents of the destination room. If an exit is |
|---|
| 620 |
set CLOUDY, someone who looks at the exit will also see the contents of |
|---|
| 621 |
the room beyond, but not its description. If an exits is set -both- |
|---|
| 622 |
CLOUDY and TRANSPARENT, the description but not the contents will be seen. |
|---|
| 623 |
|
|---|
| 624 |
If you have code on an exit (In an @asuccess or the like), note that |
|---|
| 625 |
[loc(exit)] is the exit's destination, and [home(exit)] is the exit's |
|---|
| 626 |
starting point. If an exit @emit's something, it will be heard in the |
|---|
| 627 |
source room. |
|---|
| 628 |
|
|---|
| 629 |
(continued in exits2) |
|---|
| 630 |
& EXITS2 |
|---|
| 631 |
You can create an exit that sends those who go through it to their homes |
|---|
| 632 |
by typing '@link <EXIT>=home'. |
|---|
| 633 |
|
|---|
| 634 |
Starting with PennMUSH version 1.50p10, exits can have more than one |
|---|
| 635 |
destination. To make an exit with a variable destination, open the exit |
|---|
| 636 |
(using @open), then type '@link <EXIT>=variable'. Finally, add an |
|---|
| 637 |
attribute named 'DESTINATION' to the exit (&destination <EXIT>), which |
|---|
| 638 |
will be evaluated for the dbref # of the destination room when the exit |
|---|
| 639 |
is used. |
|---|
| 640 |
|
|---|
| 641 |
For example: |
|---|
| 642 |
@open South <S>;s;south |
|---|
| 643 |
@link s=variable |
|---|
| 644 |
&destination s=[switch(rand(3),0,#100,1,#101,2,#102)] |
|---|
| 645 |
|
|---|
| 646 |
This exit would take you to either room #100, #101, or #102 depending on |
|---|
| 647 |
the random number. |
|---|
| 648 |
|
|---|
| 649 |
Anyone can create variable exits, but the destinations must be to places |
|---|
| 650 |
that the exit can normally @link to. |
|---|
| 651 |
|
|---|
| 652 |
See also: @link, @open, link_ok, CLOUDY, TRANSPARENT, @firstexit |
|---|
| 653 |
& FAILURE |
|---|
| 654 |
FAILURE |
|---|
| 655 |
|
|---|
| 656 |
A "failure" usually occurs when you try to do something that is |
|---|
| 657 |
governed by an @lock and you don't pass the lock. If you try to |
|---|
| 658 |
take a player or thing, and you don't pass their @lock, you will |
|---|
| 659 |
set off their @fail/@ofail/@afail attributes. If you try to go |
|---|
| 660 |
through an exit, and you don't pass its @lock, you will similarly |
|---|
| 661 |
set off its @fail/@ofail/@afail. Other failure sets include: |
|---|
| 662 |
|
|---|
| 663 |
Failing to enter an object (@efail, @oefail, @aefail) |
|---|
| 664 |
Failing to leave an object (@lfail, @olfail, @alfail) |
|---|
| 665 |
Failing to use an object (@ufail, @oufail, @aufail) |
|---|
| 666 |
Other failures (&<lock>`FAILURE, &<lock>`OFAILURE, &<lock>`AFAILURE) |
|---|
| 667 |
where the <lock> can be: FOLLOW_LOCK, PAGE_LOCK |
|---|
| 668 |
|
|---|
| 669 |
Many other things can also be locked -- see @lock and locktypes for |
|---|
| 670 |
more information. However, there are failure messages at this time |
|---|
| 671 |
only for the above. |
|---|
| 672 |
|
|---|
| 673 |
See also: @lock, @fail, @efail, @lfail |
|---|
| 674 |
& GENDER |
|---|
| 675 |
& SEX |
|---|
| 676 |
Gender on a MUSH is entirely up to you. You can set yourself (or any |
|---|
| 677 |
of your objects) to be male, female, neuter, or plural. If whatever |
|---|
| 678 |
is in the SEX attribute is not recognizable, the MUSH will assume |
|---|
| 679 |
the object is neuter. Setting a gender attribute will enable |
|---|
| 680 |
pronoun substitution by the MUSH. The SEX attribute is visual to |
|---|
| 681 |
anyone who wants to see it. |
|---|
| 682 |
|
|---|
| 683 |
See also: @sex, SUBSTITUTION |
|---|
| 684 |
& GLOBALS |
|---|
| 685 |
& GLOBAL COMMANDS |
|---|
| 686 |
A command is "global" if it can be used anywhere in the world of the |
|---|
| 687 |
MUSH. The standard MUSH commands are all global, so this term is |
|---|
| 688 |
usually used to refer to user-defined commands on objects in the |
|---|
| 689 |
Master Room of the MUSH. Global commands very greatly from MUSH to |
|---|
| 690 |
MUSH, but you can usually find MUSH-specific help on them by |
|---|
| 691 |
typing "+help". |
|---|
| 692 |
|
|---|
| 693 |
See also: MASTER ROOM, USER-DEFINED COMMANDS, EVALUATION |
|---|
| 694 |
& HERE |
|---|
| 695 |
The word 'here' refers to the room you are in. For example, |
|---|
| 696 |
to rename the room you're in (if you control it), you could enter |
|---|
| 697 |
"@name here= <new name>". |
|---|
| 698 |
& HOMES |
|---|
| 699 |
& HOME |
|---|
| 700 |
Every thing or player has a home, which is usually the room where |
|---|
| 701 |
it was created. You can reset your home or the home of any object |
|---|
| 702 |
you own with the @link command: @link <me|object>=<location>. You |
|---|
| 703 |
must also control <location>, unless that location (room or thing) |
|---|
| 704 |
is set ABODE or LINK_OK. |
|---|
| 705 |
|
|---|
| 706 |
When a player types 'home', s/he is sent back to the home room. When |
|---|
| 707 |
a thing with the STICKY flag set on it is dropped, it also goes to |
|---|
| 708 |
its home location. Note that if the FIXED flag is set on a player, |
|---|
| 709 |
he/she cannot use the 'home' command. |
|---|
| 710 |
|
|---|
| 711 |
You can create an exit that sends players home by doing: |
|---|
| 712 |
@link <exit name>=home |
|---|
| 713 |
You can set the drop-to in a room to home by doing: |
|---|
| 714 |
@link <room dbref or "here">=home |
|---|
| 715 |
|
|---|
| 716 |
See also: DROP-TOS, @link, STICKY, LINK_OK, FIXED, EXITS |
|---|
| 717 |
& INTERIORS |
|---|
| 718 |
Here's a quick description of how to make things that can be entered: |
|---|
| 719 |
|
|---|
| 720 |
@create Car |
|---|
| 721 |
@desc Car=A shiny red car. |
|---|
| 722 |
@idesc car=You are sitting inside a luxurious sportscar. |
|---|
| 723 |
@set Car=enter_ok |
|---|
| 724 |
@oxleave car=climbs out of the car. { The 'ox' messages are shown to |
|---|
| 725 |
@oxenter car=climbs into the car. { those OUTSIDE the object. |
|---|
| 726 |
@oenter car=joins you inside the car. { The 'o' messages are shown to |
|---|
| 727 |
@oleave car=gets out of the car. { those INSIDE the object |
|---|
| 728 |
@enter car=You get into the car. { The plain messages are shown to |
|---|
| 729 |
@leave car=You get out of the car. { the one entering or leaving |
|---|
| 730 |
|
|---|
| 731 |
(continued in help interiors2) |
|---|
| 732 |
& INTERIORS2 |
|---|
| 733 |
Now, if you want people inside to be able to hear and communicate with |
|---|
| 734 |
the outside, you also need to do the following. |
|---|
| 735 |
|
|---|
| 736 |
@set car=audible (lets people outside hear what's being said in the car. |
|---|
| 737 |
@listen car=* (lets people inside hear what's being said outside. |
|---|
| 738 |
@prefix car=From inside the car, |
|---|
| 739 |
@inprefix car=From outside, |
|---|
| 740 |
@filter car=* has arrived.,* has left.,joins you inside the car., |
|---|
| 741 |
gets out of the car. |
|---|
| 742 |
@infilter car=* has arrived.,* has left.,* climbs out of the car., |
|---|
| 743 |
* climbs into the car. |
|---|
| 744 |
|
|---|
| 745 |
(The filters will keep people on the outside from seeing the 'o' |
|---|
| 746 |
messages and people on the inside from seeing the 'ox' messages which |
|---|
| 747 |
is a good thing.) |
|---|
| 748 |
|
|---|
| 749 |
See also: enter, leave, @prefix, @filter, AUDIBLE, @listen |
|---|
| 750 |
& LAST & LASTLOGOUT |
|---|
| 751 |
LAST and LASTLOGOUT |
|---|
| 752 |
|
|---|
| 753 |
These attributes show the last times you connected and disconnected from |
|---|
| 754 |
the MUSH. |
|---|
| 755 |
& LASTSITE |
|---|
| 756 |
& LASTIP |
|---|
| 757 |
LASTSITE and LASTIP |
|---|
| 758 |
|
|---|
| 759 |
The LASTSITE attribute gives the name of the site you last connected from. |
|---|
| 760 |
The LASTIP attribute gives the IP address you last connected from. |
|---|
| 761 |
Mortals cannot set them. |
|---|
| 762 |
& LINKING |
|---|
| 763 |
|
|---|
| 764 |
You can link to a room if you control it, or if it is set |
|---|
| 765 |
LINK_OK or ABODE. Being able to link means you can set the homes of |
|---|
| 766 |
objects or yourself to that room if it is set ABODE, and can set |
|---|
| 767 |
the destination of exits to that room if it is LINK_OK. |
|---|
| 768 |
|
|---|
| 769 |
See also: LINK_OK, ABODE, @link |
|---|
| 770 |
& LISTENING |
|---|
| 771 |
|
|---|
| 772 |
There are two basic ways to trigger action on the MUSH. The basic way |
|---|
| 773 |
is to type in commands such as 'look' or '@emit'. These commands are not |
|---|
| 774 |
seen or heard by other players, although the results of the commands may |
|---|
| 775 |
be. |
|---|
| 776 |
|
|---|
| 777 |
The other way is to "listen" for something said/emitted in your hearing. |
|---|
| 778 |
There are two ways to listen for something in a room. The easiest way |
|---|
| 779 |
is to use a combination of @listen and @ahear/@aahear/@amhear. |
|---|
| 780 |
|
|---|
| 781 |
For example: |
|---|
| 782 |
> @listen Welcome Mat=* has arrived. |
|---|
| 783 |
> @ahear Welcome Mat="Welcome, %N! |
|---|
| 784 |
Breaker has arrived. |
|---|
| 785 |
Welcome Mat says, "Welcome, Breaker!" |
|---|
| 786 |
|
|---|
| 787 |
(continued in help listening2) |
|---|
| 788 |
& ^ |
|---|
| 789 |
& LISTENING2 |
|---|
| 790 |
If you need an object to "listen" for more than one pattern, you can |
|---|
| 791 |
also use ^-patterns. These work similar to user-defined commands, |
|---|
| 792 |
using ^ instead of $. An object must be set MONITOR to have ^-patterns |
|---|
| 793 |
activated. |
|---|
| 794 |
|
|---|
| 795 |
Syntax: &<attribute> <object> = ^<pattern>:<action list> |
|---|
| 796 |
|
|---|
| 797 |
For example: |
|---|
| 798 |
> @set Welcome Mat = MONITOR |
|---|
| 799 |
> &greet Welcome Mat = ^* has arrived.:"Welcome, %N! |
|---|
| 800 |
> &goodbye Welcome Mat = ^* has left.:POSE says as %N leaves, "Bye!" |
|---|
| 801 |
Grimlock has arrived. |
|---|
| 802 |
Welcome Mat says, "Welcome, Grimlock!" |
|---|
| 803 |
Grimlock has left. |
|---|
| 804 |
Welcome Mat says as Grimlock leaves, "Bye!" |
|---|
| 805 |
|
|---|
| 806 |
Such attributes can also be @triggered as if the ^<pattern>: |
|---|
| 807 |
did not exist. |
|---|
| 808 |
|
|---|
| 809 |
(continued in help listening3) |
|---|
| 810 |
& LISTENING3 |
|---|
| 811 |
By default, ^-patterns work like @ahear. To have them work like |
|---|
| 812 |
@amhear, set the AMHEAR attribute flag on the attribute; to have |
|---|
| 813 |
them work like @aahear, set the AAHEAR attribute flag on the attribute |
|---|
| 814 |
(Note that the triggering object is whatever happens to be %#, so, for |
|---|
| 815 |
example, when you @set an object MONITOR, you are %# with regard to the |
|---|
| 816 |
"Object is now listening" message, and this message can be picked up |
|---|
| 817 |
with an ^pattern.) |
|---|
| 818 |
|
|---|
| 819 |
Additionally, unlike $-commands, @listen and ^-patterns are NOT |
|---|
| 820 |
inherited via @parent, unless the LISTEN_PARENT flag is set on the |
|---|
| 821 |
listener. |
|---|
| 822 |
|
|---|
| 823 |
Listen patterns are checked after the object's normal @listen attribute. |
|---|
| 824 |
|
|---|
| 825 |
See also: @listen, @ahear, @amhear, @aahear, MONITOR, LISTEN_PARENT, |
|---|
| 826 |
USER-DEFINED COMMANDS |
|---|
| 827 |
|
|---|
| 828 |
& LISTS |
|---|
| 829 |
The word "list" is used in the help files to refer to a string that |
|---|
| 830 |
is a series of smaller strings separated by one or more spaces. A list |
|---|
| 831 |
can also have its elements separated by some other kind of character -- |
|---|
| 832 |
the separating character is called the "delimiter". |
|---|
| 833 |
For example, the following are all lists: |
|---|
| 834 |
|
|---|
| 835 |
#6 #10 #14 #12 |
|---|
| 836 |
Rumble|Krystal|Bobatron|Rodimus Prime ('|' is the delimiter here) |
|---|
| 837 |
foo bar whee blarg |
|---|
| 838 |
-eek- .boing. yawp #5 7 |
|---|
| 839 |
|
|---|
| 840 |
Lots of MUSHCode depends on lists and manipulating them. Normally, a list |
|---|
| 841 |
is made up of similar items (so the fourth list in the example is NOT a |
|---|
| 842 |
typical one). |
|---|
| 843 |
|
|---|
| 844 |
See also: STRINGS, List Functions |
|---|
| 845 |
& LOOPING |
|---|
| 846 |
Looping in an object can have its good parts and its bad parts. |
|---|
| 847 |
The good part is when you activate part of a program multiple times |
|---|
| 848 |
to exhaustively perform an operation. This can be done like this: |
|---|
| 849 |
|
|---|
| 850 |
&PART1 object=<action list> ; @trigger me/PART2 |
|---|
| 851 |
&PART2 object= @select <test for being done>=<false>,@trigger me/PART1 |
|---|
| 852 |
|
|---|
| 853 |
Looping can be a problem when it goes on without stopping. The @ps |
|---|
| 854 |
command can be used to see if you are looping. Beware! A looping |
|---|
| 855 |
machine that isn't @halt'd will drain your pennies while you are away |
|---|
| 856 |
from the mush! |
|---|
| 857 |
|
|---|
| 858 |
See also: @ps, HALT, COSTS, @trigger |
|---|
| 859 |
& MASTER ROOM |
|---|
| 860 |
|
|---|
| 861 |
The Master Room enables global commands and exits. Exits in the Master |
|---|
| 862 |
Room may be used from any location on the MUSH. All objects left in the |
|---|
| 863 |
Master Room are checked for user-defined $commands. Those $commands are |
|---|
| 864 |
considered global, meaning that they can be used anywhere on the MUSH. |
|---|
| 865 |
Normally, only wizards will have access to the Master Room; if you have |
|---|
| 866 |
a global command that you would like to see enabled for the MUSH, speak |
|---|
| 867 |
to a wizard. |
|---|
| 868 |
|
|---|
| 869 |
See also: EVALUATION, GLOBAL COMMANDS |
|---|
| 870 |
& ME |
|---|
| 871 |
The word 'me' refers to yourself. Some things to do when |
|---|
| 872 |
starting out: |
|---|
| 873 |
1) give yourself a description: @desc me=<description> |
|---|
| 874 |
2) check your desc.: look me |
|---|
| 875 |
3) lock yourself: @lock me==me |
|---|
| 876 |
4) set your gender: @sex me=<male|female|neuter|plural> |
|---|
| 877 |
|
|---|
| 878 |
See also: help newbie, help @lock, help @describe, help @sex |
|---|
| 879 |
& MONEY |
|---|
| 880 |
The MUSH has a built-in money system, which gives a starting amount |
|---|
| 881 |
of money to new players and hands out a daily allowance thereafter. |
|---|
| 882 |
MUSH money (the default name is "pennies", but this may be different |
|---|
| 883 |
depending on the particular MUSH) is spent on some MUSH commands |
|---|
| 884 |
that are computationally expensive or alter the database. In |
|---|
| 885 |
addition, every time you "queue" a command, it costs you a certain |
|---|
| 886 |
amount of money -- this prevents looping from getting out of control, |
|---|
| 887 |
since when all your money is spent, you can't queue any more commands. |
|---|
| 888 |
|
|---|
| 889 |
The money system can also be used on player-created objects by giving |
|---|
| 890 |
them @cost/@payment/@opayment/@apayment attributes. When someone then |
|---|
| 891 |
pays the object by giving it the right number of pennies, the attributes |
|---|
| 892 |
are triggered. |
|---|
| 893 |
|
|---|
| 894 |
See also: COSTS, give, @cost, @pay, @opay, @apay |
|---|
| 895 |
& MUSHCODE |
|---|
| 896 |
& SOFTCODE |
|---|
| 897 |
|
|---|
| 898 |
MUSHcode is the programming language available within the MUSH itself |
|---|
| 899 |
with which you can create user-defined commands and macros. It is |
|---|
| 900 |
sometimes called "softcode" to distinguish it from "hardcode", which is |
|---|
| 901 |
the language that the source code for the MUSH server is written |
|---|
| 902 |
in. (Incidentally, hardcode is written in the C programming language.) |
|---|
| 903 |
|
|---|
| 904 |
At its most basic, writing MUSHcode is just stringing together a series |
|---|
| 905 |
of commands that you would otherwise just type in one at a time. You |
|---|
| 906 |
can store MUSHcode in attributes on any type of object you own or control |
|---|
| 907 |
(including yourself!). The series of commands can be triggered by using |
|---|
| 908 |
a user-defined command or by using @trigger. |
|---|
| 909 |
|
|---|
| 910 |
(continued in help mushcode2) |
|---|
| 911 |
& MUSHCODE2 |
|---|
| 912 |
|
|---|
| 913 |
If you would like to learn more about mushcoding and how to create macros |
|---|
| 914 |
for yourself, the following help files may be useful. However, the best |
|---|
| 915 |
way to learn is by obtaining a copy of Amberyl's MUSH manual and following |
|---|
| 916 |
the examples described there. The manual is available by anonymous FTP |
|---|
| 917 |
from: ftp.pennmush.org in the directory /pub/PennMUSH/Manuals |
|---|
| 918 |
|
|---|
| 919 |
Related Help Topics (in no particular order) |
|---|
| 920 |
------------------- |
|---|
| 921 |
ATTRIBUTES SUBSTITUTION NON-STANDARD ATTRIBUTES |
|---|
| 922 |
ENACTOR EXECUTOR USER-DEFINED COMMANDS |
|---|
| 923 |
DBREFS EVALUATION TYPES OF OBJECTS |
|---|
| 924 |
WILDCARDS STRINGS LISTS |
|---|
| 925 |
ACTION LISTS |
|---|
| 926 |
|
|---|
| 927 |
& NON-STANDARD ATTRIBUTES |
|---|
| 928 |
While there are many standard attributes in MUSH, objects can also have |
|---|
| 929 |
an unlimited number of attributes, with any name you wish to use. In the |
|---|
| 930 |
past, you were limited to attributes named VA-VZ, WA-WZ, XA-XZ; these |
|---|
| 931 |
are still available as standard attributes. However, it is strongly |
|---|
| 932 |
recommended that you use non-standard attributes and meaningful names |
|---|
| 933 |
in order to make maintaining your MUSHCode easier. |
|---|
| 934 |
|
|---|
| 935 |
To set a non-standard attribute, you can use these formats: |
|---|
| 936 |
&<attribute name> <obj> = <value> OR |
|---|
| 937 |
@_<attribute_name> <obj> = <value> OR |
|---|
| 938 |
@set <obj> = <attribute_name>:<value> |
|---|
| 939 |
|
|---|
| 940 |
You can get the value of attributes using the functions v(), get(), and |
|---|
| 941 |
xget(). You can evaluate attributes using u(), eval(), and get_eval(). |
|---|
| 942 |
All attributes can be used in attribute locks and can be 'owned' |
|---|
| 943 |
independent of object ownership. |
|---|
| 944 |
|
|---|
| 945 |
See also: ATTRIBUTES, ATTRIB-OWNERSHIP, Attribute Functions, ATTRIBUTE TREES |
|---|
| 946 |
& PARENT |
|---|
| 947 |
& PARENTS |
|---|
| 948 |
& OBJECT PARENTS |
|---|
| 949 |
|
|---|
| 950 |
Objects may have "parent" objects, from which they can inherit attributes. |
|---|
| 951 |
Once an object is given a parent, it may use the attributes on the parent |
|---|
| 952 |
just as if the attributes were on the object itself, including checking for |
|---|
| 953 |
$commands. Use the @parent command to change the parent of an object. |
|---|
| 954 |
|
|---|
| 955 |
Objects may have multiple levels of parents - thus, if #100 is the |
|---|
| 956 |
parent of #101, which is the parent of #102, object #102 checks itself, |
|---|
| 957 |
#101, and #100 for attributes. Attributes are checked on the object |
|---|
| 958 |
itself first, followed by its parent, followed by that parent's parent, |
|---|
| 959 |
and so forth. There is a (configurable) maximum length of the parent |
|---|
| 960 |
chain for an object; the default is 10. |
|---|
| 961 |
|
|---|
| 962 |
After the parent chain is exhausted, the type-specific ancestor is |
|---|
| 963 |
also checked in similar fashion. See 'help ANCESTORS' for more about |
|---|
| 964 |
ancestors. |
|---|
| 965 |
|
|---|
| 966 |
(continued in help parents2) |
|---|
| 967 |
& PARENTS2 |
|---|
| 968 |
|
|---|
| 969 |
Note that the only properties inherited are attributes. In particular, |
|---|
| 970 |
flags and exits are NOT inherited from the parent object. Also, commands |
|---|
| 971 |
which walk the attribute list (such as "examine", the LATTR() function, |
|---|
| 972 |
the HASATTR() function, @set, and @edit) only affect attributes that are |
|---|
| 973 |
on the object itself. |
|---|
| 974 |
|
|---|
| 975 |
There are some limitations to the use of @parent. The most important is |
|---|
| 976 |
that ^-pattern checking is not done on the parent of an object, unless the |
|---|
| 977 |
object is set LISTEN_PARENT. For the purposes of automated game checks, |
|---|
| 978 |
the following attributes are not inherited: CHARGES, EALIAS, LALIAS, LAST, |
|---|
| 979 |
LASTSITE, LISTEN, QUEUE, RQUOTA, SEMAPHORE, and STARTUP. |
|---|
| 980 |
|
|---|
| 981 |
The attributes inherited from the parent are treated just like its |
|---|
| 982 |
own attributes by the child. Thus, when a $-command or @trigger is |
|---|
| 983 |
executed, "me", for example, refers to the child, not the parent, |
|---|
| 984 |
and the $-command's associated actions are performed by the child. |
|---|
| 985 |
|
|---|
| 986 |
(continued in help parents3) |
|---|
| 987 |
& PARENTS3 |
|---|
| 988 |
Attributes with $-commands _are_ inherited from the parent and |
|---|
| 989 |
previous generations. Conflicts are resolved not by the $-command |
|---|
| 990 |
name, but by the attribute name. If two attributes are in "conflict", |
|---|
| 991 |
the child's attribute is used. |
|---|
| 992 |
|
|---|
| 993 |
For example: |
|---|
| 994 |
|
|---|
| 995 |
> &TEST #10=$test:@emit I'm the parent |
|---|
| 996 |
> &TEST #11=$check:@emit I'm the child |
|---|
| 997 |
> @parent #11=#10 |
|---|
| 998 |
> test |
|---|
| 999 |
(nothing happens) |
|---|
| 1000 |
> check |
|---|
| 1001 |
I'm the child |
|---|
| 1002 |
|
|---|
| 1003 |
(continued in help parents4) |
|---|
| 1004 |
& PARENTS4 |
|---|
| 1005 |
If a parent has the same $-command name in a different attribute, however, |
|---|
| 1006 |
BOTH the parent and child commands will execute: |
|---|
| 1007 |
|
|---|
| 1008 |
(continued from previous example) |
|---|
| 1009 |
> &CHECK #10=$check:@emit No, I'm the parent! |
|---|
| 1010 |
|
|---|
| 1011 |
> check |
|---|
| 1012 |
I'm the child |
|---|
| 1013 |
No, I'm the parent! |
|---|
| 1014 |
|
|---|
| 1015 |
@parent is most useful when several objects use common attributes. |
|---|
| 1016 |
It is slightly faster to have $commands on the child object which |
|---|
| 1017 |
in turn @trigger or otherwise retrieve attributes inherited from |
|---|
| 1018 |
the parent object, rather than having the $commands checked on the |
|---|
| 1019 |
parent object. |
|---|
| 1020 |
|
|---|
| 1021 |
(continued in help parents5) |
|---|
| 1022 |
& PARENTS5 |
|---|
| 1023 |
|
|---|
| 1024 |
Parent-object $-command checking is at its most efficient when there |
|---|
| 1025 |
are few or no attributes on the child. Also, each additional level |
|---|
| 1026 |
of parents further reduces efficiency. Finally, note that ancestors |
|---|
| 1027 |
are *not* checked for $-commands. |
|---|
| 1028 |
|
|---|
| 1029 |
If you are "mass-marketing" your objects, you can create blank copies, |
|---|
| 1030 |
and @parent those copies to a template object. You can then customize |
|---|
| 1031 |
necessary attributes on the copy. When a buyer @chowns his copy, the |
|---|
| 1032 |
parent does not change, so unless you're putting data into the parent |
|---|
| 1033 |
that you want to make impossible to read, it's safe to allow the |
|---|
| 1034 |
purchasers of your object to @chown their copy. |
|---|
| 1035 |
|
|---|
| 1036 |
See also: @parent, $-COMMANDS, ATTRIBUTES, ANCESTORS |
|---|
| 1037 |
& POWERS LIST |
|---|
| 1038 |
Powers can be granted only by wizards, using the @power command. |
|---|
| 1039 |
Powers cannot be granted to guest characters or players who are set |
|---|
| 1040 |
UNREGISTERED. Powers normally give the player the ability to use a |
|---|
| 1041 |
limited set of wizard/admin powers. |
|---|
| 1042 |
|
|---|
| 1043 |
announce Can use @wall command. |
|---|
| 1044 |
boot Can use @boot command. |
|---|
| 1045 |
builder Can use Builder commands. |
|---|
| 1046 |
chat_privs Can use Admin channels. |
|---|
| 1047 |
debit Can use give with a negative amount. |
|---|
| 1048 |
functions Can use @function command. |
|---|
| 1049 |
guest Guest. Restricted command set. |
|---|
| 1050 |
halt Can @halt others' objects and do @allhalt. |
|---|
| 1051 |
hide Can hide on the WHO list. |
|---|
| 1052 |
hook Can use the @hook command. |
|---|
| 1053 |
idle No inactivity timeout. |
|---|
| 1054 |
link_anywhere Can @link an exit to anyplace. |
|---|
| 1055 |
login Not subject to login restrictions. |
|---|
| 1056 |
long_fingers Can do things remotely, like "get". |
|---|
| 1057 |
many_attribs Can exceed max_attrs_per_obj. |
|---|
| 1058 |
|
|---|
| 1059 |
(continued in help powers2) |
|---|
| 1060 |
& POWERS2 |
|---|
| 1061 |
& POWERS LIST2 |
|---|
| 1062 |
no_pay Doesn't need money for anything |
|---|
| 1063 |
no_quota Has an unlimited quota |
|---|
| 1064 |
open_anywhere Can @open a link from any room. |
|---|
| 1065 |
pemit_all Can @pemit to HAVEN/ulocked players. |
|---|
| 1066 |
player_create Can use @pcreate command. |
|---|
| 1067 |
poll Can use @poll command. |
|---|
| 1068 |
pueblo_send Can use xch_cmd and send pueblo tags |
|---|
| 1069 |
queue Has queue limit equal to the size of the database. |
|---|
| 1070 |
quota Can use @quota commands on other players. |
|---|
| 1071 |
search Can do @search, @stats, and @entrances on anything. |
|---|
| 1072 |
see_all Sees everything as if it were Visual. |
|---|
| 1073 |
see_queue Can do @ps on anyone, and @ps/all. |
|---|
| 1074 |
sql_ok Can perform SQL queries |
|---|
| 1075 |
tport_anything Can @teleport anything. |
|---|
| 1076 |
tport_anywhere Can @teleport to anywhere. |
|---|
| 1077 |
unkillable Can not be killed |
|---|
| 1078 |
can_nspemit Can use @nspemit and nspemit() |
|---|
| 1079 |
|
|---|
| 1080 |
See also: help @power, and especially @power/list |
|---|
| 1081 |
& PUPPETS |
|---|
| 1082 |
A thing is turned into a puppet by setting the PUPPET flag on it. |
|---|
| 1083 |
A puppet object is an extension of its owner and relays everything |
|---|
| 1084 |
it sees and hears to its owner, except if it is in the same room as |
|---|
| 1085 |
the owner (a puppet with the VERBOSE flag will relay even if it's in |
|---|
| 1086 |
the same room). Things relayed by the puppet will be prefixed by the |
|---|
| 1087 |
name of the puppet. |
|---|
| 1088 |
|
|---|
| 1089 |
Puppets are useful for keeping track of what is going on in two |
|---|
| 1090 |
rooms at once, as extensions of a player (such as a pet, for example), |
|---|
| 1091 |
or for testing code. |
|---|
| 1092 |
|
|---|
| 1093 |
&n |
|---|