Getting killed is no big deal. If you are killed, you return to your home,
and all things you carry return to their homes. You also collect 50 pennies
in insurance money (unless you have >= 10000 pennies). See KILL and MONEY.
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.
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.
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.
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.
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 it's @idesc, instead of it's @desc, and you will
not be shown it's @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.
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.
@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.
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.
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 it's 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!]
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.
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.
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)
Displays the programmer's manual or a quick reference.
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.
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.
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.
Searches for a program and if a match is found, puts the player into
edit mode. Programs must be created with @PROGRAM or @MCPPROGRAM.
Create a new program, or enter edit mode on an existing one.
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.
Create a new program, or enter edit mode on an existing one. If the
client supports the MCP edit package, an editor window will appear instead
of using the text edit mode.
Only wizards can use this command. This command creates a new player.
It may only be used if REGISTRATION is enabled.
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.
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.
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.
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.
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.
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.
Only wizards may use this command. Shouts something to every
player connected. Must be typed in full.
A Wizard only command that gives system resource usage stats for the
muck server process.
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.
Requests a short delta dump of the database to disk. Only changed
objects are written out in a delta dump. The @delta command does NOT
guarantee that only a delta dump will be performed, though. If too many
changed objects exist, a full dump of the database will be made instead.
Only wizards may use this command. Shuts down the game. Must be typed
in full.
Initiated a full shutdown and restart of the Muck server.
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.
move/go <direction>
get/take <thing>; drop/throw <thing>
look; look <thing>; look <direction>
say <message>; "<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.
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.
Must be in all capitals, and typed in full. Prints the given line before
the output of every command, setting them apart from other messages.
Must be in all capitals, and typed in full. Prints the given line after
the output of every command, setting them apart from other messages. Only
robots may use this command.