改变思路,远离触发。
通常接触MUD游戏的时候,都是从Zmud开始入手的,因为它确实是容易上手:复制一行问题,然后写入一串命令,就可以让角色按照我们的设想开始行动了。
但是长久以后,我们的思想似乎被它束缚了,一旦开始写机器人,就会从触发
入手,通常的思路都是,在什么情况下,我们应该做什么。结果导致写大型机
器人的时候,会充满了各种各样的trigger,最后变得难以控制。
我想说的是,我们写机器人应该是这样的,比如全真新手机器人:(以下是伪代码)
func QuanZhenNewbieJob() //定义全真新手任务函数。
while ContinueJob
{
result = LookNotice() //查看全真公告,得到查看的结果。
if result == 'LaoDao' //如果公告是老道任务,那么就调用老道的任务函数。
DoLaoDaoJob()
else if result == 'DaoTong' //如果公告是道童任务,那么就调用道童的任务函数。
DoDaoTongJob()
else //如果没有公告,那么就执行一个空闲的函数,然后重新查看公告(比如读书,比如傻等10秒等等)
IdleFunc()
continue
}
OK,运行这个函数,就可以开始我们的全真新手任务了,方便快捷,非常便于管理。
后来我们又写了全真SaoDi的函数。
于是我们可以方便的将这两个函数拼接。
funcQuanZhenFullJob()
GetStatus()
if exp > xxx
QuanZhenNewbieJob()
else if exp <= xxx
QuanZhenSaoDi()
我想应该很多高手的机器都应该是以这种方式执行的,因为wait.lua似乎已经提供了这样的功能
(因为我是用python仿照wait.lua实现了这么一套东西,但是对于wait.lua真正的使用方法并不了解,
但是看论坛帖子,似乎已经有人扩展了wait的功能,实现了这种机器编写方式)
写这个帖子只是为了让其他玩家开拓一下编写机器人的思路。
北大侠客行MUD,中国最好的MUD 顶 不明觉厉 zmud是没法这样干的,mush这样干,确实条理清晰,便于管理和编写 mush可以的zmud都可以,zmud可以的mush不行或艰难实现。 mush可以的zmud都可以,zmud可以的mush不行或艰难实现。
oolong 发表于 2015-1-18 01:11 AM http://pkuxkx.com/forum/images/common/back.gif
我也想请教一下,没有协程的帮助,Zmud如何实现函数暂停执行,等待其他条件满足后,继续执行。
比如:
func QuanZhenNewbieJob() //定义全真新手任务函数。
while ContinueJob
{
result = LookNotice() //查看全真公告,得到查看的结果。 (1)
if result == 'LaoDao' //如果公告是老道任务,那么就调用老道的任务函数。
DoLaoDaoJob()
else if result == 'DaoTong' //如果公告是道童任务,那么就调用道童的任务函数。
DoDaoTongJob()
else //如果没有公告,那么就执行一个空闲的函数,然后重新查看公告(比如读书,比如傻等10秒等等)
IdleFunc()
continue
}
在函数执行(1)这个地方我会让QuanZhenNewbieJob暂停执行,然后发送look notice指令,等待mud的返回信息,从而给result赋值。
这个过程用lua和python的协程,可以非常方便的实现。
但是用Zmud呢?如何在(1)这个地方暂停执行呢?
Cmud支持lua和python,倒是应该可以办到的。 本帖最后由 littleknife 于 2015-1-18 02:48 PM 编辑
你的思路其实和我写的MUSH框架脚本思路基本一致。若有兴趣可以参考下《一个脚本》框架(置顶帖)。
我的框架中后来提出的应用模块开发中心,即是总调用模式,然后根据条件去执行各自的任务的意思。
至于在MUSH中或用lua的实现暂停的方法我倒是可以提供一下几种方式供参考:
require "wait"
function wait_test()
wait.make(function()
--------------------------------------------------------------------------------------
Execute("hi")
wait.regexp("^你双手抱拳,作了个揖道:各位英雄请了!")-----一次性触发实现暂停。用命令hi或其他命令继续。如:set no_more continue等形式。
print("这里是用命令行方式恢复的继续!")
--------------------------------------------------------------------------------------
wait.pause("pauseid")-----脚本暂停,用脚本wait.wake("pauseid")来唤醒继续。需配合新版wait.lua文件。
print("这里是用wait.wake来唤醒的继续部分!需要wait.lua带有暂停功能。")
--------------------------------------------------------------------------------------
thread=coroutine.create (function()
print("这里是线程执行到这里了。")
coroutine.yield()-----线程暂停,用脚本线程函数coroutine.resume(thread)唤醒继续。
print("这里是用线程函数resume恢复的部分:")
end)
coroutine.resume(thread)
--------------------------------------------------------------------------------------
do_something()
end)
end
回复 6# cmud
cmud支持消息,使用消息机制,wait一个消息。 嗯,这么简单功能zmud cmud轻松实现... 嗯,这么简单功能zmud cmud轻松实现...
oolong 发表于 2015-1-18 07:07 PM http://pkuxkx.com/forum/images/common/back.gif
Zmud支持消息?
页:
[1]
2