背景:
阅读文章

zmud教程讲座,如何用ZMUD(精)

提高篇

[日期:2010-07-18] 来源:  作者:非凡公子 [字体: ]

有人说,玩MUD不用Zmud,等于浪费时间。的确,在众多MUD客户端软件里,Zmud功能是最强大,全赖他有一套属于自己的语句系统,通过这一系统,玩家可以将来自MUD服务器的信息进行简单的编程!简而言之,就是所谓的“机器人”练功。

在介绍Zmud指令之前,需要说明几点:

  为了区别玩家输入的信息是送往MUD服务器还是直接送往ZMUD做处理的,Zmud规定:所有ZMUD命令均由 #号开始,Zmud命令并不送往服务器。另外,需要引用变量的地方,必须用@号加以说明。变量的定义有点儿特别,可以直接定义,例如:直接输入A=100,即可定义变量A的值为100,不过在引用变量时,必须用@号加以说明,例如:#EC @A,#EC的作用是显示一个变量的值,在这个时候,变量A前面必须加上@号。

  整数,是Zmud一种比较特殊但很简单的命令,#5 kick表示连续执行5次kick命令。分号是Zmud的命令分隔符。fill jiudai;drink jiudai表示分别执行fill jiudai和drink jiudai。

  下面介绍的很多指令,其功能本身有些可以用鼠标实现,例如机器人和快捷键等等,可以选择你喜欢的方式,这正是:萝卜白菜各有所爱。

命令

(缩写) 功能与示例

#ABOUT 忽略,例如:

hi;#about;kick

表示Zmud将只送出hi命令而忽略kick命令  

#ACTION

#AC 当屏幕上出现特定的文字信息时,执行指定的命令,例如:

#AC {巡捕走了过来。} {kill xunbu}

表示当屏幕上出现“巡捕走了过来”这一信息时,Zmud自动执行kill xunbu命令。

#ADD 加法运算指令,例如:

#AD money 3

表示变量money的值加3。

#ALIAS

#AL 创建一个快捷命令,和DOS的批处理文件很相似,例如:

#AL {d} {fill jiudai;drink jiudai}

只要输入d,就相当于输入了fill jiudai和drink jiudai两个命令。

#ALARM 闹钟功能,指定时刻执行指定命令,例如:

#ALARM -3:00:00 {say 上了3小时了,该睡觉啦!}

表示连线时间到了三小时的时候,说出指定的信息。

#ALL 传送一个命令至所有Zmud窗口,例如:

#ALL quit

向所有窗口发出quit命令。

#BEEP 触发PC喇叭

#BUTTON

#BU 等效于用鼠标按下一个指定的自定义按钮,

#BU 1

相当于按下第一个自定义的按钮。

#C+ 开始截取当前窗口的信息至指定窗口,

#C+ message

表示当前窗口的信息将开始向"message"窗口传送。

#C- 停止截取。

#CASE 分支指令,

#case 2 {hi} {heng} {18mo}

将执行第二个命令:heng,又如:

#case %random {hi} {heng} {18mo}

随机地从hi,heng,18mo这三个命令里选取一个来执行。

#CAPTURE

#CAP 截取当前窗口的最后一行至指定窗口。假设当前窗口的最后一行文字为:"【闲聊】岳不群想去死了算了。"

#cap message

表示将"【闲聊】岳不群想去死了算了。"这一行文字传送到"message"窗口。

#CLR 清屏!

#COLOR

#CO 设定当前窗口最后一行的颜色,

#CO red

将最后一行文字的颜色设为红色。

#AC {【队伍】} {#CO red}

制作一个机器人,当屏幕上出现【队伍】时,将来自队伍的消息设为红色。

#CW 设定特定文字的颜色

#AC {清水} {#CO blue}

表示以后凡屏幕上出现“清水”二字,即将这两个字染为蓝色。和#CO不同的地方是:#CW作用于个别文字而#CO作用于整行文字。

#CONNECT

#CON 重新连线!

#DDE DDE(动态数据交换),是Zmud与外部程序打交道的桥梁,感兴趣的话,可以参阅任何一个Visual系列编程书籍里有关DDE的资料。

