北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: guoqi

ZMUD知识

[复制链接]
发表于 2007-3-8 16:13:48 | 显示全部楼层

Re:ZMUD知识

六.zmud命令指南


zmud的表达式

Member of LinkUnion - Click Here to Join

[number]
Syntax: #number command
这个命令向MUD重复发送number次命令,number必须是一个常数,如果要使用变量,请使用loop命令。当前已经重复的计数保存在系统变量%repeatnum中。
实例:
#4 fight bing %i
命令将被解释成{fight bing 1;fight bing 2;...;fight bing 4}发往MUD10

abort
Syntax: #AB
停止分析处理当前的命令行中#ab以后的部分
实例:
get all corpse;#ABORT;split
在这个例子中,split将被忽略

action
Syntax: #AC pattern command [classname]
Related: #TRIGGER #T+ #T- #IGNORE
这是zMUD中最有用的特性之一。当从MUD中收到一条匹配的文本时,预先定义的命令将被执行。这条命令的第一个参数是被匹配的文本,如果文本中包含空格,你需要将它用括号{}括起来。pattern中能够包含特殊的pattern matching symbols 和通配符。第二个参数是将要被执行的命令,超过一个单词的命令也需要使用括号{}。第三个参数用于给不同的触发动作命名分类,便于管理。高级的触发设置必须使用参数(Preferences)对话框,在对话框中,你可以决定触发的动作是紧跟在匹配的文本之后还是在新的一行中执行。
一个简单的例子:
#AC {你买下一件藤甲} {wear jia}
这样,无论何时只要你买了藤甲,立刻可以自动穿上。
自动登录的例子:
#AC {^您的英文名字:} {river} ;#AC {^请输入相应密码:} {12345}
然后在参数对话框中关闭 Trigger on Newline 设置并且打开 Trigger on Prompt 这样名字和密码将紧接着提示行输入而不会等待换行。注意,字符 ^ 将强制从一行的头部开始匹配。
触发中的参数#AC {^You get (%d) coins} {chat I get %1coin } rich 当你看到一行“You get [number] coins”时,其中的数值将被存放在变量%1中,其后执行的命令可以使用这个数值。在这个例子中用到了类(class)名rich,这样你就能够使用t+和t-命令来打开或关闭这个触发。

add
Syntax: #AD variable amount
这个例子允许你做一个简单的算术计算。amount可以是数值或变量。如果要做减法,可以使用负值。复杂一些的算术计算,请使用 #math 命令。
实例:
#AD moves 1
给变量@moves加一
#ACTION {You get (%d) coins} {#AD gold %1}
当捡到钱时,把捡钱的数量加到 @gold 变量中

alarm
Syntax: #ALA timepattern command
Related: #TRIGGER
建立一个基于时间的触发,而不是根据从MUD中获得的信息触发。timepattern可以是特定的时间或包括通配符。如果在minus前加上(-),则表示连线时间而不是实际时间。
timepattern 的格式表示成 hours:minutes:seconds ,其中的小时和分钟是可选项,如果不指明,则假定小时和分钟被通配符*取代。通配符*可以代替任何数值,而*10可以匹配10、20、30等等。你也可以指定几个数值用(|)来分隔。Finally, you can put parenthesis around the wildcards to save the values matched to the %1..%9 parameters。(这句话我不懂,谁来帮我?)
实例:
#ALARM -30:00 {save}
这里的 hour 没有指定,所以默认为*。 因此,这个例子将在连线后每隔30分钟执行 save 命令。
#ALARM 3:00:00 {gossip Why arent you sleeping?}
命令将在凌晨3点触发。
#ALARM -5955|56|57|58|59) {#SHOW 60-%1}
这个命令在你连线时每个小时的最后5秒在屏幕上显示 5 4 3 2 1。

alias
Syntax: #AL [aliasname] [string]
Related: #VARIABLE
保存一个或一组命令到一个较短的别名中。当执行别名时,命令中的变量能够被扩展。如果需要延迟变量扩展,可以使用两个变量标志(%%)。
如果不带参数执行命令alias,所有的别名将被列出在输出窗口。如果在命令alias中指定别名,被指定的别名将被显示。
别名能够用<tab>键扩展。在命令行中键入一个别名并按下<tab>键,命令行中的别名将被替换成别名中包含的命令。
如果在定义别名时使用参数(%1,%2,...),在命令行中紧随别名的文本将取代这些参数。特殊的参数%-1到%-99表示-n之后的所有文本。(使用参数的例子)
实例
#AL fs {fill waterskin}
当执行fs时,fill waterskin将被送往MUD。
#AL fs {fill @container}
在别名中使用变量,变量可以在购买容器时用触发赋值。
#AL make {#ALIAS %1 {cast %1 %%1}}
在这个例子中,执行make heal将发出#ALIAS heal {cast heal %1}命令,这样就建立了一个新的别名heal。

all
Syntax: #ALL command
发送一个命令到所有角色的窗口
实例:
#ALL quit
发送 quit 命令到所有激活的角色窗口。

backup
Syntax: #BA
Related: #PATH #RETRACE
从当前正在记录的路径中删除最后一步
实例:
如果当前路径是 .nsew 那麽执行 #BA 将使其成为 .nse 。如果当前路径是 .n4s 则执行 #BA 后将成为 .n3s 。

beep
Syntax: #BEEP [value]
Related: #PLAY
在pc机喇叭中发声,value 对应相应的 windows 事件。
实例:
#BEEP 16
播放windows 事件 16 的声音。
#BEEP;#WAIT 500;#BEEP
beep两次,中间间隔0.5秒。

button
Syntax: #BU number
触发一个自定义按钮,编号(从1至16)决定触发的按钮。number 可以是一个变量。
实例:
#BU 1
触发第一个按钮,效果相当于在屏幕上按下这个按钮

c+
Syntax: #C+ [name]
Related: #C-
开始获取文本到窗口name中,如果省略name,文本将送入command editor,(如果editor中的capturing设置可用)。如果在preferences对话框中选中Capture Commands设置,键入的命令也将被送往这个窗口。
例子:
#c+ temp
开始拷贝所有从MUD中获得的文本到名为temp的窗口中

c-
Syntax: #C-
Related: #C+
停止获取文本到另一个窗口

capture
Syntax: #CAP [number] [name]
Related: Editor window
获取最后number行送到另一个窗口。如果省略number,则只获取最后一行。如果number是-1,所有的行将被拷贝。如果name省略,发送的目标将是command editor window。
例子
#tr {咖啡告诉你:救命!} {#cap tell}
将tell的内容存入名为tell的窗口,避免忽略。

case
Syntax: #CA index command1 [commandn]
允许从命令列表中选择一个命令执行。index参数决定执行哪一个命令。如果index大于列表中的命令数,将从第一个开始重新选择。例如,列表中有4个命令,而index=6,则第二个命令将被执行。你也可以用变量%random随机的选择需执行的命令。
实例:
#CASE 2 {first command} {second command} {third command}
执行第二个命令
#CASE @joincmd {join} {rescue}
如果变量@join是奇数,执行join,偶数执行rescue。
#CASE %random {Hello} {Hi there} {Hiya} {Hi}
随机选择问候语。

character
Syntax: #CH
Related: #HOST #PW
从Charater atabase中返回当前角色的名字

colse
Syntax: #CL filenum
Related: #FILE
根据给定的文件号关闭文件,文件必须是已经用#file命令打开的。
实例:
#CLOSE 1
关闭一号文件

clr
清除屏幕。如果要清空scrollback buffer并收回内存,请使用菜单命令Empty。
color
Syntax: #CO attribute [pattern]
Related: #HIGHLIGHT
如果省略pattern参数,这个命令将改变最后一行的颜色。颜色属性见下表。如果包括pattern参数,将建立一个颜色触发,引起触发的条件除了字符对应外还需要有相同的颜色。
Color values:
black 0
blue 1
green 2
cyan 3
red 4
magenta 5
brown 6
gray 7
tellow 14
white 15
bold 128

要显示亮色,在基本值上加8,作为背景颜色,需要用基本值乘16。例如:使用红色背景的值是4*16或64。在前景上使用粗体字,需要再加128。这样,在蓝色背景上的粗体白字的值是:128+1*16+15=159。
实例:
#CO red
将最后一行的颜色变成红色
#CO bold,red
将最后一行变成红色粗体

connect
Syntax: #CON
Related: #DISCONNECT
断开并重新连接到当前的MUD,与菜单命令File/Reconnect 相同

cr
Syntax: #CR
送一个空行到MUD

cw
Syntax: #CW color
Related: #COLOR
在一次成功的触发之后,改变引起触发的内容的颜色
实例:
#TRIGGER {告诉你} {#CW red}
当有人tell 你时,显示较为醒目的颜色

