|
看到很多人零散问一些zmud721的问题,觉得有必要做一个系统的应用高级进阶指导。
Q:Zmud721,MC,Zmud462优劣比较
A:无答案
个人观点如下:
Zmud462简单易用,路径工作量大,但是设置合理模式也可以很快甚至超越zmud721和MC
Zmud721简单易上手,缺点需要规避乱码问题,优点再多bug他也能运行
MC编程复杂,需要计算机语言基础,缺点某些小bug会导致崩溃,高手无视
Q:Zmud721乱码怎么办
A:可以规避乱码
目前中文mud都是得到中文触发,然后输入你需要的英文指令。所以只要解决中文抓取问题,所有问题迎刃而解。
抓取中文然后判断比较应用实例:
宽阔苦逼人走了过来。
触发: (%x)走了过来。
Trigger:#if %ismember(%1,"宽阔苦逼人") {kiss him;kill him}
抓取字符中间的某个部分:比如我只要抓取“宽阔”
使用正则触发:(\S{4})\S*走了过来
Trigger:#if %ismember(%1,"宽阔") {kiss him;kill him}
以上可以解决全部乱忙抓取问题,灵活运用即可。
Q:如何得到任务目标地点比如“扬州城 北大街”
A:举例如下
zone=扬州城
room=北大街
zoneid=%zonenum(@zone)
#var temp %concat( "Zoneid = @zoneid and [name] = '@room')
room_list=%mapquery(@temp)
当然这只是简单举例还有其他应用,灵活掌握。例如定位
#var temp %concat( "Zoneid = @zoneid and [name] = '@room' and [desc] Like '%@room_desc1%' and [desc] Like '%@room_desc1%')
gps=%mapquery(@temp)
Q:如何得到目标房间周围n个房间
A:很多方法(方法很多,自己选择合的)
方法一举例:zscript (房间多可能比较慢)
区域:zone=1
房间号:room=1
范围:range=2
room_list=%maquery(Zoneid = @zone)
search_list=""
#forall @room_list {#var distance %numitems(%pathexpand(%pathfrom(@room,%i)))
#if (@distance<(@range+1) and @distance>0) {#additem search_list %i}
}
方法二举例:使用VBS直接连接数据库查询(结果秒到)
由于代码太长,本处紧部分举例,不提供完整代码。具体需要可以私信联系我吧。
'-----------------------------连接数据库----------------------------------
Dim job_room_list
Dim no_Repeat_list_all
ReDim no_Repeat_list_all(0)
ReDim job_room_list(0)
Dim no_Repeat_list_bak
ReDim no_Repeat_list_bak(0)
Dim target_out_room
Dim target_room_array
Dim no_enter_list
Dim goto_end
goto_end=0
target_room_list=getvar("job_room_list","").value
step=getvar("job_range","").value
char_id=getvar("char_id","").value
zone_id=getvar("zone_id","").value
fpath=".\"&char_id&"\mymud.mdb"
'-----------------------------连接数据库----------------------------------
Set Conn=CreateObject("adodb.connection")
Set Rs=CreateObject("ADODB.Recordset")
strCon="DBQ="&fpath&";DRIVER={Microsoft Access Driver (*.mdb)};"
Conn.Open strCon
'-----------------------------连接数据库----------------------------------
Q:如何遍历
A:方法也很多,本文仅仅举例快搜遍历方法
很多时候我们得到一个搜索列表如100|101|102|103
我们可以通过%walk(),和%pathfrom(a,b)得到房间之间的路径,然后在路径之间加入alias,最后会得到一个路径比如:
e;e;e;e;e;killnpc;s;killnpc;n;killnpc
这样就可以快速搜索所有房间了。注意killnpc只是举例,搜索npc方法很多自己确认合适的
Q:如何做到最佳路径搜索
A:通过搜索路径出来的结果通常按照广度优先排列,其实很多时候不是很科学,如何获得最佳路径呢,个人方法如下:
制作地图时,按照最佳顺序逐个画房间,那么当你得到一串房间以后直接%sort(@search_list),就是最佳路径了。
Q:如何尽量不通过某些距离很短,但是很多问题的房间
A:设置房间cost,比如设置20,那么通过这条路径需要比其他路径少20步才能通过,设置方法后面介绍
Q:如何关闭进入房间(包括特殊丐帮地道,护镖不走地道等等)
A:设置房间do not enter 通过设置cost来达到
房间1设置为禁止进入
#MENU {Mapper|File|Map Creation Mode}
#NOOP %roommode(1)
#noop %roomcost(1,2147483647)
#MENU {Mapper|File|Follow Mode}
房间1设置为允许进入
#noop %roomcost(1,0)
房间1设置为允许进入,但不建议进入,需要消耗20点路径长度
#noop %roomcost(1,20)
得到搜索房间的列表的时候我不想看到cost高于1000的房间
zone=扬州城
room=北大街
zoneid=%zonenum(@zone)
#var temp %concat( "Zoneid = @zoneid and [name] = '@room' and cost < 1000)
room_list=%mapquery(@temp)
Q:目标房间某些原因和其他房间断开了
A:举例房间1 s一步是 房间2
断开房间s方向路径
#MENU {Mapper|File|Map Creation Mode}
#NOOP %roommode(1)
%roomlink(1,s,-1)
#MENU {Mapper|File|Follow Mode}
重新连接房间s方向路径
#MENU {Mapper|File|Map Creation Mode}
#NOOP %roommode(1)
%roomlink(1,s,2)
#MENU {Mapper|File|Follow Mode}
Q:如何使用room script
A: room script很强大,理论上讲,可以做到所有任务都在room script里面实现,机器人只要alias走路就行
room script举例:
#if @job=hyd {kill npc}
只要你走到该房间,任务是hyd时候就kill npc,所以你可以alias job。
真的很强大只是抛砖引玉而已。
其他建议:
1,模块化机器人
举例很多时候需要用到打坐信息,可以设置一个dazuo模块,比如
alias: set_dazuo XXX
#if %1=job {
alias start_dazuo {YYYY}
alias after_dazuo {zzzz}
}
alias: set_heal XXX
#if %1=job {
alias start_heal {YYYY}
alias after_heal {zzzz}
}
以后每次使用的时候只要set_dazuo job就可以了。
该模块化同样适用全局机器人,比如检查物品,接任务,前往地点,搜索,杀人,回家,学习,领悟
最后祝大家玩的开心。
北大侠客行MUD,中国最好的MUD |
|