#ECHO

#EC 传送信息至屏幕上但不送往MUD服务器,

#EC @money

显示变量money的值。

#EXEC 执行一个指定命令。

#AC {黑月~(moon~)告诉你:(*)} {#EXEC %1}

这个机器人的作用是:你将会无条件地执行黑月告诉你的指令,这个机器人可以防止别有用心的人干扰你练功,好好体会一下吧。

#FORALL 执行一个指定的命令,对象是列表(和数组有些相似的东西)里的每一个元素,例如: 先定义一个好友清单

friend=about|ocean|fido|congw

表示变量friend里放着4个元素(ID),分别是about,ocean,jondy和congw。

#FORALL @friend {tell %i 一切可好?}

等于分别向四个人发出"一切可好"这一信息。

#FREEZE

#FR 冻结/解冻窗口信息指令,等效于"Scroll-Lock"键!

#GAG

#GA 默认状态下隐去当前窗口的最后一行,也可指定隐去某些你不想看到的文字所在行。

#GA 一风

表示所有的包含有“一风”这一文字的行将会被Zmud隐去。注意,这里的“隐去”是指 ZMud不显示而已,并不这一行文字没有从服务器传到你的PC里,所以它并不能提高速度。

#HELP 打开帮助菜单!

#HIGHLIGHT

#HI 默认状态下将当前窗口的最后一行设定为高亮度,也可以指定某些文字为高亮。用法和#COLOR一样。

#IF 条件判断指令,格式#IF 条件 {成立的命令} {不成立的命令},例如:

<font color

**********mud提高*************************

高级的编辑:

除了从命令输入栏里输入单独的命令行外,zmud还支持由ANSI构成的复杂信息。你可以按ctrl-enter或在window菜单里选择editor来激活它。

在zmud的命令行编辑器里,你可以象使用大多数的编辑器一样使用他。你可以键入很长的文本,可以让光标全屏幕移动。可以剪贴,拷贝,等操作。在16位版本的zmud里。文本的最大限制为16000行。

编辑器的菜单使你可以从一个文件中读取文本,或将当前的文本储存起来。Import 的菜单是插入一个文件在当前的光标位置。Send 菜单是将编辑器里的内容发送到mud里去。你可以在options里选择strings来改变在文本发送到mud前,你是否要在每一行的开始加上一段相同的文本或用一段文本代替你文本里所有的空行。

Capture 命令是使你可以将mud输出的多行信息输入到你的编辑器里。#capture 命令可以在触发器里使用以便于将mud的输出调入编辑器。

在编辑器里你还可以改变字体大小格式及其颜色等等。

======================================================

高级的程序设计:

在前面的变量和触发器里我们讲了一些zmud基本的编程技术。实际上zmud本身带有一种有力的程序语言,你仅仅是接触到了他的表面而已。在下面的章节里我们将要详细的讲述zmud编程的每一个细节和大量的函数,如果你真正读懂了他们,你就会发现zmud可以为你做任何你想让他做的事情。

----------------------------------

命令和语法:

每当你输入一行命令按下enter键时,这行命令就将被进行语法分析。一般分析分为下面几步:

检测语句分隔符号";" ,然后将语句分隔;

检测语句的中心;

执行语句。

当命令行被执行,每一类的参数都将被定义,而不管他是否已经被赋值,改变或求值。

比如:我们用 #var 的命令得到一个已经被扩充的字符串的参数,

#var temp 6 赋值6给变量temp

#var hp {100/@temp}

#show @hp 将会显示 100/6;

可是,#math 命令将会得到一个可以估计的表达式的数:

#var temp 5

#math hp 100/@temp

#show @hp 将会显示20

而#func 命令将会得到一个独自在定义变量时左边的字符。

#var temp 5

#func hp 100/@temp

#show @hpp

关于变量的最后一句话:每一个变量必须由空格分开,比如@a如果要被使用,@a ing 是合法的,@aling 将会被认为是一个新的变量。不过你可以用{}括号将变量名括起来,比如@{a}ing就合法了。

你可以用以上的语法去完成间接的变量寻址。比如@b的值为a,提交@{@b}将会扩展变量@b,结果就是@{a}被接受。

