/
com/planet_ink/coffee_mud/Abilities/Common/
com/planet_ink/coffee_mud/Abilities/Diseases/
com/planet_ink/coffee_mud/Abilities/Druid/
com/planet_ink/coffee_mud/Abilities/Fighter/
com/planet_ink/coffee_mud/Abilities/Languages/
com/planet_ink/coffee_mud/Abilities/Misc/
com/planet_ink/coffee_mud/Abilities/Prayers/
com/planet_ink/coffee_mud/Abilities/Properties/
com/planet_ink/coffee_mud/Abilities/Skills/
com/planet_ink/coffee_mud/Abilities/Songs/
com/planet_ink/coffee_mud/Abilities/Spells/
com/planet_ink/coffee_mud/Abilities/Thief/
com/planet_ink/coffee_mud/Abilities/Traps/
com/planet_ink/coffee_mud/Behaviors/
com/planet_ink/coffee_mud/CharClasses/interfaces/
com/planet_ink/coffee_mud/Commands/
com/planet_ink/coffee_mud/Commands/interfaces/
com/planet_ink/coffee_mud/Common/
com/planet_ink/coffee_mud/Common/interfaces/
com/planet_ink/coffee_mud/Exits/interfaces/
com/planet_ink/coffee_mud/Items/Armor/
com/planet_ink/coffee_mud/Items/Basic/
com/planet_ink/coffee_mud/Items/CompTech/
com/planet_ink/coffee_mud/Items/MiscMagic/
com/planet_ink/coffee_mud/Items/Weapons/
com/planet_ink/coffee_mud/Items/interfaces/
com/planet_ink/coffee_mud/Libraries/
com/planet_ink/coffee_mud/Libraries/interfaces/
com/planet_ink/coffee_mud/Locales/
com/planet_ink/coffee_mud/MOBS/
com/planet_ink/coffee_mud/Races/
com/planet_ink/coffee_mud/Races/interfaces/
com/planet_ink/coffee_mud/WebMacros/
com/planet_ink/coffee_mud/WebMacros/interfaces/
com/planet_ink/coffee_mud/core/
com/planet_ink/coffee_mud/core/collections/
com/planet_ink/coffee_mud/core/interfaces/
com/planet_ink/coffee_mud/core/intermud/
com/planet_ink/coffee_mud/core/intermud/i3/
com/planet_ink/coffee_web/server/
com/planet_ink/siplet/applet/
lib/
resources/factions/
resources/fakedb/
resources/progs/autoplayer/
resources/quests/holidays/
web/
web/admin.templates/
web/admin/grinder/
web/admin/images/
web/clan.templates/
web/pub.templates/
web/pub/images/mxp/
web/pub/sounds/
web/pub/textedit/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="HTML Tidy, see www.w3.org" name="generator">
  <title></title>
</head>
<body>
<center>
<table border="1" bordercolor="gray" cellpadding="10" cellspacing="0"
 width="90%">
  <tbody>
    <tr>
      <td colspan="2" align="left" bgcolor="#dfdfdf" width="100%">
      <h1>CoffeeMud 5.9 Game
Builders Guide</h1>
      </td>
    </tr>
    <tr>
      <td align="left" valign="top" width="20%">
      <ul>
        <li>Introduction</li>
        <li><a href="#cmfs">CoffeeMud File System</a></li>
        <li><a href="#ables">Abilities</a></li>
        <li><a href="#lang">Languages</a></li>
        <li><a href="#craftskills">CraftSkills</a></li>
        <li><a href="#comps">Components</a></li>
        <li><a href="#allqualifys">All-Qualifys</a></li>
        <li><a href="#recipes">Recipes</a></li>
        <li><a href="#classes">Classes</a></li>
        <li><a href="#factions">Factions</a></li>
        <li><a href="#quests">Quests</a></li>
        <li><a href="#holidays">Holidays</a></li>
        <li><a href="#socials">Socials</a></li>
        <li><a href="#polls">Polls</a></li>
        <li><a href="#clans">Clans</a></li>
        <li><a href="#governments">Governments</a></li>
        <li><a href="#achievements">Achievements</a></li>
        <li
 style="list-style-type: none; list-style-image: none; list-style-position: outside;"><span
 style="text-decoration: underline;"><br>
          </span></li>
      </ul>
      </td>
      <td align="left" valign="top">
      <p style="text-align: center;" align="left"><strong><img
 src="images/mug.jpg"></strong></p>
      <strong style="color: rgb(255, 0, 0);"><font size="5">Introduction</font></strong><br>
      <br>
The purpose of this document is to cover aspects of CoffeeMud game
creation that are not directly related to Area/Map and Mob/Item
creation, which is
already covered in detail in the <a href="ArchonGuide.html">Archons
Guide.</a><br>
      <br>
      <p><a name="cmfs"><strong><font color="#008000" size="5">The
CoffeeMud File System (CMFS)</font></strong></a></p>
      <p>This is a complicated
topic, but one that all builders and
Archons should understand. Sooner or later, every CoffeeMud
adminstrator is going to want to modify some of the local files in the
CoffeeMud folder. This may include the quests, or skill lists, or
hopefully the intro.txt file located in resources/text directory!
Builders will also want to add files, including MOBPROG script files
that run in the Scriptable behavior, item and mob xml (*.cmare) files
for the
RandomMonsters behavior or for other scripts, Quest scripts, and other
things.</p>
      <p>Pretty soon, your
directories are packed with stuff customized
to your mud. This can create issues for back-ups, meaning that not only
do you have to back-up your database (or your data directory) but you
have to backup all those files that have been modified and added, since
they play as integral a role in your world as the rooms and areas do.
All those files can also create upgrade issues, as modified files can
get accidently overwritten when a new version of CoffeeMud is overlayed
in your installation directory. Lastly, this can create security
issues, as the builders might accidently delete the wrong file, or make
a mistake, creating problems for the admins as they try to recover.</p>
      <p>To help solve these
problems, the CoffeeMud engine uses a kind
of mirrored file system called <strong>CMFS</strong>
to store some files in your local directory (your hard drive), some
files in your database, and some files in both at the same time. When
the exact same file in the exact same directory is found in BOTH the
local file system and in the database, the one in the database is
always preferred. That way, should the file in the database (called a <strong>VFS</strong>
file) become corrupted or deleted, the one in the local file system
will remain safe. Furthermore, since files in the database (VFS files)
are always accessed before the same file in the local file system, you
can overwrite the files in the local file system with upgrades without
worrying about losing your changed files. And lastly, CoffeeMud
provides a security system that allows you to grant access to users on
a folder level, and also to specify whether the user can access the
local file system, or only the database VFS files and folders.</p>
      <p>The CMFS includes
everything in your CoffeeMud installation
directory/folder, and all the other folders therein. In fact, CoffeeMud
is utterly unable to access any files OUTSIDE of your CoffeeMud
installation folder, giving the server administrator an added level of
comfort. The CMFS is also able to access the VFS files in the CoffeeMud
database, and to give them preference over identically named files in
your local file system.</p>
      <p>CMFS employs the UNIX
standard for separating directorys and
folders. This means that the forward slash / character is used when
separating one folder from another when naming a file. The CMFS path <strong>/resources/text/intro.txt</strong>
would, for example, refer to the file called intro.txt inside the text
directory, which is inside the resources directory, which is in your
CoffeeMud installation folder.</p>
      <p>If that file had been
previously copied into the same
directory in the VFS database, then the CMFS would prefer that version
over the one that remains in the local file system. You may modify the
file <strong>resources/text/intro.txt,</strong>
update it, and save it without needing to remember that you are really
changing a file in the database. CoffeeMud will always remember to
prefer to the one in the VFS to the one on your local hard drive, if it
has been copied or saved there.</p>
      <p>If for some reason you
absolutely need to ensure that ONLY the
local file system version of a file or ONLY the VFS version of a file
is referenced by CoffeeMud, you may do so by prepending a special
string to your file paths. The string is double-colon :: to force
access of a VFS file, and double-forward-slash // to force access of a
local file system file. For instance, if the Scriptable prog
resources/progs/myprog.script is located in both your local and VFS
file systems, then you can force Scriptable to use the VFS version by
using <strong>::resources/progs/myprog.script</strong>
as your path
name. If you needed to force Scriptable to load the local file system
version of the file <strong>//resources/progs/myprog.script</strong>
would do the trick. Again, <strong>resources/progs/myprog.script</strong>
alone, without any special prepended file, will prefer the VFS file,
but will use the local file if a VFS file is unavailable. This is the
preferred behavior, so your Scriptable filenames should employ the
normal path naming standard except under very extraordinary
circumstances.</p>
      <p>Files can be copied into
the VFS from the local file system
using the Archon SHELL command. If you were to go into the coffeemud
resources folder using this command:</p>
      <p><strong><font face="Courier New">shell cd /resources</font></strong></p>
      <p>if you now view the
directory</p>
      <p><strong><font face="Courier New">shell dir</font></strong></p>
      <p>you'll see all the files
in your local filesystem in the
resources folder in your coffeemud installation directory. Now, you may
copy all of the files in this directory into the *same* directory in
the VFS database by entering:</p>
      <p><strong><font face="Courier New">shell copy * ::/resources</font></strong></p>
      <p>the copy command here is
followed by a wild-card character,
the asterisk, to designate ALL files in the resources directory. The
next parameter is the destination folder. In this case, we specify our
destination as ::/resources, which would be the same directory, but in
the VFS system. Notice that we did not have to create a VFS folder
called /resources before we did this. The VFS always has a mirror copy
of all the local file system folders. However, it requires you to use
the SHELL COPY command to create a mirror of the files themselves. Now,
look at the directory again:</p>
      <p><strong><font face="Courier New">shell dir /resources</font></strong></p>
      <p>We displayed the
directory this time using an absolute path
name, just to show you the syntax. You are still looking at the same
directory you saw when you entered <strong><font face="Courier New">shell
dir</font></strong>.
In fact, you can enter that command again to prove it. You'll see that
all of the files have little "+" marks next to them. This means that
the files exist both in your local file system *AND* in the VFS. Now
suppose we did something silly, like delete our local file system
version of resources/socials.txt. This could be done with the following
command:</p>
      <p><strong><font face="Courier New">shell delete
//resources/socials.txt</font></strong></p>
      <p>Notice that we used the
double-slash // to designate that we
want to delete the LOCAL version. Had we not put those two slashes in
front, it would have preferred the VFS copy of socials.txt and deleted
that one instead. Now, look at the directory again:</p>
      <p><strong><font face="Courier New">shell dir *</font></strong></p>
      <p>This time we displayed
the directory using an * wildcard, just
to demonstrate that we can use mask characters when displaying
directories. The command is doing the same thing the previous two <strong><font
 face="Courier New">shell dir</font></strong>
commands did, just in a different way. Now, you'll see that most of the
files still have the "+" sign in front, but now <strong>socials.txt</strong>
only has a "-" character. This means that the file exists only in the
VFS database, and not on our local hard drive. We can copy it back to
our local file system by doing:</p>
      <p><strong><font face="Courier New">shell copy ::socials.txt //</font></strong></p>
      <p>You'll see that I changed
the syntax of the copy command
around again to demonstrate some of the previous lessons. We use the ::
characters in front of the filename socials.txt to specify that we want
to copy the VFS version of the file. Since the VFS version is always
preferred and accessed first, the copy command would have worked just
fine without the two :: characters in front. The last parameter is just
two slash marks. When no directory or folder is specified, the default
and current directory is used. In this case, we only specified the two
slash marks to denote the local file system, and we did not specify a
destination folder. This means that the file socials.txt will be copied
into the current folder, on the local file system only.</p>
      <p>There are numerous other
shell commands you can make use of,
such as <strong><font face="Courier New">makedirectory</font></strong>
to create new folders, <strong><font face="Courier New">edit</font></strong>
to modify a text file, <strong><font face="Courier New">findfile</font></strong>
to hunt down a file with a given name, or <strong><font
 face="Courier New">searchtext</font></strong>
to find a file
containing a given text string. The shell command is a useful tool for
mirror your local files in your VFS database for safety, convenience,
and easy back-ups.</p>
      <p>If
you peruse the CMFS directories using either the shell command, or the
File Manager in the MUDGrinder, you will find that all of your local
files, and any VFS files you created are accessible side-by-side.
&nbsp;Poke around long enough, however, and you'll find one special
VFS
directory (/resources/catalog/...). &nbsp;This directory is created
by
the system to house read-only versions of the items and mobs in
your&nbsp;Catalog system as xml (*.cmare) files. &nbsp;These
files and
directories may not be modified or deleted, as they are only a mirror
of the catalog. &nbsp;See the Archon's Guide for more information
on
the Catalog system.</p>
      <p>The last topic concerning
the CMFS is about security. At the
top of this Guide, the subject of security codes was discussed. Well,
CMFS provides its own security codes to limit access to files and
folders in either the local file system, the VFS, or both.</p>
      <p>By default, a user is not
allowed to access any files in
either file system, unless they are an Archon or have been given a CMFS
security code. The two security codes are <strong>FS:
[ABSOLUTE_PATH]</strong>
and <strong>VFS: [ABSOLUTE_PATH].</strong>
In cmfs security codes, the [absolute path] is a path name starting
from inside your coffeemud directory, with no path-separating slashes
except to separate directories or to designate that the last file is
really a directory by using a trailing forward slash.</p>
      <p>For example, to give a
user access ONLY to files in the VFS
database folder /resources/text/, you would give the user security code
      <strong>VFS: RESOURCES/TEXT/</strong>
The user would then have permission to view or delete any of the VFS
database versions of files that have been copied into that directory
from the local file system. The user would also have permission to
create new files or create new directories in the VFS inside that
folder. Directories and files created by such a user, who only has a
VFS security code, would not create ANY files in your local file
system. All files would reside only in the VFS database. This user
would not even be able to copy existing local file system files into
the VFS to modify, since he does not have access.</p>
      <p>To give the same user
access to BOTH the local file system and
VFS versions of the resources/text directory, the security code would
need to changed to <strong>FS:
RESOURCES/TEXT/</strong> Using FS
instead of VFS gives the user access to both local and database
versions of those files.</p>
Of course, by default, an Archon has access to both versions of the
entire coffeemud installation folder. It would be as if the Archon had
the security code <strong>FS:</strong>
With
no directory specified, the Archon has local file system (and implied
VFS) access to the root directory and everything underneath it. For
that reason, when limiting access to the file system, it is best to use
the VFS: security code, and to always designate a limited directory
path in which your adminitrative user may play (upload their files,
save their scripts, etc). <br>
      <br>
      <strong><a name="ables"><font color="blue" size="5">Abilities
(Skills/Spells/Chants/etc..)</font></a></strong>
      <p>In the lexicon of the
Archons, the word "Ability" encompasses
a great many powers and skills, both natural and man-made. An ability
may behave as an Affect, as a Skill, or as Both.</p>
      <p>An ability behaving as an
Affect means that it is acting as a
discrete aspect of some existing thing, whether that thing is a room,
an exit, an item, or a mob. Such aspects may include the property of
great strength, great damaging ability, immunity to certain affects, or
simply the garbling of normal speech. An ability taking on this role is
both passive and reactionary; passive when it is embueing its host with
great strength or damage, and reactionary when it is providing immunity
or garbling speech.</p>
      <p>An ability that is
behaving as a Skill means that it allows
its host (which is always a MOB in this case) to interact with the
world around it, to change it, derive information from it, or beslow
Affects upon it. Such interactions can include kicking, making sick,
poisoning, identifying, catching on fire, and many other things. An
ability taking on this role is entirely active, though once the active
interaction ends, that same Ability may either end (as a kick), leave
itself behind on its target to remain as an Affect as described above
(as catching on fire would).</p>
      <p>CoffeeMud contains over a
thousand different java-coded
Abilities which fall into numerous other categories and genera of
various descriptions. The most important of those categories, however,
are their Ability Type. CoffeeMud has numerous different ability types,
which include Properties (which always act only as Affects), or Skills,
Spells, Prayers, Chants, Diseases, Poisons, etc. (all of which can act
purely as Skills, act purely as an Affects, or act as Both depending on
the context in which it is used). Whenever you place the name of an
ability in the Affects list of a mob, item, room, or exit, you are
telling CoffeeMud to use only the Affect/property aspect of that skill.
When you place the same ability name in the same mob's Abilities list,
you are telling CoffeeMud to reserve the ability for use as a Skill.
For example, when you add Spell_GiantStrength to a GenMob's affects
list, you are saying that this mob is permanently stronger than normal,
but when you place it on the GenMob's list, you are saying
that you want the mob to be able to invoke the skill at a later date
(by casting the spell).</p>
      <p>CoffeeMud also allows you
to define abilities outside of the
java-realm. This can be done from the command line using the CREATE
command. If you want to create a new skill called Poke, for instance,
you might enter:</p>
      <p><strong>CREATE
ABILITY Skill_Poke</strong></p>
      <p>And it would be done. The
"Skill_Poke" is the abilities
Ability ID. The fact that it starts with "Skill_" is merely for
descriptive purposes, and is not required. Generally speaking, it is a
good idea to give your abilities Ability ID's that start with the
general kind of ability it is, for instance "Spell_", "Chant_",
"Prayer_", etc.</p>
      <p>Whenever creating or
modifying a new ability, the Archon is
presented with a menu of selections and options available to customize
the class. Here is a description of those options:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Skill
Name</em></td>
            <td>the name of the
ability. Make this anything you like,
but uniqueness is important for making help file entries.</td>
          </tr>
          <tr>
            <td><em>Type,
Domain</em></td>
            <td>the skill type and
domain (if any). Enter the type, a
comma, and a domain (or nothing). Enter ? to get a list of skill and
domain types.</td>
          </tr>
          <tr>
            <td><em>Command
Words</em></td>
            <td>the command
invocation word. This need not
be unique to your skill! For instance, use CAST for spells, and the
command word will automatically require the skills name to be included
for invocation. Use commas to seperate different invocation words. This
can be blank for Properties.</td>
          </tr>
          <tr>
            <td><em>Minimum
Range</em></td>
            <td>for
combat/targeted skills, how far away the invoker
must be to use the skill. Use ? to get a list of possible values.</td>
          </tr>
          <tr>
            <td><em>Maximum
Range</em></td>
            <td>
            <p>for combat/targeted
skills, how close the invoker must
be to use the skill. Use ? to get a list of possible values.</p>
            </td>
          </tr>
          <tr>
            <td><em>Ticks
Between Casts</em></td>
            <td>number of ticks
that must ellapse before the skill can
be used again.</td>
          </tr>
          <tr>
            <td><em>Duration
Override (0=NO)</em></td>
            <td>if your skill
affects the target over time, then the
duration will be standard. If you wish to override the standard effect
duration, set this to a number of ticks greater than 0.</td>
          </tr>
          <tr>
            <td><em>Affect
String</em></td>
            <td>what is displayed
in the Affects list when players and
mobs are affected by this ability. Enter nothing, or NULL to show
nothing at all.</td>
          </tr>
          <tr>
            <td><em>Is
Auto-invoking</em></td>
            <td>whether this skill
is automatically applied to a player
as an affect when they learn the skill. If true, the ability will show
no casting message, and proceed directly to affecthood.</td>
          </tr>
          <tr>
            <td><em>Skill
Flags</em></td>
            <td>0 or more
comma-delimeted flags that describe the
affects of your skill to the rest of the mud engine. Use ? to get a
list.</td>
          </tr>
          <tr>
            <td><em>Override
cost</em></td>
            <td>designate the cost
of using this skill in
mana/movement/etc. A value of -1 means to use the default system as
defined in your coffeemud.ini file. A value of 0 means its free. A
value from 0-99999 means to always use that amount. A value of
2147483647 means to always use all of the mobs mana/move points. A
value of 2147483647-100 to 2147483647 means to use that percentage of
the mobs mana/move points.</td>
          </tr>
          <tr>
            <td><em>Cost
Type</em></td>
            <td>one or more flags
designating the type of mob resource
used to invoke the skills, whether it be move, mana, hit points, or
some combination. Enter ? for a list.</td>
          </tr>
          <tr>
            <td><em>Can
Affect</em></td>
            <td>the types of
objects which, when invoked, this skill
will remain on as an affect. The list is comma-delimited. Make sure
this is a subset of the Can Target list! Enter ? for a list.</td>
          </tr>
          <tr>
            <td><em>Can
Target</em></td>
            <td>the types of
object which, when invoked, this skill
will target. If the value is 0, it will target only the invoker. Enter
? for a list.</td>
          </tr>
          <tr>
            <td><em>Tick/Periodic
Affects</em></td>
            <td>the standard
damage/healing and Extra Castings will
apply at skill invocation time. However, if your skill is set to affect
the target over time, AND this is set to true, then those things will
happen every tick until the effect expires.</td>
          </tr>
          <tr>
            <td><em>Quality
