本帖最后由 iam 于 2011-11-17 01:18 AM 编辑
从现在开始进入正题:
由于前面有朋友说希望举具体的例子,下面就以需要坐船的北京为例,其他地方类似,把思路和实现方法一并奉上。
1、录制路径
这里的录制路径,是指录制已经到达北京地区,开始慢速行走找寻任务npc时的路径,而不是从ct到北京的路径。
录制路径要有针对性,分两种情况:
一是录制无中心区域遍历所用路径,例如对于北京外城,有很多地方叫“土路”,这时可以录制一条路径为“beijing1”,路径经过所有的“土路”
,以及每个土路附近一步或两步范围内的房间,原因请参见1楼。然后设置一个变量,#var cnbeijing1 {土路}。对此想啰嗦几句,如果刚才录制的路
径中还有很多地方叫“大道”,而且也录制了每个大道附近一步或两步范围内的房间,那么可以#var cnbeijing1 {土路|大道}。
二是录制定中心变半径区域遍历所用路径,例如对于北京内城,长安街、西单、天桥等等,这些地名是唯一的。此时可以把北京分为4个区域(不一定
最合适),对于每个区域录制路径,遍历本区域的所有房间,例如假设第一个区域包括北京内城左上方所有房间,可以将路径名存为"beijing2",然
后设置变量,#var cnbeijing2 {押签房|斗鸡房|庭院|……}(请自行补全),其他区域类似,假设已经录制好了beijing3、beijing4、beijing5,并
相应设置了变量cnbeijing3、cnbeijing4、cnbeijing5,并且这些路径包含了所有北京的房间。
以上录制好的路径待用。
2、领受任务
#TRIGGER {慕容复说道:大燕传国玉玺在『北京(%x)』附近出现*} {juti=%1;#var cunzai 0;#var bijiao 0;
#if (%ismember(@juti,@cnbeijing1)) {#alias mrlookfor {#sl .beijing1};type=wcenter} {#add cunzai 1};#add bijiao 1;
#if (%ismember(@juti,@cnbeijing2)) {#alias mrlookfor {#sl .beijing2};type=ucenter} {#add cunzai 1};#add bijiao 1;
#if (%ismember(@juti,@cnbeijing3)) {#alias mrlookfor {#sl .beijing3};type=ucenter} {#add cunzai 1};#add bijiao 1;
#if (%ismember(@juti,@cnbeijing4)) {#alias mrlookfor {#sl .beijing4};type=ucenter} {#add cunzai 1};#add bijiao 1;
#if (%ismember(@juti,@cnbeijing5)) {#alias mrlookfor {#sl .beijing5};type=ucenter} {#add cunzai 1};#add bijiao 1;
#if (@cunzai=@bijiao) {#alias mrlookfor {};#say 没有此地点} {mrb,beijing}} {murong} 519
说明:
ucenter是有中心变半径遍历方式,wcenter是无中心遍历方式,后面会用到。
juti存储要到达的具体地点。通过cunzai和比较两个变量的值来判断要求到达的地点是否在事先录制的路径里。当然如果你事先录制的路径
包含了所有的地点,而且cnbeijing1、2、3、4、5中也相应的包含了所有的地点,而且没有重复,那么完全可以不需要进行这两个变量的比较。
你可以将“#say 没有此地点”更换成任意你想更换的东西,以实现其他功能(例如ask murong about fail),为简便起见,此文中我不打算
对其加以利用。
今天太晚了,明天继续。 |