如果你老是想使用zmud内定的特殊符号,比如@ 或%你可以使用符号(~)来解释他,比如zugg ~@zuggsoft.com就是告诉zmud 不要再去将@做为一个变量的定义来解释。

-------------------------------------

函数:

在变量之外,zmud 还容许你定义函数,函数很象一个带有参数的变量。除了函数可以在命令行扩充外,在调用的语法上也有一点不同。

定义函数和定义变量一样,使用#VARIABLE ,在定义时,我们可以使用%1,%2,....比如#VARIABLE kk {kill %1;kick %1}定义了一个函数叫@kk,现在我们输入所需的参数在括号里,@kk{kid}将会执行kill kid和kick kid 两个指令。讲到这里大家一定觉得这和我们前面定义的别名kk没什么区别,但实际上,两者是不同的,这里的函数@kk 可以在命令行的任何地方调用。

为了使zmud更有用,zmud预定义了一些函数,他们提供了一些很有力的触发器处理工具;在你自己的函数里再加上这些特殊的函数,还有什么zmud的天空能阻止你的飞翔呢?!

===================================================

预定义的函数:

%abs(i) 返回i的绝对值;

%additem(s,list) 增加字符串s到指定的字符串list里;

%alias(s) 展开(得到)别名s的值;

--------------------------------------------------------------

%ansi(fore,back) 返回fore和back颜色的ansi 代码;

例如:#show %ansi(high,red)hello %ansi(blink.blue,white)word

将会显示亮红色的hello 和在一个白色的底上闪烁的蓝字word

--------------------------------------------------------------

%begins(s1,s2) 如果s1开始时含有s2,值为ture;

%btncol(button,back,fore) 改变按钮的颜色;

%btnimage(button,filename)改变按钮上的图象;

%case(i,s1,s2,s3..) 如果i=1,返回s1;如果i=2,返回s2...最多可以有8个;

%char(i) 返回i的ascII代码,也用于将系统字符(;:@%!.)转化为他们最近的值。

%color(fore,back) 把颜色的描写转换为属性值;

%concat(s1,s2,s3..) 返回所有的字符串并将其连接在一起,最多有9个;

%copy(s,i,n) 返回字符串s的一部分;规则是从字符i处开始,返回n个字符;

%ddeopen(serv,topic) 打开一个DDE连接到服务器serv,提交名为topic;

%ddeclose 关闭DDE连接;

%dde(serv,topic,item) 从一个DDE服务器serv上接受数据;

%ddemacro(serv,topic,s) 告诉DDE服务器serv执行s所包含的宏;

%ddepoke(serv,topic,item,value) 从value里poke出数据到DDE服务器;

%delete(p,i,n) 返回一个被从位置i删除了n个字符的字符串s;

%delitem(s,list) 删除项目s从字符串list中;

%ends(s1,s2) 如果s1以s2结束返回ture;

%exec(s) 把s当作命令来执行,返回得到的结果并将其用|字符隔开;

%expand(s) 用s来扩展一个变量或函数;

%eval(p) 将p作为表达式评估,返回结果;

--------------------------------------------------------------

%format(f,a,b,c,d,..) 使用一字符串的格式来规范a,b,c..的值;格式的限定有一些特殊字符(%w.dx),w是指长度;d表示小数点后的位数;x是格式的类型(s表示字符串,n表示数字(每3格打个逗号),f表示小数点,m表示钱)

例如:#show %format('&10.0n),123456) 将会显示有3个空格的123,456

#show %format('&3.of &s',123,"coins")将会显示123 coins

--------------------------------------------------------------

%getglobal(name) 返回name这个通用变量的值(储存在INI文件里);

%grep(i,s) 搜索文件i,并返回和s图案相匹配的一行;

%if(expression,true-value,false-value)如果expressiong(语句或表达示)是ture;返回true-value;相反返回false-value;

%insert(p,s,i) 返回在位置i插入了图案p的字符串s;

%ismember(s,list) 如果s在list中,,返回值ture;

%isnumber(s) 如果s是个有效的数字则返回ture;

%left(s,n) 从字符串s里返回最左边的n个字符;