Code</em></td>
            <td>whether this skill
is malicious (hurts the
target), beneficial to self or others (always gives a combat benefit),
ok to self or others (sometimes gives a combat benefit under certain
circumstances), or indifferent (usually for role-playing skils). Enter
? for a list.</td>
          </tr>
          <tr>
            <td><em>Affect
Adjustments</em></td>
            <td>For skills that
affect their targets (see
Can Affect), this is the list of affects and their values. It is
modelled on the same syntax and format of the property
Prop_HereAdjuster, so enter HELP Prop_HereAdjuster for information on
the syntax for this field. Entering ? will show you that help.</td>
          </tr>
          <tr>
            <td><em>Caster
Mask</em></td>
            <td>a mask to
determine if the invoker is allowed, under
the circumstances, to use this skill. Enter ? or help on ZAPPERMASKS
for more information on the syntax for CoffeeMud "Zapper" masks.</td>
          </tr>
          <tr>
            <td><em>Scriptable
Parm</em></td>
            <td>a
Scriptable-behavior parameter denoting
the script that is active during invocation of this skill and during
its tenure as an affect. See the Scriptable Guide for detailed
information on how to use mobprog scripts. Enter ? for some short help
on acceptable parameters here. *special note: during successful
invocation of this ability, a special trigger event will occur that can
be handled by an IMASK_PROG p &lt;ability id&gt;. Such a script
trigger
would, for example, be the appropriate place to put damage commands for
skills that do damage. Periodic actions can be placed in RAND_PROG
triggers.</td>
          </tr>
          <tr>
            <td><em>Target
Mask</em></td>
            <td>a mask to
determine if the target is allowed, under the
circumstances, to be targeted by this skill. Enter ? or help on
ZAPPERMASKS for more information on the syntax for CoffeeMud "Zapper"
masks.</td>
          </tr>
          <tr>
            <td><em>Fizzle
Message</em></td>
            <td>the message shown
when the mob or player fails their
proficiency check for this skill. Use &lt;S-NAME&gt; as a
substitute
for the invoker, and &lt;T-NAME&gt; as a substitute for the
name of the
target.</td>
          </tr>
          <tr>
            <td><em>Auto-Cast
Message</em></td>
            <td>the message shown
when the skill is invoked from a
wand, scroll or other automatic means. Use &lt;S-NAME&gt; as a
substitute for the invoker, and &lt;T-NAME&gt; as a substitute
for the
name of the target.</td>
          </tr>
          <tr>
            <td><em>Normal-Cast
Message</em></td>
            <td>the message shown
when the skill successfully invoked.
Use &lt;S-NAME&gt; as a substitute for the invoker, and
&lt;T-NAME&gt;
as a substitute for the name of the target.</td>
          </tr>
          <tr>
            <td><em>Post-Cast
Message</em></td>
            <td>the message shown
after the skill is invoked, if the
target did not make a saving throw against it. Use
&lt;S-NAME&gt; as a
substitute for the invoker, and &lt;T-NAME&gt; as a substitute
for the
name of the target.</td>
          </tr>
          <tr>
            <td><em>Attack
Type</em></td>
            <td>an optional field
for malicious skills.
this is the secondary type of attack being made, where the primary
attack type is determined by the skill type (magic for spells, chants,
prayers, etc). for instance, for a flame-shooting spell, FIRE would be
an appropriate value. Use ? for a list.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Silent Affects</span></td>
            <td>an optional
&nbsp;semicolon delimited list
of&nbsp;miscellaneous skills/spells/properties which the target of
this
skill will be placed under for the duration of the affect.
&nbsp;Enter
? or help on Prop_SpellAdder for more information on the syntax for
this field.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Extra Castings</span></td>
            <td>an optional
simicolon delimited list of mischellanous
skills or spells which will be invoked upon the target of this skill
after all of the other above things have occurred. &nbsp;Enter ? or
help on Prop_SpellAdder for more information on the syntax for this
field.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Damage/Healing Formula</span></td>
            <td>an optional
formula describing either a range of damage
or a range of healing which will be inflicted upon the target of this
skill at invocation time. &nbsp;The syntax of this field is a
formula.
Use +-*/()?. @x1=caster level, @x2=target level.&nbsp; Formula
evaluates &gt;0 for damage, &lt;0 for healing. Requires Can
Target
above! &nbsp;See help on MATH_FORMULA for more information on how
to
use this formula field.</td>
          </tr>
          <tr>
            <td><i>Help
Text</i></td>
            <td>always starting
with the string &lt;ABILITY&gt;, this is the entry players will
see when they enter HELP ABILITYNAME.</td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
      <br>
      <strong><a name="lang"><font color="blue" size="5">Languages</font></a></strong>
      <p>Although below the
consideration of the mighty archons, a
language is a series of noises or scribblings that mortals use to
communicate their ideas with each other. &nbsp;Like Skills and
Spells
above, Languages can be created by the Archons, and then assigned to
races, or allow them to be trained by players.</p>
      <p>By default, CoffeeMud
comes with several interesting languages
that players can speak using the SPEAK command. &nbsp;However,
CoffeeMud also allows you to define languages outside of the
java-realm. This can be done from the command line using the CREATE
command. If you want to create a new language called Boopsia, for
instance,
you might enter:</p>
      <p><strong>CREATE
LANGUAGE Lang_Boopsia</strong></p>
      <p>And it would be done. The
"Lang_Boopsia" is the abilities
Ability ID. The fact that it starts with "Lang_" is merely for
descriptive purposes, and is not required. &nbsp; Most languages do
not, for some unknown reason.</p>
      <p>Whenever creating or
modifying a new language, the Archon is
presented with a menu of selections and options available to customize
the class. Here is a description of those options:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Name</em></td>
            <td>the name of the
language. Make this anything you like,
but uniqueness is important for making help file entries.</td>
          </tr>
          <tr>
            <td><em>X
Letter Words</em></td>
            <td>languages work by
replacing the players native language words with
words from these lists which are similar in length. &nbsp;Since
most
english words are under 10 letters, you would normally not need more
than 10 word lists. &nbsp;These lists are a comma delimited set of
words in the New language that are used to replace english words of
similar length.</td>
          </tr>
          <tr>
            <td><em>Hashed
/ Replacement Words</em></td>
            <td>If you would
actually like to have some direct word translations,
here is where you would put them. &nbsp;For example, to have the
word
"CAT" always translated to "DIABLO" in your new language, you would
define that fact here</td>
          </tr>
          <tr>
            <td><i>Help
Text</i></td>
            <td>always starting
with the string &lt;ABILITY&gt;, this is the entry players will
see when they enter HELP ABILITYNAME.</td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
      <br>
      <strong><a name="craftskills"><font color="blue" size="5">Craft
Skills</font></a></strong>
      <p>Crafting Skills are
skills that players use to take raw
resources and turn them into useful things, like swords, armor, bags,
bowls, and so forth. &nbsp;These are skills like Cobbling,
Carpentry,
Weaponsmithing, etc.&nbsp;</p>
      <p>Although CoffeeMud
includes a wide variety of configurable crafting
skills, it is not beyond the realm of possibility that you may want to
add onto them. &nbsp;Therefore,
CoffeeMud also allows you to define crafting skills outside of the
java-realm. This can be done from the command line using the CREATE
command. If you want to create a new craft skill called Mixologist, for
instance,
you might enter:</p>
      <p><strong>CREATE
CRAFTSKILL Common_Mixologist</strong></p>
      <p>And it would be done. The
"Common_Mixologist" is the abilities
Ability ID. The fact that it starts with "Common_" is merely for
descriptive purposes, and is not required. &nbsp; Most existing
crafting skills do not, for some unknown reason.</p>
      <p>Whenever creating or
modifying a new skill, the Archon is
presented with a menu of selections and options available to customize
the class. Here is a description of those options:</p>
      <strong></strong>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Name</em></td>
            <td>the name of the
skill. Make this anything you like,
but uniqueness is important for making help file entries.</td>
          </tr>
          <tr>
            <td><em>Command
Words</em></td>
            <td>the command
invocation word. This need not
be unique to your skill! Use commas to seperate different invocation
words.</td>
          </tr>
          <tr>
            <td><em>Skill
Verb</em></td>
            <td>a descriptive verb
shown when the player is doing this skill, such as mixing, crafting,
carving, hitting...</td>
          </tr>
          <tr>
            <td><i>Recipe
Filename</i></td>
            <td>the name of the
recipe file, which will be found in /resources/skills/</td>
          </tr>
          <tr>
            <td><i>Raw
Materials</i></td>
            <td>if this skill
supports making items out of a raw
material (as opposed to making items out of other items), then here is
where you would specify which raw material or resource types are used
to make them. &nbsp;If nothing is specified here, then the skill
can
only be used to make items from other items.</td>
          </tr>
          <tr>
            <td><i>Can
Mend</i></td>
            <td>does this skill
support mending the things it makes?</td>
          </tr>
          <tr>
            <td><i>Can
Refit</i></td>
            <td>does this skill
support refitting the wearables it makes?</td>
          </tr>
          <tr>
            <td><i>Can
Bundle</i></td>
            <td>does this skill
support bundling the raw materials you make things from with this skill?</td>
          </tr>
          <tr>
            <td><i>Can
Sit</i></td>
            <td>can this skill be
performed while sitting down?</td>
          </tr>
          <tr>
            <td><i>MSP
file</i></td>
            <td>the name of the
sound file from /web/pub/sounds that should be played when the player
does this skill.</td>
          </tr>
          <tr>
            <td><i>Help
Text</i></td>
            <td>always starting
with the string &lt;ABILITY&gt;, this is the entry players will
see when they enter HELP ABILITYNAME.</td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
      <strong><a name="comps"><font color="blue" size="5">Components
(for Skills,
Spells, etc..)</font></a></strong>
      <p>A Component in this
context
refers to an item or items that a player must have or have access to in
order to use a particular skill, cast a particular spell, prayer, song,
etc. &nbsp;Components are required only at the time the skill or
spell in invoked, and may be consumed or not by the invocation.
&nbsp;An example of this would be cloth for the bandaging skills, a
forge for the blacksmithing skill, or sand for the sleep spell.</p>
      <p>From the command line,
skill components can be created using the CREATE command:</p>
      <p><b>CREATE
COMPONENT Skill_Sleep</b></p>
      <p>You can also modify the
skill component requirements by using the MODIFY command:</p>
      <p><b>MODIFY
COMPONENT Skill_Sleep</b></p>
      <p>Where Skill_Sleep would
be the full ABILITY ID of the skill you want to add or modify component
requirements for. &nbsp;Use can use LIST ABILITIES to see all the
ability ids in your mud. &nbsp;</p>
      <p>Either way, you are then
presented with a wizard menu for each required component in the
invocation. &nbsp;An invocation can include several components, and
they can be all required, or just some or one of them required. You can
also have some required by certain kinds of casters that are not
required by other kinds. &nbsp;The first menu is a list of each
component, whether it is one of many requred, or just an optional
component. &nbsp;To edit one, enter its number. &nbsp;To add a
new one, enter the highest number shown. &nbsp;This will give you a
menu of information about that component, as follows:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Conjunction</em></td>
            <td>this is how this
entire
component relates to the ones before it. &nbsp;If it is ALSO
required in addition to the ones before it, set this to say AND.
&nbsp;If it is an OPTION along with the ones before it, set it to
say OR. &nbsp;On the command line, enter X to delete the entire
component.</td>
          </tr>
          <tr>
            <td><em>Component
Position</em></td>
            <td>this is where the
item must be
in order to be used as a component. &nbsp;This value can be
'inventory' for the players inventory, 'onground' to be on the ground
in the same room as the player, 'held' to require it be in the players
held position, 'worn' to require it be worn, or nearby for an item in a
nearby container.</td>
          </tr>
          <tr>
            <td><em>Component
Fate (Consumed)</em></td>
            <td>whether or not a
this
component is consumed when the skill is used. &nbsp;This value will
be consumed if if is, or kept if it is not.<br>
            </td>
          </tr>
          <tr>
            <td><em>Amount</em></td>
            <td>the number of
units of the
component required for each skill invocation. &nbsp;If the
component is consumed, all units will be consumed.</td>
          </tr>
          <tr>
            <td><em>Type
of Component</em></td>
            <td>
            <p>there are 3 types
of valid
components, material types, specific material resources, or arbitrary
item names. Use ? for a list of resources.</p>
            </td>
          </tr>
          <tr>
            <td><em>Component
Mask</em></td>
            <td>a zapper mask (see
help on zapper masks) to filter in what kind of player this component
applies to.</td>
          </tr>
        </tbody>
      </table>
      <p>If you no longer want a
skill to require a component, you can always just obliterate it with
the DESTROY command:</p>
      <p><b>DESTROY
COMPONENT Skill_Sleep</b></p>
      <p>Of course, all this can
also be done from the MUDGrinder Components editor.</p>
      <p><br>
      <strong><a name="allqualifys"><font color="blue"><font size="5">All-Qualify
Skills/Spells/etc..</font></font></a></strong> </p>
      <p>An All-Qualify skill is
one that is accessible to all of your
character classes. &nbsp;They are divided into two catagories:
skills
that are qualified by All classes, and skills that are qualified by
Each and Every class. &nbsp;The distinction is an subtle one;
skills
qualified for by All classes are not considered to belong to any
particular class, and will be listed and processed different in the
muds user interface in various ways. &nbsp;A skill qualified for by
each and every class belongs to each class, and is processed exactly
like any other class skill.</p>
      <p>From the command line,
all-qualify entries can be created using the CREATE command:</p>
      <p><b>CREATE
ALLQUALIFY EACH Skill_Sleep</b></p>
      <p>You can also modify
the&nbsp;all-qualify entries by using the MODIFY command:</p>
      <p><b>MODIFY&nbsp;</b><b>ALLQUALIFY
ALL</b><b>
Skill_Sleep</b></p>
      <p>Where ALL would be either
EACH or ALL; where Skill_Sleep would
be the full ABILITY ID of the skill you want to add or
modify&nbsp;all-qualify entries for. &nbsp;Use can use LIST
ABILITIES to see all the
ability ids in your mud, or LIST ALLQUALIFYS to view the existing
entries. &nbsp;</p>
      <p>Either way, you are then
presented with a wizard menu&nbsp;:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Qualifying
Level</em></td>
            <td>which class level
is the skill gained or qualified for</td>
          </tr>
          <tr>
            <td><em>Auto-Gained</em></td>
            <td>true if the skills
is automatically gained, and false if it is merely qualified for (and
must be gained at cost)</td>
          </tr>
          <tr>
            <td><em>Default
Proficiency</em></td>
            <td>the proficiency
that a player automatically has in this skill when they gain it, either
automatically, or after training<br>
            </td>
          </tr>
          <tr>
            <td><em>Qualifying
Mask</em></td>
            <td>a zapper mask
filtering what sorts of players can gain this skill. &nbsp;See HELP
ZAPPERMASK for more info.</td>
          </tr>
          <tr>
            <td><em>Required
Skills</em></td>
            <td>
            <p>a list of other
skills that must be known before this one can be
gained. &nbsp;You can also specify a minimum proficiency to gain
the
skill. &nbsp;In the command line, this is a space-delimited list.</p>
            </td>
          </tr>
        </tbody>
      </table>
      <p>If you no longer want a
skill to be all qualified, you can always just obliterate it with the
DESTROY command:</p>
      <p><b>DESTROY&nbsp;</b><b>ALLQUALIFY
EACH</b><b>
Skill_Sleep</b></p>
      <p>Of course, all this can
also be done from the MUDGrinder All-Qualifys list editor.</p>
      <strong><a name="recipes"><font color="blue" size="5">Recipes
(for Common
Skills)</font></a></strong>
      <p>Recipes are the wonderful
things that players can create from their Common Skills, specifically
those dealing with crafting. &nbsp;To create, modify, or delete
recipes, the MODIFY command is used:</p>
      <p>MODIFY RECIPE
Armorsmithing</p>
      <p>Where Armorsmithing is
the name of the skill to define recipes for. &nbsp;Use LIST RECIPES
to get a list.</p>
      <p>You will now be presented
with an ENORMOUS grid showing all the recipes currently defined for
that skill. &nbsp;The columns will differ from skill to skill, and
are probably hard to read in 80 columns. &nbsp; Entering a number
next to one of the columns will give you a menu for each of those
confusing columns. &nbsp;Here is a list of all the possible columns
you may see and what they mean:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><b>Field
Name</b></td>
            <td width="10%"><strong>Table
Column</strong></td>
            <td width="65%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td>Spell ID</td>
            <td>The Spell ID</td>
            <td>the ability id of
the spell cast by this item</td>
          </tr>
          <tr>
            <td>Resource Name</td>
            <td>Resource</td>
            <td></td>
          </tr>
          <tr>
            <td>Item Name</td>
            <td>Item Final Name</td>
            <td>the final name of
the item. If a % character</td>
          </tr>
          <tr>
            <td>Item Level</td>
            <td>Lvl</td>
            <td>the level of the
item, and the required level of the player to make the item</td>
          </tr>
          <tr>
            <td>Build Time Ticks</td>
            <td><em></em>Time</td>
            <td>the number of
ticks (4 seconds) to make the item</td>
          </tr>
          <tr>
            <td>Amount Material
Required</td>
            <td>Amt</td>
            <td>the amount of
material required to make the item. &nbsp;The material type depends
on the common skill.</td>
          </tr>
          <tr>
            <td>Optional Amount
Required</td>
            <td>Amt</td>
            <td>an optional amount
of material required to make the item. &nbsp;The material type
depends on the common skill.</td>
          </tr>
          <tr>
            <td>Materials Required</td>
            <td>Amount/Cmp</td>
            <td>one of 3 things:<br>
1. the amount of material required to make the item. &nbsp;The
material type depends on the common skill.<br>
2. an ability id representing the name of a pre-defined skill component
definition (see skill components in this document)<br>
3. a coded string defining a custom skill component definition,
containing one or more components, each of which contains: disposition
(inventory, held, worn, nearby, onground), fate (consumed or kept) ,
amount of items, component id (name of a raw resource, name of a
material type, or an item name), mask (zapper mask for players that
this component applies to)</td>
          </tr>
          <tr>
            <td>Item Base Value</td>
            <td>Value</td>
            <td>base value, in
base currency (usually gold) of this item</td>
          </tr>
          <tr>
            <td>Item Class ID</td>
            <td>Class ID</td>
            <td>the class of the
item (GenItem, GenFood, GenWeapon, GenArmor, GenContainer, etc)</td>
          </tr>
          <tr>
            <td>Coded Wear Location</td>
            <td>Wear Locs</td>
            <td>where the item can
worn (hands, etc..)</td>
          </tr>
          <tr>
            <td>Container Capacity</td>
            <td>Cap.</td>
            <td>capacity of the
container created, in pounds</td>
          </tr>
          <tr>
            <td>Base Armor Amount</td>
            <td>Arm.</td>
            <td>number of armor
points the item provides, or takes away</td>
          </tr>
          <tr>
            <td>Container Type</td>
            <td>Con.</td>
            <td>container type:
(liquid, coins, swod, daggers, scrolls, keys, etc, etc..). &nbsp;</td>
          </tr>
          <tr>
            <td>Container Type or
LidLock</td>
            <td>Con.</td>
            <td>container type:
(liquid, coins, swod, daggers, scrolls, keys, etc,
etc..). &nbsp;or Lid for items with lids, or
Lock for items with lids and locks.</td>
          </tr>
          <tr>
            <td>Coded Spell List</td>
            <td>Spell Affects /
Abilities</td>
            <td>list of ability
ids that affect the user of the item, or an ability followed by a
semicolon and its parameters</td>
          </tr>
          <tr>
            <td>Base Damage</td>
            <td>Dmg.</td>
            <td>the base amount of
damage the item does</td>
          </tr>
          <tr>
            <td>Lid Lock</td>
            <td>Lid.</td>
            <td>lid if the item
has a Lid, Lock if it has a lid and a lock</td>
          </tr>
          <tr>
            <td>Statue</td>
            <td>Statue</td>
            <td>whether or not the
item is a statue of something or someone</td>
          </tr>
          <tr>
            <td>Ride Basis</td>
            <td>Ride</td>
            <td>if a rideable
item, what kind of rideable: chair, table, ladder, etc..</td>
          </tr>
          <tr>
            <td>Liquid Capacity</td>
            <td>Liq.</td>
            <td>amount of liquid
capacity</td>
          </tr>
          <tr>
            <td>Weapon Class</td>
            <td>WClas</td>
            <td>the weapon
classification of the weapon</td>
          </tr>
          <tr>
            <td>Smoke Flag</td>
            <td>Smoke</td>
            <td>whether the item
is smokeable</td>
          </tr>
          <tr>
            <td>Weapon Hands
