北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 4338|回复: 7

求解析path_bianli_lib.lua

[复制链接]
发表于 2011-10-17 22:44:19 | 显示全部楼层 |阅读模式
3  谁帮我翻译下这个文件,主要是算法有点看不懂。。。会用,但是功能太少了,我想自己加点东西进去
  1. path_dir_bianli_table={
  2.         ["path_dl"]="wtlkwenssnjnwnsenhehlnnsjkewlhswlseetjhnehkesklgwwsgeensstgsnwenwswweeeewnssnwsweeudwswswenntwnsegseenssnwspllhnhntgslshiswwntnswuwtgeetgetgwwdegseeselelhwhw6n",
  3.        
  4. }

  5. function is_number(c_name)

  6.         local x,y=string.find(c_name,".*");
  7.         for x=1,y do
  8.                 local b=string.byte(string.sub(c_name,x,x));--将截取到的字符串转换为整数
  9.                 if ((b<48) or (b>57)) then
  10.                         return false;
  11.                 end
  12.         end
  13.         return true;
  14. end

  15. temp_slow_path_table={};
  16. function fill_slow_path(path_name)
  17. local i,v = string.find(path_dir_bianli_table[path_name],".*");--匹配表中的字符串,i为字符串的起始位置,v为结束位置
  18.         while i<=v  do
  19.                 if is_number(string.sub(path_dir_bianli_table[path_name],i,i+1)) then
  20.                 --如果is_number()为true,但括号里的内容有点不理解,怎么成为is_number的参数
  21.                
  22.                         for j=1,string.sub(path_dir_bianli_table[path_name],i,i+1) do--string.sub返回的是什么值?

  23.                                 if nil~= path_dir_table[string.sub(path_dir_bianli_table[path_name], i+2, i+2)] then
  24.                                         table.insert(temp_slow_path_table, path_dir_table[string.sub(path_dir_bianli_table[path_name], i+2, i+2)].cmd);
  25.                                         --将当前获取的一个字符串所表示的cmd值存入temp_slow_path_table中
  26.                                 else
  27.                                         table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table[path_name], i+2, i+2));
  28.                                         --将当前获取的一个字符串存入temp_slow_path_table
  29.                                 end
  30.                         end
  31.                         i=i+3;
  32.                 elseif is_number(string.sub(path_dir_bianli_table[path_name], i, i)) then
  33.                         for j=1,string.sub(path_dir_bianli_table[path_name],i,i) do
  34.                                 if nil~= path_dir_table[string.sub(path_dir_bianli_table[path_name],i+1,i+1)] then
  35.                                         table.insert(temp_slow_path_table, path_dir_table[string.sub(path_dir_bianli_table[path_name],i+1,i+1)].cmd);
  36.                                 else
  37.                                         table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table[path_name],i+1,i+1));
  38.                                 end
  39.                         end
  40.                         i=i+2;
  41.                 else
  42.                         if nil~= path_dir_table[string.sub(path_dir_bianli_table[path_name], i, i)] then
  43.                                 table.insert(temp_slow_path_table, path_dir_table[string.sub(path_dir_bianli_table[path_name], i, i)].cmd);
  44.                         else
  45.                                 table.insert(temp_slow_path_table, string.sub(path_dir_bianli_table[path_name], i, i));
  46.                         end
  47.                         i=i+1;
  48.                 end
  49.         end
  50. end

  51. function slow_path(path_name, time_wait)
  52.         if nil~= path_dir_bianli_table[path_name] then
  53.                 fill_slow_path(path_name);
  54.                 slow_path_thread=coroutine.create(function ()--coroutine.create创建一个协同程序
  55.                         for i,v in ipairs(temp_slow_path_table) do--遍历表
  56.                 world.DoAfterSpecial(time_wait, "slow_auto_next();",12);--n秒之后继续执行slow_path_thread
  57.                                 coroutine.yield();--程序被挂起,暂停运行
  58.                                 world.Send(v);
  59.                         end
  60.                 end);
  61.                 coroutine.resume(slow_path_thread);--从yeild处开始继续执行  else
  62.                 Note("你有这个搜索路径么");  end endfunction slow_auto_next() if slow_state==0 then coroutine.resume(slow_path_thread); endend
复制代码

[ 本帖最后由 aiccybb 于 2011-10-18 04:10 PM 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-17 23:54:22 | 显示全部楼层
sigh。。。  来个人交流下吧。。。这是好东西啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-18 07:10:35 | 显示全部楼层

回复 2楼 的帖子

这是一个线性遍历库,它的作用是根据zmud录制的路线,按照一定的路线遍历最后返回出发点。
1、这个库是一个早期的库,现在要是用估计得修改不少内容。但是确实是一个不错的学习材料(早期的城际互联就是参考这个代码)。
2、它的暂停机制有时候会失灵。
3、这里有zmud录制的遍历路线转换为一般路线函数,可是缺少一般的zmud路线转换为遍历路线的函数。即遍历路线的形成必须进入zmud中自己录制才可以。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-18 08:32:06 | 显示全部楼层
我的明教新手机器人就用了这个,不过发现有个bug,有个table在赋值的时候没有初始化以下,会造成循环遍历。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-18 10:10:16 | 显示全部楼层
城际互联脚本模式是提供这种慢速行走的。
比如你有个zmud的路线:#3 e;n;ne;w;nu;nd;e;se;sw
可以定义path="#3 e;n;ne;w;nu;nd;e;se;sw"
然后wait_step=-1 do_walkgo(path,1)即是以每1秒走一步的方式,慢速行走。

[ 本帖最后由 littleknife 于 2011-10-18 10:16 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-18 10:49:57 | 显示全部楼层
原帖由 pizzagoo 于 2011-10-18 08:32 发表
我的明教新手机器人就用了这个,不过发现有个bug,有个table在赋值的时候没有初始化以下,会造成循环遍历。

对,初始化是个问题。。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-18 10:53:30 | 显示全部楼层
原帖由 littleknife 于 2011-10-18 10:10 发表 城际互联脚本模式是提供这种慢速行走的。比如你有个zmud的路线:#3 e;n;ne;w;nu;nd;e;se;sw可以定义path="#3 e;n;ne;w;nu;nd;e;se;sw"然后wait_step=-1 do_walkgo(path,1)即是以每1秒走一步的方式,慢速行走。
我去看看do_walkgo()函数,其实我是想加入个后退一步的功能。这个lua路径主要是用到了一个模式匹配函数,我去lua程序设计里面找到了。暂时还不会用。。。

[ 本帖最后由 aiccybb 于 2011-10-18 11:11 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-10-18 12:41:17 | 显示全部楼层
原帖由 pizzagoo 于 2011-10-18 08:32 发表
我的明教新手机器人就用了这个,不过发现有个bug,有个table在赋值的时候没有初始化以下,会造成循环遍历。
temp_slow_path_table={}
要把这个表的内容清空
用value=table.remove(temp_slow_path_table)来清除。。
不知道有没有弄错
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 03:30 AM , Processed in 0.017639 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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