%leftback(s,n) 返回s最左边的一部分,从末尾开始的n个字符;

%len(s) 返回字符串s的长度;

%lower(s) 将字符串s全部转化为小写;

%max(a,b,c,...) 返回a,b,c...等中最大的一个值;

%min(a,b,c,...) ..................小........;

%mod(a,b) 给a取模b;

%null(s) 如果s是空,则返回ture;

%numwords(s,d) 返回在字符串s里的单词数,用字符d做间隔,默认的d是空格;

%number(s) 将一个字符串转成数字;

%pick(s1,s2,s3,...) 显示一个选择列表,让使用者可以单选或多选,如果多选,则返回的值用|隔开;详细请看#pick的介绍;

%pos(p,s) 返回图案p在字符s里的位置,如果没有返回0或false;

%proper(s) 转换s为合适的格式(除第一个字母外,全是小写);

%prompt(v,p) 提示用户变量 v的值;如果p是在场的,就使用不显示的的方式输入;

%random(i,j) 返回一个大于等于i小于等于j的随机的整数,如果j省略了, 那么i就是最大值,0是最小值;

%read(i,rec) 从i文件里读入指定的record ,如果rec被省略,零就作为假定的,在文本文件里,rec就是每行的行数(0就读下一行)

%remove(p,s) 从字符串s里返回子字符串p;

%repeat(s,n) 重复返回n次s;

%replace(s,p,r) 当所有的p的事件被r所代替,返回s;

%right(s,n) 返回s最右边部分的n个字符;

%rightback(s,n) 返回s最右边的n个字符;

%setglobal(name,value) 设置通用的变量名(储存在ini文件里)

%time(format) 返回当前的日期或时间,如果format被忽略,一个长的格式将被使用,另外使用字符dd,mm,mmm,yy,hh,mm,ss等在format字符串里将会返回当前时间或日期的一部分;

%trigger(class) 如果特定的触发器class被激活,则返回ture;

%trim(s) 清理s开始和末尾的空格;

%trimleft(s) 清理s最左边(最开始)的空格;

%trimright(s)...... 右边 末尾........;

%upper(s) 转化s为大写字母;

%word(s,i,d) 返回ith 的单词在字符串s里,用字符d隔开,如果d忽略,就是空格

%write(i,s,rec) 以记录号rec写字符串s进ith文件,在文本文件里,记录号被忽略,s将被填加到文件,如果rec=0,s被写到文件的末尾。

%yesno(s) 显示一个问题当用户点击yes或no按钮后,返回ture或false.参照#yesno 阅读更多的信息。注意如果你建立两个以上的按钮,返回的将是按钮的数字,你可以将他与#case 语句连用;如果是两个按钮,0或1会被返回,你可以将他与#if 语句连用你会发现会出现多么强大的功能。

------------------

以下的函数是特定在地图中使用的。[]内的项目表示可选的,

%roomname(room,[s]) 返回或设置一个房间的名字到字符串s

%roomdesc(room,[s]) ....................描写........

%roomnum(room) 返回一个房间数

%roomid(room,[s]) ....或设置一个房间的短名(id)到字符串s;

%roomcom(room,[s]) ..........到一个房间时指定的命令到字符串s;

%roomnote(room,[s]) ..........一个房间的注释到字符串s;

%roomexit(room,[s]) ....................出口描写到字符串s,在s里这串字符每个方向用|来分隔;

%roomobj(room,) 返回或设置一个房间里的物体数到i;

%roommob(room,) ......................npc数...;

%roomcost(room,) ..........进入一个房间时的花费到i;

%roomkind(room,) ..........一个房间的类型到i;0=正常,1=水里,2=天空,3=陷阱,128表示不要进入的标志;

%roomflag(room,) ..........一个房间重做的标志到i(0=false,1=true)

%roomlink(room,dir,) 用方向dir返回或设置房间数为i的这个房间的连接,删除连接用i=-1,如果是一个未知的连接用i=-2;

%roomportal(room,s,,[z]) 返回或设置一个不标准的出口或入口,将房间号i和区域号z赋值给不标准的出口字符串s;