Required</td>
            <td>Hand</td>
            <td>number of hands
required to use the weapon</td>
          </tr>
          <tr>
            <td>Light Duration</td>
            <td>Dur.</td>
            <td>duration, in
ticks, of the light source</td>
          </tr>
          <tr>
            <td>Clan Item
Codenumber</td>
            <td>Typ.</td>
            <td>clan item type
(flag, banner, gavel, etc...)</td>
          </tr>
          <tr>
            <td>Clan Experience
Cost Amount</td>
            <td>Exp</td>
            <td>clan item amount
of experience required to create</td>
          </tr>
          <tr>
            <td>Clan Area Flag</td>
            <td>Area</td>
            <td>clan item area the
law book belongs to</td>
          </tr>
          <tr>
            <td>Readable Text</td>
            <td>Read</td>
            <td>readable text
(optional)</td>
          </tr>
          <tr>
            <td>Required Common
Skill ID</td>
            <td>Common Skill</td>
            <td>clan items: the
ability id of the common skill this item causes mobs to do</td>
          </tr>
          <tr>
            <td>Food Drink</td>
            <td>ETyp</td>
            <td>edible type --
whether the item created is food or drink</td>
          </tr>
          <tr>
            <td>Smell List</td>
            <td>Smells</td>
            <td>smell emote
produced by this perfume</td>
          </tr>
          <tr>
            <td>Resource or Keyword</td>
            <td>Resc/Key</td>
            <td>either the name of
a raw resource, or an arbitrary item name</td>
          </tr>
          <tr>
            <td>Resource Name or
Herb Name</td>
            <td>Resrc/Herb</td>
            <td>either the name of
a raw resource, or the name of an herb type</td>
          </tr>
          <tr>
            <td>Ammo Type</td>
            <td>Ammo</td>
            <td>type of ammo
(arrows, bullets, etc)</td>
          </tr>
          <tr>
            <td>Ammo Capacity</td>
            <td><em></em>Ammo#</td>
            <td>amount of ammo the
item holds</td>
          </tr>
          <tr>
            <td>Maximum Range</td>
            <td><em></em>Max</td>
            <td>maximum range of
the weapon</td>
          </tr>
          <tr>
            <td>Resource or
Material</td>
            <td><em></em>Rsc/Mat</td>
            <td>either a raw
resource, or a material type</td>
          </tr>
          <tr>
            <td>Optional Resource
or Material</td>
            <td>Rsc/Mat</td>
            <td>either an optional
raw resource or an optional material type</td>
          </tr>
          <tr>
            <td>Herb Name</td>
            <td><em></em>Herb
Final Name</td>
            <td>the final name of
the herb</td>
          </tr>
          <tr>
            <td>Ride Capacity</td>
            <td><em></em>Ridrs</td>
            <td>the number of
players/mobs who can ride the item</td>
          </tr>
          <tr>
            <td>Metal or Wood</td>
            <td><em></em>Metal</td>
            <td>whether metal or
wood is used as a secondary material type</td>
          </tr>
          <tr>
            <td>Optional Race ID</td>
            <td><em></em>Race</td>
            <td>optional required
races that can make this item </td>
          </tr>
        </tbody>
      </table>
      <p></p>
      <strong><a name="classes"><font color="blue" size="5">Character
Classes</font></a></strong>
      <p>A character class is a
designation chosen by players that
limits the scope of skills and abilities they will have available to
them as they advance in level.</p>
      <p>CoffeeMud supports
several different class-systems through its
coffeemud.ini file (the CLASSSYSTEM entry). One such option is the
Single-class system, whereby the player can select a single class to
play throughout their characters gaming career. Another is the
Sub-classing system, whereby the player selects a parent-class to play,
but may add/change to any of that parent classes sub-classes to gain a
different selection of skills as they go forward in levels. A third is
the multi-classing system, whereby the player can select an initial
class, but may add/change to any other class to gain a different
selection of skills as they go forward in levels. The last option is to
disable the class system altogether, which essentially only means that
the player is not allowed to choose which class they play, but are
secretly forced into a single class that determines their skill
selection. See your coffeemud.ini file for more information on this
feature.</p>
      <p>CoffeeMud includes
numerous character classes by default that
give players access to the hundreds of skills in the CoffeeMud
codebase. However, they doesn't mean there isn't room for change,
improvement, or addition.</p>
      <p>Customized player or mob
classes can be used as skill
templates for mobs created using the Fighterness (or similar)
behaviors, or as genuine player classes for your game. Either way, here
is how it is done:</p>
      <p><strong>CREATE
CLASS Boxer</strong></p>
      <p>And it would be done. The
name Boxer is just an example. You
can enter any non-space string to serve as an official ID for your
character class. You can even specify the name of an existing code-base
class, such as Fighter or Mage. If you specify your own name, you are
creating a new class from scratch. If you specify an existing class
name, you are essentially "over-riding" that standard class. This can
be a quick and easy way to disable existing standard classes, since you
can create a generic character class called Fighter, for instance, then
set it so that players can not select it, which effectively disables
that character class.</p>
      <p>After a character class
is created using the CREATE CLASS
command, it can be deleted or modified later using the DESTROY CLASS or
MODIFY CLASS commands.</p>
      <p>Whenever creating or
modifying a new class, the Archon is
presented with a menu of selections and options available to customize
the class. Here is a description of those options:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Number
of Names</em></td>
            <td>the number of
displayable names this class has.
Normally just 1.</td>
          </tr>
          <tr>
            <td><em>Name
#x</em></td>
            <td>a displayable name
of the class. Each displayable name
applies based on a class level.</td>
          </tr>
          <tr>
            <td><em>Name
#x Class Level</em></td>
            <td>a class level at
which this displayable name begins to
apply.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Level Cap</span></td>
            <td>maximum level that
can be gained in this class, or -1 for unlimited</td>
          </tr>
          <tr>
            <td><em>Base
Class</em></td>
            <td>the base class
category into which the class fits.
Usually this is the same as the ID you specified when doing CREATE
CLASS. However, if you are using a subclass system and you want this
class to belong to a set of subclasses under a base class, and this
particular class is NOT the base class, then this field should be set
to the class ID of the base class it falls under.</td>
          </tr>
          <tr>
            <td><em>Availability</em></td>
            <td>
            <p>whether or not
players may access this class at
creation, in spells, or never.</p>
            </td>
          </tr>
          <tr>
            <td><em>HP/Level
Formula</em></td>
            <td>formula for
determining number of hit points gained at each level. &nbsp;See
help on math formula. &nbsp;Variables are: &nbsp;@x1: Players
current class level, @x2: Players adjusted Strength, @x3: Players Max
adjusted Strength, @x4: Players adjusted Dexterity, @x5: Players Max
adjusted Dexterity, @x6: Players adjusted Constitution, @x7: Players
Max adjusted Constitution, @x8: Players adjusted Wisdom, @x9: Players
adjusted Intelligence</td>
          </tr>
          <tr>
            <td><em>Mana/Level
Formula</em></td>
            <td>formula for
determining number of mana points gained at each level. &nbsp;See
help on math formula. &nbsp;Variables are: @x1: Players current
class level, @x2: Players adjusted Wisdom, @x3: Players Max adjusted
Wisdom, &nbsp;@x4: Players adjusted Intelligence, @x5: Players Max
adjusted Intelligence, @x6: Players adjusted Attack Attr,
&nbsp;@x7:
Players Max adjusted Attack Attr, @x8: Players adjusted Charisma, @x9:
Players adjusted Constitution<br>
            </td>
          </tr>
          <tr>
            <td><em>Practices/Level</em></td>
            <td>the number of
practice points gained by this class per
level.</td>
          </tr>
          <tr>
            <td><em>Attack/Level</em></td>
            <td>the number of
attack points, modified by a formula
based on the mobs attack attribute, gained per level.</td>
          </tr>
          <tr>
            <td><em>Attack
Attribute</em></td>
            <td>the primary
attribute used with the above to determine
the number of attack points gained per level.</td>
          </tr>
          <tr>
            <td><em>Practices/1st
Level</em></td>
            <td>the number of
practice points received by this class at
first level.</td>
          </tr>
          <tr>
            <td><em>Trains/1st
Level</em></td>
            <td>the number of
training sessions received by this class
at first level.</td>
          </tr>
          <tr>
            <td><em>Level/Dmg
Pt</em></td>
            <td>the number of
levels between gains of 1 point of base
damage.</td>
          </tr>
          <tr>
            <td><em>Movement/Level
Formula</em></td>
            <td>formula for
determining number of movement points gained at each level.
&nbsp;See help on math formula. &nbsp;Variables are: @x1:
Players current class level, @x2: Players adjusted Strength, @x3:
Players Max adjusted Strength, @x4: Players adjusted Dexterity, @x5:
Players Max adjusted Dexterity, @x6: Players adjusted Constitution,
&nbsp;@x7: Players Max adjusted Constitution, @x8: Players adjusted
Wisdom, @x9: Players adjusted Intelligence</td>
          </tr>
          <tr>
            <td><em>Armor
Restr.</em></td>
            <td>the type of armor
restrictions for using skills in this
class, if any.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Armor Restr Spells</span></td>
            <td>normally, armor
restrictions apply when any class skill
is used. If this field is true, however, armor restrictions apply only
when a class spell/chant/prayer is cast.</td>
          </tr>
          <tr>
            <td><em>Limitations</em></td>
            <td>This is an open
text field. Mention any special
limitations of the class.</td>
          </tr>
          <tr>
            <td><em>Bonuses</em></td>
            <td>This is an open
text field. Mention any special bonuses
to being this class.</td>
          </tr>
          <tr>
            <td><em>Qualifications</em></td>
            <td>This is a mask to
determine which players qualify for
it. Use
? for more information on the mask.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Minimum Stats</span></td>
            <td>minimum base
character stat values required to become this class.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Required Races</span></td>
            <td>list of races or
racial categories one must be to become this class, or all.</td>
          </tr>
          <tr>
            <td><em>PhysStat
Adjustments</em></td>
            <td>adjustments,
positive or negative, to attack, defence,
and other stats. Use ? for a list.</td>
          </tr>
          <tr>
            <td><em>CharStat
Adjustments</em></td>
            <td>adjustments,
positive or negative, to strength, saving
throws, and other stats. Use ? for a list.</td>
          </tr>
          <tr>
            <td><em>CharStat
Settings</em></td>
            <td>hard settings for
strength, saving throws, and other
stats. Use ? for a list.</td>
          </tr>
          <tr>
            <td><em>CharState
Adjustments</em></td>
            <td> adjustments,
positive or negative, to hit points,
mana, and other stats. Hunger or Thirst &gt; +2000000000 (two
billion)
to disable those. Fatigue &lt; -2000000000 ( neg.two billion)
disables
that. </td>
          </tr>
          <tr>
            <td><em>Starting
CharState Adjustments</em></td>
            <td>adjustments,
positive or negative, to the default hit
points, mana, and other stats for starting players of this class.</td>
          </tr>
          <tr>
            <td><em>Extra
Class Flags</em></td>
            <td>Whether race,
level, or the gaining/losing of
experience applies to this class. By default, they do.</td>
          </tr>
          <tr>
            <td><em>Weapon
Restr.</em></td>
            <td>This is a list of
the weapon classes which players of
this class will fumble using.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Weapon Mat. Req.</span></td>
            <td>A list of the raw
materials out of which a players
weapon must be made in order to avoid fumbling.</td>
          </tr>
          <tr>
            <td><em>Outfit</em></td>
            <td>This is a list of
any equipment outfitted to players
who join this class.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Starting Money</span></td>
            <td>String denoting
how much money new players of this
class get. &nbsp;Values can be numbers like 10, or strings like "10
gold".</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Stat-Modifying
Class</td>
            <td>the name of a
standard character class which will be
used for special stat adjustments from java code, such as a thiefs
level-based defence bonus, or druids mana bonus at their monument. If
you are creating a generic char. class on top of an existing standard
one, you will need to use the fully qualified class name of the form:
com.planet_ink.coffee_mud.CharClasses.&lt;charclassname&gt; in
order to
access the standard version.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Special-Event
Class</td>
            <td>the name of a
standard character class which will be
used for special event processing from java code, such as a clerics
alignement restrictions when praying, or an Artisan's expertience gains
while crafting.. If you are creating a generic char. class on top of an
existing standard one, you will need to use the fully qualified class
name of the form:
com.planet_ink.coffee_mud.CharClasses.&lt;charclassname&gt; in
order to
access the standard version.</td>
          </tr>
          <tr>
            <td><span style="font-style: italic;">Sub-Class switch rule</span></td>
            <td>a flag that
determines how this class behaves under subclassing rules.
&nbsp;BASE means that the class can only switch to another of the
same base class (default), ANY means they can switch to any base class,
and NONE means a dead-end class.</td>
          </tr>
          <tr>
            <td><em>Max
Non-Crafting</em></td>
            <td>Maximum number of
non-crafting common skills learnable
by players of this class, excepting class skills.</td>
          </tr>
          <tr>
            <td><em>Max
Crafting</em></td>
            <td>Maximum number of
crafting common skills learnable by
players of this class, excepting class skills.</td>
          </tr>
          <tr>
            <td><em>Max
Common</em></td>
            <td>Maximum number of
all types of common skills learnable
by players of this class, excepting class skills.</td>
          </tr>
          <tr>
            <td><em>Max
Languages</em></td>
            <td>Maximum number of
languages learnable by players of
this class, excepting racial.</td>
          </tr>
          <tr>
            <td><em>Class
Abilities</em></td>
            <td>a list of
abilities available to those who become this
class. the proficiency given is the default proficiency which
players/mobs of this class start out with. Also listed here is the
class level at which the skill becomes available, whether it is
automatically gained (true), or merely qualified for (false), whether
it is a secret skill or not, and any miscellaneous parameters for this
skill. You can also modify the maximum proficiency that players of this
class can train this skill up to.</td>
          </tr>
          <tr>
            <td><em>Number
of Security Code Sets</em></td>
            <td>If this class is
intended to administrators or
builders, you may specify one or more sets of security codes or
security groups (see above section on CoffeeMud Security). Each set
begins to apply at a given class level for that set. All previous sets
at lower levels continue to apply as well.</td>
          </tr>
          <tr>
            <td><em>Security
Codes in Set#x</em></td>
            <td>The
space-delimited list of security codes or groups
which applies to this set.</td>
          </tr>
          <tr>
            <td><em>Class
Level for Set#x</em></td>
            <td>The class level at
which this set of security codes or
groups begins to apply, in addition to any previous sets.</td>
          </tr>
        </tbody>
      </table>
      <p><strong><a name="factions"><font color="blue" size="5">Factions</font></a></strong></p>
      <p>A faction can be viewed
very simply as a glorified tattoo with
a number value. Normal Tattoos are simply flags which a mob or player
can have: either you do or do not have the tattoo. A Faction is a kind
of flag a mob or player can have that has a special a numeric value
assigned to it. Another way to view a faction is as a relationship
between a mob or player and some idea, such as Goodness, Evilness, Orc
Affinity, Reputation, or some other idea. For example, in CoffeeMud, a
mob or players Alignment is implemented as a Faction. The Alignment can
be thought of as having a tattoo called alignment along with a numeric
value assigned to it. Alignment can also be thought of as the
relationship between the mob or player, and evilness, goodness, or
neutrality. &nbsp;</p>
      <p>Before discussing the
nuts of bolts of the faction system, it
should be mentioned that CoffeeMud includes some automatic and built-in
factioning systems for you to use. &nbsp;In addition to the default
alignment system, there is also a mob reaction system controlled in the
coffeemud.ini file under the AUTOREACTION entry. &nbsp;This will
cause
mobs to react to players based on how their area, race, or other mobs
of the same name have been treated in the past. &nbsp;While killing
the
mobs will cause faction values to go down, making the mobs more likely
to mistreat the player, doing things like chatting with the mobs, just
hanging around their area, or even bribing them will make them happier.
&nbsp;The default settings for the three reaction systems is found
int
the resources/examples directory as areareaction.ini, racereaction.ini,
and namereaction.ini. &nbsp;You can also customize the systems for
particular areas, races, or mobs (depending on your system) by creating
a directory /resources/factions and adding to it a file called
race_&lt;racename&gt;.ini, area_&lt;areaname&gt;.ini,
or
name_&lt;mobname&gt;.ini with your designed faction definition.
&nbsp;You must replace any spaces with underscore _ characters.
&nbsp;If these files do not exist, the default configuration
mentioned
previously will be used for all areas, races, or mobs.</p>
      <p>The general faction
system in CoffeeMud is a powerful engine
for
defining what factions exist, how the factions are assigned, how the
value of factions rise or fall in value, how value changes are
reflected in other factions, and what impact the value of a faction has
on experience gain, ability usage, and ability skill gain. Since the
values of factions are available for use in Properties such as
Prop_WearZapper, Prop_ReqEntry, and all other features which respect
Zapper Masks, factions can also potentially impact which items can be
used, which rooms can be entered, the price of goods, the availability
of Deities, and many other things as well. As an example, the alignment
faction typically impacts all of the things mentioned above and more.</p>
      <p>Now, as was said before,
factions have numeric values. These
values can be positive, like 2389473, negative, or even 0. The range of
values which are valid for a given faction are defined by the limits of
the divisions or Ranges of a faction.</p>
      <p>A <strong>Range</strong>
is a numeric division of a faction
you have defined. A Range has a displayable name, a special unique code
name
for use in Zapper Masks, and of course a low and high value. A Range
can also be tied back to CoffeeMud's built in "virtue meter", which
allows you to define a Range as always granting the mob or player whose
faction value falls into that range goodness, evilness, or neutrality.
The lowest value of the lowest Range, and the highest value of the
highest Range define the overall limits of the values of the faction
itself. No player or mob may have a value for a faction which falls
outside those highest and lowest values of the highest and lowest
Ranges. For this reason, ranges are the most important part of a
faction.</p>
      <p>Another important aspect
are the range <strong>Change
Triggers</strong>.
One of the ways factions differ from simple tattoos is that CoffeeMud
can manage the rise and fall in the values of the faction on a given
mob or player automatically. The way these changes are triggered and
managed is first through Change Triggers, which are applied when both
the source and target of an action have standing or value in the
faction, and when the source and target are different creatures. Each
Change Trigger defines 1) What triggers the change (the Trigger), 2)
Whether value is gained or lost in the faction when the trigger occurs
(the Direction), 3) What percentage of the amount of change (after all
other modifiers) is applied to the value (the Amount Factor), 4)
several miscellanous flags to define the circumstances under which the
trigger is applied (the Flags), and 5) a Zapper mask to determine what
criteria the target of the Trigger must meet for this trigger to apply.
The valid Triggers include: Murder (and Murder2, ... Murder5) which is
triggered when the holder of this faction dies,
Kill (and Kill2, ... Kill5) which is triggered when the holder of this
faction kills another,
Time (a change occurs every 40
seconds or so), a type of skill being used, the domain of a spell being
cast, a flag associated with a skill being used, or Add Outsider, which
allows the faction to be added to those who do not have the faction, so
long as they meet the other requirements. Valid Directions of change
include: Up, Down, Opposite (opposite direction of the value of the
creature killed and proportional in value to the distance between the
faction value in the source and the target), Minimum (automatically
gains minimum value), Maximum (automatically gains maximum value), Add
(gains the faction if they don't have it -- useful with the Add
Outsider trigger), Away (gain if monsters value for this faction is
lower, lose if higher), and Towards (gain if monsters value for this
faction is higher, lose if lower). Valid Flags include: OUTSIDER, which
allows the trigger to apply even if the target of the trigger (not the
source) does not have standing in this faction, SELFOK, which allows
the trigger to apply even when the source or target are the same
person, and JUST100, which overrides the normal modifications of a
change (based on experience or other factors) and uses 100 points as a
base amount for the change from this trigger. Change triggers also
include
a mask, which refers to the target of an event, and can prevent the
event.</p>
      <p>Now, lets discuss how to
list existing factions:</p>
      <p><strong>LIST
FACTIONS</strong></p>
      <p>The list that is shown
with this command reflects the list of
those factions which have been loaded into CoffeeMuds memory. Factions
are loaded into memory when their identifiers/filenames are added to
the FACTIONS entry in your "coffeemud.ini" file. Factions may also be
loaded if a mob or player is loaded who has a faction which has already
been defined. Creating new factions, as you can now guess, is a two
part step. One step is to add its identifier/filename to the FACTIONS
entry of your "coffeemud.ini" file, after the file has been created. To
create the new faction identifier/filename, you must do the following:</p>
      <p><strong>CREATE
FACTION orc_affinity.ini</strong></p>
      <p>This command will create
a new file in your
CoffeeMud/resources directory or folder for the new faction. This file
will contain the default setting for your brand new faction, whose ID
(identifier) will be ORC_AFFINITY.CMVars. You will now be automatically
taken into the Faction Editor. If you had wanted simply to modify an
existing faction, you might have entered:</p>
      <p><strong>MODIFY
