<!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. Poke around long enough, however, and you'll find one special VFS directory (/resources/catalog/...). This directory is created by the system to house read-only versions of the items and mobs in your Catalog system as xml (*.cmare) files. These files and directories may not be modified or deleted, as they are only a mirror of the catalog. 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 bestow 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. This is only used when <span style="font-style: italic;">Can Affect</span> is set properly.</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 <ability id>. 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 <S-NAME> as a substitute for the invoker, and <T-NAME> 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 <S-NAME> as a substitute for the invoker, and <T-NAME> 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 <S-NAME> as a substitute for the invoker, and <T-NAME> 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 <S-NAME> as a substitute for the invoker, and <T-NAME> as a substitute for the name of the target.</td> </tr> <tr><td><span style="font-style: italic;">Uninvoke Message</span></td><td>the message shown after this skill is uninvoked. If the target is a mob, or an item held by a mob, then the message will be seen only by the mob. If the target is an item in a room, then the whole room will see the message.</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;">Quiet effect ID</span></td><td>an optional skill/spell/property id which will be grafted onto this ability when the target of this ability is under the effects of this one. For example, a quiet effect of Spell_Blur would cause your new ability to behave as if Spell_Blur were affecting them.</td></tr><tr> <td><span style="font-style: italic;">Public Effects</span></td> <td>an optional semicolon delimited list of miscellaneous skills/spells/properties which the target of this skill will be placed under for the duration of the affect. 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 miscellanous skills or spells which will be invoked upon the target of this skill after all of the other above things have occurred. 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. The syntax of this field is a formula. Use +-*/()?. @x1=caster level, @x2=target level. Formula evaluates >0 for damage, <0 for healing. Requires Can Target above! 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 <ABILITY>, 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. 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. 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. 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. Since most english words are under 10 letters, you would normally not need more than 10 word lists. 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. 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 <ABILITY>, 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. These are skills like Cobbling, Carpentry, Weaponsmithing, etc. </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. 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. 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. 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 <ABILITY>, 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. Components are required only at the time the skill or spell in invoked, and may be consumed or not by the invocation. 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. Use can use LIST ABILITIES to see all the ability ids in your mud. </p> <p>Either way, you are then presented with a wizard menu for each required component in the invocation. 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. The first menu is a list of each component, whether it is one of many requred, or just an optional component. To edit one, enter its number. To add a new one, enter the highest number shown. 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. If it is ALSO required in addition to the ones before it, set this to say AND. If it is an OPTION along with the ones before it, set it to say OR. 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. 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. This value will be consumed if it 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. 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><span style="font-style: italic;">Component Sub-Type</span></td> <td>normally blank, this is a sub-type string for the type of required material or resource item. </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. They are divided into two catagories: skills that are qualified by All classes, and skills that are qualified by Each and Every class. 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. 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 all-qualify entries by using the MODIFY command:</p> <p><b>MODIFY </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 all-qualify entries for. Use can use LIST ABILITIES to see all the ability ids in your mud, or LIST ALLQUALIFYS to view the existing entries. </p> <p>Either way, you are then presented with a wizard menu :</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. 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. You can also specify a minimum proficiency to gain the skill. 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 </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. 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. 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. The columns will differ from skill to skill, and are probably hard to read in 80 columns. Entering a number next to one of the columns will give you a menu for each of those confusing columns. 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><br> </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. 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. 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. 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), subtype (nromally blank), and 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..). </td> </tr> <tr> <td>Container Type or LidLock</td> <td>Con.</td> <td>container type: (liquid, coins, swod, daggers, scrolls, keys, etc, etc..). 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. A parameter that equals, exactly '__DELETE__' will remove an existing effect instead of adding it.</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><tr><td>Key/Value Parms</td><td>Keys</td><td>optional key="value" key="value" parameters. Use LIST STAT for keys.</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. See help on math formula. 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, @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. See help on math formula. Variables are: @x1: Players current class level, @x2: Players adjusted Wisdom, @x3: Players Max adjusted Wisdom, @x4: Players adjusted Intelligence, @x5: Players Max adjusted Intelligence, @x6: Players adjusted Attack Attr, @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. See help on math formula. 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, @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 > +2000000000 (two billion) to disable those. Fatigue < -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. 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.<charclassname> 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.<charclassname> 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. 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><span style="font-weight: bold;">Introduction:</span><br> <br> 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. </p> <p><span style="font-weight: bold;">AutoReaction Factions:</span><br> <br> 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. In addition to the default alignment system, and the optional inclination system, there is also a mob reaction system controlled in the coffeemud.ini file under the AUTOREACTION entry. This system 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. </p> <p>With this system, killing the mobs will cause faction values to go down, making the mobs more likely to mistreat the player. On the other hand, doing things like chatting with the mobs, just hanging around their area, or even bribing them will make them happier. </p> <p>The default settings for the three reaction systems is found int the resources/examples directory as areareaction.ini, racereaction.ini, and namereaction.ini. 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_<racename>.ini, area_<areaname>.ini, or name_<mobname>.ini with your designed faction definition. You must replace any spaces with underscore _ characters. If these files do not exist, the default configuration mentioned previously will be used for all areas, races, or mobs.</p> <p><span style="font-weight: bold;">Faction Engine:</span><br> <br> 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><span style="font-weight: bold;">Faction Ranges:</span></p> <p>A range 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. For example, if a faction ranges from absolute evil (-10000) to pure good (10000), then a range might be neutral (-1000 to 1000) and somewhat evil might be (-5000 to -1000). Such are ranges.</p> <p>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. </p> <p>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><strong>Change Triggers:</strong></p> <p>Another important aspect are the range <strong style="font-weight: normal;">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.</p> <p>A change triggers is triggered according to a specific action, and then is 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. </p> <p>Each change trigger includes: </p> <ol> <li>What triggers the change (the Trigger),</li> <li>Change trigger arguments that are different for every trigger</li> <li>Whether value is gained or lost in the faction when the trigger occurs (the Direction),</li> <li>What percentage of the amount of change (after all other modifiers) is applied to the value (the Amount Factor),</li> <li>Several miscellanous flags to define the circumstances under which the trigger is applied (the Flags)</li> <li>A Zapper mask to determine what criteria the target of the Trigger must meet for this trigger to apply. </li> </ol> <p>The valid Triggers, and their parameters, if any, include: </p> <ul> <li>Murder, which is triggered when the holder of this faction dies.</li> <li>Kill, which is triggered when the holder of this faction kills another.</li> <li>Time, which is a change that occurs every 40 seconds or so.</li> <ul> <li>A trigger parameter of ROUNDS=x can be used to change the amount of time to x ticks</li> </ul> <li>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. </li> <li>Bribe, when someone with this faction gives money to another. </li> <ul> <li>A trigger parameter of PCT=x to require x% of the receivers money be given to trigger.</li> <li>A trigger parameter of AMOUNT=x to require at least x money to be given.<br> </li> </ul> <li>Talk, which is when someone with this faction speaks to another. </li> <ul> <li>A trigger parameter of REGEX=x where x is a regular expression of whats said</li> <li>A trigger parameter of WAIT=[TICKS] to prevent spamming.</li> </ul> <li>MudChat, which is when someone with this faction converses with a mudchat mob. This refers to the MudChat behavior</li> <li>Arrested, which is when someone with this faction is arrested by a legal mob.</li> <li>Social, when someone with this faction does a social, like hug or eyebrow, to another. </li> <ul> <li>A trigger parameter of ID = the Social ID, like HUG, or EYEBROW, or SMILE</li> <li>A trigger parameter of ID=ALL</li> <li>A trigger parameter of WAIT=[TICKS] to prevent spamming.</li> </ul> <li>An Ability ID, which is the ID of a skill, spell, or similar ability that triggers the event. Ability IDs can be seen by entering from the command line: list skills, list spells, etc..</li> <li>An Ability Type, which is the name of a type of an ability (SPELL, PRAYER, SKILLS, SONG, CHANT, COMMON SKILL, THIEF SKILL, etc..) that triggers the event.</li> <li>An Ability Domain, which is the name of a spell domain (ILLUSION, TRANSMUTATION, INVOCATION / EVOCATION, DIVINATION, etc...) that triggers the event.</li> <li>An Ability Flag, which is the name of one of the ability flags defined in the coffeemud source code in interfaces/Ability.java. HEALING, for instance, if you want ANY healing abilities to initiate this change.</li> </ul> *All* of the above change triggers, even those triggers without trigger parameters, can have the following Trigger Parameters specified: <ul> <li>CHANCE=x to set a percent chance of triggering x, which, of course, is 100% by default</li> <li>MASK=x to set a zapper mask to filter on event source mobs instead of the target, which is handled by the main mask below.</li> </ul> <p>Valid Change Directions include: </p> <ul> <li>Up</li> <li>Down</li> <li>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)</li> <li>Minimum (automatically gains minimum value)</li> <li>Maximum (automatically gains maximum value)</li> <li>Add (gains the faction if they don't have it -- useful with the Add Outsider trigger)</li> <li>Away (gain if monsters value for this faction is lower, lose if higher)</li> <li>Towards (gain if monsters value for this faction is higher, lose if lower). </li> <li>Remove (automatically remove all faction)</li> </ul> <p>Valid Change Flags include: </p> <ul> <li>OUTSIDER, which allows the trigger to apply even if the target of the trigger (not the source) does not have standing in this faction</li> <li>SELFOK, which allows the trigger to apply even when the source or target are the same person</li> <li>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. </li> <li>XP=x to automtically give x experience points to the source of the event, modified by the level of the target, when the event is triggered.</li> <li>RPXP=x to automtically give x roleplaying experience points to the source of the event when the event is triggered.</li> </ul> <p>Change triggers also include a target Mask, which is a zapper mask that the target of an event must pass to allow the event. If the target of an event (such as the target killed, or the bribed) does not match this mask, the change is not processed.</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, no one 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. Parameters for the specified Ability/Behavior may also be entered. This is terribly useful to allow mobs with a particular faction to turn nasty when they meet someone else. For example, if you have a 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. 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> <quest name> 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. 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. This is a required command! See also SET EXPIRATION.<br> </p> <p><span style="color: rgb(51, 102, 102);">SET EXPIRATION</span> <span style="color: rgb(102, 51, 102);">[#TICKS/TIME]</span>- Either a number of ticks (4 second periods) the quest will exist once started, or a formula, or a number followed by the word minutes, seconds, hours, days, mudhours, or muddays. Once the quest has been running for the expiration time, it will be removed from the list of available quests permanently. Use a simple value of 0, which is default, will make your quest persistant.<br> </p> <span style="color: rgb(51, 102, 102);"></span><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 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. The full wait time between quest starts is WAIT + (random number between 1 and INTERVAL). 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> - 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 starting the scheduled quest. This works in conjucton with SET WAIT. The full wait time between quest starts is WAIT + (random number between 1 and INTERVAL). 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>- a quest with a scheduled WAIT/INTERVAL time will attempt to start after the interval completes. 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. 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 <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. 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. 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. 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. 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. The area name ALL may be given to select all world areas. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Note: mobs, items, rooms, etc that are Cloaked (see the QuestBound property) are never ever selected with any SET 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. 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. 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. 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. 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);"><SCRIPT></span> - This designates the beginning of embedded Javascript in your quest script. The end is designated by a corresponding </SCRIPT> 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);"><OPTION> <span style="color: rgb(102, 51, 102);">([QUEST SCRIPT COMMANDS]) <span style="color: rgb(51, 102, 102);"></OPTION></span></span></span>- Putting quest script commands inside of <OPTION> tags means that, for every execution of the quest script, only ONE of the <OPTION> tags will be have their script commands executed. The one chosen will be selected at random. If only one <OPTION> 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), '&' 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 <SCRIPT> and </SCRIPT> 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, or use the Quest Maker to generate a quest to study. Lastly, check out the Random Areas Guide for information on Random Quest generation. And lastly, remember that quest script errors are always sent out to your mud.log, so check there 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 <name> to change the settings for a holiday, DESTROY HOLIDAY <name> 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;">CREATING</font></strong><strong><font style="background-color: moccasin;"> THE TWIGGLE </font></strong><strong><font style="background-color: moccasin;">SOCIAL</font></strong></p> <p><strong></strong>From the command line, enter the command:</p> <p style="font-weight: bold;">CREATE SOCIAL TWIGGLE</p> <p> 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, TWIGGLE with a custom target, TWIGGLE (to a target), and TWIGGLE to a target with an argument. </p> <p>We'll start with the first type:.<br> <br> <em>You wave your arms...<br> The social 'TWIGGLE' does not exist. Create it (y/N)? y<br> <br> Select a target:<br> 1) Add a new target<br> <br> Select an option or RETURN: Select an option or RETURN: <br> </em><br> This is where you can start to add new variants of this social. Enter 1 to add a new target type..<br> <br> <em>New target (?): ?<br> Choices: MOBTARGET, ITEMTARGET, INVTARGET, EQUIPTARGET, NONE, ALL, SELF<br> </em><br> This is where you choose the social target type. For type 1 socials, this would be NONE.<br> <br> <em>1. You-see string: 'You twiggle.'.<br> 2. Your action type: MOVEMENT<br> 3. Others-see string: '<S-NAME> twiggles.'.<br> 4. Others Effect type: HANDS<br> 5. Sound file: ''.<br> </em><br> Now you have a menu of the various strings and their messages. Enter 1 and then enter:<br> <br> <strong>You wiggle your toes.</strong><br> </p> <p>After changing the You-see string, enter option 2 to define the action type: <em></em></p> <p><em>2. 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>3. Others-see string: '<S-NAME> twiggles.'.<br> Enter a new value<br> :</em><br> </p> <p>Option 3 from the menu above is what the people in the room see when you perform a social.<br> <br> <strong><S-NAME> wiggles <S-HIS-HER> toes.</strong><br> <br> <S-NAME> 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><span style="font-weight: normal; font-style: italic;">4. Others Effect type=HANDS</span><br style="font-weight: normal; font-style: italic;"> <span style="font-weight: normal; font-style: italic;">Change W)ords, M)ovement (w/noise), S)ound, V)isual, H)ands:</span><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 type 1 TWIGGLE social.<br> <br> <strong><font style="background-color: moccasin;">CREATING</font></strong><strong><font style="background-color: moccasin;"> TWIGGLE SELF </font></strong><strong><font style="background-color: moccasin;">SOCIAL</font></strong><br> <br> Ahh. Part 2, the SELF portion. Select the option to enter a new variant /target type.<br> <br> <em>New target (?): ?<br> Choices: MOBTARGET, ITEMTARGET, INVTARGET, EQUIPTARGET, NONE, ALL, SELF<br> </em><em>:<br> </em><br> Because this portion is the SELF portion, choose "<strong>S</strong>ELF".<br> <br> <em>1. You-see string: 'You twiggle yourself.'.<br> 2. Your action type: MAKING NOISE<br> 3. Others-see string: '<S-NAME> twiggles <S-HIM-HERSELF>.'.<br> 4. Others Effect type: HEARING NOISE<br> 5. Sound file: ''.<br> Edit which (or DELETE)?</em></p> <p>Change 1 to change 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> </p> <p>Now select option 2:</p> <p> <em>2. Your action type=MAKING NOISE<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. Now select option 3:<br> <br> <em>3. Others-see string: '<S-NAME> twiggles <S-HIM-HERSELF>.'.<br> Enter a new value<br> :<br> </em><br> What the others in the room see when you perform the social.<br> <br> <strong><S-NAME> wiggles <S-HIS-HER> toes at <S-HIM-HERSELF>. Very odd.<br> </strong><br> <em>4. Others Effect type=HEARING NOISE<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;">CREATING</font></strong><strong><font style="background-color: moccasin;"> TWIGGLE ALL </font></strong><strong><font style="background-color: moccasin;">SOCIAL</font></strong><br> <br> Yay! Type 3! The ALL is the Target Name. Select the option to enter a new variant /target type.<br> <br> <em>New target (?): ?<br> Choices: MOBTARGET, ITEMTARGET, INVTARGET, EQUIPTARGET, NONE, ALL, SELF<br> </em><em>:<br> </em><br> Because this portion is the ALL. portion, enter "ALL".<br> <br> <em>New target (?): ALL<br> 1. You-see string: 'You twiggle everyone.'.<br> 2. Your action type: SPEAKING<br> 3. Others-see string: '<S-NAME> twiggles everyone.'.<br> 4. Others Effect type: HEARING WORDS<br> 5. You-see when no target: 'Twiggle who?'.<br> 6. Sound file: ''.<br> Edit which (or DELETE)? </em> </p> <p>Change 1 to change what you see when you perform the social TWIGGLE ALL.<br> <br> <strong>You wiggle your toes at everyone. How wierd.</strong><br> </p> <p>Now select option 2:</p> <p> <em>2. Your action type=MAKING NOISE<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. Now select option 3:<br> <br> <em>3. Others-see string: '<S-NAME> twiggles <S-HIM-HERSELF>.'.<br> Enter a new value<br> :::<br> </em><br> What the others in the room see when you perform the social.<br> <br> <strong><S-NAME> wiggles <S-HIS-HER> toes at everyone. Very strange.</strong><br> <br> <em>4. Others Effect type=HEARING NOISE<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. Now select option 5:</p> <p><em>5. You-see when no target: 'Twiggle who?'.<br> Enter a new value<br> :<br> </em>This is what you would see if no one is around to appreciate your toe wiggling.<br> <br> <strong>Sorry. They aren't here for that lovely toe wiggle.</strong></p> <p>And that concludes the creation of our type 3 TWIGGLE social.</p> <strong></strong> <p><strong><font style="background-color: moccasin;">CREATING TWIGGLE ELABORATELY </font></strong><strong><font style="background-color: moccasin;">SOCIAL</font></strong><strong><br> </strong></p> <p>Yay! Type 4! We are going to invent our very own custom target for this one, called ELABORATELY.<br> <br> <em>New target (?): ?<br> Choices: MOBTARGET, ITEMTARGET, INVTARGET, EQUIPTARGET, NONE, ALL, SELF<br> </em><em>:<br> </em><br> Because this portion is custom, ignore the list and enter "ELABORATELY".<br> <br> <span style="font-style: italic;">'ELABORATELY' is a non-standard target. Are you sure (y/N)? y<br> 1. You-see string: 'You twiggle elaborately.'.<br> 2. Your action type: MOVEMENT<br> 3. Others-see string: '<S-NAME> twiggles elaborately.'.<br> 4. Others Effect type: HANDS<br> 5. Sound file: ''.<br> Edit which (or DELETE)? </span><em><br> </em><br> It's the ALL portion of social creation, so choose "<strong>A</strong>".<br> <br> <em></em>From here on out, it's the exact same as TWIGGLE SELF, so you can just follow those examples....<br> <br> <strong><font style="background-color: moccasin;">CREATING</font></strong><strong><font style="background-color: moccasin;"> TWIGGLE <T-NAME> </font></strong><strong><font style="background-color: moccasin;">SOCIAL</font></strong><strong><br> <br> </strong>Type 5! The TARGET! <T-NAME> is the Target Name. This is the type that is used when a user selects a visible target in the room for their social. Such as TWIGGLE orc. So! Select the option now to add another variant.<br> <br> <em>New target (?): ?<br> Choices: MOBTARGET, ITEMTARGET, INVTARGET, EQUIPTARGET, NONE, ALL, SELF<br> </em><em>:</em><em><br> </em><br> It's the MOBTARGET portion of social creation, so enter "<strong>MOBTARGET</strong>".<br> <br> <em>New target (?): mobtarget<br> 1. You-see string: 'You twiggle <T-NAME>.'.<br> 2. Your action type: LARGE MOVEMENT<br> 3. Others-see string: '<S-NAME> twiggles <T-NAMESELF>.'.<br> 4. Others Effect type: SEEING MOVEMENT<br> 5. Target-sees string: '<S-NAME> twiggles you.'.<br> 6. Target Effect type: BEING MOVED ON<br> 7. You-see when no target: 'Twiggle who?'.<br> 8. Sound file: ''.<br> Edit which (or DELETE)? <br> </em><br> Selecting option 1 edit what you would see when you perform TWIGGLE [Target] (ex: TWIGGLE VIRAX).<br> <br> <strong>You wiggle your toes at <T-NAME>. How cute.</strong><br> <br> The display would replace the tag with the appropriate name, and in this example it would be Virax. Now option 2:<br> <br> <em>2. 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. On to option 3:<br> <br> <em>3. Others-see string: '<S-NAME> twiggles <T-NAMESELF>.'.<br> Enter a new value<br> :<br> </em><br> What those bystanders witness.<br> <br> <strong><S-NAME> wiggles <S-HIS-HER> toes at <T-NAME>. Very strange.</strong><br> <br> Now you are up to option 4, which is the action type for the above:.</p> <p><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. Now for option 5:<br> <br> <em>5. Target-sees string: '<S-NAME> twiggles you.'.<br> Enter a new value<br> :<br> </em><br> If you were the unfortunate victim, this is what you would see. Let's change it:<br> <br> <strong><S-NAME> wiggles <S-HIS-HER> toes at you.</strong><br> <br> <em>6. 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. The last option is 7:<br> <br> <em>7. You-see when no target: 'Twiggle who?'.<br> Enter a new value<br> :<br> </em><br> This is what you would see if the target you want to use the social against isn't there. Let's try this:<br> <br> <strong>Sorry. They aren't here for that lovely toe wiggle.</strong><br> </p> <p>And that's all for a targeted twiggle. One more type.</p> <p><strong><font style="background-color: moccasin;">CREATING</font></strong><strong><font style="background-color: moccasin;"> TWIGGLE <T-NAME> ELABORATELY </font></strong><strong><font style="background-color: moccasin;">SOCIAL</font></strong><strong><br> <br> </strong>Type 6! The TARGET with argument! <T-NAME> is the Target Name. ELABORATELY is our custom argument. This is the type that is used when a user selects a visible target in the room for their social. Such as TWIGGLE orc elaborately. So! Select the option now to add another variant.<br> <br> <em>New target (?): ?<br> Choices: MOBTARGET, ITEMTARGET, INVTARGET, EQUIPTARGET, NONE, ALL, SELF<br> </em><em>:</em><em><br> </em><br> It's the MOBTARGET ELABORATELY portion of social creation, so enter "<strong>MOBTARGET</strong> <span style="font-weight: bold;">ELABORATELY</span>".<br> <br> <em>New target (?): mobtarget elaborately<br> Target: 'MOBS' is a valid target, with an argument of ELABORATELY. Is this<br> OK (Y/n)? y</em></p> <p><em>1. You-see string: 'You twiggle <T-NAME> in the elaborately.'.<br> 2. Your action type: LARGE MOVEMENT<br> 3. Others-see string: '<S-NAME> twiggles <T-NAMESELF> in the elaborately.'.<br> 4. Others Effect type: SEEING MOVEMENT<br> 5. Target-sees string: '<S-NAME> twiggles you in the elaborately.'.<br> 6. Target Effect type: BEING MOVED ON<br> 7. You-see when no target: 'Twiggle who?'.<br> 8. Sound file: ''.<br> Edit which (or DELETE)?<br> </em><br> <strong style="font-weight: normal;">I think you can figure it out from here.<br> </strong></p> <p>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, etc), When you get tired of a social variant, you can use the MODIFY SOCIAL command to delete targets. To eliminate a social entirely, use DESTROY SOCIAL [NAME].</p> <p><font style="background-color: moccasin;">======= AND NOW FOR THE LIST OF TAGS =======</font><br> <S-HIS-HER> Outputs 'Your' if Observer=Source, otherwise 'His'/'Her'.<br> <S-HIM-HER> Outputs 'You' if Observer=Source, otherwise 'Him'/'Her'.<br> <S-NAME> Outputs 'You' if Observer=Source, otherwise the Name.<br> <S-NAMESELF> Outputs 'Yourself' if Observer=Source, otherwise the Name<br> <S-HE-SHE> Outputs 'You' if Observer=Source, otherwise 'He'/'She'<br> <S-SIRMADAM> Outputs 'Sir'/'Madam'<br> <S-MRMS> Outputs 'Mr.'/'Ms.'<br> <S-MISTERMADAM> Outputs 'Mister'/'Madam'<br> <S-IS-ARE> Outputs 'Are' if Observer=Source, otherwise 'Is'.<br> <S-HAS-HAVE> Outputs 'Have' if Observer=Source, otherwise 'Has'.<br> <S-YOUPOSS> Outputs 'Your' if Observer=Source, otherwise the Name`s<br> <S-HIM-HERSELF> Outputs 'Yourself' if Observer=Source, otherwise the 'Himself'/'Herself'<br> <S-HIS-HERSELF> Outputs 'Yourself' if Observer=Source, otherwise the 'Hisself'/'Herself'<br> <T-HIS-HER> Outputs 'You' if Observer=Target, otherwise 'His'/'Her'.<br> <T-HIM-HER> Outputs 'You' if Observer=Target, otherwise 'Him'/'Her'.<br> <T-NAME> Outputs 'You' if Observer=Target, otherwise the Name.<br> <T-NAMESELF> Outputs 'Yourself' if Observer=Target, otherwise the Name<br> <T-HE-SHE> Outputs 'You' if Observer=Target, otherwise 'He'/'She'<br> <T-SIRMADAM> Outputs 'Sir'/'Madam'<br> <T-MRMS> Outputs 'Mr.'/'Ms.'<br> <T-MISTERMADAM> Outputs 'Mister'/'Madam'<br> <T-IS-ARE> Outputs 'Are' if Observer=Target, otherwise 'Is'.<br> <T-HAS-HAVE> Outputs 'Have' if Observer=Target, otherwise 'Has'.<br> <T-YOUPOSS> Outputs 'Your' if Observer=Target, otherwise the Name with an '`s'<br> <T-HIM-HERSELF> Outputs 'Yourself' if Observer=Source, otherwise the 'Himself'/'Herself'<br> <T-HIS-HERSELF> 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 <clanname></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 <clanname></strong></p> <p><strong>MODIFY CLAN <clanname></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 <clangovtname></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 <clangovtname></strong></p> <p><strong>MODIFY GOVERNMENT <clangovtname></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. 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. 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. 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. </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. </p> <p>Achievements come in several different Event types, which describe the general nature of the achievement and how it is attained. 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) (these are checked periodically, please limit) </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 (these are checked periodically, please limit their number)</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) 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 (these are checked periodically, please limit their number)</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 whenever the player gets a particular item</td> </tr> <tr> <td>BIRTHS</td> <td>triggered when a player becomes a parent</td> </tr> <tr> <td>RACEBIRTH</td> <td>triggered when a player becomes a parent of a newly generated mixed-race</td> </tr> <tr> <td>PLAYERBORNPARENT</td> <td>triggered when a player becomes a parent of a mob that just became a new player</td> </tr> <tr> <td>PLAYERBORN</td> <td>triggered when a player is born from the actions of another player</td> </tr> <tr> <td>CHARACTERS</td> <td>the number of characters in an account</td> </tr> <tr> <td>CLANMEMBERS</td> <td>the number of members of a clan</td> </tr> <tr> <td>CLANKILLS</td> <td>triggered when a clan member kills a rival clan member</td> </tr> <tr> <td>CLANLEVELSGAINED</td> <td>a clan gaining a clan level</td> </tr> <tr> <td>CLANDECLARE</td> <td>triggered when a clan declares a new relationship with another clan</td> </tr> <tr> <td>CLANPROPERTY</td> <td>the number of times the clan purchases private property</td> </tr> <tr> <td>CONQUEREDAREAS</td> <td>the number of areas the clan has conquered</td> </tr> <tr> <td>CONQUESTPOINTS</td> <td>the number of conquest points gained by the clan</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 <unique_tattoo_name></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 </strong><strong>ACHIEVEMENT</strong><strong> <</strong><strong>tattoo_name</strong><strong>></strong></p> <p><strong>MODIFY </strong><strong>ACHIEVEMENT</strong><strong> <</strong><strong>tattoo_name</strong><strong>></strong></p> <p>When a 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 </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. 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. This is optional. 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 >spaces<. On rewards for PLAYER achievements, rewards go only to the player. 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. 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). Example: 2 MAXSTRENGTH<br> Additionally are stats like: BONUSCOMMON, BONUSCRAFT, BONUSNONCRAFT, BONUSCHARONLINE, BONUSLANGS, BONUSCHARSTATS, BONUSCHARLIMIT, or you can prepend the word account<br> 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> have parameters in parenthesis in key=value value form. Keys include AUTOGAIN,<br> MASK, PARMS, PREREQS.<br> Example: 17 Spell_Light<br> 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> the expertise level number. This can also optionally be followed by parenthesis <br> with key=value parameters in them. Keys include AUTOGAIN only.<br> Example: 7 VEXING1<br> Example: 12 VEXING1(autogain=false)<br> * protection from purging. Example: 1 NOPURGE<br> * amount of clan XP experience. Example: 10 CLANXP (applies to clan achievements only)<br> * amount of clan currency deposited in bank. Example: 10 "clan gold coins"<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 allows a zappermask to specify what kind of creatures must be killed (or are the killer) to make progress in the achievement. 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. 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. 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 are entered simply, where the modified score is accessed by prefixing with CURRENT. There are simply too many different kinds of stats to list here, but AHELP STAT gives many. 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, MOVE, HUNGER, THIRST, FATIGUE, LEVEL, USES, SPEED, MONEY, 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. 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. <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. When more than one thing is specified, the list is COMMA delimited. 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. 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. This can be left blank to permit all players. It is useful for check area information, or the players class, or group size, for example. 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. See help on Java Regular Expressions for such a format. 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> <tr> <td>* AREAMASK</td> <td>a zapper mask that can only check certain things about the area an event took place in. Things that can be checked include the NAME, the LEVEL (for median level) or ALIGNMENT (for median alignment)</td> </tr> </tbody> </table> <strong><em></em></strong><br> </td> </tr> </tbody> </table> </center> </body></html>