%numrooms() 返回当前区域内的房间数;

%numzones() ........地图....区域..;

%parsemode(i) 返回或设置当前的地图分析模式,i=0表full模式,i=1表示brief模式,i=2表示look模式;

%walk(i) 返回如果到房间i所得到的快速行走的字符串;

%zonename(zone,[s]) 返回或设置一个区域的名字到字符串s;

%zonenum (zone) ....一个区域数。

==================================================

zmud 的命令说明:

下面是zmud的命令,在使用中全部用#开头,大写的部分表示这个命令的缩写:[number] 重复后面跟随的文本number次;例如:#10 study shu 将会重复执行study shu这个命令10次;

--------------------------------------------------

ABort 中断当前命令行其他的语法分析;

例如:look corpse;#ab;get all from corpse

将会只执行look corpse这个命令,get all from corpse 将会被忽略

--------------------------------------------------

ACtion 建立或显示一个一个触发器;

例如:#ac {^您的密码是:} {#pw}

将会自动为你输入密码;

--------------------------------------------------

ADd 增加一个值到一个变量;

例如:#ac {你捡起(%d)两黄金} {#ad gold %1}

当你捡起2两黄金时,2将会被增加到@gold 变量里

--------------------------------------------------

ALArm 建立一个记时器;

例如:#ala -1:30:00 {save} 每隔1小时30分钟自动存一次盘;

#ala -59:(55|56|57|58|59) {#show 60-%1}

在每个小时的最后5秒,在屏幕上显示5,4,3,2,1

--------------------------------------------------

ALias 建立或显示一个别名;

--------------------------------------------------

ALL 发送一个命令行到所有的窗口;

例如:#all quit 发送quit到所有活动的窗口;

--------------------------------------------------

BAckup 移走最后一次的移动;

例如:如果当前的路是.nsew ,那么键入#ba 将会改变其为.nse

--------------------------------------------------

BEep 响铃或播放wav文件;

--------------------------------------------------

BUtton 触发一个按钮;

例如:#bu 1 将激活第一个按钮;

--------------------------------------------------

C+ 开始记录到一个窗口;

例如 #c+ temp 将开始拷贝所有收到的文本到一个叫temp的窗口;

--------------------------------------------------

C- 停止...........;

--------------------------------------------------

CAPture 记录一行并发送到编辑器或一个窗口;

例如:#trigger {[闲聊]} {#cap chat}

开一个叫chat的窗口供你看mud里的闲聊频道;

--------------------------------------------------

CAse 从列表中选择一个命令;

例如:#case @hp {study}{sleep}

如果@hp是1(或3,5,7...)study 将被执行;否则sleep将被执行;

--------------------------------------------------

CHaracter 返回你扮演的人物的名字;

CLose 关闭一个文件;

CLR 清屏;

--------------------------------------------------

COlor 改变最近一行文本的颜色;

颜色代码值是:

黑色=0;兰色=1;绿色=2;紫色=3;红色=4;紫红色=5

棕褐色=6;灰色=7;黄色=14;白色=15;粗黑=128

如果想让一个颜色更亮丽一些,就在它原来的值上加8,比如9就表示更亮的兰色;如果是想改变背景的颜色,就将它原来的值乘16;比如要想得到红色的背景则使用的颜色代码为64;改变前景的字体要再加上128。比如:

#co 159 设置最后接受的一行文本是蓝底粗黑白体(1*16+15+128)

#co red {告诉你}当收到告诉你时将变成红色,不过只是这个短语变红,如果你想让收到的整句话都如此则:#trigger {告诉你} {#color red};

--------------------------------------------------

CONnect 重新连接当前任务;

CR 发送新的一行(后面无东西就是一个空行);

--------------------------------------------------

CW 把最近一行里匹配的字符上颜色;

例如:#trigger {告诉你}{#cw red}

当收到的一行文本里有“告诉你”时,“告诉你”将变成红色;和#co red {告诉你}一样;

--------------------------------------------------

DDE 发送一个DDE的宏到服务器

例如:#dde netscape www_openurl {http://www.tanfo.com/~~guoer}

