北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 8402|回复: 12

大家的mush机器里有没有这样的系统?

[复制链接]
发表于 2015-4-13 13:16:44 | 显示全部楼层 |阅读模式
我定义叫“如影随形”系统......
由于各种原因,机器人行走的时候,难免出错,然后就走丢了,然后就全球定位
但是全球定位系统不是万能的,有些时候两个房间的所有描述全部一模一样,这样就得按照既定方式随便走几步再全球定位
有的时候呢,半路碰到各种没想到的原因被拦下来,然后就不知道该怎么继续走了,还得定位

为了解决这个问题,我考虑写一个如影随形的功能
其实很简单,就是有一个“应该在哪”和一个“现在的房间可能在哪”,最后得出一个“我目前在哪”的结论
这个是随时进行更新的,更新节点在进入任一一个房间后(哪怕在原地look也更新),触发条件就是看到方向就计算

不知道大家有没有考虑过这样的问题。

另外,关于挡路的npc,不知道大家怎么处理的。
目前很多机器人都是走到npc那里,然后kill一下,发现没人,就继续走。我觉得完全可以到节点,下kill,放pfm,直接撂倒就继续走。中间没有停顿,毕竟挡路的npc不多,很容易就可以干掉的,可以节省一个等待的时间。

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-13 13:19:18 | 显示全部楼层
光想是没有用的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-13 13:34:15 | 显示全部楼层
回复 2# xiaocao

主要的代码大概是这样的,就这么一小段罢了

    function followme(roomname,exits)                                                                                --如影随形系统,输入参数为当前房间名、方向,没有返回值,只修改imhere数据
        if followmatch(shouldbehere[1],roomname,exits)=="yes" then                        --如果当前房间的描述符合下一个shouldbehere的描述,说明走对了
                imhere={};                                                                                                                --首先把imhere清空
                table.insert(imhere,shouldbehere[1])                                                        --然后把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[j]==maybehere[table.getn(maybehere)] then        --如果最后一个跟之前的有一致的
                                                        table.remove(maybehere,table.getn(maybehere))                --把最后一个节点移除
                                                        break;
                                                end
                                        end
                                end
                        end
                end
                imhere=maybehere;                                                                                                        --把maybe的数值给imhere,这样就知道目前可能在的节点了
        end
end
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-13 13:40:34 | 显示全部楼层
但现在考虑了一个很根本性的东西......

mush的触发顺序是怎么样的?
举例哈

比如同一时间,mud服务器给我发送了两条信息
你的银子的数量是21乘以51。
你的银子翻倍了。

举例哈,就是这么个意思。
我如果想计算,我有多少银子,我可以分别抓两个信息分析。
那么问题来了
如果用触发,我第一条信息的可以这么写
silver=21*51
第二条信息可以这么写
silver=silver*2
可如果情况复杂一些,可能我第一条的数据还没处理完毕,第二条的信息就开始处理了,那么silver到底是多少,就不好说了......
换句话说,有没有可能由于信息处理的速度慢,导致如果后面的信息处理,需要以前面的信息处理为依据,而前面的信息没处理结束,导致后面的信息处理出错呢?
如果可能出错,怎么解决呢?用先进先出的方式做个堆栈吗?数据结构我完全不懂,只是个想法。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-13 16:12:14 | 显示全部楼层
有秋猫现成的mush机器你不研究,天枢上不是有吗?你这样构架新mush 很累的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-13 21:47:31 | 显示全部楼层
回复 5# silvent


    何人是秋猫?何处为天枢?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-14 12:57:51 | 显示全部楼层
回复 4# ltblue


    貌似触发语句有个优先级的设置,可以通过优先级来确定触发的顺序
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-4-14 13:13:37 | 显示全部楼层
回复 7# pizzagoo


我不是同一条信息触发,而是有先后顺序,所以跟优先级无关。
第一条必然先触发,但可能第一条的程序还没运行完,第二条就开始运行了,是这么个问题
第二条肯定是比第一条后运行,但会不会等第一条全部运行完,第二条才运行,是这么个问题

我测试了2次,结果完全不同。
第一次测试,是第一条运行没完的话,第二条根本不触发
第二次测试,是第一条运行完了,第二条才触发,中间整个机器会卡一下
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-14 13:31:24 | 显示全部楼层
回复 8# ltblue


    那就对变量做一个互斥,在计算silver时,将改变量锁住,其他的任务要读写silver时,先等待解锁
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-4-14 20:41:26 | 显示全部楼层
没看懂,顺便点击了一下cmud 地图,原来可以轻松实现…
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-1 03:20 PM , Processed in 0.010824 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表