大家的mush机器里有没有这样的系统?
我定义叫“如影随形”系统......由于各种原因,机器人行走的时候,难免出错,然后就走丢了,然后就全球定位
但是全球定位系统不是万能的,有些时候两个房间的所有描述全部一模一样,这样就得按照既定方式随便走几步再全球定位
有的时候呢,半路碰到各种没想到的原因被拦下来,然后就不知道该怎么继续走了,还得定位
为了解决这个问题,我考虑写一个如影随形的功能
其实很简单,就是有一个“应该在哪”和一个“现在的房间可能在哪”,最后得出一个“我目前在哪”的结论
这个是随时进行更新的,更新节点在进入任一一个房间后(哪怕在原地look也更新),触发条件就是看到方向就计算
不知道大家有没有考虑过这样的问题。
另外,关于挡路的npc,不知道大家怎么处理的。
目前很多机器人都是走到npc那里,然后kill一下,发现没人,就继续走。我觉得完全可以到节点,下kill,放pfm,直接撂倒就继续走。中间没有停顿,毕竟挡路的npc不多,很容易就可以干掉的,可以节省一个等待的时间。
北大侠客行MUD,中国最好的MUD 光想是没有用的 回复 2# xiaocao
主要的代码大概是这样的,就这么一小段罢了
function followme(roomname,exits) --如影随形系统,输入参数为当前房间名、方向,没有返回值,只修改imhere数据
if followmatch(shouldbehere,roomname,exits)=="yes" then --如果当前房间的描述符合下一个shouldbehere的描述,说明走对了
imhere={}; --首先把imhere清空
table.insert(imhere,shouldbehere) --然后把shouldbehere的第一个位置作为目前所在地
table.remove(shouldbehere,1) --把shouldbehere的第一个位置去掉
else --如果没走对,那么
local maybehere={};
for i=1,table.getn(imhere) do --逐个可能的房间进行分析
for k,v in pairs(map.exits) --每个房间逐个方向进行分析
if followmatch(v.gto,roomname,exits)=="yes" then --如果这个房间的这个方向通往的房间是当前房间的话,那么
table.insert(maybehere,v.gto) --把这个房间号加到maybe里去
for j=1,table.getn(maybehere)-1 do --maybe的号码从1到倒数第二个循环
if maybehere==maybehere then --如果最后一个跟之前的有一致的
table.remove(maybehere,table.getn(maybehere)) --把最后一个节点移除
break;
end
end
end
end
end
imhere=maybehere; --把maybe的数值给imhere,这样就知道目前可能在的节点了
end
end 但现在考虑了一个很根本性的东西......
mush的触发顺序是怎么样的?
举例哈
比如同一时间,mud服务器给我发送了两条信息
你的银子的数量是21乘以51。
你的银子翻倍了。
举例哈,就是这么个意思。
我如果想计算,我有多少银子,我可以分别抓两个信息分析。
那么问题来了
如果用触发,我第一条信息的可以这么写
silver=21*51
第二条信息可以这么写
silver=silver*2
可如果情况复杂一些,可能我第一条的数据还没处理完毕,第二条的信息就开始处理了,那么silver到底是多少,就不好说了......
换句话说,有没有可能由于信息处理的速度慢,导致如果后面的信息处理,需要以前面的信息处理为依据,而前面的信息没处理结束,导致后面的信息处理出错呢?
如果可能出错,怎么解决呢?用先进先出的方式做个堆栈吗?数据结构我完全不懂,只是个想法。 有秋猫现成的mush机器你不研究,天枢上不是有吗?你这样构架新mush 很累的 回复 5# silvent
何人是秋猫?何处为天枢? 回复 4# ltblue
貌似触发语句有个优先级的设置,可以通过优先级来确定触发的顺序 回复 7# pizzagoo
我不是同一条信息触发,而是有先后顺序,所以跟优先级无关。
第一条必然先触发,但可能第一条的程序还没运行完,第二条就开始运行了,是这么个问题
第二条肯定是比第一条后运行,但会不会等第一条全部运行完,第二条才运行,是这么个问题
我测试了2次,结果完全不同。
第一次测试,是第一条运行没完的话,第二条根本不触发
第二次测试,是第一条运行完了,第二条才触发,中间整个机器会卡一下 回复 8# ltblue
那就对变量做一个互斥,在计算silver时,将改变量锁住,其他的任务要读写silver时,先等待解锁 没看懂,顺便点击了一下cmud 地图,原来可以轻松实现…
页:
[1]
2