Area Building Documentation: MudProgs
Updated by Ops on 24 Feb 1999
This is a brief documentation on the mudprogs available in HOTL3.
It is work in progress - thus, not everything is documented yet.
Firstly, the mudprogs in HOTL3 are currently an interpreted language
using the yacc/lex parser. Thus, it is neither as fast nor as powerful
as other byte-code level languages like LPC. However, the basic
framework to make mudprogs a byte-code compiled language is already
in. In order to preserve as much compatibility between HOTL3 mudprog
with HOTL2 mob/obj prog, the trigger effects, language structure,
and some other not-so-nice things have been retained. The end effect
is, of course, that we can use HOTL2 mob/obj prog without much modifications.
- Strings, numbers and parameters
- Basic unit blocks
- Types of mud_prog: Triggers &
Commands
- Attaching mud_prog
- Variables
- Built-in functions &
mud_prog-only commands
Strings, numbers &
parameters
Strings in mud_prog are enclosed in single quota, ie '
You can concat two strings by using a dot '.' like this:
'Slimer ' . 'is here.' == 'Slimer is here.'
Note: |
Since ' is been used as a delimitor, be careful
of using ' within your strings as it might cause strange errors.
Note that using " in your string is a BAD IDEA(tm) too! |
Numbers in mud_prog are just integers values like 1234 or -1234
Standard mathematical functions + - / * can be used on numbers,
eg:
Note: ( ) doesnt work yet but the order of evualation is correct,
i.e.
12 + 2 * 3 will give a correct 18 and not 52.
Parameters to a mud command or function are enclosed withing brackets
( ). Everything inside the brackets will be passed wholesale to
commands. Thus, say ( how do you do ) is the same as typing 'say
how do you do' atthe prompt.
Note: |
A mud command/function must have ( ) even if no
paramters eg smile( ) In addition, since ( ) is used as a delimitor,
be careful of using ( ) (especially in smily faces : - ). Use
[ ] instead and it will be converted to ( ), eg say ( how do
you do : - ] ) is same as say how do you do : - ) |
Basic unit blocks
There are 3 basic unit blocks in mud_prog: Program expression, Program
condition, and Program control.
A program expression is a single statement, usually an existing
mud command or some other specialised mpcommands, eg:
mpechoat($n You cannot see anything.)
Expressions can be also strings or numerical expressions, eg:
$1 = $n . ' is here.' //
. is a string concat
$2 = 500 + $5 * random(100) // $2 = rand(500,1000)
Program condition is a condition used for evaluating an
expression which yields a boolean answer of true or false. It can
be a predefined function, eg:
if rand(50) ...
or a numerical or string comparison:
if $1 . 'is here.' == 'Ender is here.' ...
if $2 == 500 ...
In addition, you can use AND and OR functions for evaluating conditions,
eg:
if $1 == 500 AND $2 == 'Ender' ...
Program control at the moment only has the if-else-endif
control. The for-loop and while-loop controls should be implemented
sometime in the future. The syntax for if-else-endif control is
as follows:
if <condition>
<expression>
...
else
<expression>
...
endif
The block after else is optional. It is important that every if
is terminated with an endif.
An example of the if-else-endif control:
if rand(50)
say(Aiya, don't bother me okie!?) // notice
the use of ' // is
ok here
else
if $r == 'Meowy'
paw($r)
else
if $r == 'Slimer'
kok($r)
shout($r
is a kok!!!)
endif
growl()
endif
endif
Types of mudprogs
There are two basic types of mud prog: Trigger and Command.
Triggers
Triggers are the old mob/obj prog which have been maintained for compatibility.
It works on a triggered action, maybe a sentence, a word, an action
or just plain random events.
Currently, the list of triggers includes: "act" "speech" "rand"
"fight" "death" "hitprcnt" "entry" "greet" "greetall" "give" "bribe"
"wear" "remove" "get" "drop" "junk" "exam"
TRIGGER |
SYNTAX |
EXAMPLE |
act |
Trigger "act" "string1"
"{
what you want the mob to do when the victim acts like string1
}" |
Trigger "act" "p pokes you in the
ribs."
"{
poke($n)
}" |
speech |
Trigger "speech" "string1"
"{
what you want the mob to do when the victim says something like
string1
}" |
Trigger "speech" "p mary had a little
lamb"
"{
mpmload(vnum of lamb)
}" |
rand |
Trigger "rand" percent1
"{
what you want the mob to do randomly percent1 percent of the
time
}" |
Trigger "rand" 90
"{
mutter()
}" |
death |
Trigger "death" percent1
"{
when the mob dies, what you want the mob to do percent1 percent
of the time
}" |
Trigger "death" 100
"{
say(Ahh, you killed me)
}" |
hitprcnt |
Trigger "hitprcnt" percent1
"{
what you want the mob to do when its hp hits percent1 percent
or below
}" |
Trigger "hitprcnt" 20
"{
cast(holy heal)
cast(holy heal)
cast(holy heal)
}" |
entry |
Trigger "entry" percent1
"{
when the mob enters a room, what you want it to do percent1
percent of the time
}" |
Trigger "entry" 100
"{
say(I'm here)
}" |
greet |
Trigger "greet" percent1
"{
what you want the mob to do when someone visible to the mob
enters the room percent1 percent of the time
}" |
Trigger "greet" 50
"{
slap($n)
say(Please get lost!)
}" |
greetall |
Trigger "greetall" percent1
"{
works like greet but all players will be affected regardless
of whether the mob can see them or not
}" |
Trigger "greetall" 50
"{
slap($n)
say(Please get lost!)
}" |
give |
Trigger "give" "item1"
"{
what you want the mob to do when someone gives it item1
}" |
Trigger "give" "pass"
"{
say(Welcome!)
mptransfer($n 12345)
}" |
bribe |
Trigger "bribe" amount1
"{
what you want the mob to do when someone gives it amount1 amount
of gold
}" |
Trigger "bribe" 500
"{
say(Thank you!)
}"
Trigger "bribe" 1000
"{
say(Thank you so much!)
}"
Notice that from 500-999 gold, the mob will say 'Thank you!'
From 1000 gold onwards, it will say 'Thank you so much!' |
wear |
Trigger "wear" percent1
"{
mostly used for items - what you want the item to do percent1
of the time when someone wears it
}" |
Trigger "wear" 100
"{
mpechoaround($n $n's darts start humming merrily.)
mpechoat($n Your darts start humming)
}" |
remove |
Trigger "remove" percent1
"{
mostly used for items - what you want the item to do percent1
of the time when someone removes it
}" |
Trigger "remove" 100
"{
mpechoaround($n $n's darts stop humming)
mpechoat($n Your darts stop humming)
}" |
get |
Trigger "get" percent1
"{
mostly used for items - what you want the item to do percent1
of the time when someone gets it
}" |
Trigger "get" 100
"{
mpechoat($n Your hands are stung in many places.)
mpdamage($n 20 'poisonous sting' 'poison')
}" |
drop |
Trigger "drop" percent1
"{
mostly used for items - what you want the item to do percent1
of the time when someone drops it
}" |
Trigger "drop" 100
"{
mpecho(The darts shimmer and change back to hornets.)
opdestroy()
}" |
junk |
Trigger "junk" percent1
"{
mostly used for items - what you want the item to do percent1
of the time when someone junks it
}" |
Trigger "junk" 100
"{
mpecho(The darts shimmer and refuse to be junked.)
mpoload(vnum of dart)
}" |
exam |
Trigger "exam" percent1
"{
mostly used for items - what you want the item to do percent1
of the time when someone examines it
}" |
Trigger "exam" 100
"{
say(Hey, what are you looking at??)
}" |
Next >
|