北大侠客行MUD论坛

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

mush lua 钓鱼机器人完全注释版

[复制链接]
发表于 2008-9-4 13:17:59 | 显示全部楼层 |阅读模式
zgbl这个bl等一直让我写个什么mush的简洁教程。。。。说实话这太难了,用几句话教会人编程。。。。偶55555555

下面我把我写的钓鱼机器人作了很详细的注释,想学mush的人可以仔细研究下各条语句的用法。看得多了,自然也理解多了。

不理解的,可以直接问我
  1. -------------------钓鱼机器人 start--------------------------
  2. require "wait"
  3. require "tprint"
  4. function diaoyu_start()
  5.         wait.make (function ()  --- coroutine below here
  6.                 wait.regexp ("这里是城市的正中心,一个很宽阔的广场,铺着青石地面。一些游手好闲") -- 设置一个等待事件,只有在出现括号中的语句时,这行之后 end of coroutine 之前 代码才会被执行
  7.                 wait.time (1) -- 等待1秒
  8.                 Note( '回到ct了' ) -- 提示到达目的地
  9.                 diaoyu_cttomatou() -- 从ct走道岸边
  10.         end)  -- end of coroutine
  11.         diaoyu_maiyuer() -- 去买鱼饵
  12. end

  13. function diaoyu_maiyuer()
  14.         wait.make (function ()  --- coroutine below here
  15.                 wait.regexp ("你一走进杂货铺,老板就笑眯眯的跟你打招呼。这里卖一些杂七杂八的东西")-- 设置一个等待事件,只有在出现括号中的语句时,这行之后 end of coroutine 之前 代码才会被执行
  16.                 wait.time (1) -- 等待1秒
  17.                 Note( '到杂货铺了' ) -- 提示到达目的地
  18.                 -- 以下是购买钓鱼物品
  19.                 Send( 'buy yugou' )
  20.                 wait.time (2)
  21.                 Send( 'buy yuer 95;' )
  22.                 wait.time (2)
  23.                 Send( 'buy yuer 100;' )
  24.                 wait.time (2)
  25.                 Send( 'buy yuer 100;' )
  26.                 --wait.time (2)
  27.                 wait.time (2)
  28.                 diaoyu_suzhoub()-- 从杂货铺返回ct
  29.         end)  -- end of coroutine
  30.         diaoyu_suzhou()-- 从ct到杂货铺去
  31. end

  32. function diaoyu_cttomatou()--从ct到岸边
  33.         create_trigger( 'diaoyu_to_matou', "面前是一条波涛翻滚的大江\\(river\\)。浊流滚滚,万舟竞", "", "diaoyu_diaoyu" ) --设置一个一次性触发器,当到达岸边时触发并执行diaoyu_diaoyu
  34.         Send( "do 9 n" )--到岸边去
  35.         wait.make (function ()  --- coroutine below here
  36.                 wait.time (3)
  37.                 Send( 'l' ) --到达岸边后look一次
  38.         end)  -- end of coroutine
  39. end

  40. function diaoyu_diaoyu()--开始钓鱼
  41.         Note( "开始钓鱼" ) -- 提示
  42.         local jingshen = tonumber( GetVariable ("jingshen") ) -- 提取现在精神值
  43.         local jingyan = tonumber( GetVariable ("jingyan") ) -- 提取现在经验值
  44.         if jingyan >= 50000 then --当经验大于5w,停止钓鱼并提醒
  45.                 utils.msgbox ( "别钓拉,再钓也没有经验了" .. jingyan, "恭喜你" )
  46.                 return false
  47.         end
  48.         if jingshen < 20 then --如果精神值小于20,跳到发呆函数
  49.                 diaoyu_fadai()
  50.                 return false
  51.         end

  52.         create_trigger( 'diaoyu_to_matou_ok', "你一提杆,钓到了一条(.*),恭喜,恭喜。 ", "", "diaoyu_diaoyu_ok" ) --设置一个一次性触发器,当钓到鱼的时候执行diaoyu_diaoyu_ok函数
  53.         create_trigger( 'diaoyu_to_matou_no', "你猛地一拉鱼线,感到手上一沉", "", "diaoyu_diaoyu_end" ) --设置一个一次性触发器,当钓鱼完毕时执行diaoyu_diaoyu_end函数
  54.         create_trigger( 'diaoyu_to_no_jingshen', "你太累了,歇会再钓吧!", "", "diaoyu_fadai" )--设置一个一次性触发器,当"你太累了,歇会再钓吧!"时执行diaoyu_fadai函数去发呆
  55.         Note( "定时器返回:" )
  56.         Note(create_timer( 'diaoyu_to_matou_timeout', 50, '', 'diaoyu_to_matou_timeout' ) )--设置一个一次性定时器,如果50秒没有钓鱼成功,执行 diaoyu_to_matou_timeout 钓鱼超时函数

  57.         wait.make (function ()  --- coroutine below here
  58.                 wait.time (1)
  59.                 Send( "gua yuer" ) --
  60.                 wait.time (1)
  61.                 Send( "diao yu" ) --钓鱼
  62.                
  63.         end)  -- end of coroutine
  64. end

  65. function diaoyu_to_matou_timeout() --超时后重新开始钓鱼
  66.         Note( "超时了重来" )
  67.         diaoyu_diaoyu() --重新开始钓鱼
  68. end

  69. function diaoyu_diaoyu_ok (name, line, wildcards) --成功钓到鱼
  70.         Note( "成功钓到鱼" )
  71.         Send( 'drop fish' ) --丢掉鱼
  72. end

  73. function diaoyu_diaoyu_end (name, line, wildcards) --钓鱼完毕
  74.         Send( 'hp' )
  75.         DeleteTimer( 'diaoyu_to_matou_timeout' ) --删除钓鱼超时触发器
  76.         wait.make (function ()  --- coroutine below here
  77.                 wait.time (1)
  78.                 diaoyu_diaoyu() --重新开始钓鱼
  79.         end)  -- end of coroutine
  80. end

  81. function diaoyu_report( yu ) --恶搞
  82.         local jingshen = GetVariable ("jingshen" )
  83.         local jingyan = GetVariable ("jingyan" )
  84.         local str = ""
  85.         --if yu == "" then
  86.         --        str = str .. "活鱼什么也没有掉到" .. ","
  87.         --else
  88.         --        str = str .. "活鱼钓到了一条" .. yu .. ","
  89.         --end
  90.         str = str .. "钓鱼钓的累死了,搞的我精神(" .. jingshen .. ")低落,经验高涨(" .. jingyan .. ") 待我去发呆室享受一次福利先"
  91.         Send( "chat " .. str )
  92. end

  93. function diaoyu_fadai() --发呆函数
  94.         diaoyu_report( "" )
  95.         create_trigger( 'diaoyu_fadai', "你发呆了一会儿", "", "diaoyu_fadaied" )--设置一个一次性触发器,当发呆完毕后执行diaoyu_fadaied函数去发呆
  96.         wait.make (function ()  --- coroutine below here
  97.                 wait.time (1)
  98.                 Send( 'do 9 s' )
  99.                 wait.time (1)
  100.                 Send( 'd' )
  101.                 Send( 'out' )
  102.                 wait.time (2)
  103.                 Send( 'fadai' )
  104.         end)  -- end of coroutine
  105. end

  106. function diaoyu_fadaied()  --发呆完毕
  107.         wait.make (function ()  --- coroutine below here
  108.                 Send( 'hp' )
  109.                 wait.time (1)
  110.                 Send( 'do 10 drink' )
  111.                 wait.time (1)
  112.                 Send( 'do 10 eat ganliang' )
  113.                 wait.time (1)
  114.                 Send( 'enter' )
  115.                 Send( 'u' )
  116.                 wait.time (1)
  117.                 diaoyu_cttomatou() --执行从ct到岸边的函数重新开始钓鱼
  118.         end)  -- end of coroutine
  119. end

  120. function diaoyu_suzhou() -- 从ct到杂货铺
  121.         Execute( "e;e;e;e;e;e;se;s;e;n;n;n;n;n;nw;w;s" )
  122.         wait.make (function ()  --- coroutine below here
  123.                 wait.time (3)
  124.                 Send( 'l' )
  125.         end)  -- end of coroutine
  126. end

  127. function diaoyu_suzhoub() -- 从杂货铺到ct
  128.         Execute( "n;e;se;s;s;s;s;s;w;n;nw;w;w;w;w;w;w;l" )
  129.         wait.make (function ()  --- coroutine below here
  130.                 wait.time (3)
  131.                 Send( 'l' )
  132.         end)  -- end of coroutine
  133. end

  134. -------------------钓鱼机器人 end--------------------------

  135. -- 创建一个临时的一次性触发器
  136. -- AddTrigger的api见 http://mc.chinaido.com/help.php?function=AddTrigger
  137. function create_trigger( t_name, t_match, t_response, t_function )
  138.         return AddTrigger(
  139.                                         t_name,
  140.                                         t_match,
  141.                                         t_response,
  142.                                         trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OneShot,
  143.                                         -1,
  144.                                         0,
  145.                                         "",
  146.                                         t_function
  147.         )
  148. end
  149. -- 创建一个临时的一次性定时器
  150. -- AddTimer的api见 http://mc.chinaido.com/help.php?function=AddTimer
  151. function create_timer( t_name, t_time, t_com, t_function )
  152.         return AddTimer (
  153.                                         t_name,
  154.                                         0,
  155.                                         0,
  156.                                         t_time,
  157.                                         t_com,
  158.                                         timer_flag.Enabled        + timer_flag.OneShot + timer_flag.TimerSpeedWalk + timer_flag.Replace        + timer_flag.Temporary,
  159.                                         t_function
  160.         )
  161. end
