guoqi 发表于 2007-3-5 14:55:08

ZMUD知识

转贴ZMUD知识,我和大家新手一样,不是太了解zmud,所以把我看到的文章给大家一起分享。http://sohelp.cc.topzj.com/viewthread.php?tid=104649

dcl 发表于 2007-3-6 11:54:43

Re:ZMUD知识

好贴,建议转贴过来,以免以后链接失效

iszt 发表于 2007-3-6 22:01:50

Re:ZMUD知识

faint
我已经打不开了

dcl 发表于 2007-3-8 16:08:09

zt ZMUD知识

〖2006-8-19〗〖转帖〗zmud知识


一.zMUD简介

   zMUD是zuggsoft公司出品的mud客户端程序,提供了许多有用的工具,例如别名(aliases),动作(actions),宏(macros),快捷键(keys),按钮(buttons〕,脚本(scripts),地图(maps)等,使你在mud中的生活轻松、高效。

这里先简单介绍一下zMUD的特性

一、宏(Macro keys) 定义快捷键以便快速执行一个或一系列命令。
二、别名(Aliases) 将一系列命令保存为一个较短的命令。
三、触发(Triggers)根据从mud获得的信息决定执行的命令。
四、变量(Variables)
五、函数(Functions)
六、按钮(Buttons)在窗口中建一排你自己定义的按钮。
七、路径(Paths)在mud中记录走过的路径,你可以沿着记录下的路径倒走,也可以编辑记录的路径。
八、地图(Mapper)
九、多角色(Multiple Chars)同时登录多个角色,一个命令可以发往不同的窗口或发往所有的窗口。
十、防止向mud送出太多相同的字串的 Spam protection 。
十一、全部的 ANSI color 支持,颜色可以被定制。
十三、可代替Telnet
十四、多媒体功能允许你播放 sounds, MIDI, movies, 等等。
十五、脚本(Scripts)将命令保存在文本文件中。
十六、角色数据库(Character Database)保存你所有的mud角色,便于快速连接。
十七、Tab completion 允许你键入一条长字符串的头几个字母然后用 Tab 键补全。参见#ta命令。
十八、历史(History)相当于doskey。(还记得doskey吗?)
十九、Timer 内建的计时器用于定时向MUD中送出命令。
二十、Status line 可定制的状态行可以显示变量和触发。
二十一、颜色、字体、声音、特殊字符都能被修改并保存。
二十二、配置文件保存所有的配置 (aliases, macros, etc)。 一个配置文件可以用于几个不同的角色。

dcl 发表于 2007-3-8 16:08:51

Re:ZMUD知识

二.zMUD中的函数和变量


zMUD中的函数和变量
变量 函数 地图函数

zMUD中的变量
   变量与别名非常相似。不同之处在于别名只能在一条命令的开始被扩展,而变量可以在任何地方被扩展。扩展变量时你需要在变量名之前加上@字符,你可以使用#VARIABLE命令来定义一个变量,例如:
#VAR container waterskin
这条命令将字符串waterskin赋值给变量container。这样,fill @container命令将被扩展成fill waterskin。另外,你也可以使用=来给变量赋值。
   如果在General Preferences设置中的Expand Vars可用,变量也可以直接在命令行上被扩展。如果设置中的Expand Vars不可用,想在命令行上扩展变量就需要将变量用<>包起来,象下面这样:
fill <@container>
这条命令将被强制解释成fill waterskin。
系统变量
zMUD提供了一些预先定义的系统变量,与自定义变量不同的是,这些系统变量以字符%开头。下面是系统变量的简单介绍:
%action 最后一次触发所执行的命令。
%char 你在这个MUD中的ID。
%cr 换行。
%ctime 以秒为单位表示的你的连线时间。
%def 当前使用的特殊字符。
%host 当前连线的MUD的域名或IP地址。
%i 与%repeatnum相同。
%lastcom 最后被执行的命令。
%lastcom2 倒数第二个被执行的命令。
%lastcom3 倒数第三个被执行的命令。
%lastinput 我没试出来,谁能告诉我?:-(
%line 从MUD中得到的最后一行文本。
%line2 从MUD中得到的倒数第二行文本。
%line3 从MUD中得到的倒数第三行文本。
%param1 从最后一次触发中获得的第一个参数。也可写成%1。
%param2..%param99 从最后一次触发获得的其他参数。
%port 当前连线的端口号。
%random 产生一个0至99之间的随机数。
%repeatnum 当前循环命令的索引。可写成%i。(参见loop命令)
%selected 当前选中的文本或命令。
%selline 当前选中的行。
%selword 当前选中的单词。
%title 当前MUD的标题。
%trigger 引起最近一次触发的行。
%window 当前窗口的标题。

zMUD中的函数
下面是zMUD中定义的函数
%abs(i) 返回i的绝对值
%additem(s,list) 增加字符串s到字符串列表list中
%alias(s) 显示别名s的内容
%ansi(fore,back) 返回给定颜色的ANSI代码
%begins(s1,s2) 如果字符串s1在字符串s2的开头,返回true
%btncol(button,back,fore) 改变按钮的颜色
%btnimage(button,filename) 改变按钮的图案
%case(i,s1,s2,s3...) 如果i=1,返回s1,...,最多不超过8个
%char(i) 返回ASCII码所代表的字符,可用于显示系统定义的特殊字符
%color(fore,back) 返回颜色的属性
%concat(s1,s2,s3..) 字符串相加,最多不超过9个
%copy(s,i,n) 返回字符串s的一部分,从第i个字符开始,共n个字符
%ddeopen(serv,topic) 打开一个DDE连接
%ddeclose 关闭一个DDE连接
%dde(serv,topic,item) 使用DDE读取数据
%ddemacro(serv,topic,s) 使用DDE执行命令
%ddepoke(serv,topic,item,value) 使用DDE写数据(参见#DDE命令)
%delete(s,i,n) 删除字符串s中从第i字符开始的n个字符
%delitem(s,list) 从字符串列表list中删除字符串s
%ends(s1,s2) 如果s1在s2的尾部,返回true
%exec(s1,s2,...) 执行s1,s2,...
%expand(s) 扩展字符串s中的变量和函数
%eval(p) 返回表达式p的结果
%format(f,a,b,c,d...) 格式化值a,b,c,...,f的形式为%w.dx,其中w表示长度,d表示小数位,x表示数据类型:s是字串,n是数字,f是浮点数,m是货币表示
%getglobal(name) 返回全局变量name的值,全局变量保存在.ini文件中
%grep(i,s) 搜索文件号i并返回与字串s匹配的行号
%if(expression, true-value,false-value) 如果表达式为true,返回true-value,否则返回false-value
%insert(p,s,i) 在字串s的第i个字符处插入字串p
%ismember(s,list) 如果字串s在字串列表list中,返回true
%isnumber(s) 如果字串s是数字,返回true
%left(s,n) 从字串s中截取最左边的n个字符
%leftback(s,n) 从倒数第n个字符开始,截取字串s最左边的部分
%len(s) 返回字串s的长度
%lower(s) 将字串s转成小写
%max(a,b,c,d...) 取最大值
%min(a,b,c,d...) 取最小值
%mod(a,b) 取模
%null(s) 如果字串s为空,返回true
%numwords(s,d) 返回字串s中的单词数,d为单词分隔符,默认值是空格
%number(s) 把字串s转换成数字
%pick(s1,s2,s3,...) 显示picklist,并让用户选择一个或一个以上的字串,如果选择的字串超过一个,返回的值以|分隔。参见#pick命令
%pos(p,s) 返回字串p在字串s中的位置,如果p不在s中,返回0/false
%proper(s) 将单词中除第一个字母外的其他所以字母转成小写
%prompt(v,p) 提示用户给变量v赋值,p表示口令模式,输入将不会回显
%random(i,j) 返回一个>=i并<=j的随机数,如果省略j,则返回0~i间的随机数
%read(i,rec) 从文件i中读取记录rec
%remove(p,s) 在字串s中删除子串p
%repeat(s,n) 重复返回字串s共n次
%replace(s,p,r) 在字串s中搜索字串p并替换成字串r
%right(s,n) 从字串s中截取最右边的n个字符
%rightback(s,n) 从倒数第n个字符开始,截取字串s最右边的部分
%setglobal(name,value) 给全局变量name赋值
%time(format) 返回当前的曰期时间,如果format省略,将返回详细的曰期时间信息,可以在format串中使用dd, mm, mmm, yy, hh, mm, ss,等返回所需要的信息
%trigger(class) 如果指定的trigger class 可用,返回true
%trim(s) 消除字串两端的空格
%trimleft(s) 消除字串左端的空格
%trimright(s) 消除字串右端的空格
%upper(s) 转换成大写
%word(s,i,d) 返回字串s中的第i个单词,d指出字串的分隔符,如果省略,默认是空格
%write(i,s,rec) 写字串s到文件i的第rec个记录。如果rec为0,字串写入文件尾部。对于文本文件,rec将被忽略,s将追加的文件中。
%yesno(s) 显示问题s和按钮yes/no,根据按下的按钮返回true/false。参见#yesno命令。如果显示的按钮超过两个,返回的将是按钮号,可与#case连用。如果只显示两个按钮,可与#if命令连用以充分发挥其用途 。

地图函数
地图函数用来存取地图数据。[]中是可选项。如果省略房间(room)或区域(zone)参数,将存取当前房间或区域的值。房间号可以用代号(short name)代替。

%roomname( room, ) 返回房间名或用字串s命名房间
%roomdesc( room, ) 返回房间描述或用字串s描述房间
%roomnum( room) 返回一个房间的编号
%roomid( room, ) 返回房间的代号,或用字串s增加或修改房间代号(short name)
%roomcom( room, ) 返回或设置进入房间后的执行的命令
%roomnote( room, ) 返回或设置房间备注
%roomexit( room, ) 返回或设置房间出口字串。出口字串用|分隔。
%roomobj( room, ) 返回或设置房间中对象的数量
%roommob( room, ) 返回或设置房间中npc的数量
%roomcost( room, ) 返回或设置进入房间所需的代价
%roomkind( room, ) 返回或设置房间类型。0=普通,1=水,2=飞,3=陷井。加128用于设置禁止入内标志
%roomflag( room, ) 返回或设置禁止入内标志,0=flase,1=true
%roomlink( room, dir, ) 返回或设置周围房间的编号。i=-1用于删除与某方向房间的连接。i=-2表示未知的连接
%roomportal( room, s, , ) 返回或设置一个非标准的出口(portal)。i表示将到达的房间号,z表示将到达的区域,s是判断是否通过非标出口的字串。参见地图详解
%numrooms() 返回当前区域的房间数目
%numzones() 返回当前地图中的区域数目
%parsemode(I) 返回或设置当前地图的分析模式。I=0表示详细分析,i=1表示简要分析,I=2分析look命令
%walk( i) 返回走到房间i的speedwalk字串
%zonename( zone, ) 返回或设置区域名
%zonenum( zone) 返回区域编号

dcl 发表于 2007-3-8 16:09:02

Re:ZMUD知识

三.ZMUD使用(一)


如何使用ZMUD

俗话说:“欲善其事,必先利其器。”ZMUD功能强大,可以说是在Windows下玩MUD的最好的软件。下面对它的主要功能简单的说明一下:

一、连上MUD:
上网,开启ZMUD,音乐过后便会出现一个欢迎画面,上面有三个选项:
Connect Wizard;Most Recent;Char Database
1、Connetion Wizard:ZMUD内建的MUD IP ,不过中文的几乎没有。而且有的 IP 好像不大对,只好自己在Char Database加入新的资料了。
2、Most Recent:连到你上次所玩的角色。
3、Char Database:开启角色资料库。你可以在里面添加你想玩的MUD站点。
例如:想连梦幻西游2000:61.156.31.9 6666选右侧的Char Database
出现角色资料库
先按一下左下角的
然后到右边有个 ID 栏位,填入你所扮演的角色名字,
Title 栏位填入你所玩的MUD的名字,
Host 栏位填入61.156.31.9
Port 栏位填入6666
Addr 栏位填入 61.156.31.9
要想储存,就按
都填好以后就按下方的
OK !可以连上侠客行了!后面的根据游戏的提示相信你一定会的。第一次玩的时候,ZMUD会将你签入的Id和Password自动记录在Triggers中,以后会自动签入。

二、主要功能说明
1、 主要图示按钮说明:
Aliases(别称):可以用较短的单词来替代一些指令,可用变量。
Aliases name:命令名称
Commands:指令都放在这儿
例1:你想做一个求婚的一系列表情命令:
Aliases Name:loveme
Commands:chat* love %1;chat* lovelook %1
执行:loveme sweet
屏幕显示:chat* marry sweet
chat* iloveu sweet
【闲聊】“呜呜噢噢耶耶,”小宝害羞地瞟了一眼甜儿唱道:“我爱你在心口难开。”
【闲聊】小宝拉着甜儿的手,温柔地默默对视。目光中孕含着千种柔情,万般 蜜意。
其中甜儿的英文名sweet便是一个变量。
例2:如果你受伤需要包扎:
Aliases Name:bz
Commands:tear cloth;bandage
执行:bz
屏幕显示: tear cloth
bandage
你从布衣撕下一条布条。
你并没有受到任何外伤。(这是你没有受伤时出现的话)
paths(路径记录):自动走路机,一些走路的工具,可以记下你所走过的地方。
Path name:这条路线的名字
Current Path behind:路线走法
Fast Walk,Slow Walk:快走或慢走
Start Recording:记录你走的路线按下后,ZMUD会记录你所输入的命令(e,s,w,n,u,d等),并不管你是否真的在MUD中走。想停止记录的话 ,再按一次(会变成“stop recording”) 。
Triggers(签入记录):自动反应,当收到特定讯息,会自动发出预定命令,就是所谓的机器人。
Class: 类别(随便写)
Enable Class:允许使用此Triggers
Disable Class:禁用此Triggers
Pattern:接收的讯息
Command:当接收到与Pattern相同的讯息所发出的相应的命令
:有绿圆代表这个Trigger有作用
无绿圆则是暂停使用
例1:Class:Fight (随便怎么写)
Pattern : disarms you!
Commands : get sword;wie sword
则当你的武器被 disarm 掉时
会自动捡起并戴上....
例2:Class : Help
Pattern : (%w) 说 'kill me!'
Commands : kill %1
则当你看到别人说 kill me!时你就会,嘿嘿 ...kill him...
还有中间的空格要注意...
Key(巨集按键): 通常是定义 F1 ~ F12 的功能键,按后可以执行一系列指令,不接受变量。
Key:键盘上的某个键。
Commands:相对的命令。
先按左下方的,再到右边的key栏位里填入按键名,也可用旁边那个小按钮(有个“A”在上面)自动侦测, 然后在commands栏位里填入命令即可。不限一个命令,需以分号隔开。只简单介绍以上四个图示按钮,它们会使你在玩MUD时节省一些不必要去浪费的时间,方便操作。例如你想去某地,需根据上面的地形提示才能到达,即便那条路线你走的很熟,也有记不起来要看一下提示的时候,既麻烦又费时。有了paths(路径记录)功能,你只需走一次,便会自动记录两地间的路线,下一次再要去那儿只要显痪在记录 时的起点处,点两下路线名称,转眼就到达终点了。
   其他如:Virables;General;Colors;Fonts;Sounds 可以保持默认设置。不过可以把Colors的亮度设置高一点,Fonts 推荐字体使用Courier New 粗体 size 11,字型尺寸大一点较不伤眼。
2、功能选单说明

Connection Wizard:连线到mudlist.txt中的MUD位址
Another char:login 另一个角色,可同时上多个MUD站
Reconnect:将“目前窗口”断线后重新连线
Disconnect(Close Window):将“目前窗口”断线
New log:载入一个新"记录档"
Append log:载入一个旧记录档并继续记录
Log:记录窗口中的一切内容,打勾即为记录中 ,反之则为暂停记录
Print Setup:关于打印的设置
Print:打印
Exit:退出ZMUD

Cut:删除命令列中你所标记的内容
Copy:拷贝你标记的内容
Paste:将你已经拷贝或已标记的东西贴到命令列中
Select All:标记命令列中的全部内容
Clear:清除命令列全部内容(也可以)
Find:在窗口中搜寻你的目标
: 查看已设置好的图示按钮中的功能。
:New:开启一个新设定档(***.mud)
Load:载入旧的设定档
Save:储存目前的设定
Save as:将目前的设定另存新档
Import:settings,是把其他的设定档中的设定复制到目前用的设定档中。
: 绝大部分是图示按钮的功能。
Tick Timer:可以设定多少时间后做什么,以真实世界的时间为准。
例1:你想每隔5分钟中吃一口鸡腿
Timer interval:300
Timeout Margin:2
Timeout Command:eat leg
设定5分钟到的时候,前两秒钟送出命令“eat leg”
然后按,接著按,它就会在背景执行,每5分钟吃一次鸡腿。

Tie:把multi-login的窗口并列
Cascade:把multi-login的窗口重叠
Arrange:重新排列最小化之後的窗口
Freeze:暂停窗口的卷动
Clear:清除这一面视窗内容
Empty:清除这视窗所有内容
History:查看输出过的命令(类似“doskey”)
Command Buffer:做 "ANSI"彩色字元的编辑
Status:显示状态栏,内容用Action--Define Status Bar编写
Auto Mapper:自动编辑地图
三、其他
1、:在命令列中,用冒号可以同时对全部窗口下命令
例::sleep
则全部的角色都会发出sleep命令,若冒号前加了数字n,就代表对第n个视窗下令。
2、+切换窗口
3、或上下翻动窗口
4、+Z当上下翻动窗口时,屏幕回分割成两部分(低版本则只会出现翻动的那个窗口的内容),按此组合键会 恢复原窗口状态。
5、若Trigger的commands是#color white,则当zmud收到Pattern时,窗口上有Pattern讯息那行就变成白 色。color也可以是blue、red 等。
6、若觉得开启 ZMUD 时的音乐很烦人且浪费时间的话,可以到-Preferences-sounds把那些WAV声音档改成“0”, enable sounds 也要去掉勾号。
   由于ZMUD的版本在不断的更新,目前最新的是ZMUD 5.55,功能也在不断的加强。所以介绍不能面面俱到,但以上是各版本ZMUD所共有的功能。只有在实际运用中才能体会到它的妙处。

dcl 发表于 2007-3-8 16:09:29

Re:ZMUD知识

ZMUD使用(二)


如何用好 TRIGGERS
  玩MUD不用ZMUD基本上就是在浪费时间,而TRIGGERS是其提供的最简单的功能。如何运用 TRIGGERS,用好 TRIGGERS,对于节省时间,形成ROBOT自动练功有相当大的作用。可以在最短时间内练得武功。
  但是,请各位切记:TRIGGERS 虽然有用,但是存在一定的危险性。做ROBOT固然可以自动练功,但是如果被巫师抓住,后果是比较痛苦的。另外,PKER 也可以利用你的TRIGGERS来PK。所以做TRIGGERS必须相当小心。
  我将在这里写一些关于TRIGGERS 的文章,以求和大家共同探讨。
  一、认识TRIGGERS
  什么是 TRIGGERS ,TRIGGERS 类似于一般编程结构中的IF...THEN结构。其中有三个主要的参数:Pattern、Command、Enable/Disable。说的通俗一点,当接收到 Pattern 的时候,自动输入 Command。而En/Disable可以另其活动或不活动。
  另外Class可以为TRIGGERS定义一个类名,方便操作。
举个简单的例子:Pattern为“官兵死了”,
        Command为“get all from corpse",
        Command为“get all from corpse",
则当ZMUD接收到“官兵死了”,自动发出“get all from corpse”
在更高级的技巧中,把TRIGGERS、ALIAS、VARIABLE、Function、ZMUD内部命令联用,可以取得相当好的效果。
  例如:做一个ALIAS,#alias dk drink @drinkwhat
   TRIGGERS1:
     Pattern=“你买下一个牛皮酒袋”
     Command=“drinkwhat=jiudai”
   TRIGGERS2:
     Pattern=“你捡起一个清水葫芦”
     Command=“drinkwhat=hulu”
  那么当你喝水的时候,只需要打dk,而喝什么TRIGGERS自动更改(不论你喝buy jiudai或是get hulu)。
  这当然只是个简单的例子,要想做更复杂的请先读通Help。
  另外在TRIGGERS有一些wild-card可以运用,详细参见ZMUD Help。
  二、和TRIGGERS相关的主要命令
  最重要的命令就是“#t+”、“#t-”。这两个命令可以激发和取消某个特定类别TRIGGERS的活动状态。另外 #IG可以忽略或重新不忽略全部TRIGGERS。
  三、运用TRIGGERS应注意的问题
  在MUD中做TRIGGERS,自动练功能节省大量的时间、精力,当然也省去了输入大量命令的麻烦。但是请注意,在MUD中大量运用TRIGGERS做ROBOT是存在一定危险性的。
  首先,MUD中明文规定禁止用ROBOT练功,如果被巫师抓到,只能自认倒霉。
  其次,PKER可以利用TRIGGERS杀人。例如:你有一个TRIGGERS是这样的,当“你一觉醒来...”然后“xxxxx”(多个命令),那么他可以想办法让你接收到多个“你一觉醒来...”,之后嘿嘿嘿...
  再次,TRIGGERS 做的不好,输入命令过多,那么闪电是不会放过你的。你当时就晕了,别人可以kill、get all、再绝一点可以下毒、背你到杀人NPC处...,你等于把自己放在菜板上,任人宰割。即使没人害你,你也浪费了大量时间。
  还有许多应该注意的问题,这只是必须切记的三点。下篇我将结合自己的心得,讲一下做TRIGGERS应注意的问题。
  四、如何避免TRIGGERS带来的弊病
  1、在上面我说了,TRIGGERS 由PATTERN激活,那么在用的时候应该尽量避免错误的接收到PATTERN。例如:关闭不使用的交谈频道(chat,rumor,tell),在TRIGGERS 中将PATTERN尽量做长,同时尽量限定其活动条件(例如用^可以使PATTERN仅在输出行头相同时作用)。练功的时候找一个不容易给人发现的地方,同时要经常更换练功地点。
  2、做TRIGGERS应该避免一些经常出现或容易被人猜到的PATTERN,如果必须这样,那么在此TRIGGERS不应激活的时候,用#t-将其至为Disable。最好在PATTERN中加入对变量,对当时情况加以判定。另外需要经常激活的TRIGGERS中,必须将命令数目缩短,防止错误活动。
  3、对于某些高频率出现的PATTERN,可以利用一个变量来判定是否输入命令
  例
  在打NPC的时候,会做以下TRIGGERS:
    A 当你输的时候的Pattern。
    B 当NPC输的时候的Pattern。
  那么在打10个以上NPC的时候,如果用普通方法做,那么在NPC接连跳开的时候,很容易在短时间内超过40条命令,当即晕倒。  所以,应该在这时候用一个变量来判断是否已经输入了大量命令,当前是否应该输入命令(可以用变量结合#if命令来做)。
  4、在TRIGGERS中输入的命令要合理的加入 #wa 。请看下面的例子。你有一个TRIGGERS,将输入80个命令,而MUD限制一定时间内不能输入40个,所以你必须加入#wa。
 方法一:#80 #wa 500;x
 方法二:#40 x;#wa 6000;#40 x
 哪个好? 当然是方法二。等待的时间少,而且避免了缓冲区满的问题,避免了主机一次接收多个命令。
 注: ZMUD处理#wa是这样的,其等待一段时间向MODEM缓冲区,注意不是主机 !!! 输入命令。那么在缓冲区满的时候,实际上命令还是一次送出,主机仍然一次接收多条命令。根本没有起到#wa的作用。这点在输入多个命令时,尤为明显。切记!切记!
  5、尽量多用主机命令alias,将常用的命令用短命令代替。这有助于减低网络通信量,解决由于缓冲区造成的问题。或者干脆关闭MODEM缓冲(这似乎不太可能)。
  6、在用TRIGGERS来du shu,lian parry等的时候可以用一个变量随机的做一些动作,不让别人知道你是 ROBOT。除了丐帮,其他帮派弟子要知道多个可以 sleep 的安全地点,避免巫师瓮中捉鳖(嘿嘿,巫师看了不要生气哟)。另外在命令串中#wa的时候,要#t-掉一些不应该激活的TRIGGERS。
  7、在输入大量命令的时候,将命令分解为多个小命令,然后顺序执行效果比一条长命令(中间有#wa效果好)。例如你一觉醒来就xxxxxxx,不如你一觉醒来x1、之后x2、x3...这在一定程度上可以解决缓冲区问题。
  8、在TRIGGERS中加入变量,ZMUD命令等,使其带有一定的判断性。
  9、记住,目前在MUD中SLEEP大概是10秒。那么WAIT超过10秒似乎就....
  10、各位试试在被闪电击中醒来后再输入大量命令,看看有什么结果?hehe...
  下一篇将着重介绍TRIGGERS中经常使用的WILDCARDS。
RIGGERS常用技巧
  1、WILDCARDS
   *    通配任何数字、字符或空白
   ?    通配任何单个字符
   %d    通配任何数字(0-9)
   %w    通配任何字母(a-z)
   %a    通配任何数字和字母(等于%d+%w)
   %s    通配任何空白(spaces, tabs)
   %x    通配任何非空白
    通配任何在range范围内的字符
   ^    强制PATTERN在行头时显示,TRIGGERS才有作用
   $    强制PATTERN在行尾时显示,TRIGGERS才有作用
   (pattern)将参数带给TRIGGERS(%1-%9)
   ~    提示系统将~后字符当作字符而不是wildcards
   {val1|val2|val3|...} 在PATTERN中核对多个显示数据
   {^string}    在PATTRN中不核对该字符串
  同时你可以在PATTERN中运用变量,变量在PATTERN起作用之前,会被替代。
   重点:如何利用WILDCARD抓状态:
      抓气: ^%s气%s(%d)*/%s(%d)%s~(
            ^^^^%1 ^^^^%2
   这个PATTERN返回两个参数%1、%2(分别表示当前气、气上限),那么在COMMAND中就可以针对以上两个参数利用ZMUD函数和命令进行自动判断,制作有智能的TRIGGERS。
  例 1:COMMAND为 '#math dazuohow %1-20;#if %1>50 {dazuo@dazuohow}'
  则:当当前气>50的时候,打坐剩下20点的气。
  例 2:COMMAND为 '#if %1<150 {yun recover}'
  则:当当前气<150的时候,利用内力补充气。
  同样道理,你可以制作更复杂的TRIGGERS,针对当前ID情况做不同的行为。例如受伤了就YUNHEAL,饿了就EAT等等...。还可以利用CASE增强TRIGGERS。
  例 2:有些人的TRIGGERS中“看起来想杀死你”马上QUIT。可能是想杀他的人太多了,不愿意一个一个做,也可能是太懒不愿意去判断。结果,hehe。某次,有人把毒蛇放在四个城门口和客店。我亲眼目睹至少10个ID碰上毒蛇就就QUIT,包括一些高手。 HAHA....当时钱少,于是拣东西拣的不亦乐乎。hahaha...。其实把人物名字抓下来判断一下不是很麻烦的。
  2、TRIGGERS状态与选项
  主要选项:1、When load En/Disable
         确定当mud文件被load的时候,TRIGGERS是否活动。
       2、Triggers on New line/Prompt
         确定PATTERN是否接收完一行才核对(是否接收到CR字符)
       3、TRIGGERS ON TRIGGERS
         是否在TRIGGERS中启用TRIGGERS
   主要状态:En/Disable 确定TRIGGERS当前是否活动
   主要命令:#t+ {classname} 将classname指明的TRIGGERS DISABLE
        #t- {classname} 将classname指明的TRIGGERS ENABLE
        #ig      忽略所有TRIGGERS
  3、在TRIGGERS中经常用到的运算符
    +   加
    -   减、负号
    *   乘
    /   除
    \   取模
    &、and AND运算
    |、or OR运算
    xor  XOR运算
    !   NOT运算
    =   等于
    >   大于
    <   小于
    >=   大于等于
    <=   小于等于
    <>、!= 不等于
    =~、~= 包含
  例 1:利用'|'来多重判断。'|'代表“或”的意思。
  如'{江百胜|武将}向后'=TRIGGERS1'武将向后'+TRIGGERS2'江百胜向后'这点在需要判断多个主体做同一动作时十分有用。
  4、综合例子:
  下面举一个简单的综合例子,可以从客店为基点自动把扬州4门的兵抓到中央广场,然后回到客店。
1)变量:NPC  (默认值:BING)
     TIME  (默认值:1)
2)ALIAS:get1     time=1;w;s;#3 e;hit @npc
     get2     #3 w;#3 n;hit @npc
     get3     #3 s;#3 w;hit @npc
     get4     #3 e;#3 s;hit @npc
     gobackdrop  #case (@time) {#3 w;drop @npc;#3 e}
                   {#3 s;drop @npc;#3 n}
                   {#3 e;drop @npc;#3 w}
                   {#3 n;drop @npc;#3 s}
       (gobackdrop打在一行里)
3)TRIGGERS:
  1、所有你赢的时候
   hit @npc
  2、官兵脚下一个不稳...
   halt;get bing;gobackdrop;hit @npc
  3、你要攻击谁?
   #if @time<4 {#add time 1;get@time} {#4 n;e}

  这是个非常简单的例子,其中有很多可以改善的地方。我以前用来抓NPC用的TRIGGERS就和上面的差不多(现在当然复杂多了,hehe...)。上面只是个基形,大家可以参考例子不断创新完善。要知道,我现在一上网就抓NPC,抓10个用不了5分钟。
  另外大家还可以利用每次进来地点固定的方法。例如在客店SAVE,然后一联线就抓NPC,利用丐帮秘道搬回去,之后QUIT再联,又在客店了,呵呵...再抓!(reconnect 变量不清零)。这点对于来回路途长的门派特别有用(例如少林、星宿)。
  关于TRIGGERS,我写到这里算是做一个简单的介绍。当然ZMUD功能远不止我上述这么简单,我的文章目的在于抛砖引玉,希望大家在看了我的文章后,对ZMUD有更深层次的了解。同时也希望各位高手们不吝指教,指出文中错误,三四不甚感激。

dcl 发表于 2007-3-8 16:09:45

Re:ZMUD知识

MUD使用(三)


ZMUD的一些常用命令

1. #AB
退出正在执行的命令行
example
e;#ABORT;n
只执行e,忽略n

2. #AC
这是用于做triggers的基本命令(当然也可以通过菜单做)
example
#AC {^现在轮到澄澄出牌} {#loop 0,12 cu %i}
这是一个拱猪的triggers
看老轮到某人出牌,就连出13张

3. #AD
在某变量上加
example
#AC {^你的内力进步了} {#AD force 1}
其中force定义为内力的级别

4. #AL
用于简化命令
example
#AL kk {follow %1;kill %1}
当你敲入 kk xun
相当于 follow xun;kill xun

5. #ALA
定时触发命令

6. #ALL
向每一个活动窗口发命令
example
#ALL quit

7. #BA
在当前已记录的路径上删除最后一个方向

8. #BEEP
使计算机发出声音
example
#BEEP
or #BEEP 16
后面加不同数值,对应不同事件,有不同声音

9. #BU
触发button
example
#BU 2
相当于按下了button 2

10. #C-
停止从mud上截取文本(与#C+配合使用)

11. #C+
开始从mud上截取文本(与#C-配合使用)

12. #CA
从一串命令中选择一条出来运行
example
#CASE 2 {first command} {second command} {third command}
运行第二条命令
#CASE @n {first command} {second command}
如过n为奇数(1,3,5,7...)运行第一个命令
如过n为偶数(2,4,6,8...)运行第二个命令
#CASE %random {say} {say .} {say ..} {say ...}
随机运行其中一条命令

13. #CAP
截取最后几行文本到另一个窗口
example
#CAP 3 talk
把最后三行截取到talk窗口

14. #CH
返回当前mud的character名字

15. #CL
关闭某个文件,它必须是已经用FILE命令打开的

16. #CLR
清屏,但不清缓冲区。清缓冲区要用Empty菜单命令

dcl 发表于 2007-3-8 16:10:10

Re:ZMUD知识

四.Zmud编程方法简明教程(猫头鹰 Catbird)


由于各种软件都在不断地、频繁地升级,所以要选一个大家都通用的Zmud
版本不是一件容易的事。Zmud 5.22a刚刚出台,可能使用的人不会太多,而我
认为Zmud4.62可能是目前使用最广的,所以我选用Zmud4.62作为这个教程的依
据版本。其它版本的用法也是大同小异的。
本教程初步计划分如下几个部分:
1。入门(讲述Zmud编程的基本要素)
2。实战(讲解机器人的应用实例)
3。深入(介绍Zmud的高级应用)

1. 入门-Zmud编程的基本概念。

与Telnet等初级工具相比,在玩泥巴(MUD)时,Zmud显示出强大的编程功
能,利用Zmud的编程功能,我们可以根据MUD反馈回来的信息作出各种各样的复
杂动作,从而简化我们的操作,让我们可以更轻松地畅游泥巴世界。
Zmud编程的基本要素如下:
Alias/Macro key/Variable/Trigger/button
1.1 Alias 别名,可以将任何命令定义成你喜欢的形式。
用一句通俗的话说就是:它可以将一条或多条复杂的命令用几个字母代替。
比如:buy jitui from xiao er可以定义一个别名:mjt,
这样以后你只需键入mjt,即可完成buy jitui from xiao er的动作。
1.1.1 定义别名的方法有三种:
1.1.1.1 最简单的方法:使用快捷键:Ctrl+A。
在命令行里输入要定义别名的命令,然后按“Ctrl+A”,再键入自己命名
的别名即可。比如:在命令行里输入“buy jitui from er”,然后,按
“Ctrl+A”,再键入“mjt”,这样就给“buy jitui from er”定义了一
个别名“mjt”。
1.1.1.2 使用“#ALIAS”命令。
语法:#ALIAS ALIASNAME {COMMAND}
比如上例可以通过在命令行里输入“#ALIAS mjt {buy jitui from er}”
来完成别名的定义。
1.1.1.3 使用别名定义窗口。
你可以通过选择Zmud主菜单“View/Aliases”或者按菜单项的“Aliases”
按钮来打开别名定义窗口,并对所有已定义的别名进行修改,添加或删除
的操作。
1.1.2 使用参数。
另外,Alias 还可以使用参数,这让我们的操作有了灵活性。比如你可以
这样定义:#ALIAS k {kick %1;hammer %1;nip %1},于是你键入k mixuer
就相当于键入了“kick mixuer;hammer mixuer;nip mixuer”,不过千万
不要写太多命令(小心频道被关),而且最好把“mixuer”换成“jokey,
hero,koko,pqpq,sjmao,great,fangcj...” ,只要别换成“tianya/tygk”
就行,*snicker。
注:别名只能用于一条命令的开头,只有这样别名才能被解释执行。比如:
say mjt 不会被解释成say buy jiutui from er,因为mjt这个别名不是处于
这条命令的开头。
1.2 Macro key 宏定义键。
将命令定义成键盘上相应的键或者组合键。
1.2.1 定义的方法。
从Zmud的顶部菜单中选择“Action->Define Macro Keys”,按下组合
键“Ctrl+K”,Zmud会弹出一个小窗口,提示你键入要定义的键,按下要定
义的键之后,Zmud会要求你输入在这个键上要表示的命令,再键入你希望的
命令,一个宏定义键就定义完毕了。
1.2.2 在定义宏定义键时要注意的问题。
1.2.2.1 不要使用Zmud保留的键名。比如:Ctrl+K,Ctrl+A等等,因为你的定义不
能覆盖Zmud的已有的定义。
1.2.2.2 不要使用Windows等操作系统保留的键名,比如:F10,|ALt+A等,因为这
样会影响你对操作系统的操作。
1.2.2.3 不要使用箭头等编辑键。但当NUM LOCK 灯亮时小键盘上的键就不是编辑
键,你可以使用它们作为宏定义键。
1.2.3 当你键入宏定义键时,宏定义键代表的文本并不输入到命令行中。
我们可以利用这个特性做一些富有技巧性的事,比如:
如果你想迅速移动到东方,并且拣起地上的东西,可以这样做:
定义数字键 6为“east”的宏,然后先在命令行中输入“get all”,按6之
后,敲回车键“Enter”即可用 2个键迅速的实现“east;get all”两步操
作。
1.2.4 宏定义链。
在定义宏的时候在命令后加一个“~”,那么当你键入这个键时,命令并不是
马上执行,而是先输入到命令行中去,并且把光标停留在这条命令的末尾。
这样你就可以输入另一个宏定义键,于是就构成了宏定义链,这样可以减少
你输入的键数。比如:如果我们定义了两个宏定义键:
F8 open door~
小键盘的8 north
这样当我们输入“F8,8”的时候,命令“open door;north”就被执行了,
我们仅仅按了两个键,是不是特方便?

注:其实在我们使用Zmud的时候,Zmud 已经为我们定义好了一些宏定义键,象我上
面提到的“north,east”等方向键等等,你可以通过按“Ctrl+k”来查看修改
这些宏定义键。
1.3 Variable 变量。变量相当于编程语言中的变量。
一旦定义可以用于命令的任何位置。
1.3.1 定义的方法。
1.3.1.1 在命令行中使用命令#VAR。比如:#VAR food jitui,就定义了一个变
量,并将值“jitui”赋给了变量“food”。
1.3.1.2 通过变量窗口。
选择Zmud的顶部菜单中的“View->variables”,或按菜单项“variables”,
都可以打开变量窗口。在“Variable”中添入要定义的变量的名字,可以同
时指定变量的初值(Value),默认值(Default)。这样一个变量就定义完
毕。比如:上例中的变量在变量窗口中可以这样定义:在“Variable”中添
入“food”,在“value”中添入“jitui”,即可完成变量“food”的定义
和赋值。
1.3.2 变量的引用方法。
在变量名之前加一个“@”,即可引用这个变量的值。比如:
我们用“@food”即代表了jitui,“eat @food”即完成“eat jitui”的动
作。变量的价值在于:当我们改变变量“food”的值时,我们不必改变命令
“eat @food”,比如:当“food”的值变成 “gourou”时,我们一样可以
用“eat @food”完成吃的动作。
1.3.3 系统变量。
Zmud为我们提供了一些系统变量,这些变量以“%”为前导,它们可以象普通
变量一样引用,只是它们以“%”为前导,而不是“@”。这些变量较少用到,也
许我会在以后的高级应用中进一步解释。
注:在退出Zmud时,系统并不要求你保存已定义的变量,如果你想保存这些变量,
那么在退出Zmud之前你必须先保存好这些变量。
1.4 Trigger
我不知道该叫它什么,触发?扳机?...我看还是叫“动作”比较恰当。
也就是说,它能够根据发生的不同情况执行相应的命令。哇~~这正是我们想
要的!这是Zmud的最基本而有用的功能!也是做机器人的基础。打瞌睡的快
醒醒,瞪大你的眼睛,竖起你的耳朵,
1.4.1 定义的方法。
1.4.1.1 利用命令行 #TRIGGER (或者 #ACTION)。
语法:#TRIGGER {pattern} {command}
比如:#TRIGGER {你气喘嘘嘘,看起来状况并不太好。} {exert recover}
这样,当屏幕上出现“你气喘嘘嘘,看起来状况并不太好。”信息时,你定义
的Trigger就会触发,产生“exert recover”的动作,这样你就可以自动恢复
气血了。当然在command中可以使用已定义的变量(valiable)或别名(alias)。
1.4.1.2 通过动作定义窗口。
从Zmud的顶部主菜单中选择“View->Trigger”,就会打开动作定义窗口,所有
已定义的Tigger都会显示在这个窗口中,所以我们可以随意地修改它们,当然
也可以添加或者删除。在窗口中有这么几个项:Class,Pattern,Command。Class
是动作的类,你可以将相关的动作放在一个类里。Pattern是模式的意思,也就
是说你期望屏幕上出现的信息,你可以从屏幕上直接粘贴这些信息。Command
是当你的pattern跟屏幕上出现的信息吻合时将产生的动作。另外还有几个按钮
“Enable class”让选定的动作起作用,“Disable Class”则让选定的动作暂
时失去作用。“Testing” 可以测试你定义的动作是否正确。“Options”中是
关于动作的一些设定,我会在以后进一步说明。
1.4.2 对Tigger的控制。
在通过命令行定义Trigger时,可以再加一个参数,如下:
#TRIGGER {pattern} {command} classname
这个classname就是你要为这个Tigger起的类名。这样在命令行中,我们可以
通过“#t+ classname”来打开一个类(相当于在窗口中按“Enable class”
按钮),也可以用“#t- classname”来关闭一个类(相当于在窗口中按下按
钮“Disable Class”)。
注:匹配符。
* 可以代表一个或多个字符,也可以代表空格。
? 可以代表一个字符。
%d 代表任何十进制的数字(0-9)。
%w 可以代表任何拉丁字母(a-z) (a word)。
%a 可以代表任何拉丁字母或阿拉伯数字(a-z,0-9)。
%s 可以代表空格或跳格键 (spaces, tabs)。
%x 可以代表任何非空格字符。
代表规定范围内所列出的任何数量的字符。
^ 强制从一行的开头进行匹配。
$ 强制从一行的结尾进行匹配。
(pattern) 将已匹配的串存入变量里,变量可以是 %1到 %9。
~ 将下面的字符作出注释,防止它被匹配,实际就是将它忽略。
{val1|val2|val3|...} 匹配任何已指定的字串。
{^string} 不匹配选定的字串。
也许你不太明白上面的解释,不必着急,在以后的讲座中,我会结合实例进一步解释。
1.5 button 按钮。
通过点击按钮可以执行相应的命令,也可以显示某个参数的值,还可以方便地
控制Trigger的开启或关闭等。按钮可以使我们的操作更加直观、方便。
1.5.1 按钮的类型。
按钮可以分成两种:点击按钮和开关按钮。当你用鼠标按下“点击按钮”时,
命令被执行,当你释放鼠标时,命令被释放。而点击“开关按钮”,按钮将在
“ON”和“OFF”之间循环。
1.5.2 定义的方法。
从主菜单中选“Action->Make buttons”或者“View->Buttons”都将弹出按钮
的编辑窗口。
如果选定“Toggle”,将定义一个“开关按钮”。“Off Caption”指定“OFF”
状态时按钮上显示的文本;“On Caption”指定“ON”状态时按钮上显示的文
本;“Off Command”指定按钮ON时执行的命令;“On Command”指定按钮OFF
时执行的命令。“Variable”可以定义按钮所需的变量。
如果不选定“Toggle”,将定义一个“点击按钮”。只需在“Off Caption”和
“On Command”中添入相应的内容即可。
1.5.3 按钮的高级属性。
在按钮的“Advanced”设置里你可以指定、修改按钮的许多特性。
比如:按钮的颜色,改变按钮的尺寸、位置,为按钮指定一幅图片等等。
例子:
自动study机器人的设计:
1。变量的定义:
book 要study的书或物品名
st_value 用于study的精神值
st_back 用于恢复精神的内力值
st_loop 用于正循环的气血值

2。triggers的设计:
class:
study
pattern:
内力 :(%s)(%1)/(%s)(%d)
commands:
#if (%1<@st_back);
{#wa 3000;exercise @st_loop;#wa 3000;exert recover;hp};
{#wa 3000;study @book @st_value;#wa 500;exert refresh;hp}

解释:这个command的意思是,如果内力的左边值小于用于恢复的值,那么就练内力;否则,就读书,并用内力恢复精神。
3。button的设计:
Off caption:study off
On caption: study on
On commands:#prompt book;#t+ study;hp
Off commands:#t- study
(这仅仅是一个例子,如果要用于实际当中,还要做一些改动。)
这一节我介绍的只是Zmud编程中的基本要素,也许枯燥一点,但了解这些基本要
素是很有必要的。有了这些基本要素,我们就可以利用他们构造出各种各样的自
动操作,也就是我们常说的 robot(机器人)。下一节我会结合实际,专门讲几
个例子探讨一下robot的制作方法。
下节的主要内容是:robot实例讲解。 (猫头鹰 Catbird 1998.06.23 )

dcl 发表于 2007-3-8 16:10:35

Re:ZMUD知识

五.zmud机器人制做指南


本篇文章是《zmud使用指南》的姊妹篇。主要介绍在zmud环境下编制自动练功机器人。想玩好mud游戏,没有高效优质的机器人将是很困难的事。机器人可以简化枯燥重复的指令操作,可以进行准确的判断控制。很难想象一个不懂得制作机器人的mud玩家会成为高手。

本文章的介绍将以zmud4.62中文版和中文mud游戏《侠客行》为例。制作机器人主要利用zmud中的trigger按钮(机器人按钮)。trigger的工作原理是判断mud服务器回送的信息是否与trigger中的触发器相同,相同则执行trigger中指定的命令或命令组。

trigger的组成部分:

class : 类名 -用于与其它的机器人相区别的名字。(相同功能的机器人多用相同的类名)

pattern : 触发器-当mud服务器向你的电脑发送的信息与触发器的文本相同时执行命令栏里的命令。

commands: 命令栏-满足触发器条件时执行的命令或命令组。(指令间以";"间隔)

实际上trigger就相当一个逻辑判断结构。

if(如果) pattern 与mud 服务器匹配

then(那么)

do(执行) commands 1

else(否则)

do(执行) commands 2

下面以一个打坐吐纳机器人为例讲解:

______________________________________________________________________

class: pattern: commands:

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

qifull 气: 100/ 100 dazuo 10

jingfull 精: 100/ 100 tuna 10

dzend 你运功完毕,深深吸了口气,站了起来。 tuna 10

tuend 你吐纳完毕,睁开双眼,站了起来。 dazuo 10

______________________________________________________________________

此机器人的作用是当使hp命令显示玩家状态时,如果精是满的(屏幕显示与pattern:"精: 100/ 100"完全相同时),触发机器人类名为jingfull的机器人,执行tuna 10命令,开始吐纳动作。当气为满值是与此相同执行打坐命令。当吐纳完成后屏幕显示"你吐纳完毕,睁开双眼,站了起来。",此时又触发机器人tuend,执行dazuo 10命令。打坐完成后的显示"你运功完毕,深深吸了口气,站了起来。"又将触发dzend,这样循环下去,直到精不够打坐或气不够吐纳为止。为了让机器人能在精气恢复后自动继续上述动作,还需要在标记计时器中设定每数秒执行一次"hp"命令,以随时触发此机器人达到循环打坐吐纳的效果。此例中的"jing、qi、jingfull、qifull"是为了区分机器人而定义的类名。但有时候一组机器人只是为了完成一个功能,我们可以取相同的类名。如上例四个机器人的类名全部改为dztu。

______________________________________________________________________

class: pattern: commands:

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

dztu 气: 100/ 100 dazuo 10

dztu 精: 100/ 100 tuna 10

dztu 你运功完毕,深深吸了口气,站了起来。 tuna 10

dztu 你吐纳完毕,睁开双眼,站了起来。 dazuo 10

______________________________________________________________________

在编制了许多功能不同的机器人之后,为了对机器人进行管理往往用按钮来操作。制作机器人按钮是通过菜单中定义按钮选项来实现的。当toggle被选择后,有按钮按下和按钮弹起两种状态。off caption为按钮弹起的显示内容,on caption为按钮按下的显示。on command为按钮按下时执行的命令或命令组,off command为

按钮弹起时执行的内容。此例要建立一个控制打坐吐纳机器人的按钮,应如下设置:

______________________________________________________________________

off caption : 打坐吐纳

on caption : 停 止

on command : #t+ dztu

off command : #t- dztu

______________________________________________________________________

这样在zmud的界面上方就出现了显示为打坐吐纳的按钮,按下按钮后显示为停止并开始打坐吐纳,再次按下按钮就停止打坐吐纳,按钮弹起恢复后显示为"打坐吐纳"。指令#t+、#t-是zmud内建指令集中的指令。#t+表示打开机器人;#t-表示关闭机器人。

这样一个简单的机器人就完成了。

评价一个机器人的优劣主要是从复杂程度、功能、是否安全(安全主要是避免有些恶意玩家通过触发你的机器人而将你致晕致死)、是否适合多种情况来综合评价的。通过实际应用我们可能发现,上面的机器人还存在很多问题:

1、打坐吐纳时间过长,可能因为食物和水的消耗而不能自然恢复精气,造成停止打坐。

2、随着年龄的增长精气随之增加,而造成不能触发机器人而失效。

3、因为其它原因而导致的失败,如曰月神教使者的袭击等。

对于每一个出现的问题我们都需要采取不同的对策,对机器人进行改造完善,以达到尽善尽美的程度。

第一个问题解决起来很简单,只需要加一个自动进食的机器人即可。(事先须买好食物和水)

______________________________________________________________________

class: pattern: commands:

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

dztu 你的精力增加了 halt;drink ji

______________________________________________________________________

第二个问题可以在每次精气数值变化后手动修改,但这种解决方案似乎违背了制作机器人全自动化的初衷。实际上除此之外还是有解决方法的。我们通过zmud的强大功能把显示在屏幕上的精气数值抓取,用此数值进行判断条件的满足与否就能轻松的完成任务了。请看下面的机器人:

______________________________________________________________________

class: pattern: commands:

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

status 精:%s(%d)/%s(%d) jing=%1;max_jing=%2

status 气:%s(%d)/%s(%d) qi=%1;max_qi=%2

dztu 气:@max_qi/ @max_qi dazuo 10

dztu 精:@max_jing/ @max_jing tuna 10

dztu 你运功完毕,深深吸了口气,站了起来。 tuna 10

dztu 你吐纳完毕,睁开双眼,站了起来。 dazuo 10

dztu 你的精力增加了 halt;drink ji

______________________________________________________________________

比较一下两个机器人的不同,我们发现在这个机器人中出现了几个不同的符号:%s、(%d)。这些符号是zmud内建的通配符(相当于dos中的"*"、"?"),类似的还有* ---通配任何数字、字符或空白 ? ---通配任何单个字符

%d ---通配任何数字(0-9) %w ---通配任何字符串(a-z) %a ---通配任何数字或字串(%d+%w) %s ---通配空白(spaces、tabs)%x ---通配任何非空白pattern---精:%s(%d)/%s(%d) 表示用通配符通配相同位置的数字或空白。%s通配前后之间的所有空白符,(%d)通配此处的数字,括号表示作为一个变量的输入。jing和max_jing为精的当前值和最大值的变量,按通配符在pattern中的顺序,将(%d)通配的原值做为输入赋给变量:jing=%1 (对应第一个(%d)) max_jing=%2 (对应第二个(%d))。如果当前屏幕显示为:精: 140/ 150,则变量jing的值为140、变量max_jing的值为150。需要注意的是jing代表变量本身,而@jing代表变量jing的数值150。"精:@max_jing/ @max_jing"表示当精的数值全满时触发。 通过这种通配符和变量的应用,可以抓取任何数字和字符数据应用到机器人的制作当中。(如抓取自己及其他玩家的英文id和中文名字)。

______________________________________________________________________

class: pattern: commands:

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

getid (%x)快步走了过来. chinese_name=%1;id here

autobow @chinese_name ?(%w)? english_id=%1;#wait 3000;bow @english_id

______________________________________________________________________

从这个例子可以看出getid类是抓取走来的玩家的中文名字並存储在变量chinese_name中,id here是观察此地玩家id的命令。autobow类是个捕捉英文id的机器人。通过上面抓取的中文名字,使用变量chinese_name的数值@chinese_name作为触发並捕捉英文id的条件,把其后的英文字串存储在变量english_id中。因为捕捉数值需要一定时间,所以需要延迟数秒(#wait 3000)再作出回应(bow @english_id)。不难看出这是个玩家走来后自动打招呼的机器人。在玩mud的过程中,战斗是不可避免的。如何在战斗中当气少于某数值时自动逃跑是个非常常见的机器人。在这个机器人中对数值进行判断再采取相应的动作是常见的应用。

______________________________________________________________________

class: pattern: commands:

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

status 气:%s(%d)/%s(%d) qi=%1;max_qi=%2

escape 档案存储完毕. #if @qi<100 {halt;quit} {addoil}

______________________________________________________________________

在这个机器人当中使用了zmud内建的指令#if,#if是一个判断语句,标准格式爲: #if <关系表达式> {命令1} {命令2} 相当于如果条件满足(即表达式值为真)则执行命令1,否则执行命令2.常见的关系操作符还有"< > <= >="等等,详细的请参考zmud帮助。#if @qi<100 {halt;quit} {addoil}的意思就是当机器人被触发后对条件进行判断,如果当前的起气少于100就退出战斗,否则继续战斗。

在机器人的制作中经常需要利用zmud内建指令集中的指令和内建函数集中的函数,如上面例子里的#if、#wait、#t等等,只有对此熟练掌握,才能编制出优秀高效的机器人。因为指令集里的指令太多,不能在此一一介绍,将于另文《zmud内建指令集》中详细解说。zmud中还有配合指令使用的内建函数集将于另文《zmud内

建函数集》中介绍。請有兴趣的朋友参看。编制机器人和编制软件程序一样是一个有趣创造性的过程。一篇文章不能将所有的内容一一概括,本文主要是对编制机器人的方法作一个简单的介绍,提供一些常见的编制思路和技巧。聪明的朋友可以举一反三,不断对此进行完善提出更有效优秀的思路。既做游戏中的高手,又在游戏中锻炼了自己的编程能力,那才是本文真正重要的目的。
页: [1] 2 3
查看完整版本: ZMUD知识