dde
Syntax: #DDE server topic macro
这个命令允许你通过动态数据交换使用外部程序。zMUD也有一些内建的函数用于DDE:
%dde(server,topic,item)
%ddepoke(server,topic,item,value)
%ddemacro(server,topic,macro)
如果你使用%ddeopen(server,topic)函数打开DDE连接,在其他函数中不再需要指明server和topic,这个函数是全局性的,对于zMUD的任何窗口均有效。结束DDE连接时,使用%ddeclose()函数。
zMUD也拥有自己的DDE服务,server名是zmud,topic也是zmud,item为data。
实例:
#DDE NETSCAPE WWW_OpenURL {http://www.zg169.net/~~czmud/index.html}
使用netscape打开zMUD从入门到精通主页,因为~zMUD的特殊字符,所以需要再加一个~写成~~。
#DDE ZMUD ZMUD {chat* bye;quit}
使用DDE向MUD发出命令
%dde(Excel,TEST.XLS,R1C1)
使用excel装入test.xls并返回单元R1C1的值。
%ddepoke(Excel,TEST.XLS,R1C1,@tank)
向test.xls的R1C1单元写入变量@tank的值
谁能用DDE写一个自动对诗的机器人?

default
Syntax: #DE [special-char-string]
Related: #NODEF
保存你当前使用的特殊字符并恢复系统默认的特殊字符,在使用现成的命令脚本时,这个命令可以保证脚本中的标准特殊字符被正确识别。使用#NODEF命令将恢复你自定义的特殊字符。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:14:14 | 显示全部楼层

Re:ZMUD知识

六.zmud命令指南 (续)
//论坛限制每贴10000字符,严重助长灌水气焰!

zMUD中使用的特殊字符有
1 Command Char # 将紧随的字串解释为命令
2 Separator Char ; 分隔多个命令
3 Variable Char @ 用于扩展变量的值
4 History Char ! 调用命令缓冲区中的命令
5 Parameter Char % 指出系统变量和函数
6 Movement Char . 调用路径变量或函数
7 Focus Char : 向指定窗口发命令
8 Quote Char ~ 紧随其后的特殊字符当作普通字符处理
9 Must be a space at the end *? *fool
实例:
#DEF
保存你当前使用的特殊字符并恢复系统默认的特殊字符
#DEF {xx$xxxxx }
保存你当前使用的特殊字符并回复默认的特殊字符,然后将@改为$。

disconnect
Syntax: #DI
Related: #CONNECT
断开当前的连接
实例:
#TRIGGER {你已陷入半昏迷状态} {#DI}
断线就不会被杀死吗?我没试过,hehe。

ECHO
Syntax: #EC string
Related: #SAY
在当前窗口中显示字串,类似与say命令。除了用于离线测试trigger似乎没有别的用处。
实例:

ERASE
Syntax: #ERA filenum
Related: #FILE
从硬盘中删除用#file打开的文件
实例:
#FILE 1 old.log
#ERA 1
删除old.log文件,需要先用#file命令打开。

EXEC
Syntax: #EXEC command
执行一个命令,命令中可以包括变量
实例:
#TRIGGER {^咖啡告诉你(*)} {#EXEC %1}
执行咖啡的指令。(我可没那麽傻)

FILE
Syntax: #FI number name
Related: #READ #WRITE
打开文件准备读写。zMUD可以打开10个文件,文件号1~5打开文本文件,能够按顺序读或追加,文件号6~10打开记录文件用于随机读写。如果nuber已经用于打开的文件,则前一个文件将被关闭。打开的文件只能位于zmud.exe所在的目录且不能是EXE,HLP和MUD文件。
实例:
#FILE 1 test.txt
打开text.txt作为文件1。

FIND
Syntax: #FIN
找出在当前地图上的定位,通过look命令用当前房间的描述比较地图数据定位匹配的房间,与automapper的菜单命令find作用相同。

FORALL
Syntax:#FO list command
逐条列出字串列表内容并执行命令。列表使用|分隔,逐个赋值给变量%i,并执行命令。
实例:
list=sys|ups|yahoo
#froall @list {kill %i}
我一定是疯了。

FREEZE
Syntax: #FR [value]
切分屏幕查看以前的显示,value=0表示恢复屏幕。这条命令相当于Ctrl-z或单击右边的滚动条。(所以没什么用)

GAG
Syntax: #GA [pattern]
Related: #UNGAG
如果pattern省略,命令将从屏幕上删除最后一行。如果包括pattern,将删除所有匹配行,相当于#ACTION pattern '#GAG'。
实例:
#ga 咖啡
这叫眼不见为净。

HELP
Syntax: #HE [command]
不带参数相当与从菜单中选择help,否则显示指定命令的参数。

H+
Syntax: #H+
Related: #H-
从命令缓冲区中取得下一条命令,只在使用过#h-命令后有效,相当于向下的箭头键。

H-
Syntax: #H-
Related: #H+
从命令缓冲区中取得上一条命令,相当于向上的箭头键。

HISTORY
Syntax: #HIS
显示命令缓冲区中的命令,每条显示的命令都带有行号,可以用!加行号来执行某条命令。!!执行最新的命令。!+字母将执行最近一个以!后字母开头的命令。命令缓冲区的大小默认为20,可由参数对话框改变。
你也可以用左键单击命令输入行左边的三角以弹出交互命令缓冲区对话框来选择命令,单击将命令送至命令输入行以供编辑,双击将命令直接送往MUD。
<tab>键可以配合命令缓冲区的使用,如果你用!加数字或字母,再按下<tab>键,命令将拷入命令输入行以供编辑。

实例:
#HI
显示最后20条命令

!!
执行最后一条命令

!3
执行命令缓冲区中的最后一条命令

!k
执行最后一条以k开头的命令

!k<TAB>
将最后一条以k开头的命令拷入命令输入行以供编辑

HIGHLIGHT
Syntax: #HI [pattern]
Related: #COLOR
如果省略pattern,最后一行文本将以高亮显示,如果包括pattern,匹配的文本将以高亮显示。相当于命令#ACTION pattern '#HIGHLIGHT'。

HOST
Syntax: #HO
Related: #CHAR #PW
返回当前连接的主机名

IF
Syntax: #IF expression true-command [false-command]
执行条件分支,如果表达式为真,执行true-command,否则执行falise-command(可选)。表达式中可以包含变量和运算子。
实例:
#if (@qn>30) {learn_skills}
在战斗中如果潜能达到了30,执行别名learn_skills返回师父处学习。
#if (@hp>10) {exercise @hp} {exert recover}
如果气大于10就修炼内功,否则补气。
#IF (@line =~ "You receive (%d) coins") {split %1}
如果变量@line与pattern "You receive (%d) coins"匹配,执行{split %1},判断匹配需要使用“=~”。

IGNORE
Syntax: #IG
Related: #T+ #T-
打开或关闭所有触发,第一次执行#ig 关闭所有触发,第二次执行恢复正常。

INPUT
Syntax: #IN string
将文本放入命令输入行,替换当前内容
实例:
#in get @item
扩展变量item后将命令置入命令输入行

KEY
Syntax: #KE key command
定义按键执行的命令,key值需注明按键的全名,例如:F1,CTRL-A 或 ALT-F2
实例:
#key F1 eat baozi
定义F1键执行eat baozi 命令
<ALT-D>={drink jiudai}
定义 ALT-D 键执行 drink jiudai 命令

KILLALL
Syntax: #KILLALL
删除所有的别名、宏、触发、<tab>缩写

LMAP
Syntax: #LM path command
Related: #LOOP
穿越指定的路径并在每个房间执行指定的命令,变量%i将记录房间数
实例:
#LMAP 3sn {#SHOW %roomname(%i)}
从当前的地图定位向南走三步,向北走一步,并显示每个房间的名称