复制代码

[ 本帖最后由 huoyu 于 2008-9-4 01:20 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-9-4 13:22:00 | 显示全部楼层
看不懂,但是顶一个
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-9-4 15:51:12 | 显示全部楼层
哇靠,顶一下
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-9-4 16:10:58 | 显示全部楼层
你先把命令先列一下,然后再举例子就好了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-9-4 18:14:12 | 显示全部楼层
看不懂,但是照样顶

不要写导入代码,这个东西太复杂,462的导入代码我都还看不懂……

你写mush里边手动的编机器人,就简单多了,把功能、命令一个个列出来并且说明+举例

另外:活鱼!!!!!!你胆敢叫我bl!!!!!!y

[ 本帖最后由 zgbl 于 2008-9-4 11:57 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2008-9-5 08:30:16 | 显示全部楼层
bl总比玻璃好听吧
http://mc.chinaido.com/help.php?cat=49


这个页面有所有命令的详细解释,真的是非常非常的详细
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-10-4 00:45:58 | 显示全部楼层
好漂亮的程序,多谢。
提醒大家一定要把 function create_trigger和 creat_timer一起copy进script中,我就是没贴进去捉摸了好久才发现问题。
结果自己用addtrigger oneshot 改好了才发现,活鱼把这两函数附在最后了。。。

http://www.gammon.com.au/scripts/function.php?name=AddTimer
http://www.gammon.com.au/scripts/function.php?name=AddTrigger
是主页上的函数描述,比较清楚

请教一下。既然diaoyu_diaoyu设的timer是一次性的,为什么diaoyu_end里还要deletetimer呢?

[ 本帖最后由 coka 于 2008-10-4 01:15 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2008-10-12 11:03:47 | 显示全部楼层
timerout_timer是为了防止你超时钓不到鱼,超时会重新开始
diaoyu_end是说你钓到鱼了,并且也自己重新开始
若不删掉,到时候timeout了,即使你已经重新开始钓鱼了,也会再次重新开始的,这时候可能就乱了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2008-10-13 08:42:07 | 显示全部楼层
顶楼上的
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-3-23 12:17:08 | 显示全部楼层
先得顶一下,再好好看
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-17 04:58 AM , Processed in 0.010962 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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