打开你的netscape 浏览器并载入一个网页,注意这里用了两个~~来回避zmud内定的符号。

--------------------------------------------------

DEfault 储存和重新设置特殊的字符的默认值;

有9个默认字符分别为:#;@!%.:~<space ,分别代表命令,分隔,变量,历史,参数,路径,焦点,引用,和空格如果你键入#def {xx$xxxxx}则表示将变量的符号改为$,其中x表示通配符。

--------------------------------------------------

DIsconnect 中断当前的连接;

--------------------------------------------------

ECho 回应字符串到当前的窗口(不发送到mud);

例如:#echo hi 屏幕上将出现hi;

--------------------------------------------------

ERAse 从磁盘里删除一个文件;

例如:#file 1 old.log (打开old.log)

#era 1 删除old.log这个文件,注意不能删除exe,hlp,mud为后缀的文件,而且只能在zmud所在目录内执行操作;

--------------------------------------------------

EXEC 执行一个命令;

一个非常有用的命令;例如:#trigger {^yangguo 告诉你(*)} {#exec %1}

你将会自动执行yangguo 告诉你的任何指令。

(如果你同时操纵着两个人,那..... ^L^)

---------------------------------------------------

FIle 以读写模式打开一个文件;

FINd 指出当前在地图的位置;

---------------------------------------------------

FOrall 在列出的字符串和命令行之间循环;

例如:list=armor|boots|shield|helmet|waist

#forall @list {wear %i}

系统将自动为你装备上armor,boots,shield,...等防护装备。

---------------------------------------------------

FReeze 分割并冻结当前的屏幕;

---------------------------------------------------

GAg 将你屏幕一行移走;

特殊的用法还有:#ga 告诉你

将你从mud里接受到包含有"告诉你"的行移走;

---------------------------------------------------

HElp 得到命令的帮助;

H+ 取回在历史记忆缓存里的下一个命令行;

H- ......................上..........;

HIStory 列表显示在................所有命令行;

---------------------------------------------------

HIghlight 高亮度显示文本的最后一行;

特殊的用法有:#hi 告诉你

高亮度显示接受到包含有“告诉你”的每一行;

---------------------------------------------------

HOst 返回主机的名字;

---------------------------------------------------

IF 执行一个条件的检测;

例如:#if (@gold <100) {say 我好穷啊} {say 我有的是钱}

如果变量@gold 小于100,你将会说“我好穷啊”;否则你会说:“我有的是钱”#if (@line=~"给你(%d)两银子") {deposit %d silver}如果某人给了你钱,你就会将钱存起来;

----------------------------------------------------

IGnore 开关所有触发器动作的处理;

INput 将文本放入命令行;

KEy 定义一个快捷键;

KILLALL 删除所有的别名,快捷键,触发器,标签等

LMap 循环通过地图上的房间;

LOAd 读入一个配置文件;

LOOK 重读一个房间的场景描写给地图;

---------------------------------------------------

LOOp 循环执行命令行数次;

例如:#loo 3 north 朝北走三步;(默认最小值为1)

#loo 2,4 {get %i coins}

会循环三次,get 2 coins;get 3 coin;get 4 coins;其中%i是zmud预定义的储存当前循环次数的变量

#loo 3,@num {drink jiudai}

执行drink jiudai(酒袋) @num-3次

---------------------------------------------------

LOg 开始一个记录文件或固定记录;

MAP 增加一个方向到当前的路径;

---------------------------------------------------

MATh 执行一个复杂的运算和表达式;

例如: #math test (1+3)*4 将会给变量@test 赋值16;

#alias add {#math add %1+%2}

add 3 4 将会把7赋值给@add;

---------------------------------------------------

MArk 标记一个路名的开始;

MEdia 发送一个命令给你的多媒体设备;

MEMory 显示内存;

MENu 执行一个菜单命令

喜欢文字游戏的朋友可以加这个QQ群一起交流:104208482

【内容导航】
第1页:zmud百科介绍 第2页:zMud函数与变量
第3页:提高篇 第4页:即学即用
第5页:颜色触发 第6页:状态栏的制作
第7页:设置问题 第8页:高级技巧
收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容       教程  mud  zmud 
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论