LOAD
Syntax: #LOA filename
Related: #SAVE
装入指定的设置文件,filename中可以使用变量。注意:装入新的设置文件时,原来的设置文件中的改变不会被保存
实例:
#load dc
装入设置文件dc.mud。(.mud是默认的扩展名)
<F1>={#load combat};<F2>={#load cocial}
为战争与和平定制的设置文件分别用F1和F2载入

LOOK
Syntax: #LOOK
执行MUD的look命令并重新写入地图的房间数据


LOOP
Syntax: #LOO range command
重复执行由range指定数量的命令,range包括最小值和最大值,中间用逗号分隔,如果range中只有一个数字,默认的最小值是1,循环的次数记录在变量%i中,可在命令中调用。
实例:
#LOO 3 north
向MUD中送入north命令3次
#LOO 3,4 {get all from corpse %i}
取出第三和第四具尸体中的所有东西
#LOO @num {eat baozi}
吃包子@num口

LOG
Syntax: #LO [filename]
开始在给定的文件中记录从MUD中获得的文本,如果文件不存在,则建立文件并开始记录,如果文件已存在,则打开存在的文件并追加记录。省略参数用于开关记录
实例:
#LO test.txt
开始将MUD的所有输出记入test.txt
#LO
开关记录,如果正在记录,该命令将停止记录,否则开始记录

MAP
Syntax: #MAP direction
Related: #PATH
在当前路径上增加一个方向
#MAP north
如果当前路径是.s,则更新为.sn,同时向北移动一步

MATH
Syntax: #MAT variable expression
Related: #ADD
将表达式的结果赋值给变量。表达式中可以包括数字、逻辑运算和字符串函数,表达式中包含的变量将被扩展。
实例:
#MATH test (1+3)*4
将计算结果16赋值给变量test
#MATH test2 @test-4
如果@test的值是16,则变量test2将被赋值12
#ALIAS add {#MATH value %1+%2}
add 3 4
执行后变量value的值为7

MARK
Syntax: #MA
Related: #PATH
开始记录新的路径,正在记录的路径将被废弃

MEDIA
Syntax: #ME function
Related: #PLAY
向当前的多媒体设备发送命令,通常在#play之后使用,function中可以使用变量,可用的function依设备不同而不同值,一般有:

back 返回一步
close 关闭当前文件
eject 放弃当前设备
next 播放下一曲目
pause 暂停
paly 开始播放
prev 播放前一曲目
resume 恢复暂停的播放
rewind 从头开始播放
step 向前步进
stop 停止播放
实例:
#media next
如果正在播放CD,这个命令将播放下一曲目。

MEMORY
Syntax: #MEM
显示剩余内存
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:15:46 | 显示全部楼层

Re:ZMUD知识

六.zmud命令指南 (续)
//论坛限制每贴10000字符,严重助长灌水气焰!


MENU
Syntax: #MEN command
执行一个菜单命令
实例:
#MENU {File|Exit}
执行退出命令
#MENU {Actions|Make Button}
弹出make button对话框

MESSAGE
Syntax: #MES string
在小窗口中显示指定的信息,十秒钟后自动关闭

NAME
Syntax: #NA string
改变当前窗口的名称,默认的窗口名由角色数据库定义。
实例:
#name tank
将当前窗口名改为tank。你可以用tank:command 将命令发往这个窗口。

NOOP
Syntax: #NO
空命令,什么也不做。

NODEF
Syntax: #NODEF
Related: #DEFAULT
恢复被#def命令保存的特殊字符。

NOMAP
Syntax: #NOMAP [pattern]

避免匹配的行干扰地图分析,如果省略参数,前一个引起触发的行将被地图忽略。
实例:
#TRIGGER {闲聊} {#NOMAP}
#NOMAP {闲聊}
以上两条命令作用相同,任何包含“闲聊”的行将不会被地图分析。

OK
Syntax: #OK
Related: #SLOW #STOP
沿定义的路径移动时放慢脚步。
实例:
#TRIGGER {的出口是} {#OK}
当前一步被确认时,允许下一步的行动

PATH
Syntax: #PA [pathname]
Related: #MARK #RETRACE #MAP
省略参数时,显示当前记录的路径。如果包括参数pathname,当前的路径被存入指定的pathname。方向字符(.)将自动添加在路径的开头。
实例:
#pa
显示当前记录的路径。
#pa magic
将当前路径存入变量 .magic。

PICK
Syntax: #PI val1 [val2 [val3 ...]]
列表中最多可以指定99个值,用户可以选择一个或多个选项作为命令执行,按<Esc>键放弃。
命令中可以使用p:string 定义string为对话框提示,或用o:1指定只能选择一个选项,加上*号的val将作为默认选项。可以使用caption:command方式在对话框中显示命令提示caption。
实例:
#pi {get all from corpse} {get gold from corpse} {get silver from corpse}
在对话框中显示三条命令供用户选择
#pi {p:选择命令} {o:1} {*get all from corpse} {get gold from corpse} {get silver from corpse}
用“选择命令”作为对话框提示,{o:1}指定只能选择一条命令,*表示get all from corpse 作为默认命令。
#pi {p:选择命令} {o:1} {ALL:get all from corpse} {GOLD:get gold from corpse} {SILVER:get silver from corpse}
用ALL GOLD SILVER作为命令提示

PLAY
Syntax: #PL filename
Related: #MEDIA
播放 wave, midi, avi, cd 或其他媒体,如果包括驱动器号,则播放音乐CD。
实例:
#play start.wav
播放start.wav 文件
#play d:
播放音乐CD。
sound=ouch.wav
#tr {看起来想杀死你} {#play @sound}
触发声音警告

PROMPT
Syntax: #PR aliasname
弹出对话框显示指定的别名或变量的值。

PW
Syntax: #PW
Related: #CHAR
向MUD发送当前的口令,口令不会在输出屏幕上回显

READ
Syntax: #REA filename
#REA n [rec]
1、逐行读入给定的文件并执行每一行。
2、读入第n个文件的第rec个记录。文件由file命令读入。如果n是1~5,则给定的文件是文本文件,rec表示行号,省略rec时,读入下一行。如果n是6~10,表示是一个结构文件,指定的记录将被读入,省略rec时,读入下一个记录。
实例:
#rea mud.txt
逐行读入并执行mud.txt。
#file 1 mudlist.txt
#read 1 10
读入mudlist.txt的第十行

RECALL
Syntax: #RECALL
使用地图返回teleport的起点

RECORD
Syntax: #REC [aliasname]
Related: #ALIAS
开始或停止记录别名。第一次键入#record时,zMUD开始记录送往MUD的所有命令,你可以再次键入#record查看已记录的命令,结束记录时,键入#rec加指定的别名保存。#rec off 将放弃记录别名。
实例:
#REC
starts recording
n
w
open door
#REC
displays: Current alias: n;w;open door
#REC temple
将命令 n;w;open door 存入别名temple 并停止记录。

RESET
Syntax: #RES n
Related: #FILE
重设文件为初始状态

RETRACE
Syntax: #RE [pathname]
Related: #PATH
沿指定路径倒走,如果pathname省略,则沿当前正在记录的路径返回。

SAY
Syntax: #SA text
在屏幕上回显文本,类似#sh 命令。

SAVE
Syntax: #SAV [filename]
Related: #LOAD
保存当前设置文件

SCROLL
Syntax: #SC pattern [lines]
显示scrollback buffer中所有与pattern相匹配的行,除非指定lines。

SEND
Syntax: #SE filename [prefix] [postfix]
向MUD中发送一个文本文件,并可在每一行中加上前缀或后缀
#SEND notes.txt {tell coffee}
把notes.txt的内容告诉coffee,如果同时使用kill命令,效果更好。*grin

SESSION
Syntax: #SES [character-name|hostname port]
使用指定的角色或主机打开新任务
实例:
#SES river
#SES 168.160.244.39 6666

SHOW
Syntax: #SH text
在屏幕上回显文本,不发往MUD,类似于#say,通常用于测试触发。

SLOW
Syntax: #SL path
Related: #STEP #STOP #OK
沿路径慢走,前一步得到确认后再执行下一步。#ok命令用于确认行动完成,#stop用于放弃继续前进,#step继续被#stop放弃的行程。
实例:
#SL .n2es
north 命令首先被发往MUD,然后等待确认以执行下一个命令east,如果不能确认,余下的行程将被放弃。

STATUS
Syntax: #ST text
定义状态条,text 中可以显示变量,每当变量改变,状态条也随之改变。
例:
#st {真气: @hp 内力: @nl 潜能qn 道行: @dx}
在状态条中显示有关数据

STEP
Syntax: #STE
Related: #SLOW #STOP #OK
恢复被放弃的沿路径慢行

STOP
Syntax: #STO
Related: #SLOW #STEP #OK
放弃继续沿路径慢行,通常在触发中使用。
实例:
#TRIGGER {五庄观第三代弟子 咖啡(%w)} {#STOP;kill %1}
沿路杀人越货,很刺激吧?

STW
Syntax: #STW string
Related: #STATUS
设置状态窗口,状态窗口类似与状态行,但能包括更多内容,设置%ansi颜色并用%cr换行。可以使用菜单命令window/status 打开,在其上单击右键编辑。
实例:
#stw {当前道行:@dx %cr 初始道行:@dx0 %cr 战斗时间:@time1}
显示获取道行的速度

T+
Syntax: #T+ classname
激活触发类
T-
Syntax: #T- classname
关闭触发类,适当的运用以上两个命令可以避免机器人误动!

T?
Syntax: #T?
Related: #TIMER #TS
显示计时器(timer)的剩余时间

TAB
Syntax: #TA word
增加一个词到<tab>键扩展列表

TELEPORT
Syntax: #TE room [zone]
Related: #WALK
改变你在地图上的位置,相应的MUD世界中的位置不变。room可以是short name或room number。

TIMER
Syntax: #TI
Related: #T? #TS
开关计时器,对剩余时间没有影响。

TRIGGER
Syntax: #TR pattern command [classname]
建立或显示一个触发,与#action功能相同
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:16:16 | 显示全部楼层

Re:ZMUD知识

六.zmud命令指南 (续)
//论坛限制每贴10000字符,严重助长灌水气焰!

TS
Syntax: #TS [value]
Related: #TIMER #T?
设置计时器时间或重新计时,value 指明以秒为单位的时间间隔,如果省略,则重新计时。

TYPE
Syntax: #TY filenum [pattern]
Related: #FILE
在屏幕上显示文本文件,如果包括pattern,则只显示包含pattern的行。pattern中可以包括通配符。

TZ
Syntax: #TZ
Related: #TS
将计时器置零

UNALIAS
Syntax: #UNA alias
Related: #ALIAS
删除一个别名

UNGAG
Syntax: #UNG
Related: #GAG

避免某行被忽略,通常用在触发中undo #gag命令。
实例:
#tr {咖啡告诉你} {#gag}
#tr {来吃人参果} {#ungag}

UNKEY
Syntax: #UNK key
Related: #KEY
删除一个宏键

UNTRIGGER
Syntax: #UNT pattern
Related: #TRIGGER
删除一个指定pattern的触发

UNVAR
Syntax: #UNV variable
Related: #VAR
删除一个变量
UNTIL
Syntax: #UN expression commands
执行命令直到表达式为真(true or non-zero)
实例:
#until (#hp>50) {quit}

URL
Syntax: #URL url
在浏览器中打开一个URL
实例:
#URL http://rzzxyj.533.net
注意需要两个~!参见通配符。

VARIABLE
Syntax: #VA variable value
变量赋值,变量前不需要@。也可以使用variable = value or variable := value.

VERSION
显示zMUD版本

VERBATIM
Syntax: #VERB [value]
开关分析模式,value用于指定分析模式,效果与使用菜单命令相同。

WAIT
Syntax: #WA [time]
暂停进一步的处理直到从主机收到新的信息,如果指定time,则暂停指定的时间,time以毫秒为单位。

WALK
Syntax: #WAL room
快速到达地图上指定的标记处,room 是被事先定义的short name。

WHILE
Syntax: #WH expression commands
当表达式为真(true or non-zero)时执行命令

WINDOW
Syntax: #WIN name [string]
打开一个新窗口
实例:
#FORALL @eqlist {#WIN status %i}
打开窗口status并在其中显示装备列表。

WIZLIST
显示zMUD的作者

WRAP
Syntax: #WR [column]
设置文本回绕,如果指定column,则在指定的列处换行。

WRITE
Syntax: #WR n value [rec]
Related: #READ
写一个value到文件,如果n在1~5间,表示文本文件,value将被追加在文件尾部,rec被忽略;如果n在6~10间,则value写入记录rec,省略rec时,value加在文件最后。

#tr {离开游戏} {#wr 1 {%ctime}}
记录在MUD中浪费的时间!

YESNO
#YE question yes-command no-command
显示一个带按钮的确认对话框,<Esc> 放弃执行命令。可以使用{按钮提示:command}格式,*号用于表示焦点所在,enter 立即执行。
实例:
#YESNO Where to you want to go today? {Temple:.temple} {Guild:.guild} {*Microsoft:#URL http://www.microsoft.com}

下面是Pattern中可以使用的特殊字符
* 匹配任何数量的字符或空格
? 匹配一个字符
%d 匹配任何数量的数字(0-9)
%w 匹配任何数量的字母(a-z)
%a 匹配任何数量的字母或数字(0-9,a-z)
%s 匹配任何数量的空格(spaces, tabs)
%x 匹配任何数量的非空格
[range] 匹配任何数量的在[range]中列出的字符
^ 强制从一行的开始进行匹配
$ 强制匹配到一行的结束
(pattern) 保存匹配的式样到参数%1~%9
~ 包括其中的字符不会被解释为特殊字符
{val1|val2|val3|...} 匹配其中列出的任何特殊的串
{^string} 不匹配其中包括的串
使用[range]时,你可以在其中列出需要的字符例如 [abc] 或使用范围 [a-c] 。
为了匹配特殊字符本身,可以使用~将特殊字符括住,例如:~[test~] 将匹配字符串 [test] 而不是作为 [range] 来匹配。
只使用$可以匹配一个空行。

别名中使用参数的例子
我们在解谜过程中向npc提出的问题通常是以:
ask npc about here
ask npc about rumors
ask npc about name
这样三个命令开始的,把他们定义成别名可以节省一些时间,像这样:
#al askn {ask %1 about here;ask %1 about here;ask %1 about name}
可如果npc的名字有两个单词,或一堆同名的npc中你要问其中第二个,就需要把别名中的参数改为%-1,此时执行askn bing 2或askn tian bing就不会出错了。
为了更好的理解参数的作用,试试执行下面的命令:
#al tt test1 %1 test2 %2 test3 %-1 test4 %-2
看看执行{tt a1 a2 a3 a4 a5}的结果,一切都清楚了吧?

表达式
当执行运算时,如果所有参数均为数字,则执行数学运算,否则执行字符串操作。以下是一些常用的表达式(v1和v2代表变量或另外的表达式):
v1+v2 如果v1或v2不是数字,则执行字符串相加
v1-v2 从v1中减去v2
v1*v2 相乘
v1/v2 v1除v2,结果不含小数
v1\v2 取模
v1&v2 逻辑运算and
v1 and v2 同上
v1 | v2 逻辑运算or
v1 or v2 同上
v1 xor v2 逻辑运算xor
v1 = v2 如果v1等于v2返回真
v1 > v2 如果v1大于v2返回真
v1 < v2 如果v1小于v2返回真
v1 >= v2 如果v1大于等于v2返回真
v1 <= v2 如果v1小于等于v2返回真
v1 <> v2 如果v1不等于v2返回真
v1 != v2 同上
v1 =~ v2 如果表达式v1中的pattern包含v2,返回真
v1 ~= v2 同上
-v1 返回v1的负值
!v1 逻辑运算非
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:16:29 | 显示全部楼层

Re:ZMUD知识

如何在MUD中自动问候


当一位player联线进入时,或者当某人走到你身边时,你可以自动向他进行问候,岂非很方便?下面我们来讲讲如何对此进行设计。  

1.定义目标变量

    首先,我们需要确定自动问候的条件,即是联线进入时,还是走过来时?或者其他情况时?下面我们以联线进入时为例。首先需要设置一个变量来存放目标的姓名,所以,按下zMUD顶部的“Variables”按钮,选择“New”,在“Variable”中输入变量名字,我们把它取为 WH_ChineseName。

2.获得目标信息

    当某人联线进入时,我们需要把他的信息从屏幕上抓下来。这就需要设计一个trigger。按下zMUD顶部的“Triggers”按钮,选择“New”,然后在“Class”中建立一个新的类“问候”。最后添入下面内容,按下“ok”按钮。

pattern: (%x)连线进入这个世界。
command: WH_ChineseName=%1;say @WH_ChineseName, 来啦?欢迎欢迎!

    到此,我们只需激活(Enable)“问候”类,当我们呆在客栈时,一旦有人联线进入,自动问候就开始工作了。

    上面可以看出,这是一种开放型的问候,你和目标讲话别人都看得见,如果你希望只有目标看到,就只能用 tell或 whisper 命令了。tell 或 whisper 需要目标的英文 ID,上面的例子中只抓到目标的名字,很明显,它是无法做到这一点的。所以我们还需要考虑怎么得到目标的英文 ID。

3.如何从中文名字得到英文 ID

    从手工得角度可以知道,我们可以通过 who -l 或 finger 来找到目标的英文 ID ,而对于同一地方的人,我们可以用命令“id here”看到当前在场的人或物的中文名称和对应ID,如:

> id here
在这个房间中, 生物及物品的(英文)名称如下 :
东方英雄 = hero
小影 = yin
木头木脑 = nonee
南城客栈留言板 = board
千里眼 = bigeye, youchai, chai
店小二 = xiao er, xiaoer, xiao, waiter, er

    对于机器人而言,它们都是在模拟人的行为,我们这里要用的方法也不例外。首先我们先为 ID 本身定义一个变量 WH_IdName,过程和前面一样,不再重复。现在接着说,已经明白的是,我们可以用某个具体的名字用 trigger 来抓他相应的英文ID, 如我们用以下内容可以得到东方英雄的 ID:

pattern: 东方英雄(%s)= (%x)
command: WH_IdName=%2

    这样我们就可以用 "tell @WH_IdName hello!" 来对目标问候了。但是,面临的问题没有这么简单,因为事先你并不知道你的对象是谁,而是随机的任何一个人。所以我们需要用到 zMUD 提供的更高级的 triggers 功能:Variable triggers,即变量triggers,顾名思义,我们通过该功能可以动态改变我们的triggers。这正是我们所需要的!如果动态地改变上面“东方英雄”这一名字,就万事大吉了。

我们先把上面的 pattern/command 改为:

pattern: (@WH_ChineseName)(%s)= (%x)
command: WH_IdName=%3;tell @WH_IdName hello! Welcome

然后,还需要修改前面我们的简单问候trigger(前面第2点)为:

pattern: (%x)连线进入这个世界。
command: WH_ChineseName=%1;id here

    注意,这两个 triggers 都归于同一个“问候”类中,这样到此为止,我们只须激活该类(Enable Class),我们的完整的自动问候就会开始工作了。

4.总结

    举一反三,通过这个例子,我们学会一种基本的和一种高级的获取屏幕信息的方法。只要我们能从屏幕上获得需要的信息,就可以设计出更多,更复杂的机器人,同时提高加强我们的思维和解决问题的能力,不再简单地整天打来打去。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:16:48 | 显示全部楼层

Re:ZMUD知识

有关Zmud的设置问题


【有关Zmud的设置问题】

字体

如果你是高手,请跳过这一段看下面几段,如果你是一位初学者,就跟我来:初入泥潭,除了

选择一个好点的站点以外,还要学会怎么对Zmud进行设置,使自己打起来更得心应手。那么,

第一个问题就是选择字体罗!Zmud工具栏上有一个Font按钮,如果是中文版的就是字体,单击

它之后,出现了一个熟悉的对话框,这下选择你自己喜欢的字体。我个人认为选择规则的12pt

宋体比较好。选择完毕后,按确定吧!

颜色

有的机器人里面,颜色过于鲜艳或暗淡,使整个窗口看起来很不舒服,严重影响了我们玩游戏

的情绪。这个时候你可以单击工具条上的“Color” 或“颜色”,选择你喜欢的颜色,如果不

行的话,就选择“把正常的颜色调暗”或是“把正常的颜色调亮”就可以了。

别名

别名嘛,实际上就是把一系列命令包含在一个命令里面。工具栏上最左边有呢,单击“Alias”

或者是“别名”,你看,里面是不是有一些命令?那就是你的机器人里要用到的,可不要乱删

啊!有关别名我要在“触发器”里详细介绍。

声音

是不是觉得Mud默认的启动声音太生硬了?换一个吧!在工具条上的“Sounds”或“声音”里

面,有四个文字框,旁边有一个类似与打开的文件夹的图标,单击它你可以选择你喜欢的声音。

你也可以不要声音,把文字框内的路径删了就行了。

文件设置

Zmud的设置文件后缀名为: *.mud,有时候启动Zmud时,默认的机器人不是我们想要的,还得

去载入,真是烦透了!其实很简单,只要在出现让你选择站点的时候,单击对话框右上的“Fi

les”或“文件”,在Deafult Mud Files下输入你想要的文件的文件名,上面一个是它的路径,

看一看正不正确,不正确的话改过来,不然机器人保存时会出错。

其他

有时,我们不希望别人看到我们输入的命令,例如我们输入密码这些,怎么办呢?只要单击工

具条上的“设置”按钮,如果是英文版的话,也不用害怕,选择从左方数下来第2个小框,把他

前面的勾去掉就可以了。

PS.干这些都要在工具条上单击,如果工具条不在了怎么办呢?不要怕,单击Edit里面的Show

Toolbar就可以罗!

【有关Zmud的设置问题】

字体

如果你是高手,请跳过这一段看下面几段,如果你是一位初学者,就跟我来:初入泥潭,除了

选择一个好点的站点以外,还要学会怎么对Zmud进行设置,使自己打起来更得心应手。那么,

第一个问题就是选择字体罗!Zmud工具栏上有一个Font按钮,如果是中文版的就是字体,单击

它之后,出现了一个熟悉的对话框,这下选择你自己喜欢的字体。我个人认为选择规则的12pt

宋体比较好。选择完毕后,按确定吧!

颜色

有的机器人里面,颜色过于鲜艳或暗淡,使整个窗口看起来很不舒服,严重影响了我们玩游戏

的情绪。这个时候你可以单击工具条上的“Color” 或“颜色”,选择你喜欢的颜色,如果不

行的话,就选择“把正常的颜色调暗”或是“把正常的颜色调亮”就可以了。

别名

别名嘛,实际上就是把一系列命令包含在一个命令里面。工具栏上最左边有呢,单击“Alias”

或者是“别名”,你看,里面是不是有一些命令?那就是你的机器人里要用到的,可不要乱删

啊!有关别名我要在“触发器”里详细介绍。

声音

是不是觉得Mud默认的启动声音太生硬了?换一个吧!在工具条上的“Sounds”或“声音”里

面,有四个文字框,旁边有一个类似与打开的文件夹的图标,单击它你可以选择你喜欢的声音。

你也可以不要声音,把文字框内的路径删了就行了。

文件设置

Zmud的设置文件后缀名为: *.mud,有时候启动Zmud时,默认的机器人不是我们想要的,还得

去载入,真是烦透了!其实很简单,只要在出现让你选择站点的时候,单击对话框右上的“Fi

les”或“文件”,在Deafult Mud Files下输入你想要的文件的文件名,上面一个是它的路径,

看一看正不正确,不正确的话改过来,不然机器人保存时会出错。

其他

有时,我们不希望别人看到我们输入的命令,例如我们输入密码这些,怎么办呢?只要单击工

具条上的“设置”按钮,如果是英文版的话,也不用害怕,选择从左方数下来第2个小框,把他

前面的勾去掉就可以了。

PS.干这些都要在工具条上单击,如果工具条不在了怎么办呢?不要怕,单击Edit里面的Show

Toolbar就可以罗!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:17:05 | 显示全部楼层

Re:ZMUD知识

即学即用zMUD


zMUD是Windows平台上最优秀的MUD客户端软件。作为老牌的基于图形用户界面的MUD客户端程序,zMUD拥有许多强大的功能。本文将对zMUD的常用工具进行一些初步的叙述,希望能为MUD的新手提供一些方便。

zMUD 是一个共享软件。包括基于Windows 95/NT平台的32-bit版本(不支持Win32s)和基于Windows 3.x,Windows 95/NT,OS/2(Windows Mode)平台的16-bit版本。您可以到本站下载区下载其最新版本。

zMUD所提供的工具需要用户根据不同的MUD进行定制。定制时即可以使用命令行的方式,也可以使用图形向导的方式。并且所有工具均可以在离线方式下定制。

一、连接向导的使用

首次启动ZMUD,会首先弹出注册窗口。此时选择Evaluate,开始试用。

如果您使用的是5.22,此时请点击NEW按钮;如果是4.62则请点击Use the Connection Wizard to create a NEW character按钮。这时会弹出创建连接窗口。在窗口中你会看到一些ZMUD为用户准备好的MUD列表,选择相应的MUD名称,您就可以方便的连接到这些MUD。但这些MUD都是英文的,如果希望连接到中文MUD,您必须自己来输入连接所需的MUD地址。

MUD的地址分为两个部分:Host和Port。比如中文MUD"天龙八部"的地址为:
Host 202.130.251.3
Port 8888
您只要将它们填入窗口的相应位置(如图1)即可。下面就可以按Connect按钮进行连接了。

由于本文是讨论ZMUD的使用,而不是介绍MUD本身,所以在继续读这篇文章之前,你必须对MUD有一个初步的认识。否则,你会对下面的介绍感到不知所云。你可以在MUD中使用help命令来察看一些MUD的有关知识。也可以到我的主页http://www.chinazmud.com来看看。

二、Aliase的使用

aliase是一种命令简化工具,可以将一个较长的命令由一个较短的命令替代,它是zMUD中最常用到的工具,也比较容易掌握。

命令格式:#ALIAS 简化名 {命令内容}

在一些MUD中,向师傅学习需要输入以下指令:learn <技能> from master with <精神>。我们可以用#alias lm {learn %1 from master with %2}来完成命令的简化。在使用时,就可以输入 lm force 1 来代替 learn force from master with 1 了。当然,还可以将命令进一步简化成#alias lf {learn force from master with 1}。这样,我们就可以直接输入lf来学习force了。第二种方法在使用时比较方便,但需要定制多个aliase。

zMUD中提供了自动行走工具PATHS,但使用alias可以更灵活的定制步速和加入其它命令。比如可以使用#alias fw {w;w;w;n;n;n;#wa 1000;e;e;e;s;fillwater}来完成从某地到某地然后灌水的任务。其中,#wa 1000是延时命令。如果你使用alias来执行很长的一串命令,中间一定要加入延时,否则会得到MUD中监督机制的特殊待遇。延时1000为一秒。各个命令要用";"号隔开。

常用aliase:

#alias ex {exercise 30}
#alias eq {exert recover 30}
#alias es {exert refresh 30}
#alias gc {get all from corpse}
#alias sb {study book 30}

以此类推,你去摸索适合自己的aliase吧。
(如果不明白这些命令是干什么的,你就要好好读读MUD的help了)

注意:在使用aliase时,一定不要用与现有命令同名的简化命令,这将会使原有命令失效。比如:#alias l {learn %1 from master with %2},这样会使原有的l(look)命令失效。
觉得使用命令行的方式定制aliase比较麻烦,你可以使用图形向导的方式来定制aliase。仍然以向师傅学习的命令为例。首先点击ZMUD的aliases按钮,这时会弹出一个设制窗口。按下Ne w按钮,填入相关内容,然后按Save按钮,就完成了aliase的设定。这里需要注意的是,ZMUD4.62中定制aliase时,如果需要输入多个命令,在各个命令之间必须加上";"号,而在5.22中各个命令之间只要加入回车即可。

在多数MUD中也提供了aliase命令,可以使用"help aliase"查询。但建议不去使用MUD中的aliase,而是用ZMUD提供的,这主要是因为MUD中的aliase定制和更改起来都不太方便,而且还要花费上网时间。

三、Variable的使用

Variable也就是编程中常说的变量.

zMUD中提供的变量工具,使我们可以方便的将MUD中的各种数据甚至是文字资料进行处理,并用于其它工具当中.使用Variable时你可能会感觉它与Aliase有些相似.它们之间最大个不同点在于Aliase只能在命令行中展开,而Variable可以在任何地方展开.当你需要展开一个变量(Variable)时,只要在变量的前面加上一个@就可以了.

定义一个变量可以使用#VAR命令.比如:

#VAR A 30
这个命令定义了变量A,并将30付值给A.当你输入exercise @A时,变量将被展开,命令成为exercise 30.

本文为入门级文章,更加详细的Variable相关内容会在泥巴城堡的其它文章中进行介绍.

四、Trigger的使用

Trigger是zMUD中最强大也是最复杂的工具。它强大的可以帮你自动完成你要做的任何事情;它复杂的要求你要有程序员的头脑才能很好的驾驭它。如果想制作出强大的Trigger脚本(机器人),需要综合运用zMUD中的各种工具。由于本文是入门篇,所以只介绍一些Trigger的基本概念。

Trigger可以根据所获得的信息自动做出判断和反应。语法如下:
#TRIGGER {pattern} {command}

当屏幕上显示的信息与pattern中的描述相同时,就会执行command中的命令。比如:
#trigger {看起来想杀死你} {#beep}
这是一个自动报警的机器人,如果有人对你下kill命令,你的计算机就会用你指定的beep sound来报警(在ZMUD4.62中设定beep sound,请点击工具条中的sound按钮,然后点击beep sound后面的文件夹,指定一个.wav或.mid文件即可。在5.22中请点击Prefs按钮,然后选择Sound即可)。只要稍微注意一下你就会发现,这个trigger可能会发生误报警。当有人在闲聊频道中说道:某某看起来想杀死你,这个trigger就会产生误报警。不过这个简单的trigger对于那些喜欢一边睡觉一边玩MUD的人(怎么玩?)还是有些用的。

不要忘记为Trigger启一个名字,当你输入#trigger {看起来想杀死你} {#beep} alarm,你就建立了一个叫alarm的trigger。这有什么用吗?当然有用!一般情况下,你可能会拥有一大堆trigger,它们都有各自的用途。当你为它们启了名字,你就可以根据不同情况来决定打开那个trigger或关闭那个。指令为:
#T+ 名字 (打开一个trigger)
#T- 名字 (关闭一个trigger)

你同样可以使用图形向导的方式来定制Trigger(如图3),方法类似于aliase,这里不再复述。

如果想做出功能强大的自动"机器人"就要综合使用alias,variable
,tirgger等工具,并且经常要将多个trigger联合使用。这里我为您准备了一个实例。这是一个简单实用的trigger。它的作用是将各个交流频道的信息使用一个专用窗口显示。 [FrontPage Image Map Component]

很多玩家为了在作机器人时还能聊天,常常采用Multi-logoin,登陆一个专门聊天的dummy。使用机器人练功本来就是犯规的,再Multi-logoin就更加重了系统负担。如果使用聊天窗口,就可以大大减少Multi-logoin的人数。当然,即使你不使用Multi-logoin,聊天窗口也是很有用的。比如高手练功时,一次战斗可能持续很长时间,在这期间,你就可以使用专门的窗口来聊天,而不会被战斗信息所影响。

聊天窗口的使用非常简单。你只要在ZMUD中输入一下指令即可:

#TRIGGER {闲聊} {#CAP 2 chat;} chat
#TRIGGER {说道} {#CAP 2 chat;} chat
#TRIGGER {谣言} {#CAP 2 chat;} chat
#TRIGGER {告诉你} {#CAP 2 chat;} chat
#TRIGGER {回答你} {#CAP 2 chat;} chat

这个Trigger脚本使用了ZMUD中的CAPTURE命令,从而完成信息的捕获。如果你对捕获的原理有兴趣,可以查阅ZMUD中关于CAPTURE TEXT的帮助内容。
在这里为了保险起见我将信息捕捉了两行,如果你认为没必要可以改为一行: 图3

#TRIGGER {闲聊} {#CAP 1 chat;} chat
#TRIGGER {说道} {#CAP 1 chat;} chat
#TRIGGER {谣言} {#CAP 1 chat;} chat
#TRIGGER {告诉你} {#CAP 1 chat;} chat
#TRIGGER {回答你} {#CAP 1 chat;} chat

**当你设制完了Aliase、Variable和Trigger别忘了存盘:
在ZMUD的菜单中点击SETTINGS---SAVE。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:18:31 | 显示全部楼层

Re:ZMUD知识

zmud状态栏的制作


过ZMUD的玩家都应该知道它里面有一个状态栏,不是很大,但可以用来显示一些我们经常要查看的数据,比如气,内力,经验等等.老玩家们一定都把它用得好好了吧,呵呵,不过这篇东西是写给新手们看的,老家伙们千万不要觉得烦哦!^_^

  上面可以看到的信息有:经验,潜能,经验和潜能的增加值.经验和潜能的信息我们直接可以从hp的信息中用两个Trigger(触发器)获得:
?1.定义四个变量,EXP,EXPinc,QN,QNinc,在ZMUD中输入
??"#va EXP;#va EXPinc;#va QN;#va QNinc"
??"#va"命令是用来在ZMUD中定义变量的,EXP存放当前的经验值,EXPinc存放经验增加值,QN是当前的潜能,QNinc放潜能的增加值.
?2.用Trigger获得我们需要的经验值和潜能值,同样在ZMUD中输入
??"#AC {经验:%s(%d)} {#MATH EXPinc %1-@EXP;EXP=%1};
? ?#AC {潜能:%s(%d)} {#MATH QNinc %1-@QN;QN=%1}"
??"#ac"用来在ZMUD中定义一个Trigger,"#math"是一个计算指令,可以计算两个数值间的差值."#math"命令中是一个简单的计算,用当前的值减去变量中存放的值,得到一个增加值.
?3.右键单击ZMUD输入指令栏上方的状态栏,在状态行中输入
??"经验:@EXP 经验+:@EXPinc 潜能:@QN 潜能+:@QNinc".
??好啦,现在我们完成了状态行的前半部分,大家可以在《浪迹天涯》里输入hp试试啦,呵呵.
??接着看看气和内力的显示,也是用了两个Trigger:
?1.定义变量:在ZMUD中输入
??"#va curQ;#va maxQ;#va perQ;#va curNL;#va maxNL;#va perNL"
??分别对应当前气,气最大值,气百分比,当前内力值,内力最大值,内力百分比.
?2.建立Trigger:在ZMUD中输入
??"#ac {气??:%s(%d)/%s(%d)%s~((%d)~%~)} {curQ=%1;maxQ=%2;perQ=%3};
?? #ac {内力:%s(%d)%s/%s(%d)%s~((%d)~%~)} {curNL=%1;maxNL=%2;perNL=%3}"
?3.右键单击状态栏,输入
??" 气:@curQ/@{maxQ}(@perQ%) 内力:@curNL/@{maxNL}(@perNL%)"
??补充:如果想让ZMUD帮你自动计算经验和潜能的增长,只需要设定一个计时器,让ZMUD每隔一定时间执行一个"hp"指令就可以轻松搞定了.
??大功告成!在MUD里再次输入hp试试吧,看到你的成果了吗,gongxi,hehe!
  

bavis

版主

版主



UID 26919
精华 0
积分 0
帖子 195
阅读权限 1
注册 8-8-2006
状态 离线  #15发表于 20-8-2006 12:09 AM  资料 文集 短消息   
zmud颜色触发


zMUD的trigger允许在pattern中加入ANSI颜色代码,这样,引起触发不仅需要与从MUD中获得的文本匹配,而

且也需要颜色一致。这一特性在防止错误触发时非常有用。


例如:通常我们会在trigger中加入以下内容以防遭到NPC或PKer的毒手,


#tr {^(你已经陷入半昏迷状态,随时都可能摔倒晕去)} {quit}


注意:pattern中的符号(^)强制zMUD从一行的头部开始触发,不能省略,否则随便某人chat一句你就得丢

盔卸甲,狼狈退出,以后还怎麽在江湖上混?


但是,由于某些我也不知道的原因,在一些机器上,符号(^)不能正常发挥作用,这时就要用到颜色触发

了。


按以下步骤建立颜色触发


1、在MUD输出窗口中选择需要引起触发的行;


2、在建立trigger窗口中单击new建立一个新的触发;


3、在options选项卡中的other options中选中color trigger;


4、返回trigger选项卡,在pattern字段中用用Ctrl-v粘贴在步骤一选择的行,然后在command字段填入需要

的命令,一个需要颜色匹配的触发就完成了。


注意:一定要用Ctrl-v粘贴,而不能使用鼠标右键的粘贴命令。


你也可以使用#color命令来建立一个颜色触发。


另外,ANSI颜色序列由字串“%e[xxm”定义,其中xx是ANSI颜色值,定义如下:


0 无属性 1 高亮 2 低亮 3斜体 4下划线 5闪烁 6快速闪烁 7反向显示 8 不可见;

前景颜色:

0黑 1兰blue 2绿 3蓝绿色 4红 5紫红 6棕 7灰 14黄 15白 128粗;

前景高亮加 8 背景加深为*16 粗体加128;

前景颜色:

30 黑 31红 32绿 33黄 34 兰 35深红 36深兰 37 白 ;

背景颜色:

40 黑 41红 42绿 43黄 44 兰 35深红 36深兰 37 白


因此,本文开头提到的逃命触发的例子现在可以写成:


#tr {你%e[31m已经陷入半昏迷状态,随时都可能摔倒晕去} {quit}


再也不用担心错误触发了。
  

bavis

版主

版主



UID 26919
精华 0
积分 0
帖子 195
阅读权限 1
注册 8-8-2006
状态 离线  #16发表于 20-8-2006 12:11 AM  资料 文集 短消息   
机器人之深入研究


  在zmud中提供了一个内建的地图编辑器可以帮助我们绘制mud世界的地图,避免在神秘莫测的mud世界中迷途不返。为了绘制一张完整的地图,需要走遍这个世界的每一个角落,这实在是一件费时而且乏味的事情。利用zmud提供的有关命令和函数,我们可以编写一个自动绘制地图的机器人,简单快速的完成这项工作。
一、配置zmud的automappr

  为了使automapper可用,需要针对不同的mud对automapper进行一些简单的配置,以下以《西游记》为例,简要说明配置过程:

打开automapper,选择菜单edit/preferences...;
在strings的look command中填入look;
在full parsing、brief parsing、look parsing三页中的exit pattern中填入“的出口是”,exit types选 whole words,选中exit in prompt;
在brief parsing页中将BRIEF Parsing order 框中的Room description删除;完成上述步骤,即可在《西游记》中使用automapper了,如果需要名副其实的auto,这只是万里长征的第一步。
二、修改speedwalking中的方向代码

  单击 zmud 顶行按钮Paths,选择Directions页,将其中的代码l改为m,别忘了改动与其相对应的代码h中的Reverse code:l。
  之所以需要修改方向代码,是因为在机器人运行时需要用的到这些代码中,l与 mud 命令 look 相同。

三、触发

  在triggers中增加class map,该类中包括以下triggers:

#TRIGGER {的出口是} {#wait 5000;0map} {map} 548
#TRIGGER {^什么} {#gag} {map} 548
#TRIGGER {闲聊} {#gag} {map} 548
#TRIGGER {谣言} {#gag} {map} 548
#TRIGGER {离开} {#gag} {map} 548

  上述triggers中,第一条的延时请根据网络速度自行调整,别名0map在下面会说明。其余几条的功能都是删除有可能对地图数据产生干扰的信息,通常可以用tune all off来避免大多数干扰,其他的干扰信息,例如:

太阳已经高高地挂在东方的天空中
xx走了过来...等等,请自行添加。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:19:11 | 显示全部楼层

Re:ZMUD知识

zmud状态栏的制作(续)


四、添加aliases

在zmud的中aliases中添加以下内容:

#ALIAS start {pass=1;#t+ map}
#ALIAS h {nw}
#ALIAS j {ne}
#ALIAS k {sw}
#ALIAS m {se}
#ALIAS 0map {mexit=%numwords(%roomexit(),|);
#if (%null(%roomnote(,))) {%roomnote(,##)} {%roomnote(,%roomnote(,)#)};
#math passn %len(%roomnote(,))/2;
#if (@passn>@mexit) {%roomnote(,);
#math passn @pass+1;
#math pass @pass+1};
#if (@passn>@mexit) {passn=1};
#if (@pass>3) {#t- map;pass=1};
#exec %word(%roomexit(),@passn,|)}

  至此,自动的地图绘制者正式完成,你只需打开地图编辑器,按下edit键,输入start;look就可以了。

五、主意事项

按照%roomexit()函数的输出顺序,最好从地图的西南角开始运行,如果从东南角开始,可使变量passn=mexit-passn+1;
对于较大区域(zone)的地图,本程序通常不能一次性完成整个地图的绘制工作,当程序停止时,你可以移动到地图的边缘,再次start;
当遇到有npc阻拦而无法进入的room时,程序会自动停止,此时需按下automapper的off键,然后重新开始,以免造成混乱;
zmud的automapper不能表示su,nd等方向的room,但用户可以将通过su、nd等方向连接的区域(zone)用automapper提供的teleport功能连接起来,具体做法请参考zmud的帮助文件。
如有任何疑问、意见和建议请与river联系。


自动行走机器人的研究
作者:蛋糕

今天我们的话题是路径。有人也许会说,这还不简单,用#rec命令做aliases不就行了?的确,这是可行的,但碰到象黄土大道这样的回路怎么办?什么?打几十个方向键?以前也许可以,现在我认为是很不好的方法了。假设,你从kaifeng西门外的黄土大道打几十个e回kaifeng。e打少了,也许你还在黄土大道上;e打多了呢,heihei,你可能已身处kaifeng东门外的黄土大道了。烦人吧?xixi。可见地图大了也不好呀!

有什么好的方法可以解决这样的问题呢?当然有,而且很简单,就是aliases加triggers,再用zmud的#t+ 和 #t- 命令就可以实现。现在我们结合一个实例来看看怎么做这样的一个路径。

如果我们要从dali+到kaifeng,这段路径我们可以分解为三段来看:

第一段:dali+ ---> 黄土大道(第一个黄土大道)

这段是确定的路径,我们可以直接把它做进aliases。我们用zmud的#rec命令来做。

命令格式是: #REC [aliasename]。解释为开始或停止记录aliases。第一次键入#record(可缩写为#rec)时,zMUD开始记录送往MUD的所有命令,你可以再次键入#record查看已记录的命令,结束记录时,键入#rec加指定的字符保存。#rec off 将放弃记录aliases。如:键入#rec,屏幕上显示:“starts recording”,键入s;s;s;s;open door,键入#rec,屏幕是出现“displays:current aliases s;s;s;s;open door”,键入#rec go,就将命令“s;s;s;s;open door”保存到aliases “go”里了。下次要用到“s;s;s;s;open door”就可以键入go就行了。好,我们把从dali+到第一个黄土大道用#rec命令记录下来。键入#rec,再从dali+走到第一个黄土大道,键入#rec kaifeng。我们就完成了第一段路径了。打开zmud aliases按钮,找到kaifeng,看看command里是什么。应该是“n;n;n;n;n;n;n;n;n;ne;”。对吗?上述aliases也可以用zmud #alias命令直接在zmud输入框里写成:#al {kaifeng}{#9 n;ne}

第二段:黄土大道 ---> 聚宝门

这段路径是不确定的回路,我们从第二个黄土大道开始,为什么是第二个黄土大道呢?因为第一个黄土大道是确定的,方向为ne。我们在上面的aliases里已经做好了,所以第二段路径是从第二个黄土大道开始的。打开zmud的triggers按钮,我们来做一个triggers,class 为“north”,pattern 是“黄土大道 -”,command是“n”。这个triggers可写成: #tr {黄土大道 -} {n}{north}。在这个triggers里的options选项里选上when loaded:disable。关上这个triggers。第二段完成。

第三段: 聚宝门 ---> 汴梁城中心

这段路径也是确定的。做个triggers就行了。#tr {聚宝门 -}{#6 n;}{north},也把这条triggers在options选项里选上when loaded:disable,关上triggers。

ok,dali+到kaifeng的路径基本完成了,下面就是让他们连起来,这里我们要用到一个在mud里经常要用到的命令:#t+ 和 #t-

命令格式:#T+ classname,解释为打开classname的triggers。如,要打开上述我们做的triggers,就键入#t+ north。打开triggers按钮,看看classname 为north的triggers是不是enable了?

命令格式: #T- classname,解释为关上classname的triggers。键入#t- north,看看classname为north的triggers是不是disable了?

好了,我们来加到我们刚才做的aliases和triggers里去。打开aliases按钮,找到kaifeng这个alias name,在command里开头的地方加入“#t+ north”。这条aliases改为“#t+ north;#9 n;ne;”。如果这时候在dali+键入kaifeng,就会走到汴梁城中心停下来。试试看,hehe。我们的路径做好了吗?shake。没有。如果这时候你打开triggers按钮的话,你会发现class为north的triggers还开着,所以我们要在到了汴梁城中心的时候及时地关上class为north的triggers。怎么关?对了,用#t- north来关,加到哪里呢?又对了,在“聚宝门-”那条triggers里加上“#t- noth”。这条triggers的command改为“#6 n;#t- north”。再到dali+走一次试试看。hehe,成功了。安全走到kaifeng,而且打开的triggers都关上了。从dali+到kaifeng的路径就完全做好了。

用同样的方法,我们还可以做从kaifeng+到泰山,到蓬莱的路径。这里我不一一说了。要提醒大家的是,做到泰山和蓬莱的路径不要用“黄土大道-”来做pattern,要用“这里的明显出口是xxx 和 xxx”来做pattern,因为那里的黄土大道分为好几种类型,仔细观察一下。hehe。下面给出我做的路径,供参考。

1、 dali+ ---> kaifeng:

#tr {黄土大道 -} {n} {north}

#tr {聚宝门 -} {#6 n;#t- north} {north}

#al {kaifeng} {#t+ north;#9 n;ne;}

2、 kaifeng+ ---> dali+

#tr {这里明显的出口是 north 和 south。} {s} {south}

#tr {这里明显的出口是 northeast 和 south。} {#9 s;#t- south} {south}

#tr {这里明显的出口是 southwest 和 north。} {sw} {south}

#al {dali} {#t+ south;#6 s;}

3、kaifeng+ ---> taishan

#tr {这里明显的出口是 east 和 northwest。} {e} {taishaneast}

#tr {这里明显的出口是 northeast、west 和 north。} {#t- taishaneast;n;#8 n;sweat;} {taishaneast}

#tr {这里明显的出口是 southeast 和 west。} {se} {taishaneast}

#tr {这里明显的出口是 west 和 east。} {e} {taishaneast}

#al {taishan} {#t+ taishaneast;#4 e;}

4、taishan ---> kaifeng+

#tr {这里明显的出口是 west 和 east。} {w} {taishanwest}

#tr {这里明显的出口是 southeast 和 west。} {w} {taishanwest}

#tr {这里明显的出口是 east 和 northwest。} {w} {taishanwest}

#tr {东安门 -} {#t- taishanwest;#6 w;} {taishanwest}

#al {hometaishan} {#t+ taishanwest;#9 s;}

5、kaifeng ---> penglai

#tr {这里明显的出口是 northeast、west 和 north。} {ne} {penglaieast}

#tr {这里明显的出口是 southeast 和 west。} {se;e} {penglaieast}

#tr {这里明显的出口是 southwest 和 east。} {e;#t- penglaieast;#5 n;sweat} {penglaieast}

#tr {这里明显的出口是 southwest 和 northeast。} {ne} {penglaieast}

#tr {这里明显的出口是 west 和 east。} {e} {penglaieast}

#al {penglai} {#4 e;#t+ penglaieast}

6、penglai ---> kaifeng

#tr {这里明显的出口是 west 和 east。} {w} {penglaiwest}

#tr {这里明显的出口是 southwest 和 northeast。} {sw} {penglaiwest}

#tr {这里明显的出口是 southwest 和 east。} {sw} {penglaiwest}

#tr {这里明显的出口是 northeast、west 和 north。} {n;s;w;} {penglaiwest}

#tr {东安门 -} {#t- penglaiwest;#6 w;} {penglaiwest}

#al {homepenglai} {#5 s;#t+ penglaiwest;w;}

其实里面有许多triggers是一样的,但我为了区别开来,不造成混淆,所以重复做了,但classname都改为不同的,便于调整。另外所有的triggers都是用#t+ 和 #t-开控制开关的,所以做好triggers后务必在optiongs里选上when loaded disable,保持这些triggers一直关着,只有aliases才可以控制他们开关。如果开着的话,有可能走到一些地方的明显出口和这些triggers的pattern相同而引起触发,造成不便,切记切记。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2007-3-8 16:20:26 | 显示全部楼层

Re:ZMUD知识

zmud使用详解

使用函数和变量做trigger本就是高级手法,所以如果你用我教的方法打npc(SDXL可以打NPC?可以的怎么不可以,不过要注意的是打NPC只有EXP而没有POT,所以打NPC最好是已经EXP很高的玩家再去。)如果出了意外,请再仔细研究trigger是否有误。mud到底是玩,也别把生死太放在心上。

先说如果你要同时打许多个同样的npc时,应该怎么办呢?比如,你搬了20个镖局弟子,你可能要做个#alias {killdizi} {kill dizi 1;kill dizi 2;kill dizi 3;......kill dizi 19;kill dizi 20}这是初级做法,我们只需用#20 kill dizi %i 一句就可以完成了。我具体解释一下。#这个指令很有用可以重复发相同的指令,比如#20 s就是向南走20步,这我想大家都早会了,%i是用了一个变量i,大家不要把i替换成别的字母,否则就需要引进其他一些指令了。如果你要打10个dizi,5个pei,6个mu ren,怎么做呢?在mud中输入:#alias {killall} {#10 kill dizi %i;#5 kill pei %i;#6 kill mu ren %i}回车就可以了。然后可以随时调用killall这个alias。切记举一反三啊!!!

刚才的这个比较easy,下面说点难的,hehe,先引进三个特殊指令:
#VAR 表示赋值,如#VAR a 1或#VAR b 78,意思为设变量a=1或变量b=78;
#MATH表示计算,如#MATH a @a+1意为a=a+1,当然这个a是必须先由#VAR赋值设定过的;
#SHOW 表示显示,如#SHOW @a则显示出变量a的当前值。

大家肯定早已经糊涂了,怎么一会儿a,一会@a的,这是挺烦的。我也不分析什么道理大家多用就自然记住了。另外,#MATH可以进行加减乘除等运算,我下面举个具体例子:
#VAR a 1 赋值变量a为1
#VAR b 10 赋值变量b为10
#MATH c (@a+99)/@b*2 计算c=(a+99)/b*2
#SHOW @c 显示变量c的值 (结果显示20)

那么,我们学会使用这些变量到底有什么实际用处呢?坦白的说,用处不大打npc是真刀真枪的战斗取不得巧,做个状态条显示体力精神exp增长率什么的,也是闲得无聊的玩意儿,我只能说,凡是可以或需要用到计算的问题,我们都可以用这些指令解决了。比如,当我们循环后,常会算用400内力可以恢复多少体力或者要恢复满600体力需要用多少内力等问题,那么我们可以先算出用20点内力可以恢复多少体力(精神相同)假设20点内力可以恢复45点体力,那么要恢复600气血需要600*20/45点内力,只要在mud里输入:
#VAR a 45;#VAR b 600;#MATH c @b*20/@a;#SHOW @c就可以了。不过,这看起来也没什么用,我说的只是一个思路而已。

这些变量的最大用处在于可以放在一些mud指令之后,比如
#VAR a 200;exercise @a
就表示用200气血打坐.当然,我们一般用于study book,exercise,meditate,learn等指令后的数字都是一个不常变化的数字,只有当出现需要经常变化(递增或递减)的情况才派上用场,如传内力就是个运用变量的好时机,随着接受内力者的内力增加,传功者打坐所需气血也应随之增加,那么这个递增变量就可以用exercise @a;#MATH a @a+1来完成。

罗嗦了半天,也许大家根本觉得没用,那就跳过那段吧。下面我说说trigger中变量的应用。常有人爱做个人缘好的dummy放在玩家常连线进来的地方,一出现"谁谁连线进入这个世界"他就打招呼,点头作揖问好,这里就包含了trigger中套用变量的基本用法。如下例:#AC {^(%1)连线进入这个世界。} {chat hi,%1,你可来啦,想死我了!}在这个例子中,%1可以代表为数字或字母,如果你用%a则只能取到数字。如#AC {经验:%a} {tell nini 我已经有%1点经验啦,xixi}

对了,忘了说了,#AC是ZMUD里一个特殊指令,其实就是我们常用的trigger我们一般都用鼠标去点菜单上的软键,用#AC就可以直接输入做好trigger了。至于那个nini嘛....hehe

在trigger的Pattern前面加个^号,是表示激活该trigger的话必须顶头出现很多人都做了读书睡觉的trigger,Pattern为"你一觉醒来,觉得身体完全恢复了"这样,如果有人捣乱用rumor说"你一觉醒来,觉得身体完全恢复了!",那你的trigger就被激活,乱了套了,trigger多了,自然要保护好,把Pattern做成"^你
一觉醒来,觉得身体完全恢复了!"就不怕了。如果你自己想测试这个trigger,那就用#SA来搞定。在这里必须提醒一句mud里常出现">"这个符号,常让trigger不能顶头出现,从而trigger失效,这是个很讨厌的问题。我的解决方法是把trigger加上颜色,具体方法如下操作:
先用鼠标将要取的Pattern抓下,然后打开trigger,new一个新的,点Options选中Color Trigger然后在pattern里用Ctrl-v复制上去。这样,你的trigger就变成一行你自己都看不懂的乱码了没关系,zmud能看的懂,好了,你的trigger加了颜色无论谁也无法打乱你的trigger了。

前面咱们说到在trigger前面加上一个^符号就可以完善了很多,那么当Pattern重复出现时,我们怎么解决呢?比如,我们一般会做出"看来该找机会逃跑了..."就一口气跑到厢房或客栈睡觉但如果dodge的有效值比较低的情况下会被拦住,trigger会被多次激活,当然,我们在逃跑前加个投降(touxiang)可以万无一失的逃掉,可如果网一慢,仍旧会出现Pattern重复激活trigger的情况,后果轻者去可能要被踢出去,重者那多半就难于幸免了,那么,我们如何解决这个问题呢?hehe,easy....下面我先着重介绍两个指令"#T+ , #T-"。#T+、#T-是做高级trigger中最常用的两个指令它可以打开或关闭指定的trigger,甚至打开或关闭一类trigger。trigger中的class是分类标志,那么比如:#T+ fight就表示打开class为fight的所有trigger,#T- sleep就
表示关闭class为sleep的trigger,ok,看明白这两个指令就好办了。下面举个例子:

假设我们在打三个镖局弟子,路径大家都熟吧,trigger如下:

1、class---fight_escape
pattern:{你的内力不够了。}
commands:{#T- fight_escape;#T+ fight_wake;touxiang;#4 n;e;sleep}

2、class---fight_wake
pattern:{你一觉醒来,只觉精力有所恢复。该活动一下了。}
commands:{#T- fight_wake;#T+ fight_escape;#wa 10000;yun regenerate;#wa 2000;
yun recover;#wa 2000;yun refresh;w;#4 s;#3 kill dizi %i}
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-12-1 04:49 AM , Processed in 0.013888 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表