文字MUD游戏论坛-天下泥潭群英会-水泊梁山

文字MUD游戏论坛-天下泥潭群英会-水泊梁山 (http://www.aolai.org/forums/)
-   『 机器人制作及下载 』 (http://www.aolai.org/forums/f5/)
-   -   机器虫启蒙教材数篇:ZMUD5.55基础应用[转] (http://www.aolai.org/forums/t262/)

scrap 2002-06-19 11:25

机器虫启蒙教材:ZMUD5.55基础应用[转]
 
ZMUD5.55基础应用
作者: 玫儿(meir.126.com)



俗话说“欲善其事,必先利其器。”要想玩好mud,对zmud的功能一定要熟练,一个mud中的高手,也一定是一个zmud的高手,让我们先来了解一下什么是zmud.
zMUD是zuggsoft公司出品的mud客户端程序,功能强大,应该是玩MUD的最好的软件。

下面先让我们对他有个大概的了解:

一、菜单说明

菜单中的功能大部分按下面的按钮就可以完成了,但有一些功能是下面按钮中所没有的。其中大部分不实用的功能我们将一语带过。

1、文件(File)
Open: 进入连接向导,打开一个新的连线
Reconnect:将“当前窗口”重新连线
Close Window:将“当前窗口”断线
New log:载入一个新"记录文件"
Append log:载入一个旧记录文件并继续记录
Log:记录窗口中的内容
Save buffer: 保存援冲区
Print Setup:设置打印的
Print:打印
Exit:退出ZMUD

2、编辑(edit)
Cut:删除命令列中你所标记的内容
Copy:拷贝你标记的内容
Paste:粘贴你所拷贝的东西到命令列中
Copy DDE link:拷贝DDE 链接
Select All:标记命令列中的全部内容
Clear:清除命令列全部内容
Find:在窗口中搜寻

3、查看(View)
查看已设置好的按钮中的功能,和按下下面的图示按钮做用一样

4、设置(Settings)New:开启一个新设定档(***.mud)
Load:载入旧的设定档
Save:储存目前的设定
Save as:将目前的设定另存新档
Import: 把其他的设定中的设定导入到当前设定中
Export: 把设置导出成所有zmud版本通用的zsc文件
Parse: 分析
Enable triggers:打开关闭触发器,功能和#ig,及按下屏幕右下角的手枪图标一样。

5、操作(Actions)
大部分和按下下面的图标的功能一样,其中的Tick timer非常的有用。
Tick Timer:设定在多常时间以后你去做什么,用秒为时间单位,和现实中的时间一样。这是我们
最常用到的一项功能了
例1:你想每隔100秒吃一口烤鸭和喝一口酒袋
Timer interval:100 在timer interval中输入你要设定的时间
Timeout Margin:0
Timeout Command:eat kaoya;he jiudai 当时间到了以后你要执行的命令。
我们可以用#ti命令来打开和关闭tick timer。

6、页面布局(Layout)
没有什么大的做用。

7、窗口(Windows)
Command history: 历史命令记录 查看输出过的命令
Editor:编辑
Starus:打开或关闭状态栏,内容用Action--Define Status Bar编写
Databast:数据库
Automapper: 自动编辑地图功能

8、帮助(Help)
Register:对zmud进行注册

二、主要功能说明

[本文图略:)]

上图中共有12个按钮,分别为图符,类别,别名,变量,路径,触发器,宏键,按钮,常规,颜色,地图,声音。其中我们常用到的主要为别名(Aliases),变量(Variables),触发器(Triggers)三项,所我们将着重讲这三项的使用。

 

一、别名(Aliases)是我们最长用到的功能,用较短的单词来替代一组指令,可以有变量。当我们按下aliases图标后,会出现下图:


在这里你可以读出和存存你的设置文件,按
下New会新建,会出现下图。
在name中输入你要用的别名的名字,图中的别名为gomaster
在commands中输入你要执行的命令,二个命令中间应该用
分号隔开,或者直接按回车把命令按行分开,二者效果是
一样的.在图的左边你可以选择你要修改的内容或文件名.



在class(类别)中可以给你的aliases按后面的名称分类,所有在同一个class中的alias为一类.
右过的disable class为class的开关,可以同时打开或关闭同一类别的alias.

当把alias的名字和内容都输入好了以后,就可以在mud中使用了,不要忘记save一下。比如上个例子,我们只要在mud中输入gomaster一个命令,就会执行commands中的所有命令,是不是很方便呢?赶快把你常用的命令组都做成alias吧!

用#alias也可以做出上面的alias的,命令如下:
#alias gomaster {#var arriver;halt;n;w;w}
#alias后面的第一个英文为alias的名字,如果已经有了这个名字的alias,会将旧的覆盖掉,后面跟的命令要用{}大括号括起来,命令与命令之间要用分号隔开。
在mud中输入gomaster 其结果和用上面图中的内容所作的做的alias作用是完全一样的,还有在一个alias中是可以镶套其它的alias的。

二、触发器(triggers)
触发器,也就是我们常说的机器人了,玩MUD不用triggers可以说基本上就是在浪费时间,这也是zmud最重要的功能了。如何运用triggers,用好triggers,对于节省时间,robot自动练功有相当大的作用。用好triggers,就可以边抽着烟边练功,边泡着妹妹边练功,甚至边睡着觉边练功了。但是,机器人虽然有用,也同时存在一定的危险性。做robot固然可以自动练功,但有些pker也可以利用你的triggers来pk你。(湖北站曾经有玩家因为robot一晚被杀了几十次)所以做triggers必须相当小心,玫儿见过也做过很多机器人,其中的佼佼者象泡志的自动压镖的机器人,天地宽的大理job的机器人,火龙的大理job的机器人,工程量的浩大是你想象不到的。所以,当你拿到一个机器人的时候,一定要注意,不要随随便便的就给了别人,这毕竟是别人的劳动成果,机器人如果被pk拿到的话,可以很容量的就把用机器人的玩家flood晕,不管你的机器人有多严谨。也有一些人做好机器人以后会拿出来和大家一起分享,这种人玫儿是很钦佩的。好了,下面我们进入正题。


先认我们区分开什么是mud命令,什么是zmud命令,mud命令是指在mud中已经设定好的命令,如eat, drink等,而zmud命令为你对zmud所下的命令,如#ig, #ti等等,zmud命令前面都是需要加上#号的。

1、认识什么是机器人
机器人类似于一般编程结构中的IF...THEN结构。其中有三个主要的参数:Pattern、Command、Enable/Disable。说的通俗一点,当接收到 Pattern 的时候,自动输入 Command。而En/Disable可以另其活动或不活动。 另外Class可以为triggers定义一个类名,“#t+”、“#t-”。这两个命令可以激发和取消某个特定类别triggers的状态。另外 #IG可以关闭或打开全部triggers。




其中的内容为:Pattern为“北面就是边陲重镇伊犁了。但见城郭之外,巍峨的天山,直插云天,”
         Command为“#if (@destn=5) {#var route 16;#var step 14;fn} {fse}"
        其意义为当ZMUD接收到“北面就是边陲重镇伊犁了。但见城郭之外,巍峨的天山,直插
云天,”这条信息以后,自动发出下面commands中的命令。
我们也可以用#gi命令来做简单的机器人,如:
#gi 天亮了 {knock grat;enter}
其意思为当zmud接收到"天亮了"这条信息后,就会执行在括号中的命令。

在上面我们已经学会怎么去做机器人了,下面我们来更进一步的来了解机器人。
引用内部命令用 #
引用内部变量和函数用 %
引用自定义变量和函数用 @,命令行引用加 < >
引用数学运算用 [ ]

要想用好机器人,我们还要先来了解一下通配符(WILDCARDS)
我们只举出最常用的通配符
*    通配任何数字、字符或空白
   ?    通配任何单个字符
  %s    通配任何空白(spaces, tabs)
%d    通配任何数字(0-9)
   ^    强制pattern在行头时显示,triggers才有作用
   $    强制pattern在行尾时显示,triggers才有作用
   ~    提示系统将~后字符当作字符而不是通配符
    看了上面的通配符你可能更乱了,不要着急,让我们一步步的来,我们先来看下面的例子:

#trigger {你捡起*文铜钱} {put coin in yaodai}
上面的这个例子为,当zmud接收到"你捡起*文铜钱"以后就会执行后面command中的put coin in yaodai命令,注意,本句中的“*文铜钱”可以是任意多的铜钱,比如十文。一千文等等。因为 * 可以通配任何数字、字符或空白,所以不管捡起了多少文铜钱,zmud都会认为触发机器人的条件已经满足。

再认我们来看看下面的例子:
#trigger {你捡起??文铜钱} {put coin in yaodai}
这个例子和上面的例子差不多,只是把"*"改成了"??"二个问号,其它是完全一样的。
我们知道,在计算机中一个汉字相当于二个字节,zmud也同样是这样认为的,因为”? 通配任何单个字符“所以上面的例子的意思就是当zmud收到你捡起一个汉字的铜钱就会触发机器人,也就是说当你捡到十文以内的铜钱后,机器人才会触发,当捡到的铜钱数超过十文,需要用二个汉字来表示的时候,机器人是不会被触发的。当我们把机器人改成
#trigger {你捡起????文铜钱} {put coin in yaodai}
这就表示当你捡起九十九文以内的铜钱,机器人才会被激发。如果我们把问号改为六个呢?.......当然是以此类推了。

下面我们来学习一下%s和%d的用法。
  %s    通配任何空白
%d    通配任意位的数字
我们来看下面的例子
#trigger {精:%s(%d)/%s(%d)} {#if (%1>200) {#10 du book} {sleep}}
在上面的例子中我们不光用了%s和%d二个新手通配符,还用到了#if语句,上面的例子的意思为如果如果你的精大于200点,那么#10 du book(#10 du book的意思为同时执行10次du book的命令),如果你的精不大于200点的话,就会执行第二个大括号中的命令sleep,在例子中我们把%d的值赋于给了%1,在侠客行中对精的表于为 "精: 1350/ 1500"这种形式,也可以说是 "精:空格(当前精的数值)/空格(最大精的数值)" 我们已经知道"%s 通配任何位的空格, %d 通配任意位的数字"所以我们要把精表示为"精:%s(%d)/%s(%d)"
在例子中我们需要当前精的数值来做判断,因为空格不需要赋值,所以zmud会认为%1的值就是第一个%d的值,同样%2就是第二个%d的值。

^ 强制pattern在行头时显示,triggers才有作用
^ 的作用为只有被用来做激发的语句顶在一行的最头,才会被激发。
让我们来看看下面的这二个例子
#trigger {^你捡起十文铜钱} {put coin in yaodai}
只有当"你捡起十文铜钱"顶在一行的最头,才会被激发,如果出现xx说道“你捡起十文铜钱”是不会被激发的.

$ 强制pattern在行尾时显示,triggers才有作用,$的作用和^刚好相反.

知道了上面几个常用的通配符后,我们就可以做出一些复杂的机器人来了.


下面我们来了解一下常用的zmud命令.

#number command
这个命令向mud重复发送number次命令,number必须是一个常数。
实例:#10 du book
重复10次du book命令
如果在后面跟上%i,就会出现下面的结果:
实例: #4 fight bing %i
命令将被解释成fight bing 1;fight bing 2;...;fight bing 4并发往MUD

#AC pattern command [classname]
这是zMUD中最有用的特性之一。当从MUD中收到一条匹配的文本时,预先定义的命令将被执行。这条命令的第一个参数是被匹配的文本,如果文本中包含空格,你需要将它用括号{}括起来。
#AC {你买下一件藤甲} {wear jia} 这样,无论何时只要你买了藤甲,立刻可以自动穿上。

#AD variable amount 这个例子允许你做一个简单的算术计算。amount可以是数值或变量。如果要做减法,
可以使用负值。复杂一些的算术计算,请使用 #math 命令。
实例: #AD gold 1
给变量@gold加1

#AL为最常用的做别名的方法
实例:#AL fs {fill jiudai}
当执行fs时,fill jiudai将被送往MUD

#ALL command 发送一个命令到所有角色的窗口
实例: #ALL quit
发送 quit 命令到所有激活的角色窗口。 和:quit做用相同.

#BEEP 在pc机喇叭中发声
实例: #BEEP 16 播放windows 事件 16 的声音。
#BEEP;#WAIT 500;#BEEP beep两次,中间间隔0.5秒。

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


#CAP 获取最后number行送到另一个窗口。
如果省略number,则只获取最后一行。 如果number是-1,所有的行将被拷贝。如果name省略,发送的目标将是commandeditor window。
实例:#tr {火龙告诉你:大可你好吗} {#cap sara} 将带有火龙告诉你内容存入名为sara的窗口,避免忽略。

clr 清除屏幕。如果要清空scrollback buffer并收回内存,请使用菜单命令Empty。

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

#CR 送一个空行到MUD

#DI 断开当前的连接

#EXEC command 执行一个命令,命令中可以包括变量
实例:#TRIGGER {^火龙告诉你(*)} {#EXEC %1} 执行火龙的指令。


#GAG [pattern]
如果pattern省略,命令将从屏幕上删除最后一行。
如果包括pattern, 将删除所有匹配行,
实例: #GAG 火龙
所有有火龙二个字的信息都被zmud删除掉.

#IF 执行条件分支,如果表达式为真,执行true-command,否则执行 falise-command(可选)。
表达式中可以包含变量和运算子。
实例:
#if (@qn>30) {learn_skills} 在战斗中如果潜能达到了30,执行别名learn_skills
#if (@hp>10) {dazuo 10} {yun recover} 如果气大于10就修炼内功10,否则补气。

#IG 打开或关闭所有触发,第一次执行#ig 关闭所有触发,第二次执行恢复正常。

#KILLALL 删除所有的别名、宏、触发、缩写 (用了以后后悔可别找我)

#REC [aliasname]
开始或停止记录别名。第一次键入#record时,zMUD开始记录送往 MUD的所有命令,你可以再次键入#record查看已记录的命令,结束记录时,键入#rec加指定的别名保存。#rec off 将放弃记录别名。

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

#T? 显示计时器(tick timer)的剩余时间

#TI 开关计时器(tick timer),对剩余时间没有影响。

#TS 设置计时器时间或重新计时, 指明以秒为单位的时间间隔, 如果省略,则重新计时
如 #ts 60 则是把tick timer中的时间改为60秒

#TZ 将计时器置零

#UNGAG 避免某行被忽略,通常用在触发中undo #gag命令。
实例: #tr {火龙告诉你} {#gag} #tr {大哥来救救我吧} {#ungag}

#VAR 删除一个变量

#URL 打开浏览器并在浏览器中打开一个网址。
实例: #URL http://www.zg169.net/~~czmud
注意需要两个~!参见通配符。

#VERSION 显示你正在使用的ZMUD版本

#WA [time] 暂停的处理直到从主机收到新的信息,如果指定time,
则暂停指定的时间,time以毫秒为单位。1秒=1000毫秒

别名中使用参数的例子 我们在解谜过程中向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}的结果,一切都清楚了吧?

颜色触发

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}
再也不用担心错误触发了。





