新手求教PATH路径搜索
以下是我借用的路径搜索function is_number(c_name)
local x,y=string.find(c_name,".*");
for x=1,y do
local b=string.byte(string.sub(c_name,x,x));
if ((b<48) or (b>57)) then
return false;
end
end
return true;
end
temp_slow_path_table={};
function fill_slow_path(path_name)
local i,v = string.find(path_dir_bianli_table,".*");
while i<=vdo
if is_number(string.sub(path_dir_bianli_table,i,i+1)) then
for j=1,string.sub(path_dir_bianli_table,i,i+1) do
if nil~= path_dir_table, i+2, i+2)] then
table.insert(temp_slow_path_table, path_dir_table, i+2, i+2)].cmd);
else
table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table, i+2, i+2));
end
end
i=i+3;
elseif is_number(string.sub(path_dir_bianli_table, i, i)) then
for j=1,string.sub(path_dir_bianli_table,i,i) do
if nil~= path_dir_table,i+1,i+1)] then
table.insert(temp_slow_path_table, path_dir_table,i+1,i+1)].cmd);
else
table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table,i+1,i+1));
end
end
i=i+2;
else
if nil~= path_dir_table, i, i)] then
table.insert(temp_slow_path_table, path_dir_table, i, i)].cmd);
else
table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table, i, i));
end
i=i+1;
end
end
end
function slow_path(path_name, time_wait)
if nil~= path_dir_bianli_table then
fill_slow_path(path_name);
slow_path_thread=coroutine.create(function ()
for i,v in ipairs(temp_slow_path_table) do
world.DoAfterSpecial(time_wait, "slow_auto_next();",12);
coroutine.yield();
world.Send(v);
end
end);
coroutine.resume(slow_path_thread);
else
Note("你有这个搜索路径么");
end
end
slow_state=0;
function slow_pause()
slow_stat=1;
end
function slow_resume()
slow_stat=0;
slow_auto_next();
end
function slow_auto_next()
if slow_state==0 then
coroutine.resume(slow_path_thread);
end
end
function slow_path_Init()
world.AddAlias("al_slow_path","^\\#slow (.*?) (.*?)$",
"slow_path(\"%1\",%2);",
alias_flag.Enabled + alias_flag.Replace + alias_flag.RegularExpression,
"");
world.SetAliasOption("al_slow_path", "send_to", "12");
end
按照maper大哥的调用function slow_path(path_name, time_wait)函数使用,
我发现我遍历一个地方后,需要遍历第二的地方,会先遍历第一个地方再遍历我选择的地点,是不是代码哪里有问题哦?还是需要改变哪个参数让遍历重置 temp_slow_path_table={}; 这个估计需要清一下 本帖最后由 dengtaliyi 于 2020-12-10 11:27 PM 编辑
还有两个问题:
1、world.AddAlias("al_slow_path","^\\#slow (.*?) (.*?)$", 这一句报错为空,完全不懂怎么修改{:7_276:}
2、调用function slow_path(path_name, time_wait)函数,可以一次连续遍历1个以上path_name吗?或者一次连续遍历所有
1、temp_slow_path_table={}这个语句要放入到函数function fill_slow_path(path_name)之中,这样每次执行都会初始化一下。
2、world.AddAlias这一段语句,从语法上看并没有什么问题,你说的报错为空不知道是啥意思。这一段语句的作用是增加了一个alias,用法是在命令行输入“#slow yangzhou 1”,以1秒钟一步的速度遍历扬州地图。当然我只是用yangzhou举个例子,关于第一个参数path_name是需要符合其它代码的要求,得是path_dir_bianli_table中的键值。
3、function slow_path(path_name, time_wait)函数根据你提供的代码部分看,一次只能遍历一个path_name,如果需要遍历多个地点,需要再编写外部的嵌套函数来调用slow_path()。也可以加一个判定,如果传入的参数path_name是table的话,就将table中每一个值进行 fill_slow_path操作,最后拼成一个大的table来替代temp_slow_path_table,再执行后面的遍历操作。 非常感谢,学习,继续学习 本帖最后由 dengtaliyi 于 2020-12-13 01:28 PM 编辑
@nrm 我使用上面代码在遍历一个区域后需要过河、坐船,如果我开始设定的time_wait为0.3秒,过河需要5秒时间,这种情况怎么处理呢?就是您说的外部嵌套吗?,能提供一个例子作参考吗?非常感谢 dengtaliyi 发表于 2020-12-13 01:27 PM
@nrm 我使用上面代码在遍历一个区域后需要过河、坐船,如果我开始设定的time_wait为0.3秒,过河需要5秒时间 ...
过河的时候停掉行走的部分,下船的消息触发继续行走机器人,过河不单是5秒的问题,可能要等船,时间是不确定的 是的
过河,坐车等都是用触发来暂停
结束之后再继续走路。 本帖最后由 dengtaliyi 于 2020-12-19 11:30 AM 编辑
还有几个问题请教大家:
1、请教我上面的代码 slow_state=1 slow_state=0 是暂停、开启命令吗?
2、还有以下推车遍历代码能插入暂停吗?我现在停止靠的是关闭房间入口触发,老走过头
function bianli()------走路家伙
if lj == nilthen
lj = GetVariable("lj")
lj = Split(lj, ";")
print("lj = zhfxlj(lj)")
lj = zhfxlj(lj)
end
---print("lj变量:",table.concat(lj,";"))
local i=tonumber(GetVariable("bianli_i"))-------bianli_i是个计数器,表明现在走到数组的哪一个元素了。
if tonumber(GetVariable("hubiao"))==1 then ------------hubiao个作为一个标志:如果为1就表明现在不带着镖车走,如果为0就得带着镖车走。
if lj==nil then Note("已经走完了,还走个屁啊") return end -------数组遍历完成之后就不要遍历了再
local s1="当前行走段一共"..tostring(table.getn(lj)).."步,现在为 第"..GetVariable("bianli_i").."步"..",当前命令:"..lj
Note(s1)---------以上两行是用来提醒自己的。
Execute(lj)------这才是行走的命令
elseif tonumber(GetVariable("hubiao"))==0 then
if lj==nil then Note("已经走完了,还走个屁啊") return end
local s1="当前行走段一共"..tostring(table.getn(lj)).."步,现在为 第"..GetVariable("bianli_i").."步"..",当前命令:"..lj
Note(s1)
Execute("gan che to "..lj..";xixi")
end
end
3、我发觉遍历老走过头,如果坐船的情况,上船后多走了几步暂停,下船后继续走路会发生错误,而且上下船对遍历回到起点也有影响,这种情况怎么处理哦 上船的时候把遍历步数减一。我碰到被石头绊倒,就是先停遍历,然后步数减一,几秒之后再开始遍历。应该同样道理吧
页:
[1]
2