FACTION reputation.ini</strong></p>
      <p>The modify command will
take you into the editor for an
existing faction, regardless of whether it appears on the LIST FACTIONS
list, so long as the filename/identifier given refers to an existing
faction file. The Faction editor contains numerous other complex and
interesting fields to change, which we will now describe.</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Name</em></td>
            <td>the displayable
name of the faction, not to be confused
with its official identifier, which you may not change.</td>
          </tr>
          <tr>
            <td><em>Division/Ranges
List</em></td>
            <td>the defined ranges
for this faction. See the above
discussion on ranges for the meaning of the fields.</td>
          </tr>
          <tr>
            <td><em>Show
In Score</em></td>
            <td>whether this
faction is listed with the players
information when they use the SCORE command. The FACTIONS command is
always available for a player to list their factions and values
regardless of whether this setting is true or false.</td>
          </tr>
          <tr>
            <td><em>Show
In MOB Editor</em></td>
            <td>whether this
faction gets its very own entry in the
command-line mob editor, or the MUDGrinder mob editor. The Factions
field is always listed in the mob editor for changing the factions and
their values on players and mobs regardless of whether this setting is
true or false.</td>
          </tr>
          <tr>
            <td><em>Automatic
assigned values</em></td>
            <td>optional field
showing which mobs or players will
automatically be given this faction and some value in it. This is a
semicolon-delimited list, where each entry begins with the value to
assign, and is followed by a mask to determine who the value gets
assigned to. For example: "100 -race +elf ; 500 -race +dwarf" would
mean that all elf players and mobs receive this faction with a value of
100, and all dwarf players and mobs receive this faction with a value
of 500. If this field is empty, noone is assigned a value
automatically. If this field only contains a number, or if any entry
contains only a number (no mask), then everyone will receive this
faction.</td>
          </tr>
          <tr>
            <td><em>Other
default values</em></td>
            <td>required field
defining the values that mobs or players
will be assigned whenever this faction is granted to them by scripts,
triggers, or by some other means. The syntax of this field is similar
to the "Automatic assigned values" field above. At least one entry,
however, must be without a mask, so as to make sure that a default
value exists for every possible player or mob.</td>
          </tr>
          <tr>
            <td><em>New
player value choice</em></td>
            <td>an optional list
of values, semicolon delimited, which
players will get to choose from when they create their characters for
the first time. Each value in this list should correspond to, or fall
into, a different Division/Range listed above. If this field is empty,
players will not be given this faction at creation time.</td>
          </tr>
          <tr>
            <td><em>Choices
introduction text</em></td>
            <td>if the previous
field contained entries, then this
field will become available. It is the optional filename of a text file
in your Coffeemud/resources directory or folder which describes the
choices available to the player.</td>
          </tr>
          <tr>
            <td><em>Rate
Modifier</em></td>
            <td>normally 100%,
this field is a fudge factor for all
instances where some value is gained or lost in this faction. Typically
gained values can be halfed, doubled, or changed in any other way by
modifying this value.</td>
          </tr>
          <tr>
            <td><em>Affect
on Experience</em></td>
            <td>whether and/or how
values in this faction affect the
amount of experience gained by players for killing monsters. If the
value is None, then this faction does not affect experience gained by
players for killing monsters. Otherwise, the amount of faction gained
or lost is a function of the base number of experience points earned,
and modified by the value of this field: Extreme means the amount
gained or lost is always towards one extreme end of this factions
Ranges, and always in a direction away from the value that the monster
had. Higher means the amount is always gained. Lower means the amount
is always lost. Followhigher means the amount is always gained, and in
proportion to how high the value of the monsters faction is.
Followlower means the amount is always lost, and in proportion to how
low the value of the monsters faction is.</td>
          </tr>
          <tr>
            <td><em>Faction
Change Adjustments</em></td>
            <td>like the Rate
Modifier above, this field affects the
values of gains and losses in this faction. It allows you to change the
value of Gains or Losses based on whether the player or mob with the
faction matches the given Zapper Mask. Both the Gain and Loss values
should be positive, as they reflect a percentage change in the gain,
and a percentage change in the loss only.</td>
          </tr>
          <tr>
            <td><em>Cross-Faction
Relations</em></td>
            <td>defines whether
and/or how the value of other factions
may rise or fall when the value of this faction changes. Each entry is
the name of second faction, along with a positive or negative
percentage of the value gained or lost in this faction, which will then
be applied to the second faction.</td>
          </tr>
          <tr>
            <td><em>Change
Triggers</em></td>
            <td>the events which
cause the value of a faction on a
player to rise and fall. Usually triggers are applied when an action is
performed on a target creature by a source creature, both of whom have
standing in the faction. See the description above for more information
on the fields defined for each Change Trigger.</td>
          </tr>
          <tr>
            <td><em>Ability
Allowances</em></td>
            <td>this defines the
circumstances under which a player may
always use a particular time of skill, spell, or whatever, unimpeded
and with full privileges. Each entry contains a list of flags to
determine which skills, spells, chants, etc are being selected along
with the range into which a players value in this faction must fall for
the ability to be used unimpeded and with full privileges. Requirements
defined by Ability Allowances will typically determine whether
proficiency is every gained in a skill, and whether certain class
restrictions are overridden.</td>
          </tr>
          <tr>
            <td>Effects / Behaviors</td>
            <td>a list of Ability
Effects and Behaviors which are
bestowed to non-player mobs who match the mob masking criteria for each
item. &nbsp;Parameters for the specified Ability/Behavior may also
be
entered. &nbsp;This is terribly useful to allow mobs with a
particular
faction to turn nasty when they meet someone else. &nbsp;For
example,
if you have a&nbsp;faction named "Baddies and Goodies" and it has a
Division/Range with code name BADDY, you may add the Behavior
Aggressive with parameters: -FACTION +BADDY. &nbsp;This will make
all
the mobs who have the faction to attack the baddies.</td>
          </tr>
          <tr>
            <td>Reaction Effects</td>
            <td>a list of host
faction ranges which will trigger
certain game Commands, Ability Effects and/or Behaviors to appear on
certain mobs in the same room as the host, so long as those mobs meet
the zapper mask for the given reaction. Parameters for the Command/
Ability/ Behavior may also be entered. This is a companion to
Effects/Behaviors above, except that the effects happens even to
non-factioned mobs surrounding a factioned player/mob, while the above
happens to the factioned mob/player. This system includes two versions:
The normal system which uses more resources, but players with different
faction values will conflict when in the same room, making mob
reactions go to the winner. However, all properties and behaviors will
work as expected. The 'Light' system uses less resources, and allows
players with different faction values to get some functionality when in
the same room with each other. However, some properties and behaviors
may not work as expected. </td>
          </tr>
        </tbody>
      </table>
      <p align="left"><strong><a name="quests"><font color="green"
 size="5">Quests</font></a></strong></p>
      <p>Quests are tasks which
can be completed by players for prizes,
typically quest points, experience, money, or all three. Quest tasks,
the monitoring of their completion and status, as well as their
availability, can all be automated by CoffeeMud.</p>
      <p>The built-in Quest system
in CoffeeMud allows you to automatic
all of the following processes:</p>
      <ul>
        <li>scheduling of quests
by a variety of means, and managing a
quest "duration"</li>
        <li>setting special
quest-start criteria based on the players
currently online</li>
        <li>the selection of
random mobs, items, rooms, and areas from
the map by various criteria</li>
        <li>the introduction of
new mobs and/or items from saved cmare
xml files, and thier automatic removal when the quest is done</li>
        <li>adding various skills,
affects, behaviors to any of the
aforementioned objects and their automatic removal when the quest is
done</li>
        <li>adding scripts to any
of the aforementioned objects and
having those scripts removed when the quest is done</li>
        <li>special variables and
designation for making your own logic
problem quests (mysteries)</li>
      </ul>
      <p>The easiest way to create
a quest is to use the Quest Maker
Wizard, either from the Quest Manager in the MUDGrinder, or by entering
the command: <strong>CREATE QUEST</strong>
from the command line. The wizard will first allow you to select a
template basis for your quest. Templates will differ in several ways,
but the most important ones to watch out for are: what the player needs
to do to complete the quest, and which components of the quest are
created by you versus which make use of existing components of your
world.</p>
      <p>After selecting a
template, you will be taken through a series
of pages and asked to enter lots of little details about the new quest.
Hopefully the prompts are self-explanatory. Take special note when a
prompt designates special syntax for the expression of data -- not
following the rules can make the difference between a Quest working and
falling flat, leaving a nasty trail of error messages in your log. In
data dealing with the things mobs will announce or say, remember that
you can use any of the special codes described in the <a
 href="Scriptable.html#codes">Scriptable</a>
guide to insert data into
the mobs speech, such as <span
 style="font-weight: bold; font-family: monospace;">$i
$r $a</span>
and others. When you are done filling in all the fields, your new quest
will be ready for playing according to the timing you laid out. You can
also manually start your quests from the Quest Manager screen in the
MUDGrinder, or by using the <span style="font-weight: bold;">MODIFY
QUEST</span> &lt;quest
name&gt; command from the command line.</p>
      <p>If you have stretched the
Quest Wizard as far as it will go
and are ready to try your hand at poking around the innards of a Quest,
continue reading. Otherwise, you're done learning about Quests.</p>
      <p>A quest weaves its way
into your world through a long set of
definitions and pseudo-commands called a <span
 style="color: rgb(204, 0, 0);">QUEST-SCRIPT</span>.
The quest scripts
are manually created by an Archon using the <strong>CREATE
QUEST</strong>
[SCRIPT] command from the command line. Where [SCRIPT] is a either a
complete quest script, where each command line is terminated by a
semicolon (;), or a load command of the form LOAD=[SCRIPT PATH]. If you
enter a complete quest script, make sure that any embedded semicolons
are escaped like "\;". An example of a create script using a load
command (the more common case) is as follows:</p>
      <p><strong>CREATE
QUEST</strong>
LOAD=quests/murdermystery/murdermystery.quest</p>
      <p>All LOAD commands use the
resources directory inside your
coffeemud install directory as the default path. Therefore, if you
installed coffeemud in C:\CoffeeMud, the above LOAD command will look
for the file in
C:\CoffeeMud\resources\quests\murdermystery\murdermystery.quest.</p>
      <p>Quests may be started
automatically (autoquests) from inside
the quest script by including the SET WAIT and SET INTERVAL commands,
or they may be started manually by using the <strong>MODIFY
QUEST</strong>
[QUEST NAME] command.</p>
      <p>Quests can be listed, to
see their status, using the <strong>LIST
QUESTS</strong> command.</p>
      <p>Quests can be removed
from the list using the <strong>DESTROY
QUEST</strong> [QUEST NAME] command.</p>
      <p>Quests can be saved using
the <strong>SAVE QUESTS</strong>
command. Quests saved this way will be restored during the next
CoffeeMud reboot. Any time the CREATE QUEST command is used, you will
need to follow it with a SAVE QUESTS if you want your quest to remain.</p>
      <p><font style="background-color: aquamarine;" color="#4169e1"
 size="4"><strong>Quest
Scripts</strong></font></p>
      <p>When creating a new quest
using the <strong>CREATE QUEST</strong>
[SCRIPT] command, whether you use the load command to specify an
external script, or include the script directly into the create
command, the quest script commands are as follows:</p>
      <p><span style="color: rgb(51, 102, 102);">SET NAME</span> <span
 style="color: rgb(102, 51, 102);">[QUEST
NAME]</span> - the *unique*
name of your quest. This is a required command!</p>
      <p><span style="color: rgb(51, 102, 102);">SET DISPLAY</span><span
 style="color: rgb(102, 51, 102);"> [DISPLAY QUEST NAME]</span> - a
