MUCK Reference Manual
by Revar Desmera <revar@belfry.com>
List of Topics by Category
You can get more help on the following topics:
Alphabetical List of Topics
Symbols
A's
B's
C's
D's
E's
F's
G's
H's
I's
J's
K's
L's
M's
N's
O's
P's
Q's
S's
T's
U's
V's
W's
X's
Y's
Z's
Basics
The word 'me' refers to yourself. Some things to do when starting out:
1) give yourself a description with "@describe me=<description>", then
look at yourself with "look me".
2) prevent anyone else from robbing you with "@lock me=me".
3) set your gender, if you wish it known, with "@set me=sex:male" or
"@set me=sex:female" (or "@set me=sex:neuter" to be an 'it').
Also see:
@DESC,
LOOK,
@LOCK,
ROB,
@SET and
GENDER
SAY <message>
"<message>
Says <message> out loud to everyone in the room. If your name is Igor,
and you typed 'say Hello everyone!', you will see 'You say, "Hello everyone!"'
and everyone else in the room will see 'Igor says, "Hello everyone!"'
There's also an abbreviated form of the 'say' command: '"Hello everyone!'
Also see:
POSE,
WHISPER and
PAGE
POSE <message>
:<message>
Poses a message to everyone in the room. This is used for actions. i.e.:
if your name was Igor, and you typed 'pose falls down.', everyone would see
Igor falls down.
There's also an abbreviated form of the 'pose' command: ':falls down.'
Also see:
SAY,
WHISPER and
PAGE
PAGE <player>
PAGE <player>=<message>
In the first form, this tells a player your location, like
'You sense that <pager> is paging you from <location>.'
In the second form, with the <message>, the user receives a message like:
'<pager> pages from <location>: "<message>"'
If a player is set HAVEN, you cannot page them. You will instead be told,
'That player does not wish to be disturbed.'
Note: Most systems use a MUF program with a global 'page' action, which
takes the place of the built-in 'page' command, and has more features.
Usually, you can see the extra features of this MUF page program by using
the command 'page #help'.
Also see:
SAY,
POSE and
WHISPER
WHISPER <player>=<message>
Whispers the message to the named person, if they are in the same room
as you. No one else can see the message. Wizards can use the form
'whisper *<player>=<message>' to whisper to players in other rooms.
Note: Most systems use a MUF program with a global 'whisper' action, which
takes the place of the built-in 'whisper' command, and has more features.
Also see:
SAY,
POSE and
PAGE
LOOK <object>
Looks around at the current room, or at <object> if specified.
For players, displays their description and inventory, for things,
their description, and for rooms, their name, description, succ/fail
message, and contents. Also triggers osucc/ofail messages on rooms.
Programs are triggered accordingly on desc/succ/fail fields.
INVENTORY
Lists what you are carrying. This can usually be abbreviated to inv or i.
GET <object>
GET <container>=<object>
Attempts to pick up <object> in the first form. The lock on <object> is
checked for a success (true), and the normal path of success/fail is then
taken. On success the object is placed in your inventory.
In the second form, attempts to get <object> from the given <container>.
The _/clk lock property on <container> is tested, and if it is true, then
it checks to see if the standard _/lok lock property on <object> tests true.
If both locks pass, then <object> is moved into the player's inventory.
If there is no _/clk property on <container> it defaults to failing.
The _/lok property, on <object>, on the other hand, defaults to passing.
@succ/@fail messages are not displayed, when fetching something from a
container.
TAKE can also be used instead of GET.
Also see:
SUCCESS,
FAILURE,
@LOCK,
PUT,
DROP and
HAND
PUT <thing>=<container>
Attempts to put <thing> into the given <container>. The _/clk lock
property on <container> is tested, and if it is true, then it checks
to see if the standard _/lok lock property on <thing> tests true.
If both locks pass, then <thing> is moved from the player's inventory
into the given container. If there is no _/clk property on <container>
it defaults to failing. The _/lok property, on <thing>, on the other
hand, defaults to passing. @succ/@fail messages are not displayed,
when putting something into a container.
You can also put programs in containers, much the same as you can with
things. Throw, put, and hand can be used instead of drop.
Also see:
@DROP,
@ODROP,
@LOCK,
STICKY,
DROP-TO,
GET and
DROP
DROP <thing>
Drops the <thing> if you are holding it. It moves the thing to the room
you are in, unless the thing's STICKY flag is set, or the room has a
drop-to.
If the thing's STICKY flag is set, it will go home when dropped.
If the room's drop-to is set, and the room has its STICKY flag set,
then the thing will stick around in the room until all players have left.
If the room is not set sticky, then the thing will be sent to the location
given by the room's drop-to.
You can also drop programs, much like things, but they are not affected
by room droptos or STICKY flags.
An '@drop' message can be set which will be shown to the player dropping
the object, and an '@odrop' message can be set, which will be shown to the
other players in the room. Throw, put, and hand can be used instead of drop.
Also see:
@DROP,
@ODROP,
@LOCK,
STICKY,
DROP-TO,
GET and
PUT
GO <direction>
GO home
MOVE <direction>
MOVE home
Move the player in a specific direction. 'go home' is a special
command that returns to you to your starting location. 'go' may be
omitted by simply specifying a direction, and 'goto', 'move' are the
same as 'go'.
Examples:
go home teleport home, *leaving behind all possessions*
(See 'help home')
goto kitchen go to the exit called 'kitchen'
move up move in the direction 'up', if it exists
north move to the exit 'north', if it exists
Also see:
HOME
HOME
Sends you home, no matter where you are. You retain your pennies, but
any objects you are carrying leave your inventory and return to their own
homes. See HOMES.
Also see:
GO and
HOMES
Goal:
There is no ultimate goal to this game, except to have fun. There are
puzzles to solve, scenery to visit, and people to meet. There are no
winners or losers, only fellow players. Enjoy.
SCORE
Displays how many pennies you are carrying. Pretty meaningless.
Building and some other actions cost money. How to get money:
1) Get pennies from the local bank.
2) Find pennies.
3) Get killed.
4) Be given money by another player.
5) Rob someone.
Once you reach 10000 pennies, it becomes difficult to acquire
more. Wizards don't need money to do anything.
Also see:
COSTS
GIVE <player|object>=<amount>
Gives <amount> pennies from your supply to <player>. Mortals may only
give positive amounts and may not cause a player to have more than 10000
pennies. Wizards do not affect their penny supplies by giving to others,
and may also give pennies to objects, changing that object's value.
EXAMINE <object>[=proppattern]
If you do not control <object>, it prints the owner of the object.
If you control <object>, examine will give you a complete breakdown of
all standard fields, flags, etc that are associated with the object.
MPI in the the displayed fields will be shown raw, without executing it.
If the optional proppattern field is supplied, then it instead lists
out all the properties that matches the given wildcard pattern. If the
pattern ends with '/' then all the sub-properties in the matching propdirs
will be listed. If the pattern ends with **, then all sub-propdirs of
the matching properties will be shown recursively.
ex obj=/ list all root properties on obj.
ex obj=/** list ALL properties on obj.
ex obj=foo/ list all properties in the foo propdir on obj.
ex obj=foo/** list all props in the foo/ propdir, and all contained dirs.
ex obj=foo*bar list root props whose name start with foo and end with bar.
Also see:
PROPDIRS and
PROPDIRS-EXAMPLE
HELP
HELP alpha
HELP category
HELP <subject>
With no arguments, this command shows a brief summary of basic
commands for playing the game. With <subject> specified, it shows
detailed information on that topic. Use 'help alpha' or
'help category' to see an alphabetical or categorized list of topics,
respectively. Seeing as you are reading this, you probably already
understand how this works.
Examples:
help see the introductory information
help alpha show an alphabetical list of topics
help category show a categorized list of topics
help basics read commands in the category 'Basics'
Also see:
INFO and
MPI
INFO
INFO <topic>
INFO <topic>=<range>
See what information files are available or read information on a
particular topic, optionally limiting to a specific set of lines.
Examples:
info list available information files
info muf-cheat read the information file 'muf-cheat'
info muf-cheat=180 read line 180 from 'muf-cheat'
info muf-cheat=5-10 read lines 5-10 from 'muf-cheat'
Also see:
HELP and
MPI
MPI
MPI alpha
MPI category
MPI <subject>
With no arguments, this command shows a brief summary of MPI
reference info. With <subject> specified, it shows detailed
information on that topic. Use 'mpi alpha' or 'mpi category' to see an
alphabetical or categorized list of topics, respectively.
Examples:
mpi see the introductory information
mpi alpha show an alphabetical list of topics
mpi category show a categorized list of topics
mpi Looping read commands in the category 'Looping'
Also see:
HELP and
INFO
MOTD
MOTD clear
MOTD <text>
See the current message of the day.
Wizards may clear the message with 'clear', or set a new message by
typing it after the command. If longer than 68 characters, the rest of
the message is split at the nearest word into a new line.
Examples:
motd print the message of the day
motd clear clear the current message of the day
motd Fresh start! set the message of the day to 'Fresh start!'
Also see:
NEWS
NEWS [<topic>]
Displays the current news file for the game. Must be typed in full. If a
topic is given, then it displays the information on that specific topic.
Also see:
MOTD
@PASSWORD <old password>=<new password>
This changes your password.
GRIPE <message>
Sends <message> to the system maintainer. Gripes are logged for
later reference; also, if the system maintainer is connected he will
receive the gripe real-time when the gripe is made.
WHO [<player>]
Must be in all capitals, and typed in full. Lists the name of every
player currently logged in, and how long they have been inactive. If
given a player name, it displays only the matching names and idle times.
Wizards also get a display of the host the player is connected from.
Examples:
WHO show all players online
WHO Az show online players that start with 'Az'
Also see:
@DOING
@DOING [me][=[<text>]]
Shows your doing message, or sets it to <text>. If <text> is not specified,
the field is cleared. This uses the property '_/do'.
A doing message is shown when typing WHO.
Also see:
WHO
QUIT
Must be in all capitals, and typed in full. Logs out of your character
and leaves the game. Your character remains at the location you are in when
you log out, although it might be moved elsewhere while you are 'asleep.'
DISEMBARK
LEAVE
Exit a vehicle, arriving at the destination. If you can't leave, it
shows an error message instead.
UPTIME
Displays the amount of time the server has been running.
Building Help
Object Types:
There are 5 types of objects:
Players are the objects users log in as; their avatars.
Things are objects that can be carried, or that can sit about a room.
Rooms are locations that contain players and things and linked exits.
Exits are the means by which players move between rooms.
Programs are player-written extensions to the game.
The first letter following an object's ID number indicates the type:
P(layer), E(xit), F(orth program), or R(oom). Otherwise it's a Thing.
Referring to Objects:
You can specify objects (things, players, exits, and rooms) by name if
they're in your inventory or in the same room as you. You need only type
enough letters of the name to be unambiguous. You can also specify objects
anywhere by their DBRef, in the form #<dbrefnumber>. Players in other rooms
may be specified in the form *<player name>. The keywords 'me' can be used
for yourself, and 'here' for the room you're in.
Each object has an ID number (the 'dbref'), which appears after the
name of the object, and is followed by any flags on the object; Ie:
Foo(#3672PB) is a Player, named Foo, set BUILDER. The number is a
database reference, and is used to specify objects at a distance;
Ie. 'examine #3672'. You will only see the ID number of objects you
own, or which are set LINK_OK, ABODE, or CHOWN_OK. Wizards can see the
numbers and flags on all objects.
Also see:
FLAGS,
TYPES,
ABODE,
CHOWN_OK and
LINK_OK
Control:
There are 3 rules to controlling objects:
1) You control anything you own.
2) A wizard or God controls everything.
3) If Realms_Control is @tuned on in the server, then if a player owns an
environmental room, and that room has its Wizard bit set, then the owner
of that environment room has control over anything contained in that env-
ironment room. This includes things inside of rooms that are inside of
that environment room, and so forth. Everything in that Wizbit environ-
ment can be controlled by the environment's owner.
There are a few things to keep in mind, in relation to the above:
a) Anybody can @chown an unlinked exit to themselves, even if it is locked.
Builders should beware of this, lest their exits be linked or stolen.
Once the object has been chowned, then it will be controlled by the
owner, as per rule 1.
b) Players can @chown to themselves any exits which are linked to an object
they own. Note Rule #1.
c) Players can @chown to themselves any exits which are attached to an object
that they own. Note Rule #1.
d) If an object is set CHOWN_OK, anyone may "@chown <object>=me" and gain
ownership and control of the object. (see chown_ok)
@CREATE <object> [=<cost>[=<regname>]]
Creates a new object and places it in your inventory. This costs at
least ten pennies. If <cost> is specified, you are charged that many
pennies, and in return, the object is endowed with a value according
to the formula: ((cost / 5) - 1). Usually the maximum value of an
object is 100 pennies, which would cost 505 pennies to create. If a
<regname> is specified, then the _reg/<regname> property on the player
is set to the dbref of the new object. This lets players refer to
the object as $<regname> (ie: $mybutton) in @locks, @sets, et cetera.
Only a builder may use this command.
Also see:
@CLONE
@CLONE <object> [=<regname>]
Clones the given object, including name, location, flags, and
properties. You must have control of the object, you may not clone
rooms, exits, etc, and cloning may cost pennies. If successful, the
command prints the identifier of the new object. Only a Builder may
use this command.
Example:
@clone some_object
Also see:
@CREATE
@DIG <room> [=<parent> [=<regname>]]
Creates a new room, sets its parent, and gives it a personal registered
name. If no parent is given, it defaults to the first ABODE room down the
environment tree from the current room. If it fails to find one, it sets
the parent to the global environment, which is typically room #0. If no
<regname> is given, then it doesn't register the object. If one is given,
then the object's dbref is recorded in the player's _reg/<regname> property,
so that they can refer to the object later as $<regname>. Digging a room
costs 10 pennies, and you must be able to link to the parent room if
specified. Only a builder may use this command.
@OPEN <exit> [=<object> [; <object2>; ... <objectn> ] [=<regname>]]
Opens an exit in the current room, optionally attempting to link it
simultaneously. If a <regname> is specified, then the _reg/<regname>
property on the player is set to the dbref of the new object. This lets
players refer to the object as $<regname> (ie: $mybutton) in @locks,
@sets, etc. Opening an exit costs a penny, and an extra penny to link
it, and you must control the room where it is being opened.
@ACTION <name>=<source> [=<regname>]
Creates a new action and attaches it to the thing, room, or player
specified. If a <regname> is specified, then the _reg/<regname> property
on the player is set to the dbref of the new object. This lets players
refer to the object as $<regname> (ie: $mybutton) in @locks, @sets, etc.
You may only attach actions you control to things you control. Creating
an action costs 1 penny. The action can then be linked with the command
@LINK.
Bogus Exits and Pseudo Commands:
Bogus commands can be made using exits. For example, to make a 'sit'
command, one could give the following commands:
@open sit
@link sit=here (because unlinked exits can be stolen)
@lock sit=me&!me (therefore always fails)
@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.
@RECYCLE <object>
Destroy an object and remove all references to it within the database.
The object is then added to a free list, and newly created objects are
assigned from the pool of recycled objects first. You *must* own the
object being recycled, even wizards must use the @chown command to
recycle someone else's belongings.
@NAME <object>=<name> [<password>]
Sets the name field of <object> to <name>. A null <name> is illegal.
You must supply <password> if renaming a player. Wizards can rename
any player but still must include the password.
@DESCRIBE [<object>][=[<text>]]
Shows <object>'s description, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/de'.
A description is shown to a player looking at <object>.
Also see:
@IDESCRIBE
@IDESCRIBE [<object>][=[<text>]]
Shows <object>'s inside description, or sets it to <text>. If <object> is
not specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/ide'.
An inside description is shown to a player looking inside a vehicle <object>.
Also see:
@DESCRIBE
@SUCCESS [<object>][=[<text>]]
Shows <object>'s success message, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/sc'.
A success message is shown to a player who successfully uses <object>.
Also see:
@OSUCCESS
@FAIL [<object>][=[<text>]]
Shows <object>'s failure message, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/fl'.
A failure message is shown to a player who fails to use <object>.
Also see:
@OFAIL
@DROP [<object>][=[<text>]]
Shows <object>'s drop message, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/dr'.
A drop message works differently depending on <object>'s type:
On a room, it is shown to a player who drops an object there.
On a thing, it is shown to a player who drops it.
On an exit, it is shown to a player arriving at its destination.
On a player, it is shown to a player who kills them.
Also see:
@ODROP
@OSUCCESS [<object>][=[<text>]]
Shows <object>'s osuccess message, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/osc'.
An osuccess message, prefixed by the player's name, is shown to others in the
room when a player successfully uses <object>.
Also see:
@SUCCESS
@OFAIL [<object>][=[<text>]]
Shows <object>'s ofailure message, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/ofl'.
An ofailure message, prefixed by the player's name, is shown to others in the
room when a player fails to use <object>.
Also see:
@FAIL
@ODROP [<object>][=[<text>]]
Shows <object>'s odrop, or sets it to <text>. If <object> is not
specified, it defaults to 'me'. If <text> is not specified, the field is
cleared. This uses the property '_/odr'.
An odrop message, prefixed by the activating player's name, is shown to others
in the room. It works differently depending on <object>'s type:
On a room, it is shown when an object is dropped there.
On a thing, it is shown when a player drops it.
On an exit, it is shown when a player arrives at its destination.
On a player, it is shown when another player kills them.
Also see:
@DROP
Pronoun Substitutions:
@osuccess, @ofail, and @odrop messages may contain %-substitutions,
which evaluate to gender-specific pronouns if the player's 'sex' property
is set. These substitutions are:
%a (absolute) = Name's, his, hers, its.
%s (subjective) = Name, he, she, it.
%o (objective) = Name, him, her, it.
%p (possessive) = Name's, his, her, its.
%r (reflexive) = Name, himself, herself, itself.
%n (player's name) = Name.
Capitalized pronouns are also available with %A, %S, %O, %P, and %R.
If you need a '%', use %%.
The naturally supported genders are 'male', 'female', 'neuter', 'herm',
and 'hermaphrodite', with the last two being equivalent, both using the
sie/hir/hirself/hirs pronoun set.
This set of supported genders can be extended either on an individual
player, or globally by adding _pronouns/GENDER/%X properties on the
player, or on #0 respectively. For example, to add support on yourself
for a 'stallion' gender, you would add five properties, one for each
of the %a, %s, %o, %p, and %r pronouns, in the _pronouns/stallion/
propdir. Ie:
@set me=_pronouns/stallion/%a:his
@set me=_pronouns/stallion/%s:he
@set me=_pronouns/stallion/%o:him
@set me=_pronouns/stallion/%p:his
@set me=_pronouns/stallion/%r:himself
If a shapeshifting player decided that they prefer a different subjective
pronoun for themselve while they were in herm form, they could override it
with something like:
@set me=_pronouns/herm/%s:shi
This would only override the %s pronoun while their gender was 'herm',
though, meaning that if they shapeshift to male, they only have to change
their 'sex' property, and not tweak their pronouns as well.
If a player sets a %a, %s, %o, %p, or %r property on themselve, that value
WILL be used, instead of any matching _pronouns/GENDER/%X property. This
lets players make quick temporary pronoun fixes, and is also available
for legacy reasons.
Ex. '@ofail teapot=burns %p hand on the hot teapot.'
Also see:
GENDER
@ATTACH <action>=<new source>
Removes the action from where it was and attaches it to the new source.
You must control the action in question.
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.
@LINK <object1>=<object2> [; <object3>; ... <objectn> ]
Links <object1> to <object2>, provided you control <object1>, and
<object2> is either controlled by you or linkable. Actions may be
linked to more than one thing, specified in a list separated by
semi-colons.
Also see:
@RELINK and
@UNLINK
@RELINK <object1>=<object2> [; <object3>; ... <objectn> ]
Unlinks <object1>, then links it to <object2>, provided you control
<object1>, and <object2> is either controlled by you or linkable.
Actions may be linked to more than one thing, specified in a list
separated by semi-colons.
Also see:
@LINK and
@UNLINK
@UNLINK <exit>
@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).
Also see:
@LINK and
@RELINK
Homes:
Every thing or player has a home. This is where things go when they
are sent home, or things with the STICKY flag set go when dropped.
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) with
@link <exit>=home
Drop-tos can also be set to 'home'. @teleport accepts home as an argument,
so you can @teleport things (and players if you are a wizard) to their home.
Also see:
@TELEPORT,
@LINK,
STICKY and
DROP-TOS
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.
@LOCK [<object>][=[<key>]]
Shows <object>'s lock, or sets it to <key>. If <object> is not specified,
it defaults to 'me'. If <key> is not specified, the field is cleared. This
uses the property '_/lk'.
A lock that is not passed prevents players from using <object>.
Examples:
@lock thingy=*Igor
@lock thingy=me|#1234
@lock here=me|Other Thingy
@lock west=sex:female
@lock east=((*Igor|*JohnDoe)&sex:male)
@UNLOCK <object>
Removes the lock on <object>.
Also see:
@LOCK
Success:
You successfully use an object when you take it. You use an exit
successfully when you go through it. You use a person successfully
when you successfully rob them. You successfully use a room when you
look around.
Also see:
STRINGS,
@SUCCESS and
@OSUCCESS
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 locked).
You fail to use a person when you fail to rob them.
You fail to use a room when you fail to look around (because it's locked).
Also see:
STRINGS,
@FAIL and
@OFAIL
@SET <object> = [!]<flag>
@SET <object> = <property>:<string>
@SET <object> = <property>:
@SET <object> = :clear
@set does one of three things on TinyMUCK, it can modify flags, add
properties to an object, or remove properties from an object.
Using the first format, you may set flags, which are:
ABODE (AUTOSTART)
BUILDER (BOUND)
CHOWN_OK (COLOR)
DARK (DEBUG)
HAVEN (HARDUID)
JUMP_OK
KILL_OK
LINK_OK
MUCKER
QUELL
STICKY (SETUID)
VEHICLE (VIEWABLE)
WIZARD
XFORCIBLE
ZOMBIE
You can also set the MUCKER (or Priority) Level of an object by using
0, 1, 2, or 3 as the flag name.
The second format sets <property> on <object> to <string>
The third format will remove <property> and any sub-properties under it.
The fourth format removes all properties from an object.
Also see:
FLAGHELP
@PROPSET <object>=<type>:<property>:<value> -or-
@PROPSET <object>=erase:<property>
@propset can set and clear properties from an object.
If the first format above is specified, the @propset command sets
<property> on <object> to <value>, where <value> is of type <type>.
<type> can be one of 'string', 'integer', 'float, 'dbref', or 'lock'.
A string can be any set of characters the MUCK recognizes. An integer
must be composed solely of numerals with the possible exception of
a leading sign indicator (+ or -). A float must be a valid floating
point number. A dbref must be of the form # followed by a positive
integer, and it must be a valid dbref (i.e., the object must exist).
A lock value must be a key that would be accepted by @lock or a similar
command (see the help for @lock for more details).
The second format removes <property> on object. Note that if <property>
is a propdir, it removes all properties below <property> as well.
If you wish to clear the value of a propdir without removing the
properties below it, use '@propset <object> = integer:<property>:0'.
Lists registered objects, or manages existing object registrations, on
the target object and propdir.
The default target is "_reg" on #0, but can be changed with these prefixes:
#me
Sets target object to you.
#prop [<target>]:<propdir>
Sets target object to <target>, and target propdir to <propdir>.
<target> may be omitted to keep the default.
Syntax:
@register [<prefix>]
Lists registrations in the target propdir on the target object.
@register [<prefix>] <subpropdir>
Lists registrations in <subpropdir> in the target propdir.
@register [<prefix>] <object> = <regname>
Registers <regname> to <object> in the target propdir.
@register [<prefix>] = <regname>
Removes registration of <regname> in the target propdir.
@CHOWN <object> [=<player>]
Changes the ownership of <object> to <player>, or if no player is given,
to yourself. Any player is allowed to take possession of objects, rooms, and
actions, provided the CHOWN_OK flag is set. Mortals cannot take ownership of
a room unless they are standing in it, and may not take ownership of an object unless
they are holding it. Wizards have absolute power over all ownership.
Also see:
@CHLOCK
@CHLOCK [<object>][=[<key>]]
@CHOWN_LOCK [<object>][=[<key>]]
Shows <object>'s chown lock, or sets it to <key>. If <object> is not
specified, it defaults to 'me'. If <key> is not specified, the field is
cleared. This uses the property '_/chlk'.
A chown lock that is not passed prevents players from taking ownership of
<object>.
Also see:
@CHOWN
@FLOCK [<object>][=[<key>]]
@FORCE_LOCK [<object>][=[<key>]]
Shows <object>'s force lock, or sets it to <key>. If <object> is not
specified, it defaults to 'me'. If <key> is not specified, the field is
cleared. This uses the property '@/flk'.
A force lock that is passed allows players to force <object>.
Also see:
@FORCE
@CONLOCK [<object>][=[<key>]]
Shows <object>'s container lock, or sets it to <key>. If <object> is not
specified, it defaults to 'me'. If <key> is not specified, the field is
cleared. This uses the property '_/clk'.
A container lock that is passed allows players to put things in <object>.
Also see:
GET and
PUT
@READLOCK [<object>][=[<key>]]
Shows <object>'s read lock, or sets it to <key>. If <object> is not
specified, it defaults to 'me'. If <key> is not specified, the field is
cleared. This uses the property '@/rlk'.
A read lock that is passed allows players to bypass non-MUF read permissions
for <object>.
@OWNLOCK [<object>][=[<key>]]
Shows <object>'s ownership lock, or sets it to <key>. If <object> is not
specified, it defaults to 'me'. If <key> is not specified, the field is
cleared. This uses the property '@/olk'.
An ownership lock that is passed allows players to bypass controller
permissions for <object>.
@LINKLOCK [<object>][=[<key>]]
Shows <object>'s link lock, or sets it to <key>. If <object> is not
specified, it defaults to 'me'. If <key> is not specified, the field is
cleared. This uses the property '_/lklk'.
A link lock that is not passed prevents players from linking to <object>.
Also see:
@LINK
@TELEPORT <arg1> [=<destination>]
Moves <arg1> to <destination>, if <destination> is not given, moves you
to <arg1>. Wizards may teleport anything to anywhere, provided it makes
sense, and mortals are allowed to do two things: teleport rooms to change
their parent fields, and they may teleport things to a room they can link
to, provided they control either the thing or its location.
@STATS [<player>]
For mortal players, returns the highest number in
the database, which includes garbage that has been generated with
@recycle. For Wizards, gives this number as well as a breakdown of
each type of object: rooms, exits, things, programs, players, and
garbage. Wizards may also specify <player> which returns a similar
display limited to the possessions of <player>.
Timestamps:
Every object has a timestamp, which includes the time last used, the
time last modified, the time the object was created, and the number
of times that that object has been used by a player. They are shown by
using EXAMINE. 'Usage' is defined as follows: Players-when they are
connected, Rooms-when entered or 'look'd at, Exits-when invoked (by a
'go' command) or 'look'd at, Things-when 'look'd at or 'take'n/'drop'd,
Programs-when run by a player. Examining an object does not count as
looking at them.
@FIND [<name>] [= <flags/types> = [<output type>]]
Searches through the database for items that you control matching <name>.
Players control only objects they own; wizards control all objects, so @find
searches the entire database when they use it. Because the command is
computationally expensive, this costs 100 pennies.
Flags or types can be specified, to specify that you only want to list
objects that have that flag set, or that are of that type. You can also
specify to list objects that are NOT of that specific type, or that do
NOT have that flag. (A "!" before the modifier indicates that it is to
be inverted.)
The flags that you can specify are: (use the initial capitalized letter only)
Abode, Builder/Block, Chown_ok, Dark/Debug, Haven, Interactive, Jump_ok,
Kill_ok, Link_ok, Mucker, Quell, Sticky/Silent, Vehicle, Wizard, Xforcible,
and Zombie.
You can also specify Mucker Levels by the level number: 1, 2, 3, or 4.
The types that you can specify are: (use the capitalized letter only)
Exit, muF program, Player, Room, and Thing.
There are a few other modifiers you can specify: (use only initial character)
Unlinked will specify that you want to list only unlinked objects.
@ specifies to list objects longer than about 90 days old.
~size will match all objs whose current memory usage is greater than
or equal to size bytes. This must be the last modifier in the
list of modifiers.
^size will match all objs whose total memory usage, when fully loaded,
is greater than size bytes. To do this, it loads the entire
object into memory from disk. This modifier is only available
to wizards. For regular players, this acts like ~size. This
must be the last modifier in the list of modifiers.
The output types that can be given are owners, links, size, count, & location.
(You use the whole name for output type, and you can use only one at a time.)
owners lists who owns each object.
links shows what each object is linked to, or *UNLINKED*, or, for exits
linked to multiple things, *METALINK*
size displays how much memory is currently being used by an object. If
this option is used with the ^ modifier, (see above) then this
will display the true full size of the object, and not just how
much is currently being used.
count causes nothing to be shown but how many objects the @find/etc would
match. ie: it doesn't display any of the matched objects.
location shows where the object is located at.
The matching on names is as follows:
Individual words can be matched as {word1|word2|...}
Individual characters can be matched as [abc...]
A ? matches any character.
A * matches any number of characters, including none.
Any of these special charcters can be matched by putting a \ before it.
Examples of use:
"@find north = EU = location" will find all of your unlinked exits named
"north" and print them along with their locations.
"@find {big|little} = R!L" finds all your rooms whose names contain "big"
or "little" and are not LINK_OK.
"@find w[ei]ll" will find everything you control whose name contains "will"
or "well."
"@find =E=links" will list all exits that you control, and display where
they are linked to.
"@find button==locations" will list all objects you control with 'button'
in the name, and it will display where thay are located at.
"@find =~2000=size" will list all your objects whose current memory usage
is 2000 bytes or more, and it will display their size.
"@find =^2000=size" will, for a wizard, find all objects in the db that are
2000 or more bytes in total size, when fully loaded, and it will show
their sizes. Note that this will load all of each object into memory
to make the size determination. On some systems this can take a while,
and on all systems this is an abuse to the diskbasing cache. Only
Wizards may use this search feature.
Also see:
@OWNED,
@ENTRANCES and
@CONTENTS
@OWNED <name> [= <flags/types> = [<output type>]]
Searches through the database for items that <name> controls.
For an explanation of the flags/types modifiers and the output types,
see the help entry for @FIND.
Example: @owned Revar=F!L3=location
Will list all Mucker Level 3 (3) programs (F) owned by revar, that are
NOT set Link_OK (!L), and it will show the location of each one.
Note that only wizards can do an @owned on other people.
Also see:
@ENTRANCES,
@FIND and
@CONTENTS
@CONTENTS [<object>] [= <flags/types> = [<output type>]]
Searches the given object for items & exits that match the given flag string.
For an explanation of the flags/types modifiers and the output types, see
the help entry for @FIND.
Example: @contents here=DE=owner
Will list all Dark Exits who's source is your current location, giving the
owner of each one.
Also see:
@FIND,
@OWNED and
@ENTRANCES
@ENTRANCES [<object>] [= <flags/types> = [<output type>]]
Searches through the database for items that you control linked to <object>.
For an explanation of the flags/types modifiers and the output types, see
the help entry for @FIND.
Example: @entrances here=ED=location
Will list all Dark Exits that are linked to your current location,
giving the location of each one.
Also see:
@FIND,
@OWNED and
@CONTENTS
@TRACE <object> [=<depth>]
Starts with <object> and traces all location fields, until the global-
environment room is reached or the optional <depth> is specified. This
is generally useful for finding which rooms are parents in your heirarchy.
If you cannot link to a particular location its name is replaced by stars
(***).
@OECHO <vehicle object> = <echo prepend string>
Sets a string to prepend to messages relayed to the interior of a vehicle
in the vehicle's _/oecho property. Without a value, "Outside>" is prepended.
Also see:
VEHICLE
@PECHO <puppet object> = <echo prepend string>
Sets a string to prepend to messages relayed from a puppet in the puppet's
_/pecho property. By default, the puppet's name followed by ">" is prepended.
Also see:
ZOMBIE
@SWEEP
@SWEEP <object>
Perform a security sweep of some object, showing all listeners,
both players and things. You must own the object to sweep it.
Examples:
@sweep check the current room
@sweep me check yourself
@sweep janitor_closet check the object 'janitor_closet'
Object Flags
@SET here=A
If a room is set ABODE, players can set their homes there,
and can set the homes of objects there. (LINK_OK is now used only for exits,
and ABODE is for players and objects.)
When set on a program, it means AUTOSTART. This means that when the game
is first started up, the program will automatically be run with a trigger
of #-1 and a 'me @' of the owner of the program. This is useful to restart
processes that run in the background periodically.
@SET <thing>=B
Some mud restrict building commands to players whose builder flag is
set. The builder flag, BUILDER, is only meaningful for players. On such
systems, only builders can @create, @dig, @link, @open, or take control of
unlinked exits. Only a wizard can set this flag.
When BUILDER is set on a program, it is called "BOUND" and it causes any
functions within the program to run in preempt mode, regardless of the
multitasking mode that the process had before calling this program. When
the execution exits this program, the multitasking mode returns to what
it was before the function was called. This lets libraries of atomic
functions be written.
This flag is also called BOUND when it is set on rooms. An exit attached to
a thing or player and linked to a player or room will not work when the object
to which it is attached is in a room set BOUND.
@SET here=C
When set on rooms, exit and things, the C flag indicates that any player
may use the @chown command to claim ownership of the item. (see @chown)
When the C flag is set on a player, this indicates that the player wishes
to receive ANSI Color codes from the server.
@SET here=D
If a room is DARK, then when people besides the owner 'look' there, they only
see things they own. If a thing or player is DARK, then "look" does not list
that object in the room's Contents:. Players can set rooms they own dark, and
may also set objects they own dark, but they cannot drop dark objects in rooms
they don't control. Wizards can set players dark.
When a program is set DARK, it is called DEBUG, and a running stack trace is
printed out to any users of the program for each instruction executes.
@set here=O
If you set a room to 'Yield', exit matching will NOT continue up the
environment chain. The only exception to this are any exits on an area
up the environment chain that has been set to be 'Overt'. By setting a
room both Yield and Bound, you can limit players to -only- those exits
set on the room itself (assuming there are no Overt rooms further up the
env chain).
@set here=Y
If you set a room to 'Yield', exit matching will NOT continue up the
environment chain. The only exception to this are any exits on an area
up the environment chain that has been set to be 'Overt'. By setting a
room both Yield and Bound, you can limit players to -only- those exits
set on the room itself (assuming there are no Overt rooms further up the
env chain).
The flags are displayed as letters following an object's ID number.
Flags are set with the @set command. The flags are: W(izard), S(ticky),
L(ink_OK), D(ark), J(ump_OK), K(ill_OK), C(hown_OK), H(aven), A(bode),
B(uilder), V(ehicle), Z(ombie), and The flags R(oom), E(xit), and
P(layer) are also used. Debug is the same flag as Dark, Silent as Sticky,
Color as Chown_OK, and Bound as Builder. F refers to a Muck Forth program.
An M followed by a 1, 2, or 3 gives the Mucker Level. (Priority Level for
exits.) See TYPES, GENDER, and individual flag names.
@SET here=H
If a room is HAVEN, you cannot kill in that room. If a player is set
HAVEN, he cannot be paged. (see page) HAVEN, when set on a program is
called HARDUID, and causes that program to run with the permissions of
the owner of the trigger, rather than with the permissions of the user
of the program. When this is set in conjunction with the STICKY (SETUID)
flag on a program, and the program is owned by a wizard, then it will run
with the effective mucker level and permissions of the calling program.
If the caller was not a program, or the current program is NOT owned by
a wizard, then it runs with SETUID permissions.
@SET here=J
The Jump_OK flag is used in several ways. Unprivileged programs cannot
use MOVETO on an object unless the player either controls the object, the
room it's being moved from, and the room it's being moved to, or else they
are set Jump_OK. A player cannot use an action that is linked to another
player unless the other player is set Jump_OK. On some systems, where
SECURE_TELEPORTing is set up, you cannot use an action to leave a room,
unless the action is either attached to that room, or the room is JUMP_OK.
@SET here=K
On systems where the KILL_OK flag is used, it may restrict combat.
@SET here=L
If a room is LINK_OK, anyone can link exits to it (but still not from it).
It has no meaning for people, things, or exits. See @LINK in the dictionary.
A program that is link_ok can be called by any other program, and can be run
from actions and propqueues not owned by the owner of the program.
Mucker Levels:
The mucker level of a player or program specifies whether or not a player
can make MUF programs, and what permissions they will have when the programs
are run. (See 'man mucker levels') Only a wizard may set the mucker level
of a player, and a normal player may only set the mucker level of programs
they own to less than their current mucker level. A program cannot be set
to mucker level 0, since it doesn't mean anything.
When the mucker level of an exit is set, is it called the exit's priority
level. The priority levels let you specify that certain exits are not
overidable by local actions. When an exit is searched for, in the
matching routines, it will match like it used to, except that if it finds
an exit, later in the search order, that has a higher priority level, it
will choose that exit instead.
You can set the priority level of an exit by setting its Mucker Level.
(ie: @set exit=2) A level of 0 is the lowest priority, and a level of 3
is the highest priority. Only a Wizard can set the priority level of an
action or exit.
When the server looks for the standard "connect", "disconnect", or "look"
actions, it will ignore any actions with a priority Level of 0. When an
action is @attached to another object, @named to something else, or
@unlinked, its Priority Level is reset to 0.
If COMPATIBLE_PRIORITIES is #defined on your system, then exits that are
on room or player objects will never act as if they have an effective
priority level of less than 1.
@SET here=Q
A wizard set QUELL is effectively a normal player with no wizardly powers.
Programs that test to see if a player is wizard will get a false response
from '"wizard" flag?' when the player is QUELLed. Wiz-bitted programs
will still act wizbitted whether or not the owner is QUELLED.
@SET here=S
If a thing is STICKY, it goes home when dropped (See HOMES). If a room is
STICKY, its drop-to is delayed until the last person leaves (See DROP-TO).
If a player is STICKY (SILENT), they don't see the dbrefs on things they
own, and they do not see dark objects. If an exit is linked to a Thing,
and it is located on another Thing, then if the exit is not STICKY, the
Thing the exit is located on will go home when the exit is triggered. If
a program is STICKY (SETUID) it runs with the permissions of the owner of
the program, not the perms of the user.
A player can set themselves "SILENT" and not see all the dbrefs and dark
objects that they own. They won't see objects in a dark room either.
They still control the objects though. Silent is the same flag as STICKY.
@SET <thing>=V
Objects of TYPE_THING, that have the VEHICLE flag set, can contain
players. To enter a vehicle, you can either use a MUF program to
teleport you to it via MOVETO, you can get a wizard to @teleport you
into it, or else you an use an action that is both attached and linked
to the vehicle to enter it. This means that you can only enter a vehicle
from the same room that it is in, and you cannot use far links to enter
it. This prevents the use of vehicles to get around locks. Inside the
vehicle, you will see its @idesc, instead of its @desc, and you will
not be shown its @succ or @fail. Objects dropped in a vehicle will not
go away to the their homes, as a vehicle cannot have a dropto set in it.
Things with the VEHICLE flag set cannot enter rooms or use exits that
have the VEHICLE flag set. This allows a way to prevent vehicles from
entering areas where it would be illogical for them to be.
When VEHICLE is set on a program, it is called VIEWABLE, and enables the
program to be @listed.
@SET <thing>=W
If a person is WIZARD, they are a wizard, unkillable, subject to fewer
restrictions, and able to use wizard commands. It is only meaningful for
players and programs. In general, WIZARDs can do anything using #<number>
or *<player>. Only player #1 can set and unset the WIZARD flag of other
players if GOD_PRIV is used.
@SET <thing>=X
A thing or player set XFORCIBLE can be forced by anything passing its
force-lock. When the @tune enable_prefix is on, wizards may set this flag
on any wizard-owned action to allow matching on the beginning of the user's
command string, much like the builtin '"' and ':'. The flag is named XPRESS
when used in this way.
@SET <thing>=Z
@force and the FORCE muf primitive can be used on objects of type
THING, if they have the ZOMBIE flag set. Objects act as if they
have the permissions of their owner. If an object is locked against
a player, it will also be locked against anything that that player
owns, that tries to test the lock.
Things with the ZOMBIE flag set cannot enter rooms or use exits that
have the ZOMBIE flag set. This allows a way to prevent zombies from
entering areas where they are not wanted.
If you try to run a program that you control, that has its ZOMBIE flag
set, it will drop you into the MUF debugger. This lets you step line
by line, or instruction by instruction through a muf program, setting
breakpoints to stop at, and other nice things. There is help available
within the debugger, via the 'help' command.
Object Properties
Properties are stored in AVL trees, and organized into directories of
properties. This speeds things up, and keeps you from being spammed on
examines. To examine the properties on an object, use 'ex <obj>=<propdir>'.
where to examine the base properties in an object, <propdir> would be '/'.
You can see the value of a single property with 'ex <object>=<propname>'.
Propdirs are a method of storing and organizing properties to speed
access and to provide a sort of built-in organization. The basic idea
is to make something similar to a 'filesystem' for properties. In this
analogy, each person would be a filesystem, with a root directory and
(theoretically) an infinite number of properties beneath that.
A property has been expanded with the idea that each property may now
contain a new property list -- the 'propdir'. properties can both have
a value (either integer or string as before) _and_ contain other
properties.
The actual directory entries may ALSO contain data. Propdirs' only
real 'visible' changes are in the names of properties -- '/' is used as
the property directory separator, and so will not appear in the names
of the properties when listed through 'examine' or MUF programs.
Property protections have also been expanded -- the . and _ may appear
either at the beginning of the property name or immediately following a
'/', and that property will have the appropriate protections. For
example, the property '/mail/.inbox/mesg/#' would have the same
protections as '.mesg#' would now.
There are two ways to remove a property list:
* First, and most straight forward, is to remove the property that
contains it. so, in the previous example, removing the property
'/mail/.inbox' would (recursively) remove all properties under
.inbox before removing .inbox itself.
* The second way is to remove all properties within the property list
yourself. When the last property is removed, the parent property
(the one that contained the property list) is examined to see if
contains data. If it does, then the property list only is
removed. If the property doesn't contain data then it is removed
also.
Because of the first method of removing propdirs, the ability to have a
property list and value in the same property should be used sparingly.
If you try to access a property ending in '/', in MUF, it will give a
programmer error, except in NEXTPROP, in which it will give the name of
the first property in that propdir.
The last visible, non-MUF change that propdirs bring is that 'examine'
will no longer show properties _directly_. Instead, where the properties
would normally be shown, it will say:
"[ Use 'examine <object>=/' to list root properties. ]"
Examine now can take an argument which is the property or propdir to
view. If the property name given ends with a '/', all properties in
property directory will be listed, otherwise the single property named
will be shown.
Internally, a few things changed. property lists are now stored as AVL
trees instead of straight lists, so there is a speed increase even if
propdirs are not directly used. This also means properties are kept in
sorted order and will be displayed that way.
'addprop' will no longer allow a ":" in the property name.
To clear a propdir's value without deleting the proptree below it,
from MUF do a '"" 0 addprop' to it.
A property can *not* have both a string and integer stored at the same
time anymore. The old property.c was lax and allowed this, even though
the integer value would be lost on dbload.
See also PROPDIRS-EXAMPLE.
Property and Propdir Usage Examples:
Lines indented only 2 spaces are what the user is typing.
Lines indented 6 spaces are what the MUCK is returning to the user.
Lines in []'s are comments on what's going on.
[first, lets set up a bunch of properties]
@set me=first:a property.
@set me=second:another property.
@set me=first/one:A property in a propdir
@set me=first/two:Another property in a propdir
@set me=third/prime:three
[Okay, now lets see what properties we have. We use the examine command
to do that, with a second argument, to tell it what we want to list in
the way of properties. In this case, since we want to list the base level
properties, we use '/'.]
ex me=/
first/: (string) a property.
second: (string) another property.
third/: (no value)
[Okay, it has a few properties with the first part of the names of the
properties that we set. The /'s at the end of some of the property
names means that there are sub-properties that we can list. When we
set a property like 'first/one', it's actually creating a sub-property
named 'one' beneath a property named 'first'. If 'first' doesn't
already exist, then it will create that property. Let's list what
sub-properties we created under 'first'.]
ex me=first/
first/one: (string) A property in a propdir.
first/two: (string) Another property in a propdir.
[Here we see the properties that we set as sub-properties under 'first'.
We examined for 'first/' to list the sub-properties. The / at the end
of the name tells the game that we want it to list the sub-properties
of that property, and not that property's value itself. Lets see what
value the property 'first' has, itself. To do this we leave off the '/']
ex me=first
first/: (string) a property.
[Okay, lets say that we just want to see the value of the sub-property
named 'one', under the property 'first'. We can list it as follows:]
ex me=first/one
first/one: (string) A property in a propdir.
[If the property or sub-property that you specify does not exist, it
will complain about it.]
ex me=first/three
No property found.
[if a property was created to contain a sub-property, but was never given
a value itself, it is listed as having no value. It has sub-properties,
however.]
ex me=third
third/: (no value)
[Let's list those sub-properties.]
ex me=third/
third/prime: (string) three
[Okay, let's delete the sub-property 'prime', from under the property
'third'. To do this, we act like we are setting the variable again,
except that we are giving it no value this time.]
@set me=third/prime:
ex me=third/
No properties listed.
[There. It's gone. Now let's list the bottom level properties again.]
ex me=/
first/: (string) a property.
second: (string) another property.
[Whoops! The property 'third' is gone too! This is because properties
with no values are automatically deleted when their last sub-property
is deleted. Let's delete a subproperty from 'first', now.]
@set me=first/one:
ex me=/
first/: (string) a property.
second: (string) another property.
[The property 'first' still exists, with its string value, and it still
has sub-properties. Lets list those.]
ex me=first/
first/two: (string) Another property in a propdir.
[Here we see that the sub-property 'one' is gone, as we expected. Let's
see what happens when you erase a property that has sub-properties.]
@set me=first:
ex me=/
second: (string) another property.
[The property 'first' is gone.]
ex me=first/
No properties listed.
[And the subproperty it had is gone too! Let's remake the 'first' prop.]
@set me=first:again, a property.
ex me=/
first: (string) again, a property.
second: (string) another property.
[We have two properties again, and no sub-properties. It should be
noted that sub-properties can have sub-sub-properties, and they can
contain even subbier properties, and so on and so forth.]
@set me=first/one:uno
@set me=first/one/example:dos
@set me=first/two/example:tres
@set me=first/one/example/cat:meow
ex me=first/
first/one/: (string) uno
first/two/: (no value)
ex me=first/one/
first/one/example/: (string) dos
ex me=first/one/example/
first/one/example/cat: (string) meow
[There is a special case in examine to let us list ALL the properties and
sub-properties of a prop. To use it, we just specify '**' as a propdir.
For example, to list all sub-properties and sub-sub-properties, etc.,
under 'first', you would do the following:]
ex me=first/**
first/one/: (string) uno
first/one/example/: (string) dos
first/one/example/cat: (string) meow
first/two/: (no value)
first/two/example/: (string) tres
[Let's delete all the properties on the object, now. To do that, we
specify no property name or value when we use @set. Nothing but a
colon.]
@set me=:
ex me=/
No properties listed.
[All gone!]
@SET me=sex:unassigned|male|female|neuter
Default unassigned. If a player's sex is set, %-substitutions will use
the appropriate pronoun for that player. Only meaningful for players and
maybe Zombie things.
Also see:
SUBSTITUTIONS
@SET me=sex:unassigned|male|female|neuter|herm|hermaphrodite
Default is unassigned. If a player's sex is set, %X substitutions
will use the appropriate pronoun for that player in @osucc/@ofail/etc.
Only meaningful for players.
Also see:
SUBSTITUTIONS
Objects have several standard strings:
1) a name.
2) a description. (stored in _/de property)
2) an inside description (for vehicles). (stored in _/ide property)
3) a success message (seen by the player). (stored in _/sc property)
4) a fail message (seen by the player). (stored in _/fl property)
5) an osuccess message (seen by others). (stored in _/osc property)
6) an ofail message (seen by others). (stored in _/ofl property)
7) a drop message (seen by the player). (stored in _/dr property)
8) an odrop message (seen by others). (stored in _/ofl property)
(see properties)
MUF Programming
MAN [<subject>]
Displays the programmer's manual or a quick reference.
@PS
Lists the status of the currently running MUF program processes.
This lists all processes for a Wizard. Non-Wizards only see the muf
processes that they can @kill.
Also see:
@KILL
@KILL <processid>
@KILL <playername>
@KILL <programdbref>
@KILL all
If passed a processid (a number without a '#' preceeding it), it will kill
the given process, if the player controls it. If passed a player name, it
will kill all the processes controlled by that player. If passed a program
dbref, it will kill all processes that that program is running in. If the
argument passed is "all", and the player is a wizard, it will kill all
processes on the timequeue.
@LIST <program> [=[!#@]*[line1][-line2]]
Lists lines in a program, provided you control it or it is VIEWABLE.
Zero, one, or two line numbers may be specified, denoting the range of
lines to list. If no lines are given, the entire program is listed.
Additionally, a set of prefixes can be given to control the output:
! Outputs system messages as MUF comments.
# Lists program with line numbers, overriding current setting.
@ Lists program without line numbers, overriding current setting.
@EDIT <program>
Searches for a program and if a match is found, puts the player into
edit mode. Programs must be created with @PROGRAM or @MCPPROGRAM.
Also see:
@MCPPROGRAM,
@PROGRAM and
@MCPEDIT
@PROGRAM <program> [=<regname>]
Create a new program, or enter edit mode on an existing one. If a <regname>
is specified, a new program is always created.
Also see:
@MCPPROGRAM,
@EDIT and
@MCPEDIT
@MCPEDIT <program>
Searches for a program and if a match is found, pops up an editor window
if the client supports the MCP edit package, otherwise puts the player into
text edit mode. Programs must be created with @PROGRAM or @MCPPROGRAM.
Also see:
@EDIT,
@PROGRAM and
@MCPPROGRAM
@MCPPROGRAM <program> [=<regname>]
Create a new program, or enter edit mode on an existing one. If a <regname>
is specified, a new program is always created. If the client supports the MCP
edit package, an editor window will appear instead of using the text edit mode.
Also see:
@EDIT,
@PROGRAM and
@MCPEDIT
Wizardly Commands
@PCREATE <player>=<password>
Only wizards can use this command. This command creates a new player.
It may only be used if REGISTRATION is enabled.
@NEWPASSWORD <player> [=<password>]
Only wizards may use this command. Changes <player>'s password,
informing <player> that you changed it. Must be typed in full. If
GOD_PRIV was defined, nobody can change god's password.
@FORCE <player|thing>=<command>
Causes the game to process <command> as if it were typed by <player|thing>.
If the player or thing being forced is set Xforcible, and its @flock force
lock is set, then anyone (or any zombie) that passed that lock can use @force
on them. Otherwise only a wizard can use @flock on them.
With the compile option GOD_PRIV, God cannot be forced by anything except
God owned, wizbit programs.
@BOOT <player>
Disconnects a player from the game. If a player is connected more than
once it affects the most recent connection. Only a wizard may use this
command.
@TOAD <player1> = <player2>
Only wizards may use this command. Turns <player1> into a slimy toad,
destroying their character. All possessions of <player1> are @chowned to
<player2>. Must be typed in full.
@BLESS <obj>=<proppattern>
This is a wizard-only command.
Blesses all properties on <obj> that match the given <proppattern> wildcard
pattern. The wildcard pattern works similarly to how the examine patterns
work. ie:
@bless obj=/** blesses ALL properties on obj.
@bless obj=foo/** blesses all props in the foo/ propdir, and all propdirs
under the foo/ propdir, recursively.
@bless obj=foo*bar blesses all root props whose name start with foo and end
with bar.
The @bless command will list all properties that it blesses.
Blessed properties can execute MPI code with elevated permissions, allowing
scripts that can alter remote objects, and those objects not controlled by
the trigger owner. Blessed MPI can also use {force} on anyone.
Blessed _msgmacs properties don't execute with blessed permissions when they
are referenced from other MPI code. Instead, the bless bit on _msgmacs props
indicates only that that macro is available to scripts up the environment,
even if the script's trigger is not the same as the owner of the environment
room the _msgmacs prop is on.
@UNBLESS <obj>=<proppattern>
This is a wizard-only command.
Unblesses all properties on <obj> that match the given <proppattern>
wildcard pattern. The wildcard pattern works similarly to how the examine
patterns work. Ie:
@unbless obj=/** unblesses ALL properties on obj.
@unbless obj=foo/** unblesses all props in the foo/ propdir, and all
propdirs under the foo/ propdir, recursively.
@unbless obj=foo*bar unblesses all root props whose name start with foo
and end with bar.
The @unbless command will list all properties that it unblesses.
Blessed properties can execute MPI code with elevated permissions, allowing
scripts that can alter remote objects, and those objects not controlled by
the trigger owner. Blessed MPI can also use {force} on anyone.
Blessed _msgmacs properties don't execute with blessed permissions when they
are referenced from other MPI code. Instead, the bless bit on _msgmacs props
indicates only that that macro is available to scripts up the environment,
even if the script's trigger is not the same as the owner of the environment
room the _msgmacs prop is on.
@WALL <message>
Only wizards may use this command. Shouts something to every
player connected. Must be typed in full.
@DUMP [filename]
Only wizards may use this command. Saves the database from memory to disk.
Automatically occurs every three hours, and when @shutdown is used. It does
slow down the server, so only use if you fear a server crash is iminent.
If a filename is given, it will save the db to that file, and save any
subsequent dumps to it as well.
@SHUTDOWN
Shuts down the game. Only wizards may use this command, and it
must be typed in full.
Also see:
@RESTART and
@ARMAGEDDON
@RESTART
Initiate a full shutdown and restart of the Muck server. Only
wizards may use this command.
Also see:
@SHUTDOWN and
@ARMAGEDDON
@ARMAGEDDON [<reason>]
Initiates an immediate emergency shutdown of the Muck server, and does
NOT save the database out to disk. Use this ONLY when you suspect the
database has been corrupted, and it would be a BAD thing to save the
database out to disk. This is a wizard-only command.
Examples:
@armageddon force shutdown server
@armageddon World ending! force shutdown with given reason
Also see:
@SHUTDOWN and
@RESTART
@RESTRICT [on|off]
Manages restriction of logins, turning on or off maintenance wiz-only login
mode. With no args, @restrict will print out the current login restriction
state. With an argument of 'on', maintenance mode is turned on, and only
wizards can log in. With an argument of 'off', restricted login mode is turned
off, and all players can log in. NOTE: when the muck starts up in sanfix mode,
with a corrupted database, it will be with @restricted logins.
@UNCOMPILE
Uncompiles all programs, removing them from memory.
Only wizards may use this command. Attempt to reread SSL certificate files
and reset SSL options from @tune settings. If it fails (for example,
the new certificate file is not usable), old settings will persist. Must be
typed in full.
@TUNE
@TUNE info
@TUNE <param> [=<value>]
@TUNE %<param>
@TUNE info <param>
View and modify tunable parameters that configure how the server operates,
or provide help on a specific parameter.
This is a wizard-only command.
Examples:
@tune shows all parameters and their values
@tune info shows all parameters, values, and brief descriptions
@tune foo shows the value of foo
@tune foo=bar sets the value of foo to bar
@tune %foo resets foo to the default system value
@tune info foo briefly describes foo
Some parameters may require a @RESTART or reload to apply.
@CREDITS
Show a bit about those who contributed to the development of the
muck server software, giving credit where credit is due.
Also see:
@VERSION
@VERSION
Show the version information, build time, and compile options used.
Also see:
@CREDITS
@DEBUG
Wizard only command that gives database usage stats for
'diskbase'-style databases. Only available if compiled with DISKBASE.
More options will be added in the future.
Examples:
@debug display propcache display database property cache
Also see:
@MEMORY,
@TOPS and
@USAGE
@TOPS
@TOPS [muf|mpi] <count>
@TOPS [muf|mpi] reset
Show process usage and runtime statistics for both MUF and MPI
programs. Count controls the maximum rows of results shown. If left
blank, it uses the default of '10'.
This is a wizard-only command.
Examples:
@tops show default amount of profiling statistics
@tops 3 show 3 rows of all profiling statistics
@tops muf 5 show 5 rows of MUF profiling statistics
@tops mpi reset reset MPI collected profiling statistics
Also see:
@DEBUG,
@MEMORY and
@USAGE
@MEMORY
Wizard only command that gives detailed memory stats for the muck
server process. If HAVE_MALLINFO is used, this command shows more
information.
Also see:
@DEBUG,
@TOPS and
@USAGE
@USAGE
Wizard only command that gives system resource usage stats for the
muck server process.
Also see:
@DEBUG,
@MEMORY and
@TOPS
@EXAMINE <object>
Print detailed information on the given object, including owner,
location, home, referring objects, and more. The information printed
depends on what type the object is, e.g. thing, room, player, exit.
Only player #1 can examine if GOD_PRIV is used, otherwise, only
Wizards may use this command.
Examples:
@examine examine the current room
@examine #1 examine database object #1
@SANITY
Scan the entire database, verifying that all objects have valid data,
such as names, exits, ownerships, and check for orphan objects. Shows
all problems, but does not make any changes. Only player #1 can manage
sanity if GOD_PRIV is used, otherwise, only Wizards may do so.
Also see:
@SANCHANGE and
@SANFIX
@SANCHANGE <dbref> <field> <object>
Manually change the field of an entry in the database, primarily to
help with repairing a broken database. Use with caution. Only player
#1 can manage sanity if GOD_PRIV is used, otherwise, only Wizards may
do so.
Fields are:
exits start of Exits list
contents start of Contents list
next next object in list
location object's Location
home object's Home
owner object's Owner
Also see:
@SANITY and
@SANFIX
@SANFIX
As with @sanity, scan the entire database and verify all is sane,
but also attempt to fix any problems found. If sanity can not be
restored, you may need to manually repair the database with other
commands. Only player #1 can manage sanity if GOD_PRIV is used,
otherwise, only Wizards may do so.
Also see:
@SANITY and
@SANCHANGE
@TELEDUMP
Wizard-only command that dumps the database, MUF programs, and macros
on disk to the current descriptor. Output is base64-encoded.
Miscellaneous
Muck Basics Cheatsheet:
This is Fuzzball Muck, a user-extensible, multi-user chat system.
Basic commands:
move/go <direction>
get/take <thing>; drop/throw <thing>
look; look <thing>; look <direction>
say <message>; "<message>
pose <message>; :<message> --- shows your name, with the message after it. Used for actions.
whisper <player> = <message>
inventory
news
@describe me = <description>
@password <oldpassword>=<newpassword>
page <player> --- tell player that you are looking for them (cost no pennies)
page <player> = <message> --- gives the player the message long-distance
gripe <message> --- Complain to the management.
home --- go home
For help on a specific command, type 'help <subject>'.
For a list of subjects, try 'help category', or 'help alpha'.
Remember, no matter how bad it gets, you can always go 'home' or QUIT.
Costs:
Kill: 10p (or more, up to 100p).
@dig: 10p
@create: 10p (or more, up to 505p)
sacrifice value=(cost-5)/5
@find, @owned: 100p.
@link: 1p (if you didn't already own it, +1p to the previous owner).
@open: 1p (2p if linked at the same time).
Wizards don't need money to do anything.