北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: ltblue

我好像误入歧途了

[复制链接]
发表于 2015-4-21 15:16:54 | 显示全部楼层
回复  jarlyyn


是啊?mush不行吗?也可以吧
把变量放到触发条件里,正则应该支持吧?难道不支持吗?
ltblue 发表于 2015-4-21 03:15 PM

先写代码吧……到时候你就知道了……
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 15:31:42 | 显示全部楼层
忽然想,我们用一个类似”任务榜“的模式行吗?

每个动作,都有一定的目的,其实都是一个任务
把每一个模块,当成一个任务来运行,每个任务结束,都会设置”下一个任务“来跟上。如果当前任务需要挂起,则自动执行”可运行的,紧急度最高的任务“。
同时辅以各种全局钩子,作为切换任务的触发。

例如:
饮水在50以上,喝水的紧急度为0,饮水在20-50,喝水的紧急度为100,饮水不足20,喝水的紧急度为1000

送信任务的紧急度,接信之前为50,接到信之后,中途等杀手时为500,与杀手打架的时候为10000,杀完了杀手继续送信的紧急度为200。

我在接到信之前,送信的除了第一步以外的步骤不可接,完成了第一步,即接到信之后,第一步变成不可接,第二部变成可接,然后判断哪个紧急度最高,也许饮水低于20,紧急度高达1000,就去喝水了,喝水之后,再去等杀手。

换句话说,逻辑上不可自行的,紧急度不变,任务状态变成不可接,比如你不能没接送信任务,就去等杀手。
如果逻辑上可行但或许没必要的,比如喝水,那么任务状态一直是可接,只不过水量高时不优先接而已。

这样,有一部分是状态机,即判断变量来执行,另外一部分,不必要依靠判断”是否busy“来写,而是做完一个任务,或者碰到某些”全局钩子“(比如忽然碰到pk什么的,瞬间pk的紧急度高达100w,然后专心pk),来判断下一步做什么。

这样的思路可行吗?大家评价一下吧
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 15:33:03 | 显示全部楼层
回复 51# jarlyyn


刚才看了一下,触发器里有”展开变量“这个选项,应该支持触发条件里加变量啊

当然,我之前误入歧途,基本没用mush里的触发器,所以没啥发言权......
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 15:49:35 | 显示全部楼层
忽然想,我们用一个类似”任务榜“的模式行吗?

每个动作,都有一定的目的,其实都是一个任务
把每一个 ...
ltblue 发表于 2015-4-21 03:31 PM


没什么问题
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 16:46:26 | 显示全部楼层
回复 40# ltblue


    可以多个模块一起wait.regexp,你多wait.make几次就是了。不过不是很推荐动不动就创建新协程,因为代码不严谨的话容易崩溃

一个极端的例子,比如你想做一个独立的全局触发,其实可以:
wait.make(function()
  while true do
    local l, w = wait.regexp("触发内容")
    触发动作
  end
end)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:02:48 | 显示全部楼层
回复 55# cappuccino


啊?协程不是同时只能有一个的吗?可以一起wait吗?

你的例子没看懂,这是走一步算一步的方式吗?wait到了再wait?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:04:58 | 显示全部楼层
另外,请教一个语法问题:

有函数a,函数b,函数c,以及变量w
我希望当w=="a"时,运行函数a
w=="b"时,运行函数b
w=="c"时,运行函数c
可否不加if,就运行?
多谢
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 17:14:59 | 显示全部楼层
本帖最后由 cappuccino 于 2015-4-21 05:24 PM 编辑
lua本来就有regexp,根本不该使用wait.regexp啊……wait是什么鬼……
jarlyyn 发表于 2015-4-21 02:54 PM



    wait是一个封装了coroutine的模块,wait.regexp只是其中的一种用法。。可以说,wait方式改变了编写mush机器人的思路
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:23:30 | 显示全部楼层
wait是一个封装了coroutine的模块,wait.regexp只是其中的一种用法。。
cappuccino 发表于 2015-4-21 05:14 PM



完全不懂什么叫coroutine,本论坛有个”粗学mush“,我看那里有,我就用了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 17:30:00 | 显示全部楼层
回复 56# ltblue

这算不算同时?

for i = 1, 10 do
  wait.make(function ()
    while true do
      print(i)
      wait.time(1)
    end
  end)
end
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 05:38 AM , Processed in 0.011088 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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