mai 2002-06-19 13:49

ZMUD555好用么?
 
我一直都没用过。
看命令和462的差不多。
有robot之类的上传一下吧!
:D

scrap 2002-07-10 17:55

我灌:zMUD中变量和函数的应用[转]
 
zMUD中变量和函数的应用

我是天龙八部的玩家,所以举的例子都源于天龙,别的mud的玩家也可以学着用,但需举一反三,不可拘泥于程式,另外,mud中变化万千,常出现一些难以解释的意外情况,用函数和变量做trigger本就是高级手法,所以如果你用我教的方法打npc,如果出了意外,请再仔细研究trigger是否有误。mud到底是玩,也别把生死太放在心上。 OK,那...咱们从哪儿聊起呢?

先说如果你要同时打许多个同样的npc时,应该怎么办呢?比如,你搬了20只大蟒,你可能要做个#alias {killsnake} {kill snake 1;kill snake 2;kill snake 3;......kill snake 19;kill snake 20},这是初级做法,我们只需用#20 kill snake %i 一句就可以完成了。我具体解释一下。
#这个指令很有用,可以重复发相同的指令,比如#20 s就是向南走20步,这我想大家都早会了,%i是用了一个变量i,大家不要把i替换成别的字母,否则就需要引进其他一些指令了。如果你要打10个xing,5个zuo,6个rong,怎么做呢?在mud中输入:
#alias {killall} {#10 kill xing %i;#5 kill zuo %i;#6 kill rong %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 buyi 我已经有%1点经验啦,xixi}

