【不耻上问】之三:敲门、等待、走路busy等等怎么处理
我现在的处理办法是:#wa @wait_time
#sl .xxxx
正常wait_time=0,遇到特殊情况wait_time=xxxx,随后复位为0
有什么更好的处理办法么? 同之一的处理方法? 原帖由 stevenson 于 2010-7-19 09:06 PM 发表 http://www.pkuxkx.net/forum/images/common/back.gif
同之一的处理方法?
有时候不行啊,比如杀手帮石阶,这样触发要写很多,敲个门有很多情况... 一个大地图的遍历,分为几个stage,用一个list保存不同stage的开头(或者末尾)需要的wa数,然后用一个alias驱动整个遍历过程。具体请自己思考。 我是用map遍历的,让map算出所有路径然后#slow模式走路,遇到拦路的就打死,重新定位走路(此时已走路径被删除了)。
所以不需要存alias,也不需要#wait,除非必须停留的地方
原帖由 bluse 于 2010-7-19 09:27 PM 发表 http://www.pkuxkx.net/forum/images/common/back.gif
一个大地图的遍历,分为几个stage,用一个list保存不同stage的开头(或者末尾)需要的wa数,然后用一个alias驱动整个遍历过程。具体请自己思考。 我是手动的,所以也不存在上述情况。 原帖由 oolong 于 2010-7-19 09:30 PM 发表 http://pkuxkx.net/forum/images/common/back.gif
我是用map遍历的,让map算出所有路径然后#slow模式走路,遇到拦路的就打死,重新定位走路(此时已走路径被删除了)。
所以不需要存alias,也不需要#wait,除非必须停留的地方
重新定位#sl就行了啊 请教oolong,画出区域地图后,怎么样生成遍历路径呢? 详细见sg的cmud精华介绍。
主要流程:
1,首先要得到一个目标房间列表,比如“青石大道” job_room_list="100|101|102"
2,遍历范围,比如“周围三格” job_range="3"
然后计算,详见sg文章吧。主要code举例如下:
#CALL @rs.Close
#var rs ""
#VAR rs %comcreate( "ADODB.Recordset")
$connStr=""
$sql=""
$ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\Mymud\Mymud.mdb"
$loopnum=""
#loop 1,$job_range {
$loopnum=1
#loop 1,%numitems($job_search_list) {
$Sql=%concat("SELECT ToID from ExitTbl where FromID = ",%item($job_search_list,$loopnum))
#CALL @rs.Open($Sql,$ConnStr)
#CALL @RS.MoveFirst
#WHILE (not @RS.eof) {
#if (%roomcost(@rs.fields(0).value)<10000 and %null(%pathfrom(%item($job_search_list,$loopnum),@rs.fields(0).value))=0) {
#additem $job_search_list @rs.fields(0).value}
#CALL @RS.MoveNext
}
$loopnum=$loopnum+1
#CALL @RS.close
}
}
$ConnStr=""
#var rs ""
$Sql=""
$job_search_list=%sort($job_search_list)
#var job.search_list $job_search_list
不过这个查询出来是广度优先,自己做优化吧。这个code只是cmud部分code,自己要修改的。。。
有了房间列表知道怎么遍历了?
页:
[1]