北大侠客行MUD论坛

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

新手求助:这个机器人应该怎么写?

[复制链接]
发表于 2017-7-14 11:46:38 | 显示全部楼层 |阅读模式
本帖最后由 aluwan 于 2017-7-14 11:48 AM 编辑

比如,我进入了一个场景,这个场景有两个强盗:张三、李四。
人物一进入这个场景,看到两个强盗,机器人就会自动记录这个场景中强盗的数量。然后在我杀强盗的过程当中,如果出现“张三死了”,机器人自动在记录的强盗总数当中减一。出现“李四死了”,再减一。最后当强盗数量为零时,人物自动走入下一个场景。整个地图当中只有张三、李四、王五、赵六这四种强盗,所以可以直接以强盗的名字作为统计和触发。而且,一个场景中不会出现两个相同的强盗。
对于高手来讲,这个应该很简单。但是对我来说,这个实现起来很难!因为机器人水平实在太差。还请各位大侠伸出援手,帮忙写一段例子好吗?

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-14 14:20:56 | 显示全部楼层
本帖最后由 creat 于 2017-7-14 06:31 AM 编辑

小子,给你个活

  1. kill_npc_list={npc_number=0,finding=0,killing=0,killed=0}
复制代码

干掉张三、李四、王五、赵六这四种强盗
  1. kill_npc_list["张三"]="finding"
  2. kill_npc_list.finding = kill_npc_list.finding+1
  3. kill_npc_list["李四"]="finding"
  4. kill_npc_list.finding = kill_npc_list.finding+1
  5. kill_npc_list["王五"]="finding"
  6. kill_npc_list.finding = kill_npc_list.finding+1
  7. kill_npc_list["赵六"]="finding"
  8. kill_npc_list.finding = kill_npc_list.finding+1
  9. kill_npc_list.npc_number=kill_npc_list.finding
复制代码


此时的表中内容应当为:
  1. kill_npc_list={npc_number=4,finding=4,killing=0,killed=0,["张三"]="finding",["李四"]="finding",["王五"]="finding",["赵六"]="finding"}
复制代码


我进入了一个场景,这个场景有两个强盗:张三、李四。

  1. if kill_npc_list["张三"]
  2. then
  3. kill_npc_list["张三"]="killing"
  4. kill_npc_list.finding = kill_npc_list.finding-1
  5. kill_npc_list.killing = kill_npc_list.killing+1
  6. elseif kill_npc_list["李四"]
  7. then
  8. kill_npc_list["李四"]="killing"
  9. kill_npc_list.finding = kill_npc_list.finding-1
  10. kill_npc_list.killing = kill_npc_list.killing+1
  11. end
复制代码


此时的表中内容应当为:
  1. kill_npc_list={npc_number=4,finding=2,killing=2,killed=0,["张三"]="killing",["李四"]="killing",["王五"]="finding",["赵六"]="finding"}
复制代码


出现“张三死了”

  1. if kill_npc_list["张三"]
  2. then
  3. kill_npc_list["张三"]="killing"
  4. kill_npc_list.killing = kill_npc_list.killing-1
  5. kill_npc_list.killed = kill_npc_list.killed+1
  6. end
复制代码

此时的表中内容应当为:
  1. kill_npc_list={npc_number=4,finding=2,killing=1,killed=1,["张三"]="killed",["李四"]="killing",["王五"]="finding",["赵六"]="finding"}
复制代码


张三、李四、王五、赵六都死了
  1. if kill_npc_list.npc_number==kill_npc_list.killed
  2. then
  3. print "都干掉了……"
  4. else
  5. print "懒鬼接着干活!"
  6. end
复制代码


此时的表中内容应当为:
  1. kill_npc_list={npc_number=4,finding=0,killing=0,killed=4,["张三"]="killed",["李四"]="killed",["王五"]="killed",["赵六"]="killed"}
复制代码


大致如此,代码未测npc_number为目标总数,killed为已死亡目标数。finding为尚未找到人数,killing为战斗中的人数。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2017-7-14 15:13:39 | 显示全部楼层
看着好高大上滴感觉,虽然我还是看不懂
我用zmud7.21。直接把这些代码里的人物名字改过来,然后直接复制代码到命令栏那里输入就可以用了吗?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-14 16:31:05 | 显示全部楼层
回复 2# creat


    参见教主
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-14 16:58:19 | 显示全部楼层
回复 3# aluwan


    这是lua的语法,可能需要些曲折
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2017-7-14 17:08:24 | 显示全部楼层
本帖最后由 aluwan 于 2017-7-14 05:22 PM 编辑

这个,再自己动手改,一点也不懂的话就比较麻烦了。
说说我实际的使用场景吧:
玩的另外一个风云mud,在一个山洞里,地图很庞大,但是地名重复的地方很多,基本上都是“山洞小道”、“山洞尽头”之类同名的描述。人物在里面用遍历的方法自动走,碰到怪物自动杀。这里边一共有五种怪物,名字各不相同。有时候碰到的只有一个,有时候能同时碰到三个。如果同时碰到三个的话,先杀掉一个,剩余两个还没死,机器人有时候会傻乎乎地下命令离开当前场景。这样人物和怪正在打架,被怪拉住了走不开。可是遍历已经下了好多的方向命令,导致最后遍历整个都乱了,走的方向都撞墙。这就需要改变启动#step的触发。因此要判断一下,在把当前地图所有的怪都杀完之后,遍历才会再次启动。
大侠能不能帮我做一个现成的?就是用#tri{}这种,在zmud 7.21里头可以直接生成可用的机器人,根据以上需求:看到怪物,自动停止遍历#pause,然后数一数共有几个怪。杀了一个,自动减一个。都杀光了,减为0,人物继续启动遍历#step。就这功能。别的太麻烦,不用做。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-15 10:58:42 | 显示全部楼层
回复 2# creat


    感谢教主,又学会了一点东西。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-15 19:56:51 | 显示全部楼层
回复 6# aluwan


    很遗憾,我做出来的你这个客户端用不了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-17 16:22:21 | 显示全部楼层
可以每次取一个怪物id。。。死了可以dazuo 10,或者suicide -f一下。。如果在战斗中。。就重新杀了再判断。。如果脱战了,就继续遍历
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-7-18 00:14:55 | 显示全部楼层
一般没人这么做吧,一般记录房间有啥npc id,遇到自己npc就kill,死了kaichu,没id就行了。不太可能只杀2个中的一个
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 01:56 AM , Processed in 0.010701 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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