oolong
发表于 2015-5-26 15:05:52
真正牛x的mc你没见过。跳开你目前的思路。用mc模拟zmud功能
xiaocao
发表于 2015-5-26 15:30:53
http://pkuxkx.com/forum/viewthread.php?tid=22571&highlight=%D2%BB%B8%F6%BD%C5%B1%BE
一个脚本走天下
silvent
发表于 2015-5-26 15:37:49
有现成的mush机器不研究 楼主自己开发的毅力佩服啊
ltblue
发表于 2015-5-26 16:27:51
回复 11# oolong
模拟zmud很容易,关键不打算模拟
模拟zmud存在一些问题,有时候可能更麻烦
而且,都用mush了,还用zmud的做法,岂不是显得很low?呵呵
ltblue
发表于 2015-5-26 16:30:34
一个脚本走天下
xiaocao 发表于 2015-5-26 03:30 PM http://pkuxkx.com/forum/images/common/back.gif
其实我就是学他的做法吧,只是细节上很难做
其实我的做法也是把各个模块封装,然后自己调用自己的东西
可是有些时候存在”抢占“的情况,而任务本身又只能”自杀“,不能”他杀“,所以任务要随时打算”去死“,这个功能做起来很麻烦。
其实我的函数表已经不比小刀的少了吧......
ltblue
发表于 2015-5-26 16:44:17
今天把机器大改了一下,趁着还没写好
加入了全局变量:是否任务被打断
这样一旦被打断,这个变量就会变为”yes”,这样免除了到处返回(有没有被打断)的情况
不过其实还是治标不治本,只不过被打断的情况不是函数间口口相传,而是写在黑板上大家都能看罢了,仍然需要不停的去“看”,即任何模块只要调用了需要“耗时”的模块,都需要看一下黑板,看有没有被打断......
问题只是从一个方法换到另外一个方法罢了
ps:据说我这种问题叫“回调函数”的问题,貌似很常见,没啥好办法貌似
oolong
发表于 2015-5-26 20:55:04
做成死循环,给条件跳出
ltblue
发表于 2015-5-26 22:08:53
本帖最后由 ltblue 于 2015-5-26 10:14 PM 编辑
做成死循环,给条件跳出
oolong 发表于 2015-5-26 08:55 PM http://pkuxkx.com/forum/images/common/back.gif
没懂你的意思
我举个例子哈
假设某协程函数如下:
fun main()
wait.make(fun()
a()
print("main")
end)
end
fun a()
b()
print("a")
end
fun b()
c()
print("b")
end
fun c()
wait.time(100)
print("c")
end
就大体这么个情况吧
我想在这个协程运行的时候,被外部终结(本协程不知道何时终结,只知道通过某种指令被终结),怎么做?
即如果在wait.time期间,要保证不输出任何print(因为一旦被终结,意味着代码完全不再运行了)
ltblue
发表于 2015-5-26 22:16:06
我目前的做法大概是这样的
ifbreak="no"
fun main()
wait.make(fun()
a()
if ifbreak=="yes" then return
print("main")
end)
end
fun a()
b()
if ifbreak=="yes" then return
print("a")
end
fun b()
c()
if ifbreak=="yes" then return
print("b")
end
fun c()
for i=1,1000 do
wait.time(0.1)
if ifbreak=="yes" then return
end
print("c")
end
也就是在每个函数后面,都加个判断,然后只要外部把变量ifbreak改了,那么整个进程就被干掉了
不过,这样的做法,需要好多个
if ifbreak=="yes" then return
感觉好傻......
jarlyyn
发表于 2015-5-27 11:46:02
感觉你被带到沟里了。
你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。
那么,你接下去要做的,理论上创建一个接口,去调用真正的机器人,做相应的触发。
举个例子来说 我的客户端部分
https://github.com/jarlyyn/JNodeMud/tree/master/code/libs
里面有
mudclienttrigger.js 负责触发器这一块
mudclientvm.js 扶着创建一个虚拟机vm,并调用相应的机器代码
mudclient.js 是机器本体。
那么你现在做的大概是相当于 mudclienttrigger.js 这一块
你还需要写一个独立的机器人主题,然后通过事件/callback来驱动机器人。
每次触发后,再去调用这个时间/callback。
不然的话你先要画个流程图,把你机器人主题流程画一下。
在不需要用到协程的地方,先别去考虑多线程甚至是异步的问题。