Most of these documents are EXTREMELY outdated and are kept
more for historical reasons than informative reasons. Most outdated is
the building information since Carnage no longer runs on a DIKU data
system but rather uses a custom XML structure. Despite all this the
information can be very useful when designing your area.

*******************************************************
DB-ZON.DOC - documentation for zone database files
*******************************************************
2.3. The zone-file
==================
NEW STYLE:
For those of you familiar with old-style diku zones, the main difference
between the old style and the new style is that the new style does not
require you to keep track of the max number of monsters/objects of each type
existing in the world. Each item in the new style zone is loaded once at
first boot, then again either when that monster/item leaves the game (killed/
purged/rented/etc.) or when it is conditionally called by a preceding zone
command. See the section on <# reps> below for details on how this works.
a) The top room-number of the zone. A room belongs to a zone X if:
zone[X-1].top < virtual_room_number <= zone[X]
for X > 0. Rooms belong to zone 0 if their number is between 0 and the
top of zone 0.
b) The LIFESPAN of the zone. When the age of the zone (measured in minutes
after last reset) reaches this number, the zone is queued for reset. The
zone is then reset as soon as possible (more or less), depending on the
value of the RESET_MODE-variable.
c) The RESET_MODE. This may take one of three values:
0: Don't reset the zone at all. In this case, the age of the zone is never
updated, and it will never be queued for reset. Thus, the value of the
lifespan-field is effectively ignored.
1: Reset the zone as soon as it is deserted, ie as soon as there are no
players located within the zone.
2: Reset the zone no matter who or what is in it.
d) The COMMANDS. This is a series of commands to execute at reset.
Each command consists of a letter, identifying the command-type,
followed by three or four arguments. The first argument, common to all the
commands, is the <# reps> (number of repetitions). If the <# reps> is
greater than 0, then that command and all succeeding commands with <#
reps> < 1 are repeated that many times. If <# reps> is 0, that command is
executed only if the previous command was executed AND the object has been
removed from the game (except for the first boot, at which time it is
loaded originally). You would use 0 for items you only want to have ~1 of
in the game at a time (~1 since it doesn't actually count them, just that
it won't load a new one if _the_one_previously_loaded_by_this_command_ is
still in the game). If <# reps> is -1, then EVERY time the previous
command is executed, this command will be executed as well. This is
useful for normal equipment that should be loaded every time a monster is
loaded, no matter how much of that same equipment is still in the game.
For example, to load 3 guards, which you want to always have the same
basic equipment, plus you want one to have a key which you don't want to
load again unless the last one has been removed from the game, you would
do it as follows:
<cmd> <# reps> etc.
M 3 etc. (guards)
O -1 etc. (breast plate)
O -1 etc. (long sword)
O -1 etc. (shield)
O 0 etc. (key)
The commands:
M (load a mobile):
Format: 'M' <# reps> <mob nr> <room nr> <mob group num>
mobile nr and room nr should be self-explanatory.
NOTE: You MUST put a number in the <mob group num> field. If you
don't want the NPC to be in any group, use 0. If you do want
to use NPC groups, you should, but don't strictly have to, use
mob group numbers roughly according to the numbers of the mobs
themselves. For example, if you are given mob #s 1700-1799,
you should use group #s 1700-1799. _But they don't have to
directly correspond_. You may have mobs 1700, 1701, 1702,
1703 all in group 1700, and mobs 1704, 1705, and 1706 in group
1701, etc.
O (load an object):
Format: 'O' <# reps> <object nr> <room nr>
Load an object and place it in a room. (NOT -1)
G (give object to mobile):
Format: 'G' <# reps> <object nr>
Loads an object, and gives it to the last monster referenced (ie. by the
M-command).
Of course, this command doesn't make sense if a new mobile+object
pair has not just been created, which is where the if-flag comes
in handy. :)
B (add buff item)
Format: 'B' <if-flag> <object num> <odds in 100>
Adds the specified item to the target mob's special affects inventory. The
odds can be used to randomize the load. For instance setting the odds to
50 means that 50 in 100 resets will load the affect item.
X (equip mobile with object)
Format: 'X' <if-flag> <object num> <odds in 100>
Works just like 'E' except that a 100 face dice is rolled and it must
roll under <odds in 100> for the object to be loaded and equipped on
the target mob.
Y (give object to mobile)
Format: 'Y' <if-flag> <object num> <odds in 100>
Works just like 'G' except that a 100 face dice is rolled and it must
roll under <odds in 100> for the object to be loaded and given to the
target mob.
E (object to equipment list of mobile)
Format: 'E' <# reps> <object nr> <equipment position>
Loads object and places it in the Equipment list of the last monster
referenced.
Note that it is NOT necessary to precede this command with a 'G' command.
Equipment position is one of:
WEAR_LIGHT 0
WEAR_FINGER_R 1
WEAR_FINGER_L 2
WEAR_NECK_1 3
WEAR_NECK_2 4
WEAR_BODY 5
WEAR_HEAD 6
WEAR_LEGS 7
WEAR_FEET 8
WEAR_HANDS 9
WEAR_ARMS 10
WEAR_SHIELD 11
WEAR_ABOUT 12
WEAR_WAISTE 13
WEAR_WRIST_R 14
WEAR_WRIST_L 15
WIELD 16
HOLD 17
P (put object in object):
Format: 'P' <# reps> <object_nr1> <object nr2>
Loads object1 and places it in object2.
D (set state of door)
Format: 'D' <# reps> <room nr> <exit nr> <state>
State being one of:
0: Open.
1: Closed.
2: Closed and locked.
NOTE: For doors, <# reps> == 1 indicates that the door should
be opened/closed/locked EVERY time the zone is reset.
<# reps> == 0 only opens/closes/locks the door when
the game is first booted, and -1 does it every time the
zone is reset IF the previous command was executed.
R (remove object from room)
Format: 'R' <# reps> <room_nr> <object_nr>
Currently may not do anything. If you need to use it, send me
mail.
More commands will probably be needed, and will be added as required.
|
|
 |