Table of Contents
The Draknor MUD client was written by David Carroll (Taeloch)
for exclusive use with The Lands of Draknor. The program operation was loosely
based off of Daniel Kelly's GMud32, though I did not consult with him nor look
at his program's source code. It was written entirely by me, with two notable
exceptions: to make the main window display colored text, I adapted the ColorPane
class, published by O'Reilly books. The network connection is handled by the
Apache Commons Net library.
Getting started is easy: just click the "Character List" button
and then "Connect". That will connect you to the game. If you already have a
game character, you can start setting them up there. Explaining the game itself
is beyond the scope of this document, but there are a lot of help files available
in-game, and the people playing can answer questions you may have. That's all
you really need to play the game, but this program offers some more advanced
features that many long-time MUD players rely on to make the game more fun or
The Character List
The Character List window is where you can configure settings for
multiple characters, giving each one their own set of macros, aliases, etc. Or you
can share one set with multiple characters. The Character List window is accessed
by clicking the "Character List" button on the main screen, or using the menu of the
The list box on the left side of the Character List window is a
list of all characters that you have set up. Starting off, there is just a single
entry, called "Default". This is the character that is loaded automatically when the
program starts. This information can be deleted once you have created one of your
own character entries. To the right of the list are four dropdown boxes that allow
you to select the set of Macros, Triggers, Aliases, and Variables that each character
has assigned to them. Explanations of these concepts are found below.
To the right of each dropdown box are buttons that let you manage
these sets of macros, etc. To change these, you must first select a character, at which
time the dropdowns will change to show which sets are selected for that character. For
these items, the "Edit" button will bring up the appropriate editor, which is the same
as the ones accessible from the main screen.
The text box in the middle, "description", is purely for your own good
and does not do anything except save per-character. This is in case you have multiple
characters and get them confused, you could put "Lev. 50 Human Conjurer" in it for one
character and "Lev. 32 Orc Barbarian" in for another. The second box contains text that
will be sent to the game as soon as you click "Connect." Usually, this would be a
character name, followed by that character's password, which would be "username[enter]password[enter]".
For security purposes, this information is obscured in the configuration file so that
your passwords can't be easily retrieved by viruses, prying eyes, etc.
The buttons along the bottom of the window are for managing the character
list: New to create a new character, Delete/Rename to remove/rename the selected character.
Close will close the window and save all changes. Connect will close the window, save all
changes, and connect to the game with the selected character's settings. If that character
has text in the "output upon connect" window, it will immediately be sent to the game.
The simplest feature of the program is called "macros". These allow
you to send one or more commands to the game at once just by clicking a button or
pressing a function key. The macro buttons are the buttons that line the right side
of the window, and the "F#" label represents the function key you can press.
To edit the macros, click the "Edit Macros" button or the menu item
from the main screen, or select a macro set from the appropriate list on the Character
List screen and click "Edit". The list along the left side of the "Edit Macros" window
lists "F1" through "F12", which corresponds to the keyboard key or button you can press
to activate the macro. To edit one, just click on the list entry you wish to configure.
The "Button Text" field shows the text that the button will display. The large text
pane shows the commands that will be sent to the game when you click the button or press
the appropriate function key.
There are numerous uses for macros, though they are most commonly
used for simple tasks, such as casting spells. Your most common spells or skills can
be set up to activate just by pressing a function key. As stated previously, you can
send multiple commands at once as well. For instance, if you keep food in a container,
the macro can get a food item from your container and then eat it, allowing you to save
a little bit of typing time. These can be enhanced with the use of variables, described
Triggers allow you to automatically react to something that happens in
the game. For instance, when the game announces that someone has gained a level, you
can automatically announce your congratulations! At this time, the trigger cannot
identify exactly who
has gained a level, so your congratulations cannot be
Another useful trigger could take the place of the "eating" macro
example above. Whenever the game announces that you are hungry, you can get a food item
from your container and eat it.
To access the trigger configuration, click on the "Edit Trigers"
button or menu item, or select one from the list on the Character List screen and click
"Edit". To add a new trigger, click the "New" button. In the window that pops up,
enter the text that will enable the trigger. For instance, this could be "You are
hungry." Then press enter or click "OK" to add it to the list. The new trigger will
be automatically selected, so just type into the large box the commands that will be
sent when the trigger text appears on the screen. It's that simple!
As a warning, you should try to make your trigger text as specific
as possible. If, for instance, you made a trigger with the word "the", it would go
off quite often! Also, it is possible that some nefarious gamers can take advantage
of your triggers, so it may be best to not announce them. In the example used, if
someone says "You are hungry" over and over while in the same room, you will eat for
every time they say it. It's not likely to happen, but you should be aware that it
is possible. It is also possible to cause a trigger to go off based on commands sent
by a macro or alias. Further, if an action performed by your trigger causes another
trigger event to fire, a loop can occur. In some cases this is a desireable event,
but it should generally be avoided unless you are aware of what you are doing.
Triggers can also be enhanced with the use of variables, described
Used simply, aliases are not much more complicated than macros,
except that it reacts to what you type instead of a button or function key press.
Used to its fullest, it can make a complicated task very easy, once understood.
But taking full advantage of aliases can make them a bit complicated. Because of
this, this helpfile section is pretty long. But to take advantage of the advanced
features, it is suggested you read it in its entirety, as it points out some common
problems that may be encountered and avoided.
Aliases can be modified by clicking on the "Edit Aliases" button
or menu, or editing one from the Character List window. Clicking "New Alias"
brings up a small window into which you can type the command you want to use to
send your commands to the game. You can use spaces in your alias command, though
it usually makes things confusing, and is unnecessary. Also be aware that if you
make an alias that is named the same as a command in the game, the alias will take
priority, and the game command will not be available to you unless it is one of
the commands sent by your alias to the game.
In its most basic form, an alias allows you to send one, or
multiple, command(s) by typing some short word or phrase that you have set up.
To continue with the food examples, you could make an alias called "food" that,
whenever typed, would get a specific food item from your container and eat it.
If you have opened the Alias Editer screen, you have probably
noticed a field just below the alias list called "Argument Split Char". This is
where aliases can become far more useful, and complicated. You can make an alias
that takes arguments and modifies itself before sending the commands to the game.
These arguments are separated by the character seen in that box (by default, ":").
The arguments separated by the split character (":") will be
assigned to variables in your alias, noted by "%#": where the first argument is
"%1", the second is "%2", and so on. This may seem a bit confusing right now,
but an example may help clear it up. Note that this example assumes that you
have not changed the split character from its default value of ":". If you have,
just substitute your preferred character.
You have a fine collection of wands at your disposal, and like
to keep them in your backpack. You would like to have a single command that will
get any one of these wands from your backpack, zap someone with it, and put it back
where it belongs. That's quite a few commands, when a single alias would take care
of this easily. Just make a new alias (we will call ours "bzap") and enter this
into the text pane:
get %1 backpack
put %1 backpack
Now to activate it, you can type this:
...and your good friend Bob will now be blessed! But you can use the exact same
alias on those you don't
...and that annoying bird is now engulfed in flames!
Misusing the alias arguments can result in unexpected
behavior. If there is a %# in your alias, but you do not provide enough
arguments, it will be sent as it was ("%2", for instance). See:
We will assume again your alias is called "bzap"
get %1 backpack
If you then accidentally typed this:
The commands that would be sent are:
get bob backpack
Obviously, this is not what you wanted!
Sometimes you only want one argument to an alias, in which
case you would not need to use the split character. This is handled in two
different ways. If there is a "%1" in your alias, everything entered after
the alias text will be inserted in place of "%1". If "%1" is not found,
however, the text will just be appended to the end of the alias. These
examples may help explain (the alias will again be called "bzap":
Inserting a single argument
get %1 backpack
And you type this:
The text that would be sent is:
get wand backpack
Appending a single argument
And you typed this:
The text that would be sent is:
get wand backpack
This also can result in unexpected behavior if you aren't careful, especially
when you have multi-line aliases:
And you typed this, expecting to get the wand from the backpack:
The text that would be sent is:
zap bob backpack
Using variables is a way to change the actions of your Macros,
Triggers, and Aliases without constantly changing them. It lets you replace an
easily-changed value for a phrase, command, or word. Describing this can be a bit
difficult, so an example may help illustrate the idea. The example below assumes
that you have not changed the default variable character of "@".
You create variables called "food" and "container", with the values
"apple" and "backpack", respectively. You have a macro that looks like this
get @food @container
When the macro runs, this will happen:
get apple backpack
If you then change the value of "food" to steak, the same macro will do this:
get steak backpack
The MUD client keeps track of previous commands you have typed
and allows you to go back to them easily, simply by pressing the "up" key on
your keyboard. If you happened to pass by the command you were looking for,
just press the "down" key to go back to it.
There is also an option (available under the "options" menu,
in "Configuration") called "History Search" that lets you easily find commands
typed long ago without having to scroll through your entire history. If
enabled, you can type a short phrase, select it, and press "up" to find the
last command that begins with the selected text. If that wasn't the right one,
you can just press "up" again to find the previous command that matches.
Auto-Clear Input will empty the input text field upon pressing
"return". If it is disabled, the just-sent command will remain in the input
field and become highlighted. That way, if you wish to send the same command a
second time, you can just press "enter" again, rather than typing it out again.
It is highlighted so that typing a new command will remove the selected text
without pressing "delete" or "backspace".
By default, the input box will be cleared automatically each
time you press enter, but if you wish to enable this feature, go to "Configuration"
under the "Options" menu and turn off "Auto-Clear input".
Local Echo On
Local Echo means that whenever you type a command, it will
appear in the output window. Turning this off will prevent your commands from
being displayed after you send them. Local Echo is on by default, but can be
disabled by going to "Configuration" under the "Options" menu.
Sometimes you would like to send multiple commands at once,
but don't want to mess with an alias or macro. In that case, you can just stack
your commands. This is generally used in conjunction with the command history
to execute a few commands repeatedly.
To configure command stacking, choose "Configure" from the
"Options" menu. In the configuration screen is a section for stacking: a
checkbox to enable or disable the feature, and a textbox so you can configure
the character that enables stacking. Keep in mind that the character will
ALWAYS cause the commands to split, which is why you have the option to
disable it. For example, if you were to type a message with a common
emoticon (assuming the default character has not been changed):
say You shall die! ;) Just kidding!
The resulting commands would be:
say You shall die!
) Just kidding!
And unless ")" is a valid game command (it's not normally), "Just kidding"
will not appear... That could obviously lead to a dangerous misunderstandings.
When this option is enabled, you can enter directions using the
number pad. 8=North, 2=South, 6=East, 4=West, 9=Up, 3=Down. Numlock must be on
for this feature to work. It can be enabled or disabled under the Options menu,
and selecting "Configuration".
Sometimes you want to get some place far away but don't have
any way to get there with magic, and typing all those direction commands can be
annoying. You could use command stacking, but there's a more convenient method
called Speed Walk, sometimes called "paths". One string can send all the
commands needed to get somewhere, even through closed doors!
First, the option needs to be enabled (it is by default), and
the first character must be a special character ("#" by default) that can be set
by going to the "Options" menu and choosing "Configuration". In the window that
appears is a checkbox to enable/disable speed walking, and a text box that lets
you choose your own speedwalk character. The command is not case sensitive
(upper and lower case are treated the same). The easiest way to explain how
Speed Walking works is just to show an example:
entering the following command into the client
...would send the following set of commands to the game:
You may notice that there is an "unlock" ('X') command in the
middle. You would need to have the appropriate key available for it to work,
otherwise you will not go through the door, but the rest of the commands will
still run, so you may end up somewhere you were not expecting to be!
The Color Editor
The client gives you the ability to customize all of the
colors used in the game, though it's generally not advised. However, some
monitors or videa cards may be improperly calibrated, causing certain colors
to be too dark, or just look wrong. If this is the case -- or if you feel
like changing the colors for any other reason -- you can go to the "Options"
menu and select "Edit Colors". Once the Color Editor window is opened, click
on the color you wish to edit on the right side, then choose the color to
change it to on the left.
The "reset" button will change everything back to their
default, ANSI standard values. Also, it is important to keep in mind that
changing the "Black" color will change the background color of the output