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 编辑
]
好漂亮的程序,多谢。
提醒大家一定要把 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 编辑
]