对了,忘了说了,#AC是ZMUD里一个特殊指令,其实就是我们常用的trigger,我们一般都用鼠标去点菜单上的软键,用#AC就可以直接输入做好trigger了。那个buyi是俺的大名,:P

在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了。 :)

faint..好像说走题了,我们言归正传。
前面咱们说到在trigger前面加上一个^符号就可以完善了很多,那么当Pattern重复出现时,我们怎么解决呢?比如,我们一般会做出"看来该找机会逃跑了..."就一口气跑到仙人洞或客栈睡觉,但如果move和dodge的有效值比较低的情况下会被拦住,trigger会被多次激活,当然,我们在逃跑前加个投降(surrender)可以万无一失的逃掉,可如果网一慢,仍旧会出现Pattern重复激活trigger的情况,后果轻者去judge那答题,重者可能要被踢出去,那么,我们如何解决这个问题呢?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;surrender;s;s;n;#3 e;s;give 1 silver to waiter;u;e;u;w;u;s;u;n;shui}

2、class---fight_wake
pattern:{你一觉醒来,觉得身体完全恢复了!}
commands:{#T- fight_wake;#T+ fight_escape;#wa 10000;n;w;w;w;n;kill viewer;kill viewer 2;kill viewer 3}

这套trigger我主要介绍四个重点:
第一、class应区分开,这样用#T+、#T-时才不会混乱,当逃跑时关闭escape,睡醒后再打开,就可以防止多次激活trigger;
第二、surrender后一定要用s;s;n;#3 e是因为有时候你碰巧逃掉了,位于大理西街1,直接3个e就可以去客栈,但如果没逃掉就需要s;#3 e,那么最保险的走法是s;s;n;#3 e,因为到了段家当铺就没有向南的出口了,这看起来简单,但实际上是一种做trigger的思路,我将在以后详细讲这个部分。比如,我给你们留个题想想:怎么能在大理南1,北1,东1,西1四个位置都用同一套路径走到天龙客栈?
第三、在客栈抢房间睡觉是我们常遇到的问题,那么把四个房间都试一遍才是上选。当然,如果碰巧四个房间都满了,这trigger就停下来了,怎么解决呢?据我所知有多种方法,无非是往出走几步取描述、做emote等等,其实最好加个变量a,一出现客满那句就#add a 1,最后加个#IF {@a=4} {#wa 2000;u;e;u;w;u;s;u;n;shui;#VAR a 0}就可以了。 :)
第四、如果有的trigger这句你既没有加上颜色也没法在前面加^,那就最好当不用时就#T-关上,比如,我们fight时最好把"你一觉醒来"之类的关上,等跑去睡觉时再打开,以防混乱。OK,我们趁热打铁,我再做个抢仙人洞的trigger,请大家着重注意#T+、#T-的用法。先做几个alias:

#alias {xrd1} {s;s;s;s;w;w;w;w;w;w;w;n}
#alias {xrd2} {s;s;s;s;w;w;w;w;w;s;s;w;w;n}
#alias {xrd3} {s;s;s;s;w;w;w;w;w;s;s;s;s;w;w;n}
#alias {xrd4} {s;s;s;s;w;w;w;w;w;s;s;s;s;s;s;w;w;w;n}
#alias {killall} {#3 kill viewer %i}
trigger如下:

1、class---fight_escape
pattern:{看来该找机会逃跑了...}
commands:{#T- fight_escape;#T+ hole1;surrender;s;s;n;e;xrd1;n;n;shui}

2、class---hole1
pattern:{大理钱庄}
commands:{#T- hole1;#T+ hole2;#WA 2000;s;w;w;u;#WA 5000;d;xrd2;n;n;shui}

3、class---hole2
pattern:{大理钱庄}
commands:{#T- hole2;#T+ hole3;#WA 2000;s;w;w;u;#WA 5000;d;xrd3;n;n;shui}

4、class---hole3
pattern:{大理钱庄}
commands:{#T- hole3;#T+ hole4;#WA 2000;s;w;w;u;#WA 10000;d;xrd4;n;n;shui}

5、class---hole4
pattern:{大理钱庄}
commands:{#T- hole4;#T+ hole1;#WA 2000;s;w;w;u;#WA 10000;d;xrd1;n;n;shui}

6、class---hole_wake
pattern:{你一觉醒来,觉得身体完全恢复了!}
commands:{#T- hole_wake;#T- hole1;#T+ fight_escape;#WA 4000;e;w;n;killall}

这样,就可以实现选洞了,如果1洞有人,就选第二个,直到第四个若仍有人,那就再从第一个试起,直到睡上为止。需要注意的是,因为去仙人洞的路比较远,所以在选洞之间要加比较长的延时,而且越往后越长,我只是做个例子,具体加多少合适,大家自己摸索吧。
上面这套trigger基本上把#T+、#T-的用法发挥得淋漓尽致了,但这仍不是最高级的trigger,光一个选洞就用了4套才完成,如果再把我前面讲的变量知识用上,那就更简单了,请看:

1、class---fight_escape
pattern:{看来该找机会逃跑了...}
commands:{#T- fight_escape;#T+ hole;#VAR a 1;surrender;s;s;n;e;xrd@a;n;n;shui}

2、class---hole
pattern:{大理钱庄}
commands:{#ADD a 1;#IF {@a=5} {#VAR a 1};#WA 2000;s;w;w;u;#WA 5000;xrd@a;n;n;shui}

3、class---hole_wake
pattern:{你一觉醒来,觉得身体完全恢复了!}
commands:{#T- hole_wake;#T- hole;#T+ fight_escape;#WA 4000;e;w;n;killall}

:P,这样就简化为三个trigger了,试试吧!
在此,我想再重申一遍,我讲的是一种思路和方法,真正玩mud时会出现千奇百怪的变化,而且pig wiz们也都在挖空心思琢磨怎么抓robot,所以请大家不要牵强附会的套用我做的trigger,也许你做得更好更实用呢,别忘了给我发封mail,也教教我啊。 :)
这次主要说的是#T+、#T-,也许大家注意到了,我的trigger里面多了个#IF语句,这是一个更有意思的指令了,下次,我专门给大家讲这个,OK?
无论任何时候,大家都可以给我发mail(wanq@163.net),来一起探讨trigger问题,我在文章中尽量把trigger写得详尽,但我希望大家别要求我把trigger做好mail给你,好么?

因前一段时间工作较忙,我停了一段时间没写,再次拿起笔来已有些犹豫,这第三篇我本写的是#IF语句的用法,可我想,真正在玩MUD时用#IF语句的玩家真是少之又少。#IF语句的精华在于判断变量的大小而做出不同的反映,比如:
#IF {@a>100} {haha} {sigh}
这句话就表示当变量a>100时haha大笑,不大于100时(包括小于和等于)就sigh叹气,如果我们用前面讲的方法把气血或内力从屏幕上取下赋值为a,那就可以做一个判断气血内力多少的trigger来打npc。
有不少人用双倍force的方法打npc,当被npc打出来时就发呆10-20秒,因真气高气血恢复得多,所以很快能恢复满继续冲进去战斗,这种简便易行的办法足以应付简单的战斗进程。而应用了#IF和变量取值等高级trigger后反而会出现种种问题,我自己就曾做了用变量判断内力多少来决定是否中止战斗出去循环,可也死在上面两次,都是trigger混乱导致的。所以,告诫大家,应用变量和函数是trigger中的高级做法,如果不是trigger大法深不可测之人,切忌舍易求难,一切应从实用出发。说到这里,我想起来一个有趣的例子,记得数月前,我在天龙跟一帮朋友探讨trigger,一个玩家提出如何做过黄土大道的trigger,那时雪山,少林等都还没设客栈,所以要想回去跟master学功夫简直难上加难,路途远不说,而且黄土大道是随机重复的,如果做单程去的还算容易,可回来的路就不太好办了。现在,我们知道,首先可以用#T+,#T-的方法,去时打开gowest class,回来打开goeast class,就很容易解决。再有,我们可以用#IF来进行判断,去时可以可以把变量a设成1,跟师傅学完回来时设成0,那么当屏幕上出现"黄土大道"时,我们就会用到下面的方法:
#IF {@a=1} {w} {e}
我想我不解释大家应该可以明白了。最后有一个玩家提出"何必如此麻烦",去时只要#30 w,然后加10秒延时不就可以了。回来可以用#30 e;#wa 10000;#20 e;#6 w就可回到开封中心了。乍一看来如此trigger有些令人不屑,可其实最简单易行。我玩天龙前期一直是用这套trigger来往返黄土大道的。好了,上面的问题不多说了。下面我专门要讲一种路径思维。
先从简单的说起,比如我们要走以下路径(您可以对照着天龙八部的地图来看下面的例子)
从客栈走到包子铺,路径如下:n;w;w;w;w;s
从钱庄走到包子铺,路径如下:s;w;w;w;w;s
那么如果我不一定是从客栈还是钱庄开始,如何只用一条路径就走到包子铺呢,我们也许会用:n;n;s;w;w;w;w;s
意思就是说我先从客栈走到钱庄,然后再重复从钱庄到包子铺的路径。这样,即使出发点在钱庄,那么上面的路径也一样可以走到包子铺。那如果我们再增加一个出发点在珠宝店呢?这就有点麻烦了。我们可以用下面的路径:n;n;s;#7 w;e;e;e;s
意思是,我们先n;n;s可以走到大理东街上,不一定是东1街还是东2街,然后7个w可以一直撞到西头,然后3个e即返回到西2街,再s就到了。最后,我提个难题,很多新手都会打行人(walker),在大理南3街上有三个行人可以打,但那里有4个出口,而且逃跑时不一定能逃掉,如何做个trigger可以只用一条路径就能准确到达客栈呢?hehe,看看下面的-----
#trigger {看起来该找机会逃跑了...} {surrender;#4 s;w;w;e;#3 s;#6 n;e;e;s}
这条路径关键在于用到南头是天龙寺工地,只有一个出口为north。当我们在战斗时,无论是向南跑还是向北跑,4个s都可以到达天龙寺工地,然后假设我们往西或东逃跑了,那w;w;e可以回到南3街,然后3个s还可以到达工地,最后6个n,e;e;s就回客栈了。
上面讲解的可能部分玩家还是不明白,希望能把这种"撞头"的路径思维吃透,当然,我们打NPC时最好还是搬到只有一个出口的地方打,如果有人跟你抢NPC时,heng,看谁狠!干脆搬到大理十字广场打,hehe,恐怕没人能跟你抢了。grin...不过,可不要影响别人啊,下了剑的大理士兵和皇宫禁卫可杀气极高,不能乱放啊! :P

在大理十字广场打NPC的trigger如下:
#trigger {看起来该找机会逃跑了...} {surrender;#7 s;#6 n;w;n;s;#6 w;#7 e;s}
用此路径必到客栈,有兴趣的朋友可以试试。

一说到路径,我还有点其他的想补充,那就是我们都常做alias,alias是别名的意思,有时在MUD中alias就是路径的代名词了,那么如果我们想做个到少林大雄宝殿的alias,估计不少玩家会走一步,拿笔记一步,最后再敲一遍,感觉挺麻烦,少林路途算近的,要做个找蛇的,去雪山的恐怕就太慢了。很多MUD站点都在介绍如何使用Map功能,如果以后有时间,我也专门给大家讲讲,不过在此,我说个更简便的方法,如下:

在MUD中输入:
#REC (然后你就开始走吧,比如...)
n;nw;n;nw;n;nw;n;nw;n;nw;nu;n;eu;n;nw;nu;nu;n;n;n;nu;nu;n;n;nu;nu
#REC shaolin (走完把这个路径设名为shaolin,OK啦!)
现在看看aliases,已经自动记下了你刚才走的路,去大雄宝殿的alias做好啦!要想删除某个alias,就用#unalias xxx即可,简单吧?! :)

这最后一篇文章,我酝酿了一月有余。我做了zili的trigger,以实验各种函数和变量的应用。在这一月中,我还多次拜访了东方英雄的主页(http://www.nease.net/~jjwk),仔细学习了如何使用zMUD中提供的automapper来制作mud地图,而且,我在river的主页“zMUD从入门到精通”中看到了zMUD4.62帮助文件的全中文翻译,深感佩服。我不得不承认,前人的研究远胜于己。在MUD中练功无止无休,zMUD的研究也是永无止境,即使已经熟悉了各种变量函数,仍可以求简化、求精深。
忽然想起这样一个小问题,有的朋友曾问我,当同时fight10个同名的npc时,如何只打后面5个,放过前面5个不打。我们可以用#loop语句轻松完成,如例:

#loop {5,10} kill snake %i

这个例子中的5和10可以换成变量来操作,配合抓蛇的trigger,可以几个人在一起练功不互相干扰,比如#loop {@a,@a+5} kill snake %i。还有朋友曾问起我如何制作自动打招呼的trigger,关键是如何获取player的英文id,这是有一定难度,我将zili trigger部分公布,下面进行讲解。

1、Class --- come (enable)
Pattern:(%1)走了过来。
Commands:#t- come;#t+ come1;#var cname %remove(> ,%1);id here

此trigger中关键是用id here来将玩家的中文名字转换成英文id,因为在mud中顶头经常出现“>”符号,所以用%remove函数将“>”去掉,值得注意的是,在“>”后应多加一个空格,然后才是
“,%1”,这样才能准确获得玩家的中文名字,以便准确激活下面的trigger。

2、Class --- come1 (disable)
Pattern:@cname (%s) = %1
Commands:#var ename %1;l @ename;#t+ come2

打“id here”后,同一房间内玩家的中文名字和英文id都显示出来,但应注意的是在中文名字后的空格长短不一,需要用%s来替代,而在“=”后面的英文id就不需要考虑空格的问题了。
另外,我在这里介绍另一个函数%trim(@a),这个变量可以消去变量a两旁的空格,用%trimleft(@a)是去掉左边的空格,%trimright(@a)是去掉右边的,这个函数在某些因空格数不一定的trigger中能起到非常好的作用。

3、Class --- come2 (disable)
Pattern:他看起来约(%x)多岁。
Commands:#var sex male;#var cage %1

此句取来者年龄性别。

4、Class --- come2 (disable)
Pattern:她看起来约(%x)多岁。
Commands:#var sex female;#var cage %1

性别本来应该可以做了变量取下来用#if {%1=~"他"} {#var sex nan} {#var sex female}来判断识别,可我在trigger中反复调试竟然不成,这是我一直没有解决的问题,哪位高手知道希望能不吝赐教。似乎问题在于=~" "引号里面的内容不能是汉字,是英文就可以,搞不懂怎么回事。

5、Class --- come2 (disable)
Pattern:武功(%1)
Commands:#var wugong %1;#if {@sex=~"female"} {#case %random {xixi @ename;#wa 3000;say @cname妹妹,你刚@cage几岁,武功都练到@wugong啦!} {pat @ename;#wa 3000;say @cname,@cname2都等了你好久啦,怎么才来!;#var @cname2 @cname} {kiss @ename;#wa 3000;say 大功告成,亲个嘴儿!}} {#case %random {pig @ename;#wa 3000;say @cname,你的武功怎么还是@wugong呀,@cage多年真是白活了!} {jump;#wa 3000;say @cname大哥来啦,@cname2呢,快给上茶!;#var @cname2 @cname} {heng @ename;#wa 3000;say @cname,你还有脸来见我,快自己了断了吧!}}

这句比较长,请大家仔细看清楚语法结构。主要用了#case和%random函数,在cake的文章中已经有比较详细的论述,我这里不再多说了。主要用#case可以使打招呼的话变各种花样,把player的id,中文名字,性别,武功等级都取下来做在trigger中,显得更生动有趣,还可以把player的容貌、身体状况和穿戴也取下来,我这里也不多讲了。

本想写一篇关于如何制作回答审判官(judge)问题的文章,我自己也苦心制作了trigger,可我看了一个朋友给我的trigger后,无论怎样也无法超越前人的杰作了。并且,我也并不赞成judge triger的推广,因为如果那样的话,巫师也许会制作更难缠的judge来抓玩家,或者将指令数限制的更严。不过,我在此也要多说一句,黄土大道是天龙八部的一个败笔,重复的路无形中增加了玩家的指令输入量,而且平淡无味,只觉烦人,连接大城的路怎能做成这样?在许多MUD中,大城到了晚上就会关闭城门,无法进出,这种设计很真实,虽然等城门开时有点无聊,但不能不说也是一种不错的思路。

下面我再讲讲zili trigger中一个有趣的设计,就是做一个玩家描述的文本档案,当别人ask zili about id时,zili会说出与所问id有关的一段话。我的trigger是仿照西游记中对诗的trigger制作成的。有兴趣的朋友可以对照看看。

1、Class --- ask
Pattern --- 向你打听有关『%1』的消息。
Commands:#if {%1=@askname} {#math dask @dask+1} {#var dask 0};#if {@dask>6} {heng;say 你别老问个不停好不好?不理你了!;#t- ask;#wa 60000;#t+ ask;say 好吧,再跟你们聊一会儿吧,别老问个不停呦。} {#t+ ask1;askname=%1;#if {%len(@askname)<3} {shake;say 你听说过有人叫@askname么?} {#sh %grep(1,"@askname");#var aass %grep(1,"@askname");#if {@aass=~""} {#case %random {shake;say 不太清楚...} {?;say 天龙有这号人么?我怎么不知道?} {heng;say 我不想谈他,换个话题吧...} {sigh;say 我脑子里也记不住这么多人呀!} {blink;say sorry,我不知道,不过,你可以tell我“记录 <id> <描述>”,我就可以记住啦,try!}}}}

这个trigger比较复杂,前面部分在于防止有人连续ask捣乱,让你跑到judge那里,所以如果同一人连续ask6遍以上,就会停止trigger一分钟。中间部分是防止所问id过短(少于3个字母),如果过短会出现混乱。第三部分#sh %grep(1,"@askname");#var aass %grep(1,"@askname")是关键内容。用%grep函数来找出与所问id匹配的描述。最后部分是防止所问id为中文或者在文本档案中没有记录的部分。

2、Class --- ask1
Pattern --- (@askname)(%s)(%1)
Commands:#t- ask1;askname2=%1;say @askname2

当找到匹配的描述后,会在屏幕上显示出来,就用这个trigger取下id后面的中文描述,剩下的就简单了。
我知道我讲解的过于简单了,可实际上很多东西是难于在字面上解释清楚的,你自己实际操作一下,会发现很容易,而且理解的更透。
Trigger在练功中可以省去我们很多指令输入,是玩Mud的一个重要帮手,其实能迅速准确的激发,完成你要达到的目的就可以了。我这篇文章从浅入深谈zMUD的函数与变量,到后面其实已经脱离了练功trigger的范畴。做一个智能的机器人,用trigger来模仿真人的说话和emote,甚至完成一个完整的事件,已成为了一些trigger高手的趣向。如果我们再给机器人加上具有个性的言谈和emote,并且自动寻找出口四处走动,那几乎可以“以假乱真”。

我们作为真人,竟用机器人来模仿真人,有点可笑,是吧? :-)

*************************
9494
nod2 太可笑

scrap 2002-07-10 18:17

摘自西游奇旅:zmud内键指令详解
 
zmud内键指令详解

格式: #abort
描述: 终止此指令之后的命令。
举例:get all from corpse;#abort;get silver from corpse

格式:#action 触发器 命令 类名
描述:当mud返回信息与触发器匹配时指令命令。
举例:#action {看起来钟四嫂想杀死你} {#beep;kill zhong} killnpc

格式:#add 变量名 表达式
描述:把一个表达式的结果与变量相加后赋给变量,如果类型是字串则添加到变量尾。
举例:#add golds 10 (注---gold是存储黄金数量的变量名)

格式:#alias 快捷命令名 命令
描述:用一个简单的命令名替代一个复杂命令。
举例:#alias kk {kick npc;kill npc}

格式:#alarm 时间匹配 命令
描述:当mud时间或系统时间到某一特定值时执行命令。
举例:#alarm -30:00 {save} #alarm 3:00:00 {say "为什么还不休息?明天要工作呢!"}

格式: #all 命令
描述: 所有窗口同时执行命令。
举例: #all save

格式: #backup
描述: 从路径记录中删除最后一步,并返回上一步位置。
举例: #backup

格式: #beep 表达式
描述: 鸣笛声。
举例: #beep #beep 16 (播放windows事件16的声音)

格式: #button 表达式 字串
描述: 激活按钮,相当于点击按钮。表达式为按钮序号,字串为按钮的显示。
举例: #button 1

格式: #c+ (#c-)
描述: 捕获(停止捕获)mud输出到一个zmud editor窗口。
举例: #c+ temp #c- temp (zmud editor窗口名为temp)

格式: #case 表达式 命令1 命令2 命令3 ....
描述: 根据表达式的值分情况执行命令。表达式为1,执行命令1,依次类推。
举例: #case 1 {save} {quit} #case %random {xixi} {hi} {smile}

格式: #capture 表达式 窗口名
描述: 类似#c+ #c-
举例: #capture

格式: #character
描述: 把当前角色的名字送给mud。
举例: #character

格式: #close 文件号
描述: 关闭一个文件。
举例: #close 1 #close tell (关闭窗口名为tell的窗口)

格式: #class 字串 表达式
描述: 设置类的状态。
举例: #class automapper 1 (打开automapper类) #class (查阅所有类的状态)

格式:#clr
描述:清屏。
举例:#clr

格式:#color 色彩 触发器
描述:改变文本色彩或设置一个色彩机器人。
举例:#color red {tells the group}

格式:#connect
描述:重新连接。
举例:#connect

格式: #cr
描述: 送一个空行给mud,相当于换行。
举例: #cr

格式: #cw 色彩
描述: 设置机器人触发器的色彩。
举例: #trigger {闲聊} {#cw red}

格式:#dde 字串 字串 字串
描述:把一个dde宏送给dde服务。(dde 动态数据交换)
举例:#DDE NETSCAPE WWW_OpenURL {http://pobox.com/~~zugg/zmud.html}

格式: #debug 文件名
描述: 切换调试状态。
举例: #debug temp

格式:#default literal
描述:把所有特殊角色设为缺省,当前值被存储到堆栈。原值可用#nodef恢复。
举例:#default

格式:#disconnect
描述:断开当前连接。
举例:#trigger {看起来(%x)想杀死你} {halt;#disconnect}

格式:#dump
描述:存储参数。
举例:#dump

格式:#echo 字串
描述:回显字串到zmud 窗口。
举例:#echo xixi

格式:#earse 文件名
描述:从当前目录或磁盘删除一个文件。
举例:#earse temp.tmp

格式:#evaluate 表达式
描述:回显表达式的值。
举例:#evaluate 100/4

格式:#execute 命令
描述:执行一个命令。
举例:#execute hp

格式:#file 文件号 文件名
描述:打开一个文件。
举例:#file 1 test.txt

格式:#find
描述:在地图中定位当前位置。
举例:#find

格式:#forall 字串 命令
描述:循环执行列表中命令。
举例:list=word|ring|shield #FORALL @list {repair %i}

格式:#freeze 表达式
描述:冻结屏幕。
举例:#freeze 1 #freeze

格式:#function name literal
描述:保存变量的功能定义。
举例:#FU fact {%if(%1<=1,1,%1*@fact(%eval(%1-1)))}
   #EVAL @fact(5) #SHOW @fact(5)

格式:#gag 触发器
描述:从机器人触发器中删除行。
举例:#trigger {chat} {#gag 2}

格式:#help literal
描述:从命令行中得到帮助。
举例:#help alias

格式:#h+ (#h-)
描述:从命令历史记录表中提取下(上)一个命令。
举例:#h+ #h-

格式:#highlight 触发器
描述:高亮度显示触发器。
举例:#highlight xixi

格式:#history 表达式
描述:提取命令历史记录表中第几个命令。
举例:#history 3

格式:#host
描述:显示当前mud主机的名字。
举例:#host

格式:#if 布尔式 命令1 命令2
描述:如果布尔式为真则执行命令1,否则执行命令2。
举例:#if @gold<1000 {say 玫儿姐姐好} {say 玫儿姐姐不好}

格式:#ignore 类名
描述:切换机器人开关。
举例:#ignore

格式:#input
描述:把特殊文本放入命令行中。
举例:#input hp

格式:#key 键名 命令
描述:定义宏键。
举例:#key F1 eat ya #key <alt-d> he jiudai

格式:#killall
描述:删除所有zmud定义。(包括alias,trigger等)
举例:#killall

格式:#log 文件名
描述:打开log文件,或设置log开关状态。
举例:#log #log xxx.txt

格式:#read 文件名 表达式
描述:读取执行一个文件脚本,或读取文件记录。
举例:#read xxx.txt 10

格式:#loop 范围 命令
描述:循环执行命令。
举例:#loop 3 north

格式:#mark
描述:开始记录路径。
举例:#mark

格式:#math 变量名 表达式
描述:运算表达式,结果赋给变量。
举例:#math x 13-5

格式:#media 命令
描述:送一个命令给多媒体设备。
举例:#media next (播放下一音轨)

格式:#memory
描述:显示剩余内存。
举例:#memory

格式:#menu 字串
描述:执行菜单中的命令。
举例:#MENU {FILE|OPEN}

格式:#mess 字串
描述:在另一窗口中显示信息。
举例:#mess 警告

格式:#name 字串
描述:改变当前任务的名字。
举例:#name zmud

格式:#noop
描述:空指令。
举例:#noop

格式:#nodef
描述:参考#default。
举例:#nodeg

格式:#ok
描述:路径定义成功。
举例:#ok

格式:#path 路径名
描述:路径保存。
举例:#path xxx

格式:#pick 命令1 命令2 命令3
描述:选择执行命令。
举例:#pick {save} {quit} {xixi}

格式:#play 文件名
描述:播放多媒体文件。
举例:#play xxx.mid

格式:#prompt 变量名 字串 字串
描述:用户输入变量值
举例:#prompt xxx

格式:#pw
描述:把你的密码送给mud
举例:#pw

格式:#retrace 路径名
描述:跟踪路径。
举例:#retrace xxx

格式:#record
描述:记录命令组到快捷方式中(alias)
举例:#record xxx


格式:#load 文件名 .mud
描述:装载存盘文件。
举例: #load xxx.mud

格式:#rename 名字1 名字2
描述:更改变量快捷机器人名字。
举例:#rename xxx xxx1

格式:#reset 文件号
描述:初始化文件。
举例:#reset 1

格式:#say 字串
描述:在zmud窗口显示字串,不送到mud。
举例:say xixi

格式:#save 文件名
描述:存储当前设置到一个mud文件。
举例:#save xxx.mud

格式:#scroll 触发器
描述:显示触发的字串。
举例:#scroll 你 3

格式:#send 文件名 字串
描述:发送文件中所有与字串吻合的到mud optionally prefixed
举例:#send xxx.txt xixi

格式:#session 字串 表达式
描述:打开一个新的任务。
举例:#session 10.89.64.4 6666

格式:#show 字串
描述:回显字串。
举例:#show xixi

格式:#slow 路径名
描述:慢速行走。
举例:#slow xxx

格式:#status literal
描述:显示定义状态窗口。
举例:#Status {Gold: @gold Tank: @tank}

格式:#step 路径名
描述:单步行走。
举例:#step xxx

格式:#stop
描述:停止慢速行走。
举例:#stop

格式:#stwin literal
描述:显示定义状态窗口。
举例:#Stwin {Gold: @gold Tank: @tank}

格式:#Substitute 触发器
描述:Substitute文本。
举例:#TRIGGER {(*) tells you,} {#SUB {%1:}}

格式:#t+ (#t-) 类名
描述:打开(关闭)机器人
举例:#t+ xxx #t- xxx

格式:#t?
描述:显示异步时钟的秒数。
举例:#?

格式:#tab 命令名
描述:设置自动填充命令。
举例:#tab abcded (使用时按'a'后按下'tab'键)

格式:#timer 表达式 字串 表达式
描述:设置异步时钟。
举例:#timer

格式:#trigger 触发器 命令组 类名
描述:生成机器人。
举例:#Trigger {^Username:} {#CH}

格式:#tset 表达式
描述:设置异步时钟秒数。
举例:#tset 20

格式:#type 文件名 触发器
描述:显示文件。
举例:#type xxx.txt

格式:#tzro
描述:tick timer置0。
举例:#tzero

格式:#until 布尔式 命令
描述:执行命令直到布尔式为真。
举例:#until (@x=1) {hp}

格式:#unalias 名字
描述:删除alias。
举例:#unalias xxx

格式:#unkey 名字
描述:删除key。
举例:#unkey xxx

格式:#untrigger 名字
描述:删除trigger。
举例:#untrigger xxx

格式:#unvar 名字
描述:删除variable。
举例:#unvar xxx

格式:#url 字串
描述:用浏览器打开该网页。
举例:#url http://meir.126.com

格式:#variable 变量名 表达式
描述:变量赋值。
举例:#var x 111-89

格式:#version
描述:显示zmud版本。
举例:#version

格式:#wait 表达式
描述:延迟。
举例:#wait 2000

格式:#while 布尔式 命令
描述:当布尔式为真执行命令。
举例:#while (@x<1) {hp}

格式:#write 文件号 字串 表达式
描述:向文件写一个记录
举例:#WRI 6 {this is record 3} 3

格式:#yesno 字串 字串 字串
描述:生成问题确认对话框。
举例:#YESNO where to you want to go today??{Temple:.temple} {Guild:.guild} {Microsoft:#URL http://www.microsoft.com}



scrap 2002-07-10 18:34

摘自西游奇旅:zmud内键常用函数集
 
zmud内键常用函数集

%abs(表达式) 求绝对值
%additem(字串,字串) 增加一个列表元素
%addkey(字串,字串,字串) 向数据库记录写入一个记录
%alias(字串) 展开ALIAS的内容
%ansi(字串,字串) 返回指定ANSI的色彩次序
%ascii(字串) 返回第一个字母的ASCII值
%btncol(字串,色彩,色彩) 设置按钮色彩
%btnimage(文件名) 改变按钮的位图文件
%case(表达式,文字,文字) 从给定字串中返回索引
%char(表达式) 返回ASCII字符
%clip(字串) 从剪贴版中取数据或设置数据
%color(色彩,色彩) 转换色彩成为色彩数字属性
%concat(字串,字串,字串) 连接字串
%copy(字串,表达式,表达式) 返回字串的一部分
%countlist(字串) 统计列表中每项发生次数并返回数据库记录
%db(字串,字串) 返回数据库记录的键值,如果没发现则返回NULL
%dde(字串,字串,字串) 从DDE服务器中获得数据
%ddeclose() 关闭DDE
%ddemacro(字串,字串,字串) 从DDE服务器中执行一个宏
%ddeopen(字串,字串) 打开DDE
%ddepoke(字串,字串,字串) 发送数据到DDE服务器
%defined(字串) 如果ALIAS变量宏路径被定义返回真
%delete(表达式,表达式) 从字串中删除字符
%delkey(字串,字串) 删除数据库中匹配键值
%delitem(字串,字串) 从列表中删除一个元素
%eval(字串) 赋值
%exec(命令,命令,命令) 执行命令
%expand(文字,表达式) 展开字串中变量和函数
%filesize(文件号) 返回文件大小
%format(字串,字串,字串) 格式化字串
%getglobal(名称) 返回一个公共变量的值
%grep(文件号,字串) 从文件中查找匹配字串返回行数
%if(布尔值,文字,文字) 分情况执行命令
%insert(字串,字串,表达式) 插入字串
%iskey(字串,字串) 如果键值在数据库中返回真
%ismember(字串,字串) 测定元素是否在列表中
%isnumber() 测定参数是否为数值
%item(字串,表达式) 返回列表中表项位置
%lastdir() 返回最后路径
%left(字串,表达式) 返回字串左边字符
%leftback(字串,表达式) 从字串右起返回左边字符
%len(字串) 返回字串长度
%lower(字串) 返回字串小写
%max(表达式,表达式,表达式) 返回最大值
%min(表达式,表达式,表达式) 返回最小值
%mod(表达式,表达式) 求余
%null() 如果参数为NULL返回真
%number(字串) 把字串转换成数值
%numbottons() 返回按钮号
%numitems(字串) 返回列表项目的序号
%numkey(字串) 从数据库记录中返回键值
%numparam() 从传送到ALIAS或函数中的参数返回数值
%numwords(字串,字串) 返回字串中词的数目
%param(表达式) 返回传送到ALIAS或函数的指定参数
%picklist(表达式,表达式,表达式) 返回一个可选择的列表
%pos(字串,字串) 返回字串的位置
%prompt(名称,字串,字串) 用户设置参数数值
%proper(字串) 字串除第一大写外其余小写
%random(表达式,表达式) 从两数值中间随机产生一个数
%read(文件号,表达式) 从文件中读一行或一记录
%remove(字串,字串) 移动字串
%repeat(字串,表达式) 重复字串
%right(字串,表达式) 取字串右边字符
%rightback(字串,表达式) 从字串左起取右边字符
%setglobal(名称,字串) 设置公共变量
%sort(字串) 排序列表
%system() 返回ZMUD内部系统变量
%time() 返回系统时间
%trigger(类名) 测试机器人是否打开
%trim() 整理串
%trimleft() 左对齐字串
%trimright() 右对齐字串
%upper(字串) 大写字串
%word(字串,表达式,字串) 返回字串中词
%write(文件号,表达式) 写字串到文件
%yesno(字串,字串,字串) 显示一个YES,NO的对话框



scrap 2002-07-10 18:43

摘自西游奇旅:zmud多媒体操作
 
xyj可以不再沉默了....
:)
zmud多媒体操作

1,#play filrname

可以用麦克风输入自己的声音,比如有人要杀你了什么的,起名为pk.wav
然后做个机器。
p:对着你喝道
c:#play c:\pk.wav

2,#media

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

back 返回一步

close 关闭当前文件

eject 放弃当前设备

next 播放下一曲目

pause 暂停

paly 开始播放

prev 播放前一曲目

resume 恢复暂停的播放

rewind 从头开始播放

step 向前步进

stop 停止播放

实例:

#media next

如果正在播放CD,这个命令将播放下一曲目。



scrap 2002-07-10 19:01

摘自西游奇旅:文件操作
 
文件操作

zMUD的功能十分强大。我们可以利用这些功能把在MUD中发生的任何事情进行记录。方法如下:

(1)方式一:
打开一个文件,对其读或写,关闭一个文件

一般用法如下:#file n filename //把名叫filename的文件打开,并付以文件//句柄号n
#write n {....} //向文件句柄号为n的文件里追加大括号里的//记录
#read n m //读文件句柄号为n的文件的第m条记录
#read n //读文件号为n的文件的文件指针所在记录,//指针自动加一
#close n //关闭文件号为n的文件
#close n //关闭文件号为n的文件

(2)方式二:
很间单,就用一条指令,记录每天的所有情况
#lo filename //在文件名为filename中log所有战况,任何显示都记录,//包括特殊的ASCII码。


xyj_anddy 2003-04-26 19:34

o

redkylin 2005-01-12 23:15

回复: 摘自西游奇旅:文件操作
 
太牛了,小妹无以为敬,灌水你!

低手 2005-01-13 18:28

回复: 机器虫启蒙教材数篇:ZMUD5.55基础应用[转]
 
zeze,555以及更高多了一些命令和函数。可否讲讲。不过这些已经够强大了。


所有时间均为格林尼治时间 +9, 现在的时间是 22:33.

Powered by SPLS
版权所有 2001-2023 水泊梁山
皖ICP备05012024号

站长 fengyue


Content Relevant URLs by vBSEO 3.6.1