duno
发表于 2009-5-31 14:09:43
输入 andao;7,发送
enter shudong
say 天堂有路你不走呀
d
7
没有问题,你的具体问题是什么
其中 <include name="constants.lua"/> 行俺注释掉了,否则找不到文件
[ 本帖最后由 duno 于 2009-5-31 02:11 PM 编辑 ]
muxiao
发表于 2009-5-31 14:15:10
不是在命令栏里输入andao;7
输入一个包含andao的alias,比如huyidao.,我观察下发给服务器的字符串就直接是andao;7....这样的.andao不展开了.导致不能运行.
duno
发表于 2009-5-31 14:17:40
红色部分为修改,增加递归调用,可解决不解释andao的问题,原作者用了coroutine,俺没仔细看,不知道有没有竞争冒险之类的问题
测试了下,huyidao没有问题
function exec_alias(s)
temp_thread_path=coroutine.create(function (s)
local p_temp = Split(s,";");
for i,v in ipairs(p_temp) do
if alias_table then
exec_alias (alias_table)
elseif nil~=string.find(v,"#%d+ ") then
world.Send(do_table..string.sub(v,string.find(v," .+")));
elseif nil~=string.find(v,"#wa") then
world.DoAfterSpecial(string.sub(v,string.find(v,"%d+")) / 2000,"coroutine.resume(temp_thread_path);",12);
coroutine.yield();
else
world.Send(v);
end
end
end)
coroutine.resume(temp_thread_path,s);
end
[ 本帖最后由 duno 于 2009-5-31 02:20 PM 编辑 ]
ddid
发表于 2009-5-31 14:27:27
将exec_alias中
world.Send(v)
这句,改为
Execute(v)
可以解决。
muxiao
发表于 2009-5-31 14:34:00
两种方法都可以解决,赞一下两位大侠.
结帖
muxiao
发表于 2009-5-31 14:43:08
又有新问题,此贴不能结,,,
当alias中包含alias,如wudang,quanzhen 这样的,又包含#wa 2000需要暂停的.
taoyuan 就只解释wudang, gumu就只解释到quanzhen,#wa 后面的不发送了.
......
无论是duno的还是ddid的,都这样..
ddid
发表于 2009-5-31 15:11:30
没有看到有关
coroutine.resume(temp_thread_path);",12);
coroutine.yield();
两个函数的脚本,到GAMMON的网站上SEARCH了一下,好像有,正在研究中……
duno
发表于 2009-5-31 15:21:28
DoAfterXXX没有正确按时触发
这个插件谁写的?有其他辅助部分没?
constants.lua是什么内容?常量列表?
muxiao
发表于 2009-5-31 15:28:07
coroutine.resume yield 是继续执行和挂起的,
doafterspeial没有触法.插件是论坛上下的.年代久远忘记了,当是只有这么个xml,没有包含文件.
muxiao
发表于 2009-5-31 15:30:47
哦,我看了看,好象constants是生成了脚本执行的日志.world文件夹下有.