huoyu 发表于 2008-9-4 13:17:59

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

zgbl这个bl等一直让我写个什么mush的简洁教程。。。。说实话这太难了,用几句话教会人编程。。。。偶55555555

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

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

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

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

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

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

      wait.make (function ()--- coroutine below here
                wait.time (1)
                Send( "gua yuer" ) --
                wait.time (1)
                Send( "diao yu" ) --钓鱼
               
      end)-- end of coroutine
end

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

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

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

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

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

function diaoyu_fadaied()--发呆完毕
      wait.make (function ()--- coroutine below here
                Send( 'hp' )
                wait.time (1)
                Send( 'do 10 drink' )
                wait.time (1)
                Send( 'do 10 eat ganliang' )
                wait.time (1)
                Send( 'enter' )
                Send( 'u' )
                wait.time (1)
                diaoyu_cttomatou() --执行从ct到岸边的函数重新开始钓鱼
      end)-- end of coroutine
end

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

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

-------------------钓鱼机器人 end--------------------------

-- 创建一个临时的一次性触发器
-- AddTrigger的api见 http://mc.chinaido.com/help.php?function=AddTrigger
function create_trigger( t_name, t_match, t_response, t_function )
      return AddTrigger(
                                        t_name,
                                        t_match,
                                        t_response,
                                        trigger_flag.Enabled + trigger_flag.RegularExpression + trigger_flag.Replace + trigger_flag.Temporary + trigger_flag.OneShot,
                                        -1,
                                        0,
                                        "",
                                        t_function
      )
end
-- 创建一个临时的一次性定时器
-- AddTimer的api见 http://mc.chinaido.com/help.php?function=AddTimer
function create_timer( t_name, t_time, t_com, t_function )
      return AddTimer (
                                        t_name,
                                        0,
                                        0,
                                        t_time,
                                        t_com,
                                        timer_flag.Enabled      + timer_flag.OneShot + timer_flag.TimerSpeedWalk + timer_flag.Replace      + timer_flag.Temporary,
                                        t_function
      )
end

[ 本帖最后由 huoyu 于 2008-9-4 01:20 PM 编辑 ]

lanwfy 发表于 2008-9-4 13:22:00

看不懂,但是顶一个

yxh 发表于 2008-9-4 15:51:12

哇靠,顶一下

gprs 发表于 2008-9-4 16:10:58

你先把命令先列一下,然后再举例子就好了

zgbl 发表于 2008-9-4 18:14:12

看不懂,但是照样顶

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

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

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

[ 本帖最后由 zgbl 于 2008-9-4 11:57 PM 编辑 ]

huoyu 发表于 2008-9-5 08:30:16

bl总比玻璃好听吧
http://mc.chinaido.com/help.php?cat=49


这个页面有所有命令的详细解释,真的是非常非常的详细

coka 发表于 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 编辑 ]

jieyou 发表于 2008-10-12 11:03:47

timerout_timer是为了防止你超时钓不到鱼,超时会重新开始
diaoyu_end是说你钓到鱼了,并且也自己重新开始
若不删掉,到时候timeout了,即使你已经重新开始钓鱼了,也会再次重新开始的,这时候可能就乱了

huoyu 发表于 2008-10-13 08:42:07

顶楼上的

xspe 发表于 2012-3-23 12:17:08

先得顶一下,再好好看
页: [1] 2
查看完整版本: mush lua 钓鱼机器人完全注释版