friendly displayable name for your quest. &nbsp;Completely optional.</p>
      <p><span style="color: rgb(51, 102, 102);">SET DURATION</span> <span
 style="color: rgb(102, 51, 102);">[#TICKS/TIME]</span>
- Either a number of ticks (4 second periods) the quest will last once
started, or a formula, or a number followed by the word minutes,
seconds, hours, days, mudhours, or muddays. Use a simple
value of 0 to make your quest run continually. &nbsp;This is a
required
command!</p>
      <p style="color: rgb(51, 0, 0);"><span
 style="color: rgb(51, 102, 102);">SET WAIT</span> <span
 style="color: rgb(102, 51, 102);">[#TICKS</span><span
 style="color: rgb(102, 51, 102);">/TIME</span><span
 style="color: rgb(102, 51, 102);">]</span>
- Either a&nbsp;number of
ticks, or a formula, or a number followed by the word minutes, seconds,
hours, days, mudhours, or muddays to minimally wait between auto-starts
of the quest. This works in conjucton with SET INTERVAL. &nbsp;The full
wait time between quest starts is WAIT + (random number between 1 and
INTERVAL).&nbsp; Required for scheduled quests.</p>
      <p><span style="color: rgb(51, 102, 102);">SET INTERVAL</span> <span
 style="color: rgb(102, 51, 102);">[#TICKS/TIME]</span>
-&nbsp;Either a
number of ticks (1-#TICKS), or a formula, or a number followed by the
word minutes, seconds, hours, days, mudhours, or muddays to
additionally wait up to, after the official WAIT period above has
ellapsed, before&nbsp;starting the scheduled quest.&nbsp;
This works in conjucton with SET WAIT. &nbsp;The full wait time between
quest starts is WAIT + (random number between 1 and INTERVAL). &nbsp;Required
for
scheduled quests.</p>
      <span style="color: rgb(51, 102, 102);"></span>
      <p style="color: rgb(51, 0, 0);"><span
 style="color: rgb(51, 102, 102);">SET SPAWNABLE <span
 style="color: rgb(102, 51, 102);">[TRUE/ALL]</span></span>
- whether this quest will, when started, spawn a copy of itself and run
the copy instead. This allows the same quest to run more than once at
the same time, though it will share its name as well as its list of
winners. If the ALL flag is given, the quest manager will attempt to
spawn off every single STEP of the quest all at once. This can create
chaos unless STEP BREAK is used instead of STEP. See information on the
STEP and SET PRESERVE commands below.<br>
      <span style="color: rgb(51, 102, 102);"><br>
SET PERSISTANCE <span style="color: rgb(102, 51, 102);">[TRUE/FALSE]</span></span>-&nbsp;a
quest with a scheduled WAIT/INTERVAL time will attempt to start after
the interval completes. &nbsp;If the quest then fails to start, it
will
then go back into a wait state before attempting to start again.
Setting PERSISTANCE to TRUE will cause that failed start waiting period
to be trivially start, in essence making the quest repeat its start
attempt over and over until successful. &nbsp;If PERSISTANCE is
FALSE
(the Default), the wait time will be the normal one determined by the
WAIT/INTERVAL variables.<br>
      <span style="color: rgb(51, 102, 102);"><br>
SET DATE</span> <span style="color: rgb(102, 51, 102);">[#DAY]-[#MONTH]</span>
- The real-life start-date of the quest. This is a valid substitute for
the SET WAIT requirement.</p>
      <p style="color: rgb(51, 0, 0);"><span
 style="color: rgb(51, 102, 102);">SET MUDDAY</span> <span
 style="color: rgb(102, 51, 102);">[#DAY]-[#MONTH]</span>
- The start
mud-date of the quest, according to the default global mud calendar.
This is a valid substitute for the SET WAIT requirement.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MINPLAYERS</span> <span
 style="color: rgb(102, 51, 102);">[#PLAYERS]</span>
- Minimum number
of players who must be online for a timed quest to automatically start.
See SET PLAYERMASK.</p>
      <p><span style="color: rgb(51, 102, 102);">SET PLAYERMASK</span> <span
 style="color: rgb(102, 51, 102);">[MASKSTRING]</span>
- If this string is empty or not specified, then anyone is considered a
player for the purposes of the MINPLAYERS setting above. However, you
can specify a "zapper mask" to narrow down the definition of a player.
See HELP ZAPPERMASKS for the list of valid mask values to put here.</p>
      <p><span style="color: rgb(51, 102, 102);">SET RUNLEVEL</span> <span
 style="color: rgb(102, 51, 102);">[#LEVEL]</span>
- Normally, a timed quest will always run when its time comes up.
Setting a value above -1 will prevent this quest from running when its
time comes up if another quest is also running at the same or LOWER run
level. This does not affect spawned quest copies, which will always run
even when another of the same name (and runlevel) is active.</p>
      <p><span style="color: rgb(51, 102, 102);">SET PRESERVE</span> <span
 style="color: rgb(102, 51, 102);">[#STEPS]</span>-
If a number greater than 0 is issued, then when a STEP command is
encountered and the commands following it are executed due to a
MPSTEPQUEST Scriptable command, then any objects, behaviors, abilities,
or affects which are specified after the SET PRESERVE, but BEFORE the
STEP command will not be cleaned up by the quest manager until the
specified number of STEPS have been encountered and executed. This
allows, for instance, a mob, once appropriated and specified by a
quest, to continue being used in subsequent steps without being
restored by the quest manager to a natural state. An MPSTOPQUEST
command, or an expired duration, will always cause the entire quest to
cease executing and all objects to be cleaned up.</p>
      <p><span style="color: rgb(51, 102, 102);">STEP</span>
- The
purpose of this command is to allow your quest to run in several
different steps or stages. Placing this command in your quest script
will cause the script to end execution when it is encountered. The
quest will run normally until it is ordered to proceed with the next
step using the Scriptable command MPSTEPQUEST. When the MPSTEPQUEST
command is issued, the quest script will clean up any objects or data
defined by statements prior to this STEP command, and begin processing
new quest script commands which follow it. A SET DURATION command must
follow a STEP command in order to ensure that the quest will continue
to run following execution of the post-STEP commands, otherwise any
duration settings from previous steps will be re-used. Numerous STEP
commands may be places in your quest scripts. An MPSTOPQUEST command,
or an expired duration, however, will always cause the entire quest to
cease executing and all objects to be cleaned up. See also SET PRESERVE.</p>
      <p><span style="color: rgb(51, 102, 102);">STEP&nbsp;<span
 style="color: rgb(102, 51, 102);">AUTO</span></span><span
 style="color: rgb(102, 51, 102);">-</span>This
command is the same as the normal STEP command, except that when the
normal duration runs out, the next step is automatically executed.
&nbsp;The duration can still be short-cutted with MPSTEPQUEST or
MPSTOPQUEST as usual.</p>
      <p><span style="color: rgb(51, 102, 102);">STEP <span
 style="color: rgb(102, 51, 102);">BACK</span></span><span
 style="color: rgb(102, 51, 102);">-</span>This
command is the same as the normal STEP command, except that it will
reset the script line pointer so that the next time the quest is
ordered to step again, it will repeat the given step. &nbsp;This
can
obviously cause an endless loop, but if you are using this command, it
is obviously your last command and endless repeating is your goal.
&nbsp;The use of this command is for two-step personal quests,
where
the first step sets up the environment, and the next step simply
applies new scripts to a given player. &nbsp;Since any number of
players may accept a quest, you would want this step repeated for each
player that accept, which explains the endless nature.</p>
      <span style="color: rgb(51, 102, 102);"></span>
      <p><span style="color: rgb(51, 102, 102);">STEP <span
 style="color: rgb(102, 51, 102);">BREAK</span></span><span
 style="color: rgb(102, 51, 102);">-</span>
This command will cause the quest script to stop evaluating any further
settings. Statements after a STEP BREAK, including any SETS, LOADS, or
any other statements, will not be executed. This is used in conjunction
with SET SPAWNABLE ANY to allow quest scripts which have been broken
into several descrete steps to run independently. A SET SPAWNABLE ANY
quest is considered successfully run when this command is encountered.</p>
      <p><span style="color: rgb(51, 102, 102);">IMPORT MOBS</span> <span
 style="color: rgb(102, 51, 102);">[XML
FILE PATH]</span>
- this will import a list of custom mobs from a .CMARE file generated
using the EXPORT ROOM MOBS command. The parameter must be the path and
file name of the file, using the same format as the LOAD= command
mentioned above. This list can then be accessed with the LOAD MOB, or
LOAD MOBGROUP command.</p>
      <p><span style="color: rgb(51, 102, 102);">IMPORT ITEMS</span> <span
 style="color: rgb(102, 51, 102);">[XML
FILE PATH]</span>
- this will import a list of custom items from a .CMARE file generated
using the EXPORT ROOM ITEMS command. The parameter must be the path and
file name of the file, using the same format as the LOAD= command
mentioned above. This list can then be accessed with the LOAD ITEM or
LOAD ITEMGROUP command.</p>
      <p><span style="color: rgb(51, 102, 102);">SET AREA</span> <span
 style="color: rgb(102, 51, 102);">([AREA
NAME OR NAMES])</span>
- will set the current designated area to the area specified. Although
this does nothing in itself, it is important for the several commands
which load mobs and items. The area name ANY may be given to choose a
random area. Several area names may be specified as choices by setting
the first area name as ANY, followed by your other area name choices,
separated by spaces. If no area name is given, this will CLEAR the area
designation. This can have a profound impact on how subsequent mob or
item loading, or room setting commands work.</p>
      <p><span style="color: rgb(51, 102, 102);">SET AREA</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET AREAGROUP</span> <span
 style="color: rgb(102, 51, 102);">([AREA
NAME OR NAMES])</span>
- essentially the same as set ROOMGROUP below, this will set the
current designated roomgroup to the rooms in the area(s) specified.
Although this does nothing in itself, it is important for the several
commands which load mobs and items. The area name ANY may be given to
choose a random area. Several area names may be specified, separated by
spaces and word-grouped with double-quotes. &nbsp;The area name ALL
may
be given to select all world areas. &nbsp;
If no area name is given, this will CLEAR the ROOMGROUP designation.
This can have a profound impact on how subsequent mob or item loading,
or room setting commands work. This command will automatically clear
the AREA setting.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ROOMGROUP</span> <span
 style="color: rgb(102, 51, 102);">([ROOM
NAME])</span>
- will set the ROOMGROUP to the set specified. If an area has been
previously designated, and not cleared (see SET AREA), then the rooms
will be selected from the designated area according to the room name
criteria. Otherwise, rooms from the whole map will be chosen. If a room
name of ANY is given, then the rooms will be chosen randomly from the
world, or the area if designated. Several room names may be specified
as choices by setting the first room name as ANY, followed by your
other room name choices, separated by spaces.The room name ALL may be
given to select all designated rooms. &nbsp;
If no room name is given, this will effectly clear the ROOMGROUP
designation (but it will not clear the area designation!). Valid room
names include map room IDs such as MyArea#123, or key words from the
titles or descriptions of rooms. &nbsp;Rooms designated this way
are
available in Scripts using the QUESTROOM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ROOMGROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing.&nbsp; &nbsp;Rooms designated this way are
available in
Scripts using the QUESTROOM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ROOM</span> <span
 style="color: rgb(102, 51, 102);">([ROOM
NAME])</span>
- will set the current designated room to the set specified. If a room
or area has been previously designated, and not cleared (see SET AREA),
then the room will be selected from the designated area according to
the room name criteria. Otherwise, a room from the whole map will be
chosen. If a room name of ANY is given, then the room will be chosen
randomly from the world, or the area if designated. Several room names
may be specified as choices by setting the first room name as ANY,
followed by your other room name choices, separated by spaces. If no
room name is given, this will effectly clear the room designation (but
it will not clear the area designation!). Valid room names include map
room IDs such as MyArea#123, or key words from the titles or
descriptions of rooms.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ROOM</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ROOMGROUPAROUND</span>
      <span style="color: rgb(102, 51, 102);">[#RADIUS]
([ROOM NAME])</span>-
will set the ROOMGROUP to the set of rooms up to RADIUS rooms from the
previously set ROOM. The rooms will be selected from the set of rooms
which are up to RADIUS rooms away from the currently set ROOM (see SET
ROOM/SET LOCALE). The radius must then be greater than 0. If the
following room name of ANY is given, then all rooms in the radius are
grouped. Several room names may be specified as choices by setting the
first room name as ANY, followed by your other room name choices,
separated by spaces. If no room name is given, this will effectly clear
the ROOMGROUP designation (but it will not clear the area
designation!). Valid room names include map room IDs such as
MyArea#123, or key words from the titles or descriptions of
rooms.&nbsp; &nbsp;Rooms designated this way are available in
Scripts
using the QUESTROOM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET LOCALEGROUP</span>
      <span style="color: rgb(102, 51, 102);">([LOCALE])</span>
- will set the ROOMGROUP to the ones with the specified class name. If
an area has been previously designated, and not cleared (see SET AREA),
then the rooms will be selected from the designated area according to
the locale criteria. Otherwise, rooms from the whole map will be
chosen. If a locale name of ANY is given, then the rooms will be chosen
randomly from the world, or the area if designated. Several locale
types may be specified as choices by setting the first locale type as
ANY, followed by your other locale type choices, separated by spaces.
If no locale is given, this will effectly clear the ROOMGROUP
designation (but it will not clear the area designation!). Valid locale
names may be Locale class names such as MountainSurface, StdRoom, etc,
or they may be locale types such as stone, wooden, underwater,
mountains, etc.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">LOCALEGROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing.&nbsp; &nbsp;Rooms designated this way are
available in
Scripts using the QUESTROOM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET
LOCALEGROUPAROUND</span> <span style="color: rgb(102, 51, 102);">([#RADIUS]
[LOCALE])</span>
- will set the ROOMGROUP to the ones with the specified class name. The
rooms will be selected from the set of rooms which areup to RADIUS
rooms away from the currently set ROOM (see SET LOCALE/SET ROOM). The
radius must then be greater than 0. If the following locale name of ANY
is given, then all rooms in the radius are grouped. Several room names
may be specified as choices by setting the first locale name as ANY,
followed by your other locale name choices, separated by spaces. If no
locale name is given, this will effectly clear the ROOMGROUP
designation (but it will not clear the area designation!). Valid locale
names may be Locale class names such as MountainSurface, StdRoom, etc,
or they may be locale types such as stone, wooden, underwater,
mountains, etc.&nbsp; &nbsp;Rooms designated this way are
available in
Scripts using the QUESTROOM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET LOCALE</span> <span
 style="color: rgb(102, 51, 102);">([LOCALE])</span>
- will set the current designated room to the one with the specified
class name. If a room or area has been previously designated, and not
cleared (see SET AREA), then the room will be selected from the
designated area according to the locale criteria. Otherwise, a room
from the whole map will be chosen. If a locale of ANY is given, then
the room will be chosen randomly from the world, or the area if
designated. Several locale types may be specified as choices by setting
the first locale type as ANY, followed by your other locale type
choices, separated by spaces. If no locale is given, this will effectly
clear the room designation (but it will not clear the area
designation!). Valid locale names may be Locale class names such as
MountainSurface, StdRoom, etc, or they may be locale types such as
stone, wooden, underwater, mountains, etc.</p>
      <p><span style="color: rgb(51, 102, 102);">SET LOCALE</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MOBGROUP</span> <span
 style="color: rgb(102, 51, 102);">(RESELECT)
([MOB NAME])</span>
- will designate a set of mobs with the given name. If the name ends
with MASK=..., then a mask as described by the help entry for
ZAPPERMASKS will apply in addition to the name
mask entered before the MASK= string. Use a name of ALL to select all
appropriate mobs.&nbsp;The mobs chosen will be selected from those
in
the designated ROOMGROUP (if one is designated), AREA (if one is
designated) or the world. The mobs must exist somewhere in the map for
this command to work. Normally a mob will not be placed in the mobgroup
if the mob has been previously set with SET MOB, or SET MOBTYPE. The
RESELECT flag is an optional first flag which, if specified, designates
that mobs may be placed in the mobgroup even if previously set, so long
as the RESELECT flag was also used in the previous SET MOB or SET
MOBTYPE command.&nbsp; &nbsp;Mobs designated this way are
available in
Scripts using the QUESTMOB function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">MOBGROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing.&nbsp;Mobs designated this way are available in
Scripts
using the QUESTMOB function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MOB</span> <span
 style="color: rgb(102, 51, 102);">(RESELECT)</span> <span
 style="color: rgb(102, 51, 102);">([MOB
NAME])</span>
- will set the current mob to one with the given mob name. If the name
ends with MASK=..., then a mask as described by the help entry for
ZAPPERMASKS will apply in addition to the mob name
entered before the MASK= string. Ths mob chosen will be selected from a
MOBGROUP if one has been set. Otherwise, the mob chosen will be
selected from those in the designated ROOMGROUP (if one is designated),
or the AREA (if one is designated) or finally the world. The mob must
exist somewhere one of those groups for this command to work. If a room
has been previously designated, then this command will bring the chosen
mob to that room. If a room or area has not been designated (or was
cleared), then this command will designate a new room and area.
Normally a mob will not be chosen by this command if the mob has been
previously set with SET MOB, or SET MOBTYPE. The RESELECT flag is an
optional first flag which, if specified, designates that a mob may be
chosen if previously chosen, so long as the RESELECT flag was also used
in the previous SET MOB or SET MOBTYPE command.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MOB</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MOBTYPE</span> <span
 style="color: rgb(102, 51, 102);">(RESELECT)
([CLASS])</span>
- will set the current mob to one with the given class name. Ths mob
chosen will be selected from a MOBGROUP if one has been set. Otherwise,
the mob chosen will be selected from those in the designated ROOMGROUP
(if one is designated), AREA (if one is designated) or the world. The
mob must exist somewhere in the map for this command to work. If a room
has been previously designated, then this command will bring the mob to
that room. If a room or area has not been designated (or was cleared),
then this command will designate a new room and area. Normally a mob
will not be chosen by this command if the mob has been previously set
with SET MOB, or SET MOBTYPE. The RESELECT flag is an optional first
flag which, if specified, designates that a mob may be chosen if
previously chosen, so long as the RESELECT flag was also used in the
previous SET MOB or SET MOBTYPE command.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MOBTYPE</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ITEMGROUP</span> <span
 style="color: rgb(102, 51, 102);">(RESELECT)</span> <span
 style="color: rgb(102, 51, 102);">([ITEM
NAME])</span>
- will designate a set of items with the given name. If the name ends
with MASK=..., then a mask as described by the help entry for
ZAPPERMASKS will apply in addition to the item
name entered before the MASK= string. Use an item name of ALL to select
all appropriate items. &nbsp;The items chosen will be selected from
those in the designated ROOMGROUP (if one is designated), the AREA (if
one is designated) or the world. The items must exist somewhere in the
map for this command to work. Normally an item will not be placed in
the itemgroup if the item has been previously set with SET ITEM, or SET
ITEMTYPE. The RESELECT flag is an optional first flag which, if
specified, designates that items may be placed in the itemgroup even if
previously set, so long as the RESELECT flag was also used in the
previous SET ITEM or SET ITEMTYPE command. Items designated this way
are available in Scripts using the QUESTITEM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ITEMGROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing.&nbsp; Items designated this way are available in
Scripts using the QUESTITEM function.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ITEM</span> <span
 style="color: rgb(102, 51, 102);">(RESELECT)</span> <span
 style="color: rgb(102, 51, 102);">([ITEM
NAME])</span>
- will set the current item to one with the given name. The item chosen
will be selected from those in the designated ROOMGROUP (if one is
designated), AREA (if one is designated) or the world. The item must
exist somewhere in a room on the map for this command to work. If a
room has been previously designated, then this command will bring the
item to that room. If a room or area has not been designated (or was
cleared), then this command will designate a new room and area.
Normally an item will not be chosen by this command if the item has
been previously set with SET ITEM, or SET ITEMTYPE. The RESELECT flag
is an optional first flag which, if specified, designates that an item
may be chosen if previously chosen, so long as the RESELECT flag was
also used in the previous SET ITEM or SET ITEMTYPE command.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ITEM</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- serves the same purpose as the above command of the same name, but
the argument is an object specifier. See Object Specifiers below this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ITEMTYPE</span> <span
 style="color: rgb(102, 51, 102);">(RESELECT)</span> <span
 style="color: rgb(102, 51, 102);">([CLASS])</span>
- will set the current item to one with the given class name. The item
chosen will be selected from those in the designated ROOMGROUP (if one
is designated), AREA (if one is designated) or the world. The item must
exist somewhere in a room on the map for this command to work. If a
room has been previously designated, then this command will bring the
item to that room. If a room or area has not been designated (or was
cleared), then this command will designate a new room and area.
Normally an item will not be chosen by this command if the item has
been previously set with SET ITEM, or SET ITEMTYPE. The RESELECT flag
is an optional first flag which, if specified, designates that an item
may be chosen if previously chosen, so long as the RESELECT flag was
also used in the previous SET ITEM or SET ITEMTYPE command.</p>
      <p><span style="color: rgb(51, 102, 102);">LOAD MOBGROUP</span> <span
 style="color: rgb(102, 51, 102);">([#NUMBER])
[MOB NAME]</span>
- will instantiate all (or optionally, the given number) mobs of the
given name from the set of mobs imported using the IMPORT MOBS command
above. Use a name of ANY or ALL to load them all. If the mob name ends
with MASK=..., then a mask as described by the help entry for
ZAPPERMASKS will apply in addition to the mob name
entered before MASK= string. This selected mobs will be set as the
current MOBGROUP. If a room, roomgroup, or area has been previously
designated, then this command will create each mob in that room or
random room in the area. If a room or area has not been designated (or
was cleared), then this command will designate a random room and area.
This command will also designate the current mob to the last one loaded.</p>
      <p><span style="color: rgb(51, 102, 102);">LOAD MOB</span> <span
 style="color: rgb(102, 51, 102);">[MOB
NAME]</span>
- will instantiate a mob of the given name from the list of mobs
imported using the IMPORT MOBS command above.Use a name of ANY to load
a random one. If the name ends with MASK=..., then a mask as described
by the help entry for ZAPPERMASKS will apply in
addition to the name mask entered. This selected mob will be set as the
current mob. If a room, roomgroup, or area has been previously
designated, then this command will create the mob in that room. If a
room or area has not been designated (or was cleared), then this
command will designate a random room and area.</p>
      <p><span style="color: rgb(51, 102, 102);">LOAD ITEMGROUP</span> <span
 style="color: rgb(102, 51, 102);">([#NUMBER])</span> <span
 style="color: rgb(102, 51, 102);">[ITEM
NAME]</span>
- will instantiate all (or optionally, the given number) items of the
given name from the list of items imported using the IMPORT ITEMS
command above. This items will be set as the current ITEMGROUP. If a
room, roomgroup, or area has been previously designated, then this
command will create the item in that room. If a room or area has not
been designated (or was cleared), then this command will designate a
random room and area. This command will also designate the current item
to the last one loaded. Use a name of ANY or ALL to load them all.</p>
      <p><span style="color: rgb(51, 102, 102);">LOAD ITEM</span> <span
 style="color: rgb(102, 51, 102);">[ITEM
NAME]</span>
- will instantiate an item of the given name from the list of items
imported using the IMPORT ITEMS command above. This item will be set as
the current item. If a room, roomgroup, or area has been previously
designated, then this command will create the item in that room. If a
room or area has not been designated (or was cleared), then this
command will designate a random room and area. Use a name of ANY to
load a random one.</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE ITEM</span>
-
will give a currently designated item (designated using the SET ITEM,
SET ITEMGROUP, LOAD ITEM, or LOAD ITEMGROUP command) to the last
designated mob or mobs (designated using the SET MOB, SET MOBGROUP,
LOAD MOBGROUP, or LOAD MOB commands).</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE ITEMS</span>
-
will give all currently designated items (designated using the SET
ITEM, SET ITEMGROUP, LOAD ITEM, or LOAD ITEMGROUP command) to the last
designated mob or mobs (designated using the SET MOB, SET MOBGROUP,
LOAD MOBGROUP, or LOAD MOB commands).</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE STAT <span
 style="color: rgb(102, 51, 102);">[STAT ID] [VALUE]</span></span>-
will give the currently designated object (designated using the SET
ITEM/MOB/ROOM/AREA, or LOAD ITEM/MOB command) a new value for their
internal stat designated by the STAT ID. An important stat to be aware
of is the special "KEYPLAYER" stat. &nbsp;When given the value of
true,
it will make it so that the death of the mob or mobs it is assigned to
instantly ends the quest. &nbsp;This is an advanced coding
feature; use it wisely..</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE BEHAVIOR</span> <span
 style="color: rgb(102, 51, 102);">[BEHAVIOR
ID] ([PARAMETERS])</span>
- The behavior ID must be a valid behavior class name. The parameters
are any parameters you wish to pass to the behavior. This command will
give the most recently designated mob, item, area, room or mobgroup
(designated using the set or load commands), itemgroup, or roomgroup
the above behavior. The parameters above are optional, and include any
text that would be valid for the behavior id specified. The text may
also optionally include embedded references to other quest objects. See
below Object Specifiers in Parameters below for more information on
using this feature.</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE ABILITY</span> <span
 style="color: rgb(102, 51, 102);">[ABILITY
ID] ([PARAMETERS])</span>
- The ability ID must be a valid ability class name. The parameters are
any parameters you wish to pass to the ability. This command will give
the currently designated mob, or mobgroup (designated using the set or
load commands) the above ability. The parameters above are optional,
and include any text that would be valid for the ability id specified.
The text may also optionally include embedded references to other quest
objects. See below Object Specifiers in Parameters below for more
information on using this feature.</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE AFFECT</span> <span
 style="color: rgb(102, 51, 102);">[ABILITY
ID] ([PARAMETERS]</span>)
- The ability ID must be a valid ability class name. The parameters are
any parameters you wish to pass to the ability. This command will give
the currently designated mob, item, room, area, or mobgroup (designated
using the set or load commands), itemgroup, or roomgroup the above
affect. The parameters above are optional, and include any text that
would be valid for the ability id specified. The text may also
optionally include embedded references to other quest objects. See
below Object Specifiers in Parameters below for more information on
using this feature.</p>
      <p><span style="color: rgb(51, 102, 102);">GIVE FOLLOWER</span> <span
 style="color: rgb(102, 51, 102);">[MOB
NAME]</span>
- The mob name is a mob which will be selected from the list of
previously designated mobs (designated using the LOAD MOB, SET MOB, or
SET MOBTYPE commands). This mob will be made into a follower of the mob
most recently designated using the SET MOB, SET MOBTYPE, or LOAD MOB
command. This command does not change the current mob designation, nor
does it change the location of either mob.</p>
      <p><span style="color: rgb(51, 102, 102);">TAKE BEHAVIOR</span> <span
 style="color: rgb(102, 51, 102);">[BEHAVIOR
ID]</span>-
The behavior ID must be a valid behavior class name. This command will
take from the most recently designated mob, item, area, room or
mobgroup (designated using the set or load commands), itemgroup, or
roomgroup the above behavior.</p>
      <p><span style="color: rgb(51, 102, 102);">TAKE</span> <span
 style="color: rgb(51, 102, 102);">ABILITY</span> <span
 style="color: rgb(102, 51, 102);">[ABILITY
ID]</span> - The ability ID
must be a valid ability class name. This command will take from the
currently designated mob, or mobgroup (designated using the set or load
commands) the above ability.</p>
      <p><span style="color: rgb(51, 102, 102);">TAKE</span> <span
 style="color: rgb(51, 102, 102);">AFFECT</span> <span
 style="color: rgb(102, 51, 102);">[ABILITY
ID]</span>
- The ability ID must be a valid ability class name. This command will
take from the currently designated mob, item, room, area, or mobgroup
(designated using the set or load commands), itemgroup, or roomgroup
the above affect.</p>
      <p><span style="color: rgb(51, 102, 102);">RESET</span>-
If a
ROOM has been designated using SET ROOM, or by any other previously
described method, this command will cause that room to reset, or
re-load from the database. If a ROOM is not currently set (or has been
unset), but a ROOMGROUP or an AREA has been set, this command will
cause all rooms in that set (respectively) to reload from the database.
Doing either can be somewhat time consuming, and may disrupt any
players in the rooms affected, as it will cause items to vanish from
the floor, and make players and mobs unable to move until the process
is completed.</p>
      <p><span style="color: rgb(51, 102, 102);">&lt;SCRIPT&gt;</span>
- This designates the beginning of embedded Javascript in your quest
script. The end is designated by a corresponding
&lt;/SCRIPT&gt; tag on
its own line. See the next section for more details.</p>
      <p><span style="color: rgb(51, 102, 102);">LOAD= <span
 style="color: rgb(102, 51, 102);">([QUEST FILE])
([ARGUMENT] ...
[ARGUMENT])</span></span>
- This command will cause the specified external quest script file to
be loaded and executed as if it were embedded at the current point in
the script. The quest filename is of the same format mentioned above.
When LOAD= is used as a command inside a script, you can also specify
one or more space-delimited arguments which will be accessible inside
the target quest script as Object Specifiers. The first argument given,
whether it is itself an Object Specifier, or a simple string, will be
accessible inside the target quest script as ARG1, the second as ARG2,
and so forth. A special case exists, however, if one of the arguments
evaluates to an Object Specifier which represents a group of objects
(such as MOBGROUP or ITEMGROUP). If that case occurs, the LOAD= command
will execute once for every object inside the group! See the discussion
of Object Specifiers and Object Spcifiers in Parameters for more
information.</p>
      <p><span style="color: rgb(51, 102, 102);">&lt;OPTION&gt; <span
 style="color: rgb(102, 51, 102);">([QUEST
SCRIPT COMMANDS]) <span style="color: rgb(51, 102, 102);">&lt;/OPTION&gt;</span></span></span>-
Putting quest script commands inside of &lt;OPTION&gt; tags
means that,
for every execution of the quest script, only ONE of the
&lt;OPTION&gt;
tags will be have their script commands executed. The one chosen will
be selected at random. If only one &lt;OPTION&gt; tag exists,
it will
be chosen every time, of course.</p>
      <p><span style="color: rgb(102, 0, 0); font-weight: bold;">*
Note
About #</span><span style="font-weight: bold;">.</span>
In a quest script, anywhere the # sign is used above (such as [#TICKS]
or [#PLAYERS], you may enter a normal old every day number (34) or you
may enter a valid arithmetic expression using real or integer numbers
and any of the following operators: + - * \ () ?. The ? may be used to
generate random numbers in a math expression. For example, 1?4 would
generate a random number from 1 to 4, and 3+1?4 would generate a random
number from 4 to 7.</p>
      <p><span style="color: rgb(102, 0, 0); font-weight: bold;"><a
 name="questcrobjsp"></a>*
Object Specifiers</span><span style="font-weight: bold;">.</span>
Many of the SET ... commands, such as SET MOBGROUP, SET MOB, SET
ITEMGROUP, SET ROOM, etc, have forms which allow you to designate their
value using an [OBJECT] string. An [OBJECT] string is one of the
following basic quest-script values: "LOADEDMOBS", "LOADEDITEMS",
"AREA", "ROOM", "MOBGROUP", "ITEMGROUP", "ROOMGROUP", "ITEM", "ENVOBJ",
"STUFF", "MOB", or one of the following mystery quest-script values:
"FACTION", "FACTIONGROUP", "AGENT", "AGENTGROUP", "ACTION",
"ACTIONGROUP", "TARGET", "TARGETGROUP", "MOTIVE", "MOTIVEGROUP",
"WHEREHAPPENED", "WHEREHAPPENEDGROUP", "WHEREAT", "WHEREATGROUP",
"WHENHAPPENED", "WHENHAPPENEDGROUP", "WHENAT", "WHENATGROUP", "TOOL",
"TOOLGROUP". Using the SET command in this way allows you to either
COPY an objects value, or re-designate it for the purposes of one of
the GIVE ... commands. If the quest script was executed from inside of
another using the LOAD= script command, and arguments were specified
from the above objects, you may also have access to argument object
specifiers, such as ARG1, ARG2, ... ARGN. There will be one such object
specifier available for each argument passed to the script. Please note
that some object specifiers return single objects (such as MOB, ITEM,
ROOM) and some return collections of objects (such as ROOMGROUP,
MOBGROUP, ITEMGROUP). Object specifiers can also be combined using +
and - characters. For instance, MOBGROUP-MOB would return the group of
mobs in the MOBGROUP minus the specified MOB while the specifier
MOB+ITEM would refer to an object group containing both the specified
MOB and the specified ITEM.</p>
      <p><span style="color: rgb(102, 0, 0); font-weight: bold;">*
Object Specifiers in Parameters</span><span style="font-weight: bold;">.</span>
When specifing parameters for the GIVE BEHAVIOR, GIVE ABILITY, or GIVE
AFFECT command, you may embed the names of one or more of the Object
Specifiers by prefixing the Object Specifier code string with a $
character, and concluding it with a space or other non-alphanumeric
character. For instance, the command: "give script
GREET_PROG 100\; say I love $MOB!!!\;~\;" would embed the name string
for the MOB object specifier inside the in-line script. In addition to
this capability, you may also put a special character after the $ and
before the object specifier to manipulate how the name of the object is
generated. Special characters are: '_' (to make the name in uppercase),
'&amp;' to remove any prefixed english article words from the name,
or
'|' to replace all spaces in the name with | characters (which is very
useful for QuestChat parameters).</p>
      <p><font style="background-color: aquamarine;" color="#4169e1"
 size="4"><strong>Mystery
Objects in Quest scripts:</strong></font></p>
      <p>In addition to the normal
quest objects mentioned above, such
as MOB, ITEM, ROOM and so forth, there are also extranous objects and
groups intended for use when building logic problem mysteries. The
commands for setting these are as follows:</p>
      <p><span style="color: rgb(51, 102, 102);">SET AGENT</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the AGENT
variable to the [OBJECT]. Will also set the MOB object. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this command listing. If the object resolves to a group of
objects, a random one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET AGENTGROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the AGENTGROUP variable to the [OBJECT]. Will also set the
MOBGROUP object to the same, as well as designate one random mob from
the group as the AGENT and the MOB. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET AGENTGROUP</span> <span
 style="color: rgb(102, 51, 102);">[#NUMBER]</span>
- Sets the AGENTGROUP variable to the currently set MOBGROUP, selecting
at most NUMBER mobs randomly from that list. Will also set the MOBGROUP
object to the same, as well as designate one random mob from the group
as the AGENT and the MOB. See <a href="ArchonTome.html#questcrobjsp">Object
Specifiers</a> above this command
listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHEREHAPPENED</span>
      <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets
the WHEREHAPPENED variable to the [OBJECT]. Will also set the ROOM
object. See <a href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this command listing. If the object resolves to a group of
objects, a random one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET
WHEREHAPPENEDGROUP</span> <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the WHEREHAPPENEDGROUP variable to the [OBJECT]. Will also set
the ROOMGROUP object to the same, as well as designate one random room
from the group as the WHEREHAPPENED and the ROOM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET
WHEREHAPPENEDGROUP</span> <span style="color: rgb(102, 51, 102);">[#NUMBER]</span>
- Sets the WHEREHAPPENEDGROUP variable to the currently set ROOMGROUP,
selecting at most NUMBER rooms randomly from that list. Will also set
the ROOMGROUP object to the same, as well as designate one random room
from the group as the WHEREHAPPENED and the ROOM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHEREAT</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the WHEREAT
variable to the [OBJECT]. Will also set the ROOM object. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this command listing. If the object resolves to a group of
objects, a random one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">WHEREATGROUP</span> <span
 style="color: rgb(102, 51, 102);">[</span><span
 style="color: rgb(102, 51, 102);">OBJECT]</span>
- Sets the WHEREATGROUP variable to the [OBJECT]. Will also set the
ROOMGROUP object to the same, as well as designate one random room from
the group as the WHEREAT and the ROOM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">WHEREATGROUP</span> <span
 style="color: rgb(102, 51, 102);">[</span><span
 style="color: rgb(102, 51, 102);">#NUMBER]</span>
- Sets the WHEREATGROUP variable to the currently set ROOMGROUP,
selecting at most NUMBER rooms randomly from that list. Will also set
the ROOMGROUP object to the same, as well as designate one random room
from the group as the WHEREAT and the ROOM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHENHAPPENED</span>
      <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets
the WHENHAPPENED variable to the timeclock [OBJECT]. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHENHAPPENED</span>
      <span style="color: rgb(102, 51, 102);">[#HOURS-DIFFERENCE]</span>
- Sets the WHENHAPPENED variable to the current time plus or minus the
hours difference specified. See <a href="ArchonTome.html#questcrobjsp">Object
Specifiers</a> above this command
listing. If the object resolves to a
group of objects, a random one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET
WHENHAPPENEDGROUP</span> <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the WHENHAPPENEDGROUP variable to the [OBJECT]. Will also
designate one random time from the group as the WHENHAPPENED. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET
WHENHAPPENEDGROUP</span> <span style="color: rgb(102, 51, 102);">[#</span><span
 style="color: rgb(102, 51, 102);">HOURS-DIFFERENCE</span><span
 style="color: rgb(102, 51, 102);">] ...</span> <span
 style="color: rgb(102, 51, 102);">[#</span><span
 style="color: rgb(102, 51, 102);">HOURS-DIFFERENCE</span><span
 style="color: rgb(102, 51, 102);">]</span>
- Sets the
WHENHAPPENEDGROUP list to the current time plus or minus the list of
hours-differences given. Will also designate one random time from the
group as the WHENHAPPENED. See <a href="ArchonTome.html#questcrobjsp">Object
Specifiers</a> above this command
listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHENAT</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the
WHENHAPPENED variable to the timeclock [OBJECT]. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHENAT</span> <span
 style="color: rgb(102, 51, 102);">[#HOURS-DIFFERENCE]</span>
- Sets
the WHENAT variable to the current time plus or minus the hours
difference specified. See <a href="ArchonTome.html#questcrobjsp">Object
Specifiers</a> above this command
listing. If the object resolves to a
group of objects, a random one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHENATGROUP</span>
      <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets
the WHENATGROUP variable to the [OBJECT]. Will also designate one
random time from the group as the WHENAT. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET WHENATGROUP</span>
      <span style="color: rgb(102, 51, 102);">[#</span><span
 style="color: rgb(102, 51, 102);">HOURS-DIFFERENCE</span><span
 style="color: rgb(102, 51, 102);">] ...</span> <span
 style="color: rgb(102, 51, 102);">[#</span><span
 style="color: rgb(102, 51, 102);">HOURS-DIFFERENCE</span><span
 style="color: rgb(102, 51, 102);">]</span>
- Sets the WHENATGROUP list
to the current time plus or minus the list of hours-differences given.
Will also designate one random time from the group as the WHENAT. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET FACTION</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the FACTION
variable to the faction string [OBJECT]. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET FACTION</span> <span
 style="color: rgb(102, 51, 102);">[FACTION
NAME]</span> - Sets the
FACTION variable to one of the given name or ANY to choose a random one.</p>
      <p><span style="color: rgb(51, 102, 102);">SET FACTIONGROUP</span>
      <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the FACTIONGROUP variable to the [OBJECT]. Will also designate
one random faction from the group as the FACTION. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET FACTIONGROUP</span>
      <span style="color: rgb(102, 51, 102);">[#NUMBER]</span>
- Sets the FACTIONGROUP variable to NUMBER random factions, or ALL to
set it to all of them. Will also designate one random faction from the
group as the FACTION. See <a href="ArchonTome.html#questcrobjsp">Object
Specifiers</a> above this command
listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET FACTIONGROUP</span>
      <span style="color: rgb(102, 51, 102);">[FACTION
NAME] ...
[FACTION NAME]</span>
- Sets the FACTIONGROUP variable to the set of factions designated by
the faction names. Will also designate one random faction from the
group as the FACTION. The faction names are space delimited, and names
grouped with double-quotes.</p>
      <p><span style="color: rgb(51, 102, 102);">SET TARGET</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the TARGET
variable to the [OBJECT]. Will also set the MOB or ITEM object
depending on what gets designated. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET TARGETGROUP</span>
      <span style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the TARGETGROUP variable to the [OBJECT]. Will also set the
MOBGROUP or ITEMGROUP object to the same (depending on what type of
group is designated), as well as designate one random object from the
group as the TARGET, and either the MOB or ITEM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET TARGETGROUP</span>
      <span style="color: rgb(102, 51, 102);">[#NUMBER]</span>
- Sets the TARGETGROUP variable to the currently set MOBGROUP (if one
is currently set) or ITEMGROUP if not. It will select at most NUMBER
objects randomly from that list. Will also re-set the MOBGROUP or
ITEMGROUP object to the same, as well as designate one random mob or
item from the group as the TARGET and either the MOB or ITEM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET TOOL</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the TOOL
variable to the [OBJECT]. Will also set the MOB or ITEM object
depending on what gets designated. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET TOOLGROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the TOOLGROUP variable to the [OBJECT]. Will also set the
MOBGROUP or ITEMGROUP object to the same (depending on what type of
group is designated), as well as designate one random object from the
group as the TOOL, and either the MOB or ITEM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET TOOLGROUP</span> <span
 style="color: rgb(102, 51, 102);">[#NUMBER]</span>
- Sets the TOOLGROUP variable to the currently set MOBGROUP (if one is
currently set) or ITEMGROUP if not. It will select at most NUMBER
objects randomly from that list. Will also re-set the MOBGROUP or
ITEMGROUP object to the same, as well as designate one random mob or
item from the group as the TOOL and either the MOB or ITEM. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET MOTIVE</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the MOTIVE
variable to the string [OBJECT]. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">MOTIVE</span> <span
 style="color: rgb(102, 51, 102);">[STRING]</span>
- Sets the MOTIVE
variable to the string.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">MOTIVE</span><span
 style="color: rgb(51, 102, 102);">GROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the
MOTIVEGROUP variable to the [OBJECT]. Will also designate one random
string from the group as the MOTIVE. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">MOTIVEGROUP</span> <span
 style="color: rgb(102, 51, 102);">[STRING]
.. [STRING]</span> - Sets
the MOTIVEGROUP to the set of strings specified. Will also designate
one random string from the group as the MOTIVE. The strings are space
delimited, and words grouped with double-quotes.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">MOTIVE</span><span
 style="color: rgb(51, 102, 102);">GROUP</span> <span
 style="color: rgb(102, 51, 102);">[#NUMBER]
[OBJECT]</span>
- Sets the MOTIVEGROUP variable to [NUMBER] of the items represented by
[OBJECT]. Will also designate one random string from the group as the
MOTIVE. See <a href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this command listing. [#NUMBER] may be a math expression.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">MOTIVEGROUP</span> <span
 style="color: rgb(102, 51, 102);">[#NUMBER]</span> <span
 style="color: rgb(102, 51, 102);">[STRING]
.. [STRING]</span>
- Sets the MOTIVEGROUP to [NUMBER] of the set of strings specified.
Will also designate one random string from the group as the MOTIVE. The
strings are space delimited, and words grouped with double-quotes.
[#NUMBER] may be a math expression.</p>
      <p><span style="color: rgb(51, 102, 102);">SET ACTION</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the ACTION
variable to the string [OBJECT]. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing. If the object resolves to a group of objects, a random
one from the group will be chosen.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ACTION</span> <span
 style="color: rgb(102, 51, 102);">[STRING]</span>
- Sets the ACTION
variable to the string.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ACTION</span><span
 style="color: rgb(51, 102, 102);">GROUP</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the
ACTIONGROUP variable to the [OBJECT]. Will also designate one random
string from the group as the ACTION. See <a
 href="ArchonTome.html#questcrobjsp">Object Specifiers</a>
above this
command listing.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ACTIONGROUP</span> <span
 style="color: rgb(102, 51, 102);">[STRING]
.. [STRING]</span> - Sets
the ACTIONGROUP to the set of strings specified. Will also designate
one random string from the group as the ACTION. The strings are space
delimited, and words grouped with double-quotes.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ACTION</span><span
 style="color: rgb(51, 102, 102);">GROUP</span> <span
 style="color: rgb(102, 51, 102);">[#NUMBER]</span> <span
 style="color: rgb(102, 51, 102);">[OBJECT]</span>
- Sets the
ACTIONGROUP variable to [NUMBER] of the items represented by [OBJECT].
Will also designate one random string from the group as the ACTION. See
      <a href="ArchonTome.html#questcrobjsp">Object
Specifiers</a>
above this command listing. [#NUMBER] may be a math expression.</p>
      <p><span style="color: rgb(51, 102, 102);">SET</span> <span
 style="color: rgb(51, 102, 102);">ACTIONGROUP</span> <span
 style="color: rgb(102, 51, 102);">[#NUMBER]</span> <span
 style="color: rgb(102, 51, 102);">[STRING]
.. [STRING]</span>
- Sets the ACTIONGROUP to [NUMBER] of the set of strings specified.
Will also designate one random string from the group as the ACTION. The
strings are space delimited, and words grouped with double-quotes.
[#NUMBER] may be a math expression.</p>
      <p><font style="background-color: aquamarine;" color="#4169e1"
 size="4"><strong>JavaScripting
in Quest scripts:</strong></font></p>
      <p>The CoffeeMud quest
manager engine will allow you embed
Javascript into your quest scripts for the purpose of assisting in
setting up your quests. The Javascript must be located between the
&lt;SCRIPT&gt; and &lt;/SCRIPT&gt; quest script
commands to be
recognized.</p>
      <p class="MsoNormal"><span style="font-size: 14pt; color: blue;"><font
 color="#000000"><font size="3">Javascript
is a wholly different language than the standard Scriptable/MOBPROG
language OR the quest script language described in this document. You
should read the JavaScripting section of the CoffeeMud</font> <a
 href="Programming.html"><font size="3">Programming Guide</font></a> <font
 size="3">for
more information, as well as the following web sites
which discuss the usage and syntax of the Javascript language itself:</font>
      <a href="http://www.mozilla.org/js/"><font size="3">http://www.mozilla.org/js/</font></a>
      <font size="3">and</font> <a href="http://www.mozilla.org/rhino/"><font
 size="3">http://www.mozilla.org/rhino/</font></a> <font size="3">.</font></font></span></p>
      <p class="MsoNormal"><span style="font-size: 14pt; color: blue;"><font
 color="#000000" size="3"><span style="font-size: 14pt; color: blue;"><font
 color="#000000" size="3">Aside from the above
information about
JavaScripting in CoffeeMud, there are still a few more details to learn
about JavaScripting in your quest scripts. Although</font></span><span
 style="font-size: 14pt; color: blue;"><font color="#000000" size="3">Javascript
does not require semicolon line delimeters and it will not likely cause
problems, you should be aware that the quest manager engine will strip
out all semicolons as part of its command parsing process. For this
reason, if you absolutely must keep a semicolon ANYWHERE in your
javascript, whether as part of a displayable string, or a line
delimeter, it must first be escaped: \;</font></span></font></span></p>
      <p>The quest manager engine
will also make a couple of useful
methods available to your Javascript for assisting in setting up your
quests. One is the <font face="Courier New"><font size="2">Quest
quest()</font></font> <font face="Times New Roman">method,
which, as you can see, returns a Quest object which represents to the
current quest script. The Quest object returned has numerous useful
methods on them for doing things like determining which mobs and items
were selected by the SET commands as described above (<font
 face="Courier New" size="2">isDesignatedObject,
getQuestStuff,
getQuestMob, getQuestItem</font>,
etc). There are also methods for
properly adding other such mobs and items to your quest (<font
 face="Courier New" size="2">runtimeRegisterObject</font>),
or for
adding abilities, behaviors, or effects to existing objects ( <font
 face="Courier New" size="2">runtimeRegisterAbility,
runtimeRegisterEffect, runtimeRegisterBehavior</font>).
You should
check out the Quest interface for more information on these methods;
they are located in the file Quest.java, which is in the
com/planet_ink/coffee_mud/interfaces package.</font></p>
      <p>Another method provided
to Javascript by the quest manager is
the <font face="Courier New" size="2">QuestState
setupState() <font face="Times New Roman" size="3">method. The
QuestState object made
available by this method contains information on the current state of
your quest Script. There are several useful properties of the object,
such as <font face="Courier New" size="2">area, room, mob, mobGroup,
item,</font> and <font face="Courier New" size="2">envObject</font>
which will refer to the last such objects SET by your quest script
before Javascript was executed. The Vectors</font></font> <font
 size="2"><font size="3"><span style="font-family: monospace;">loadedMobs</span></font></font><font
 face="Courier New" size="2"><font face="Times New Roman" size="3">and</font></font>
      <font size="2"><font size="3"><span
 style="font-family: monospace;">loadedItems</span></font></font><font
 face="Courier New" size="2"><font face="Times New Roman" size="3">are
available with any items or mobs gained from the IMPORT command,
regardless of whether they were LOADed. There is also the</font></font>
      <font size="2"><font size="3"><span
 style="font-family: monospace;">mysteryData</span></font></font><font
 face="Courier New" size="2"><font face="Times New Roman" size="3">object
with all the objects and Vectors SET for building logic problem
mysteries.</font></font></p>
      <p><font style="background-color: aquamarine;" color="#4169e1"
 size="4"><strong>Final
Quest Notes:</strong></font></p>
      <p>This stuff may seem
complicated, but just make sure you
carefully examine the sample quests found in the CoffeeMud resources
directory! Also, remember that quest script errors are always sent out
to your mud.log, so check their often when starting up a new quest!</p>
      <p class="MsoNormal"><a name="holidays"><strong><font
 color="#008000" size="5">Holidays</font></strong></a></p>
Holidays are a special/reserved quest defined by file
/resources/quests/holidays/holidays.quest.<br>
      <br>
They are very simple Scriptless quests that can be started at random
intervals, or on certain mud dates, or real-life dates. The holidays
will only impact the areas specified by the holiday settings, and only
the mobs in those areas specified in the settings, and only with the
features you specify.<br>
      <br>
Use LIST HOLIDAYS to see a list of all defined holidays and the areas
hey are defined for. By default, 3 special-case weather related
holidays are included which impact any area that meets their special
criteria.<br>
      <br>
You can use MODIFY HOLIDAY &lt;name&gt; to change the settings
for a
holiday, DESTROY HOLIDAY &lt;name&gt; to delete one, or CREATE
HOLIDAY
name to create a new one that will automatically apply to the area the
creator is standing in when it is created.<br>
      <br>
Here are the standard settings for holidays:<br>
      <br>
      <br>
      <table
 style="text-align: left; background-color: rgb(255, 255, 153); width: 100%;"
 border="1" cellpadding="2" cellspacing="2">
        <tbody>
          <tr>
            <td><span style="font-weight: bold;">Property</span></td>
            <td><span style="font-weight: bold;">Description</span></td>
          </tr>
          <tr>
            <td style="font-style: italic;">Holiday
Name</td>
            <td>A unique name for
your holiday. It should be unique not
only among holidays, but also among quests.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Schedule
Type</td>
            <td>The type of
time-trigger for the holiday, whether a
random interval, a mud-date, or a real-life date.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Interval
Ticks</td>
            <td>If the time
trigger is a random interval,
this is the math expression to derive that interval. You may use normal
math operators like +-/*(), as well as the special ? operator to
generate a random number. 1?5 would mean a random number between 1-5.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Mud-Day</td>
            <td>If the time
trigger is a mud-date, this is that date in
month-day numeric format (like 1-30).</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Real
Life Date</td>
            <td>If the time
trigger is a real-life date, this is that
date in month-day numeric format (like 12-31).</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Duration
Ticks</td>
            <td>The number of
ticks (4 second periods) that the changes
specified below will be in effect once the holiday triggers.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Areas
List</td>
            <td>The list of areas
to apply the holiday to. Area names
are space separated, with multiple words grouped in double quotes. The
word ALL is a recognized value for this list.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Mask
for mobs that apply</td>
            <td>A zapper-mask that
determines which mobs inside the
designated area will benefit from the changes specified below. See
ZAPPERMASKS for an example of a zapper mask, or just hit ? at the
prompt here.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Mood
setting</td>
            <td>If this entry is
blank, it has no effect. Otherwise, it
is the name of the MOOD to force all the mobs to be in during your
holiday. Use ? for a list.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Aggressive
Setting</td>
            <td>If this entry is
blank, it has no effect. Otherwise, it
makes all the mobs aggressive during your holiday. Use ? to get a list
of valid parameters. Remember that this field must not be blank if you
want it to work!</td>
          </tr>
          <tr>
            <td style="font-style: italic;">Price
Factor</td>
            <td>This change will
only apply to mob
shopkeepers. It is a list of price-changes to make to specified items
during the holiday. See help on GenShopKeeper for more information on
Price Factors. You can specify as many different price-factors for as
many different types of items as you need to.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">MudChat
for words...</td>
            <td>This is a list of
trigger words that mobs
will respond to when spoken to, and what they will respond. You can
have as many trigger words groupings as you like, with as many
responses to those trigger words as you need. Each response begins with
a single digit weight, to show how often that selection should be
chosen among the others.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">MOB
Behavior</td>
            <td>A list of
Behaviors to apply to mobs during your
holiday. See the Archon's Guide under GenMOB for more information on
this, as it works the exact same way. Use ? for a list, and ? will also
work in the parameters for help.</td>
          </tr>
          <tr>
            <td style="font-style: italic;">MOB
Property</td>
            <td>A list of
Affects/Effects to apply to mobs during your
holiday. Again, see the Archon's Guide for more information on how this
works. Use ? for a list, and ? will also work in the parameters for
help.</td>
          </tr>
        </tbody>
      </table>
      <p class="MsoNormal"><a name="socials"><strong><font
 color="#008000" size="5">Socials</font></strong></a></p>
      <p>Socials are those
miscellaneous and happy little emoting
blurbs that help make muds a more fun and realistic place for players
to interact. Without them, players couldn't smile, roll their eyes, or
flip anyone off without considerable typing. The command line includes
a social creator and editor:</p>
      <p><strong><font style="background-color: moccasin;">CREATE
SOCIAL TWIGGLE</font></strong><br>
      <br>
This starts the creation process for a social called TWIGGLE. There are
actually four different kinds of TWIGGLE we will make: TWIGGLE (no
parameters), TWIGGLE SELF, TWIGGLE ALL, and TWIGGLE (to a target). This
is type 1 of 4.<br>
      <br>
      <em>You wave your arms...<br>
Social name 'TWIGGLE' Enter new.<br>
:<br>
      </em><br>
This is here in case you want to change the social name before you
create it. Doubtful, so just hit ENTER and skip it.<br>
      <br>
      <em>(No change)<br>
Target=NONE<br>
Change T)arget, S)elf, A)ll, or N)one:</em><br>
      <br>
This is where you choose the social type. For type1 socials, this would
be None.<br>
      <br>
      <em>(No change)<br>
You see 'null'. Enter new.<br>
:<br>
      </em><br>
This is what you as a player would see when you perform the social.<br>
      <br>
      <strong>You wiggle your toes.</strong><br>
      <br>
      <em>Your action type=MOVEMENT<br>
Change W)ords, M)ovement (small), S)ound, L)arge Movement<br>
      </em><br>
This is the requirement of the social. Small movement just needs hands,
fingers, toes, lips, and other small body movements, while large
movements require legs, and often moving the entire body. I tend to not
use the Words one, and I leave sounds for, well, yelling and such. This
particular social involves toes, thus it's a M)ovement. Type "<strong>M</strong>"
for that.</p>
      <p><em>Others
see 'null'. Enter new.<br>
:<br>
      </em><br>
This is what the people in the room see when you perform a social.<br>
      <br>
      <strong>&lt;S-NAME&gt;
wiggles &lt;S-HIS-HER&gt; toes.</strong><br>
      <br>
&lt;S-NAME&gt; means Source Name. Character performing the
social is
the source. I'll have a list of usable tags at the end of this tutorial
for you.<br>
      <br>
      <strong>Others Effect
type=HANDS<br>
Change W)ords, M)ovement (w/noise), S)ound, V)isual, H)ands:<br>
      </strong><br>
This is what others in the room need to be able to know you're
performing a social. This social involves toe wiggling, so I would
recommend Visual. If you're curious about Hands, that would be left for
handshakes, highfives, etc.</p>
      <p>And that concludes the
creation of our TWIGGLE social, type 1.<br>
      <br>
      <strong><font style="background-color: moccasin;">CREATE SOCIAL
TWIGGLE SELF</font></strong><br>
      <br>
Ahh. Part 2, the SELF portion.<br>
      <br>
      <em>You wave your arms...<br>
Social name 'TWIGGLE' Enter new.<br>
:<br>
      </em><br>
Like the above, you don't need to change the name.<br>
      <br>
      <em>(No change)<br>
Target=NONE<br>
Change T)arget, S)elf, A)ll, or N)one:<br>
      </em><br>
Because this portion is the SELF portion, choose "<strong>S</strong>".<br>
      <br>
      <em>You see 'null'. Enter
new.<br>
:<br>
      </em><br>
This is what you see when you perform the social TWIGGLE SELF.<br>
      <br>
      <strong>You glaze over while
you try to wiggle your toes at
yourself.</strong><br>
      <br>
      <em>Your action type=MOVEMENT<br>
Change W)ords, M)ovement (small), S)ound, L)arge Movement<br>
      </em><br>
You need toes to wiggle them, right? <strong>M</strong>)ovement
for
that.<br>
      <br>
      <em>Others see 'null'. Enter
new.<br>
:<br>
      </em><br>
What the others in the room see when you perform the social.<br>
      <br>
      <strong>&lt;S-NAME&gt;
wiggles &lt;S-HIS-HER&gt; toes at
&lt;S-HIM-HERSELF&gt;. Very odd.<br>
      </strong><br>
      <em>Others Effect type=HANDS<br>
Change W)ords, M)ovement (w/noise), S)ound, V)isual, H)ands:<br>
      </em><br>
They need to see it happen, right? I would guess it's a <strong>V</strong>)isual
requirement.</p>
      <p>And that concludes the
creation of our type 2 TWIGGLE social.</p>
      <p><strong><font style="background-color: moccasin;">CREATE
SOCIAL TWIGGLE ALL</font><br>
      </strong><br>
Yay! Type 3! The ALL is the Target Name.<br>
      <br>
      <em>You wave your arms...<br>
Social name 'TWIGGLE' Enter new.<br>
:<br>
      </em><br>
I doubt you would still need to change the name. You have type one and
two. Why make 3 different?<br>
      <br>
      <em>(No change)<br>
Target=NONE<br>
Change T)arget, S)elf, A)ll, or N)one:<br>
      </em><br>
It's the ALL portion of social creation, so choose "<strong>A</strong>".<br>
      <br>
      <em>You see 'null'. Enter
new.<br>
:<br>
      </em><br>
What you would see when you perform TWIGGLE [Target] (ex: TWIGGLE
VIRAX).<br>
      <br>
      <strong>You wiggle your toes
at everyone. How wierd.</strong><br>
      <br>
The display would replace the tag with the appropriate name, and in
this example it would be Virax.<br>
      <br>
      <em>Your action type=MOVEMENT<br>
Change W)ords, M)ovement (small), S)ound, L)arge Movement<br>
      </em><br>
We have toes we'll need to wiggle. <strong>M</strong>)ovement.<br>
      <br>
      <em>Others see 'null'. Enter
new.<br>
:<br>
      </em><br>
What those twiggled at people witness.<br>
      <br>
      <strong>&lt;S-NAME&gt;
wiggles &lt;S-HIS-HER&gt; toes at
everyone. Very strange.</strong><br>
      <br>
      <em>Others Effect type=HANDS<br>
Change W)ords, M)ovement (w/noise), S)ound, V)isual, H)ands:<br>
      </em><br>
I'd say another thing they would have to see. Don't you? <strong>V</strong>)isual.<br>
      <br>
      <strong><font style="background-color: moccasin;">CREATE SOCIAL
TWIGGLE &lt;T-NAME&gt;</font><br>
      <br>
      </strong> Yay! Type 4! The
TARGET! &lt;T-NAME&gt; is the Target
Name.<br>
      <br>
      <em>You wave your arms...<br>
Social name 'TWIGGLE' Enter new.<br>
:<br>
      </em><br>
I doubt you would still need to change the name. You have type one,
two, and three. Why make 4 different?<br>
      <br>
      <em>(No change)<br>
Target=NONE<br>
Change T)arget, S)elf, A)ll, or N)one:<br>
      </em><br>
It's the TARGET portion of social creation, so choose "<strong>T</strong>".<br>
      <br>
      <em>You see 'null'. Enter
new.<br>
:<br>
      </em><br>
What you would see when you perform TWIGGLE [Target] (ex: TWIGGLE
VIRAX).<br>
      <br>
      <strong>You wiggle your toes
at &lt;T-NAME&gt;. How cute.</strong><br>
      <br>
The display would replace the tag with the appropriate name, and in
this example it would be Virax.<br>
      <br>
      <em>Your action type=MOVEMENT<br>
Change W)ords, M)ovement (small), S)ound, L)arge Movement<br>
      </em><br>
We have toes we'll need to wiggle. <strong>M</strong>)ovement.<br>
      <br>
      <em>Others see 'null'. Enter
new.<br>
:<br>
      </em><br>
What those bystanders witness.<br>
      <br>
      <strong>&lt;S-NAME&gt;
wiggles &lt;S-HIS-HER&gt; toes at
&lt;T-NAME&gt;. Very strange.</strong><br>
      <br>
      <em>Others Effect type=HANDS<br>
Change W)ords, M)ovement (w/noise), S)ound, V)isual, H)ands:<br>
      </em><br>
I'd say another thing they would have to see. Don't you? <strong>V</strong>)isual.<br>
      <br>
      <em>Target sees 'null'.
Enter new.<br>
:<br>
      </em><br>
If you were the unfortunate victim, this is what you would see.<br>
      <br>
      <strong>&lt;S-NAME&gt;
wiggles &lt;S-HIS-HER&gt; toes at you.</strong><br>
      <br>
      <em>Target Effect
type=HEARING NOISE<br>
Change W)ords, M)ovement (w/noise), S)ound, V)isual, H)ands:<br>
      </em><br>
You see them wiggling their toes, so this would also be <strong>V</strong>)isual.<br>
      <br>
      <em>You see when no target
'null'. Enter new.<br>
:<br>
      </em><br>
This is what you would see if the target you want to use the social
against isn't there.<br>
      <br>
      <strong>Sorry. They aren't
here for that lovely toe wiggle.</strong><br>
      <br>
This concludes the social creation process. Enjoy creating your own
socials, folks! To modify an existing social, purely use MODIFY SOCIAL
[NAME] (i.e. MODIFY SOCIAL BONK, MODIFY SOCIAL HIGHFIVE
&lt;T-NAME&gt;)
or even MODIFY SOCIAL PAT SELF) What this does is it goes through the
command list like you are creating that particular social, but with the
information that is already stored on it. What you can do is just hit
ENTER until you get to the part of the social you want to change and
change it accordingly.</p>
      <p><font style="background-color: moccasin;">======= AND NOW
FOR
THE LIST OF TAGS =======</font><br>
&lt;S-HIS-HER&gt; Outputs 'Your' if Observer=Source, otherwise
'His'/'Her'.<br>
&lt;S-HIM-HER&gt; Outputs 'You' if Observer=Source, otherwise
'Him'/'Her'.<br>
&lt;S-NAME&gt; Outputs 'You' if Observer=Source, otherwise the
Name.<br>
&lt;S-NAMESELF&gt; Outputs 'Yourself' if Observer=Source,
otherwise the
Name<br>
&lt;S-HE-SHE&gt; Outputs 'You' if Observer=Source, otherwise
'He'/'She'<br>
&lt;S-SIRMADAM&gt; Outputs 'Sir'/'Madam'<br>
&lt;S-IS-ARE&gt; Outputs 'Are' if Observer=Source, otherwise
'Is'.<br>
&lt;S-HAS-HAVE&gt; Outputs 'Have' if Observer=Source, otherwise
'Has'.<br>
&lt;S-YOUPOSS&gt; Outputs 'Your' if Observer=Source, otherwise
the
Name`s<br>
&lt;S-HIM-HERSELF&gt; Outputs 'Yourself' if Observer=Source,
otherwise
the 'Himself'/'Herself'<br>
&lt;S-HIS-HERSELF&gt; Outputs 'Yourself' if Observer=Source,
otherwise
the 'Hisself'/'Herself'<br>
&lt;T-HIS-HER&gt; Outputs 'You' if Observer=Target, otherwise
'His'/'Her'.<br>
&lt;T-HIM-HER&gt; Outputs 'You' if Observer=Target, otherwise
'Him'/'Her'.<br>
&lt;T-NAME&gt; Outputs 'You' if Observer=Target, otherwise the
Name.<br>
&lt;T-NAMESELF&gt; Outputs 'Yourself' if Observer=Target,
otherwise the
Name<br>
&lt;T-HE-SHE&gt; Outputs 'You' if Observer=Target, otherwise
'He'/'She'<br>
&lt;T-SIRMADAM&gt; Outputs 'Sir'/'Madam'<br>
&lt;T-IS-ARE&gt; Outputs 'Are' if Observer=Target, otherwise
'Is'.<br>
&lt;T-HAS-HAVE&gt; Outputs 'Have' if Observer=Target, otherwise
'Has'.<br>
&lt;T-YOUPOSS&gt; Outputs 'Your' if Observer=Target, otherwise
the Name
with an '`s'<br>
&lt;T-HIM-HERSELF&gt; Outputs 'Yourself' if Observer=Source,
otherwise
the 'Himself'/'Herself'<br>
&lt;T-HIS-HERSELF&gt; Outputs 'Yourself' if Observer=Source,
otherwise
the 'Hisself'/'Herself'</p>
      <p class="MsoNormal"><a name="polls"><strong><font color="#008000"
 size="5">Polls</font></strong></a></p>
      <p>Polls can be an
entertaining and sometimes amusing way to
measure the thoughts of players. CoffeeMud supports single-selection
voting among options which you can designate. Polls are created with
the CREATE command, reviewed with the LIST command, modified with the
MODIFY command, removed with the DELETE command, and participated
during the login process and/or via the use of the POLL command.</p>
      <p><strong>CREATE
POLL</strong></p>
      <p>This command will create
a new blank poll. When a poll is
created or modified, you are presented with a list of properties to
fill in. Pressing enter will leave the property unchanged. The
properties include:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Name</em></td>
            <td>the internal name
of the poll. This is just to tell
them apart when LISTing your polls.</td>
          </tr>
          <tr>
            <td><em>Introduction</em></td>
            <td>the text that is
displayed to the user when they
participate in the poll.</td>
          </tr>
          <tr>
            <td><em>Results
Header</em></td>
            <td>a short line of
text to designate the results for the
poll.</td>
          </tr>
          <tr>
            <td><em>Qual
Mask</em></td>
            <td>a mask to limit
the participants in your poll. Enter
HELP ZAPPERMASKS for information on masking your poll participants.</td>
          </tr>
          <tr>
            <td><em>Poll
Active</em></td>
            <td>whether the poll
is presently available for
participation, or is closed to participation. This flag is
automatically set to false if an expiration date (below) is used and
passes. Normally a poll must be made inactive before results can be
viewed.</td>
          </tr>
          <tr>
            <td><em>Preview
Results</em></td>
            <td>whether the
participant can see the results immediately
after voting, or must wait until the poll is made inactive.</td>
          </tr>
          <tr>
            <td><em>Allow
Abstentions</em></td>
            <td>whether
participants can abstain from selecting one of
your options by choosing not to vote.</td>
          </tr>
          <tr>
            <td><em>Use
IP Addresses/Account</em></td>
            <td>whether a single
ip address or account can designate a vote. Helps
prevent multi-playing users from getting multiple votes.</td>
          </tr>
          <tr>
            <td><em>Hide
Results</em></td>
            <td>whether anyone
other than Archons or those with the
POLLS security flag can ever view the results of this poll.</td>
          </tr>
          <tr>
            <td><em>POLL
CMD Only</em></td>
            <td>whereas normally
one can participate in a poll either
at login, or via the POLL command, this flag will make it so that the
POLL command must be used.</td>
          </tr>
          <tr>
            <td><em>Expiration
Date</em></td>
            <td>optional field
designating the date/time when the poll
will be automatically set to inactive. If this field is empty or NA,
the poll must be made manually inactive using the MODIFY POLL command.</td>
          </tr>
          <tr>
            <td><em>New
Vote Options</em></td>
            <td>the list of
options the participants may choose between.</td>
          </tr>
        </tbody>
      </table>
      <p class="MsoNormal"><a name="clans"><strong><font color="#008000"
 size="5">Clans</font></strong></a></p>
      <p>Clans serve many purposes
in the CoffeeMud engine. They
provide a way for multiple players to own property, conquer areas, and
exert control. They also provide a means of expressing politics between
themselves and other groups, or even with each other. Clans can allow
ranking players to order each other around, to create special magical
items, to keep a collective treasury, to collect taxes from other
players, and to override normal PK (playerkill) settings. Clans can be
tyrannical, run by a select few, run by elected members, or run
collectively. Clans can even be used as an alternative means of
learning new Classes. </p>
      <p>Players may belong, by
default, to a single clan from each
clan
category (which are inherited from their government by default).
Since (again, by default) there is only one category, players can
only belong to one clan. All of this can be changed of course,
starting with the numeric requirements defined by the MAXCLANCATS
setting. </p>
      <p>By default, clans can be
created and managed entirely by
players. This ability can be removed by disabling the several clan
creation and management commands from the coffeemud.ini file using the
DISABLE= field. Regardless, there is also an Archon mechanism for
creating and managing clans.</p>
      <p><strong>CREATE
CLAN &lt;clanname&gt;</strong></p>
      <p>This command will create
a clan with the given name. You can
then enter the following commands at any time:<br>
      </p>
      <p><strong>DESTROY
CLAN &lt;clanname&gt;</strong></p>
      <p><strong>MODIFY
CLAN &lt;clanname&gt;</strong></p>
      <p>When a clan modified, you
are presented with a list of
properties to fill in. Pressing enter will leave the property
unchanged. The properties include:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Name</em></td>
            <td>the name of the
clan can never be changed. It can only be destroyed. Name your clans
carefully!<br>
            </td>
          </tr>
          <tr>
            <td><em>Government
Type</em></td>
            <td>how the players
rule the clan -- as a tyranny (Clan), a oligarchy (Guild), a republic
(Union), a family, a theocracy, or a democracy (Fellowship)<br>
            </td>
          </tr>
          <tr>
            <td><em>Category</em></td>
            <td>places this clan
in a named category, which can be used to membership. Normally derived
from the government type.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Premise</em><br>
            </td>
            <td>a description of
the clan for all to read</td>
          </tr>
          <tr>
            <td><em>Min
Members</em></td>
            <td>if set, overrides
the minimum members from the government settings. Setting to 0 will
make the clan immortal.</td>
          </tr>
          <tr>
            <td><em>Clan
Experience</em><br>
            </td>
            <td>the number of
experience points the clan has earned, usually through taxation<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Tax rate</em></td>
            <td>the clan
experience tax rate, normally set by players</td>
          </tr>
          <tr>
            <td><em>Morgue
RoomID</em><br>
            </td>
            <td>the room ID of the
room where the bodies of the members of the clan appear when they die.
This room must be properly owned by the Clan using a property like
Prop_RoomForSale.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Home RoomID</em></td>
            <td>the room ID of the
room where the members of the clan appear when they cast Clan Home
spell. This room must be properly owned by the Clan using a property
like Prop_RoomForSale.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Donation RoomID</em><br>
            </td>
            <td>the room ID of the
room where items appear when a member of the clan casts the Clan Donate
spell. This room must be properly owned by the Clan using a property
like Prop_RoomForSale.</td>
          </tr>
          <tr>
            <td><em>Clan
Qualifications</em><br>
            </td>
            <td>this is a mask
describing what sort of people are allowed to apply and join the clan
using the CLANAPPLY command. The mask is a standard CoffeeMud
ZapperMask. You can use ? for a description at the prompt.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Auto-Class</em><br>
            </td>
            <td>the name of a
character class which all players who join the clan also gain for free.
Normally not used, this field can be filled in when the Archon wishes
to have clan based classes.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Auto-Role</em><br>
            </td>
            <td>the role
(rank/position) of the player who enters the CLANAPPLY command.
Normally this is set to Applicant, meaning that the clan must approve
all new members. Setting this value to something else can override that
behavior.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Status</em><br>
            </td>
            <td>depending upon
your coffeemud.ini settings, clans can be in a state of pending
(awaiting a sufficient number of players to become active), a state of
Active, or a state of Fading (because an insufficient number of members
has logged in lately, again settable in the coffeemud.ini file). This
state is changed automatically by CoffeeMud, but can be altered here.<br>
            </td>
          </tr>
          <tr>
            <td><em>Rivalrous
Clan</em></td>
            <td>True if the clan
can rival other clans, False otherwise. Normally derived from the
government type.</td>
          </tr>
          <tr>
            <td><em>Clan
Members</em></td>
            <td>the list of all
current members and their position/rank/role within the clan. This list
can be altered manually here.</td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
      <p class="MsoNormal"><a name="governments"><strong><font
 color="#008000" size="5">Clan Governments</font></strong></a></p>
      <p>You might want to read
the previous section on Clans before
proceeding.</p>
      <p>Clan governments provide
a
basic structure to clans, and serve a purpose similar to the one
Character Classes do for players. However, as clans are social
arrangements, most aspects of governments deal with the structuring of
these arrangements. </p>
      <p>By default, all
governments belong to a "blank" category, which
means that all governments are available for players to create clans
out of. Governments with other categories are available to players
as governed by the PUBLICCLANCATS setting. </p>
      <p>By default, clan
governments are defined in your resources
directory in the file clangovernments.xml. The Archon commands
available serve to modify this file.</p>
      <p><strong>CREATE
GOVERNMENT &lt;clangovtname&gt;</strong></p>
      <p>This command will create
a new government with the given name. You can
then enter the following commands at any time:<br>
      </p>
      <p><strong>DESTROY
GOVERNMENT &lt;clangovtname&gt;</strong></p>
      <p><strong>MODIFY
GOVERNMENT &lt;clangovtname&gt;</strong></p>
      <p>When a government is
modified, you are presented with a list of
properties to fill in. Pressing enter will leave the property
unchanged. The properties include:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Type
Name</em></td>
            <td>the simple
friendly name of this government<br>
            </td>
          </tr>
          <tr>
            <td><em>Category</em></td>
            <td>places this
government in a named category, which can be used to govern clan types.
Can also be overridden at the clan level.<br>
            </td>
          </tr>
          <tr>
            <td><em>Short
Desc</em></td>
            <td>6-10 word
description shown during clan creation<br>
            </td>
          </tr>
          <tr>
            <td><em>Long
Desc</em></td>
            <td>longer form
description shown in the help system<br>
            </td>
          </tr>
          <tr>
            <td><em>Is
Public</em></td>
            <td>true if clans of
this type are listed publicly<br>
            </td>
          </tr>
          <tr>
            <td><em>Is
Family</em></td>
            <td>true if only
family of existing members can join<br>
            </td>
          </tr>
          <tr>
            <td><em>Is
Rivalrous</em></td>
            <td>true if clans of
this government type can rival other clans, false otherwise. Can also
be manually set at the clan level.</td>
          </tr>
          <tr>
            <td><em>Minimum
Members</em></td>
            <td>if set, overrides
the minimum members in coffeemud.ini. Setting to 0 will also make the
clan immortal.<br>
            </td>
          </tr>
          <tr>
          </tr>
          <tr>
            <td><em>XP/Level
Formula</em></td>
            <td>formula for xp
required for clan to gain a level. Empty = (500 * @x1) + (1000 * @x1 *
@x1 * @x1) where @x1 is current level<br>
            </td>
          </tr>
          <tr>
            <td><em>Conquest
Enabled</em></td>
            <td>true if clans of
this type can conquer areas<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Item Loyalty</em></td>
            <td>true if clan items
are used to gain loyalty in conquered areas<br>
            </td>
          </tr>
          <tr>
            <td><em>Conquest
by Worship</em></td>
            <td>true if conquest
is obtained through deity conversion<br>
            </td>
          </tr>
          <tr>
            <td><em>Vote
Approved</em></td>
            <td>list of clan
functions that require a vote to occur<br>
            </td>
          </tr>
          <tr>
            <td><em>Auto-Promotion</em></td>
            <td>automatic
promotion policy, by rank, by char level, and whether an
existing leader can be replaced<br>
            </td>
          </tr>
          <tr>
            <td><em>Apply
Position</em></td>
            <td>the position users
receive when they apply for membership<br>
            </td>
          </tr>
          <tr>
            <td><em>Accept
Position</em></td>
            <td>the position users
receive when they are CLANACCEPted. If this
is the same as the Apply Position, CLANACCEPT and CLANREJECT are
disabled.<br>
            </td>
          </tr>
          <tr>
            <td><em>Entry
Script</em></td>
            <td>scriptable script
ran when a member is Accepted. Will execute ONCE_PROG. The
CLANDATA function will respond to Government Category as the clan ID.<br>
            </td>
          </tr>
          <tr>
            <td><em>Exit
Script</em></td>
            <td>scriptable script
ran when a member is Exiled or Retired. Will execute ONCE_PROG. The
CLANDATA function will respond to Government Category as the clan ID.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Char Abilities</em></td>
            <td>abilities
granted
or made available to clan members who have privileges, based
on the clan level. &nbsp;For each ability, specify the default
proficiency, whether it is gained or qualified for, abiity parameters,
and an optional comma-delimited list of government position role ids
limiting who has access to this ability.<br>
            </td>
          </tr>
          <tr>
            <td><em>Clan
Char Effects</em></td>
            <td>auto-effects
imposed on clan members who have privileges, based
on the clan level. For each effect, specify effect parameters, and an
optional comma-delimited
list of government position role ids limiting who has access to this
effect. </td>
          </tr>
        </tbody>
      </table>
      <p><strong><em>Positions</em></strong>
constitute the ranks, roles, or positions within this clan. These also
have their own fields, enumerated below:</p>
      <br>
      <table style="width: 100%;" bgcolor="#ddd800" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Simple
Role
ID</em></td>
            <td>a simple
identifier for this role type, should be all uppercase without spaces<br>
            </td>
          </tr>
          <tr>
            <td><em>Name</em></td>
            <td>the singular
display name of this position<br>
            </td>
          </tr>
          <tr>
            <td><em>Name
(Plural)</em></td>
            <td>the plural display
name of this position<br>
            </td>
          </tr>
          <tr>
            <td><em>Maximum</em></td>
            <td>the maximum number
of characters that can hold this role per clan<br>
            </td>
          </tr>
          <tr>
            <td><em>Is
Shown</em></td>
            <td>true if this
position can be seen by the public, false for only by members<br>
            </td>
          </tr>
          <tr>
            <td><em>Powers</em></td>
            <td>list of clan
functions that this role can always perform, without a vote<br>
            </td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
      <p class="MsoNormal"><a name="achievements"><strong><font
 color="#008000" size="5">Achievements</font></strong></a></p>
      <p>Achievements are things that players can do for the bragging
rights, for some small reward, or for a Title. &nbsp;Things like
completing so many quests, training their stats up to unheard-of
levels, exploring most of the world, or killing so many worms can all
be considered achievements.</p>
      <p>The engine will track achievement progress as the player
plays. &nbsp;In some cases, the engine will notice achievement
immediately, while in most cases, the engine will not notice until a
periodic sweep is done every hour or so to check for achievement
progress and status. &nbsp;</p>
      <p>When a player completes an achievement, the fact of that
completion is recorded as a Tattoo on the players record. For this
reason, each achievement defined must have a unique Tattoo name. You
can see the achievement tattoo when you modify the player, and can even
add or remove them that way. &nbsp;</p>
      <p>Achievements come in several different Event types, which
describe the general nature of the achievement and how it is attained.
&nbsp;These types are as follows:</p>
      <table style="width: 100%;" bgcolor="#ddd800" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Event Type</strong></td>
            <td width="75%"><strong>Completion Description</strong></td>
          </tr>
          <tr>
            <td><em>KILLS</em></td>
            <td>the player kills a certain number of mobs matched by a
Zappermask<br>
            </td>
          </tr>
          <tr>
            <td><em>STATVALUE</em></td>
            <td>player stat/numeric value goes above (or below) a
specific value<br>
            </td>
          </tr>
          <tr>
            <td><em>FACTION</em></td>
            <td>particular player faction value goes above (or below) a
specific value<br>
            </td>
          </tr>
          <tr>
            <td><em>EXPLORE</em></td>
            <td>the player explores a specific percent of a particular
area (or the world)<br>
            </td>
          </tr>
          <tr>
            <td><em>CRAFTING</em></td>
            <td>a particular number of items are crafted with a
particular set of crafting skills<br>
            </td>
          </tr>
          <tr>
            <td><em>MENDER</em></td>
            <td>a particular number of items are mended with a
particular set of crafting skills<br>
            </td>
          </tr>
          <tr>
            <td>SKILLUSE</td>
            <td>a particular number of skills/spells of a particular
name or type are used</td>
          </tr>
          <tr>
            <td>QUESTOR</td>
            <td>a particular number of quests whose name match a mask
are completed</td>
          </tr>
          <tr>
            <td>ACHIEVER</td>
            <td>a specific set of OTHER achievements are completed</td>
          </tr>
          <tr>
            <td>ROOMENTER</td>
            <td>a specific room or set of rooms is entered by the
player for the first time</td>
          </tr>
          <tr>
            <td>LEVELSGAINED</td>
            <td>a particular number of levels gained (or regained)
&nbsp;to complete</td>
          </tr>
          <tr>
            <td>TIMEPLAYED</td>
            <td>a particular number of seconds played</td>
          </tr>
          <tr>
            <td>JUSTBE</td>
            <td>the player being in a particular state</td>
          </tr>
          <tr>
            <td>DEATHS</td>
            <td>the player is killed a certain number of times by
Zappermaked mobs</td>
          </tr>
          <tr>
            <td>RETIRE</td>
            <td>triggered whenever the player uses the RETIRE command</td>
          </tr>
          <tr>
            <td>REMORT</td>
            <td>triggered whenever the player uses the REMORT command</td>
          </tr>
          <tr>
            <td>GOTITEM</td>
            <td>triggered whwnever the player gets a particular item</td>
          </tr>
        </tbody>
      </table>
      <br>
      <p>Achievements are defined in your resources
directory in the file achievements.ini. The Archon commands
available serve to modify this file.</p>
      <p><strong>CREATE ACHIEVEMENT &lt;unique_tattoo_name&gt;</strong></p>
      <p>This command will create
a new achievement tracked by the given tattoo name. You can
then enter the following commands at any time:<br>
      </p>
      <p><strong>DESTROY&nbsp;</strong><strong>ACHIEVEMENT</strong><strong>
&lt;</strong><strong>tattoo_name</strong><strong>&gt;</strong></p>
      <p><strong>MODIFY&nbsp;</strong><strong>ACHIEVEMENT</strong><strong>
&lt;</strong><strong>tattoo_name</strong><strong>&gt;</strong></p>
      <p>When a&nbsp;achievement is
modified, you are presented with a list of
properties to fill in. Pressing enter will leave the property
unchanged. The properties include:</p>
      <table style="width: 100%;" bgcolor="yellow" border="1"
 cellpadding="1" cellspacing="1" width="100%">
        <tbody>
          <tr>
            <td width="25%"><strong>Property</strong></td>
            <td width="75%"><strong>Description</strong></td>
          </tr>
          <tr>
            <td><em>Event Type&nbsp;</em></td>
            <td>the type of event to complete or make progress in the
achievement<br>
            </td>
          </tr>
          <tr>
            <td><em>Display Desc</em></td>
            <td>the friendly name/description of the achievement, which
should also tell the player what they must do to complete it.
&nbsp;Something like "Kill 100 Orcs"<br>
            </td>
          </tr>
          <tr>
            <td><em>Title Award</em></td>
            <td>a player Title granted when the achievement is
completed. &nbsp;This is optional. &nbsp;Like all titles, you can use
can use a * character in the string where the players name would go.<br>
            </td>
          </tr>
          <tr>
            <td><em>Reward List</em></td>
            <td>an optional list of other awards, separated by
&gt;spaces&lt;.&nbsp;&nbsp; On rewards for PLAYER achievements, rewards
go only to the player.&nbsp; For rewards on an ACCOUNT achievement,
rewards go to all new players or children. Each entry is an amount
followed by a space, and an award type.&nbsp; The following are valid
reward types:<br>
* amount of XP experience. Example: 10 XP<br>
* amount of QP quest points. Example: 1 QP<br>
* amount of currency. Example: 10 \"gold coins\"<br>
* amount to add to a stat (see EVENT="STATVALUE" below).&nbsp; Example:
2 MAXSTRENGTH<br>
&nbsp;&nbsp; Additionally are stats like: BONUSCOMMON, BONUSCRAFT,
BONUSNONCRAFT, BONUSCHARONLINE <br>
&nbsp;&nbsp; BONUSLANGS, BONUSCHARSTATS, BONUSCHARLIMIT, or you can
prepend the word account<br>
&nbsp;&nbsp; for these additional stats, like: \"ACCOUNT BONUSCOMMON\",
etc..<br>
* level followed by an ability id to grant a skill. The ability ID can
optionally<br>
&nbsp;&nbsp; have parameters in parenthesis in key=value value
form.&nbsp; Keys include AUTOGAIN,<br>
&nbsp;&nbsp; MASK, PARMS, PREREQS.<br>
&nbsp;&nbsp; Example: 17 Spell_Light<br>
&nbsp;&nbsp; Example: 21 \"Spell_Light(autogain=false mask=\\\"-class
\\\\\"+fighter\\\\\"\\\")\" <br>
* level followed by a full expertise id, which is an expertise id
followed by<br>
&nbsp;&nbsp; the expertise level number.&nbsp; This can also optionally
be followed by parenthesis <br>
&nbsp;&nbsp; with key=value parameters in them.&nbsp; Keys include
AUTOGAIN only.<br>
&nbsp;&nbsp; Example: 7 VEXING1<br>
&nbsp;&nbsp; Example: 12 VEXING1(autogain=false)<br>
Note the spaces and use of quotes!<br>
            </td>
          </tr>
          <tr>
            <td><em>* NUM</em></td>
            <td>some achievement event types require that you specify
how many of something, whether kills, or castings, or items crafted, or
levels gained, or
quests, or whatever, are required to complete the achievement.<br>
            </td>
          </tr>
          <tr>
            <td><em>* VALUE</em></td>
            <td>some achievements event types require that you specify
the value of something, such as a stat value or a faction value,
required to complete the achievement.<br>
            </td>
          </tr>
          <tr>
            <td><em>* PERCENT</em></td>
            <td>the Explore event type achievmenent requires a
percentage (0-100) of an area or the world which must be explored to
complete the achievement.</td>
          </tr>
          <tr>
            <td><em>* ZAPPERMASK</em></td>
            <td>the Kills and Deaths event type
achievements&nbsp;allows a zappermask
to specify what kind of creatures must be killed (or are the killer) to
make progress in
the achievement. &nbsp;See HELP ZAPPERMASK for more information.<br>
            </td>
          </tr>
          <tr>
          </tr>
          <tr>
            <td><em>* ABOVEBELOW</em></td>
            <td>some achievement event types allow you to specify
whether the player stat or faction must be above or below the Value to
complete the achievement. &nbsp;Valid values here include ABOVE or
BELOW.<br>
            </td>
          </tr>
          <tr>
            <td><em>* STAT</em></td>
            <td>the Statvalue event type achievement requires the name
of a stat to check to complete the achievement. &nbsp;Stats include
things like: CURRENT STRENGTH, MAXSTRENGTH, WEIGHT, CURRENT ARMOR,
MANA, CURRENT MANA, QUESTPOINTS, etc. As you can see, stats that have a
base (unmodified) value&nbsp; are entered simply, where the modified
score is accessed by prefixing with&nbsp;CURRENT. &nbsp;There are
simply too many different kinds of stats to list here. &nbsp;Here's a
useful list of stats: LEVEL, ARMOR, DAMAGE, ATTACK, WEIGHT, HEIGHT,
STRENGTH, INTELLIGENCE, DEXTERITY, CONSTITUTION, CHARISMA, WISDOM,
MAXSTRENGTH, MAXINTELLIGENCE, MAXDEXTERITY, MAXCONSTITUTION,
MAXCHARISMA, MAXWISDOM, AGE, HITS, MANA,
&nbsp;MOVE, HUNGER, THIRST, FATIGUE, LEVEL, USES, SPEED, MONEY,
QUESTPOINTS, FOLLOWERS, QUESTPOINTS, FOLLOWERS, TRAINS, PRACTICES<br>
            </td>
          </tr>
          <tr>
            <td><em>* ID</em></td>
            <td>the Faction event type achievement requires the Faction
ID of the faction to check to complete the achievement. &nbsp;See
factions for more information on faction IDs.<br>
            </td>
          </tr>
          <tr>
            <td><em>* AREA</em></td>
            <td>the Explore event type achievement requires either the
name of one of your areas or the word WORLD (case sensitive) for the
entire world. &nbsp;<br>
            </td>
          </tr>
          <tr>
            <td><em>* ABILITYID</em></td>
            <td>several achievement event types require the AbilityID
of one or more skills, but this can also include skill types such as
SPELL, PRAYER, etc, or even skill domains, such as ILLUSION, STEALTHY,
etc. &nbsp;When more than one thing is specified, the list is COMMA
delimited. &nbsp;A value of * may be given to specify ALL skills.<br>
            </td>
          </tr>
          <tr>
            <td>* ITEMMASK</td>
            <td>the
gotitem achievment uses this required mask to identify which item will
trigger completion of the achievement. &nbsp;See help on ZAPPERMASK for
more information.</td>
          </tr>
          <tr>
            <td><em>* PLAYERMASK</em></td>
            <td>several achievement event types have an optional
player Zappermask that the player themselves must match before progress
can be made in the achievement. &nbsp;This can be left blank to permit
all players. &nbsp;It is useful for check area information, or the
players class, or group size,&nbsp;for
example. &nbsp;See help on ZAPPERMASK for more information.<br>
            </td>
          </tr>
          <tr>
            <td><em>* QUESTMASK</em></td>
            <td>the Questor event type achievement also has an optional
Quest Name regular expression mask that the Quest must match before
progress can be made in the achievement. &nbsp;See help on Java Regular
Expressions for such a format. &nbsp;This can be left blank to permit
all Quests.<br>
            </td>
          </tr>
          <tr>
            <td><em>* ACHIEVEMENTLIST</em></td>
            <td>the Achiever event type achievment has a required
comma-delimited list of other achievement tattoos to specify which
other achievements must be completed before This achievement is
completed.<br>
            </td>
          </tr>
          <tr>
            <td><em>* ROOMID</em></td>
            <td>the Roomenter event type achievement has a required
comma-delimited list of Room IDs to specify which rooms must be entered
by the player at least once before the achievement is completed.<br>
            </td>
          </tr>
          <tr>
            <td><em>* SECONDS</em></td>
            <td>the
Timeplayed event type achievement requires the number of real-life
seconds which must be accumulated in order to complete this achievement.</td>
          </tr>
        </tbody>
      </table>
      <strong><em></em></strong><br>
      </td>
    </tr>
  </tbody>
</table>
</center>
</body>
</html>