【MUSH】机器人初级实例教程系列(四)
前面讲解了MUSH机器的基础部分,这次直接上机器的核心了。就以森林/僵尸副本机器人为例:
开始命令,初始化什么的就不说了,大家到群72442263里去下载打包版,前面提到的Me.lua什么的都在里面。如果没有特殊需要,直接按照说明运行就可以了。如果想学习代码,请继续往下看。
机器的主要的结构函数就是main,另一个主要的功能函数就是fight,即每进入一个迷宫房间要做的事。
大家看代码里的注释就应该明白了。
me.main = function()
repeat
me.goMaze() --进入副本
Maze.walk(me.fight) -- 在副本里面逛,Maze.walk会遍历这个迷宫,而me.fight就是战斗,也就是说每次走进一个迷宫房间,就进行战斗,战斗结束后继续
if me.needOutOfMaze() then-- 该出副本就出来吧
Execute("out;e")
me.inMaze = false
if me.stop then me.term = true end -- 这里设置结束标志,否则出来后会自动再次进副本
elseif me.kickedout then --副本过期被踢出,一般打的慢的ID,还没打完就刷新或者刚打完不久久要刷新,如果只跑一圈太浪费,那么就反复跑,直到副本自己到期
me.inMaze = false
wait.time(2)
Execute("ask nan xian about all")
local l, w = wait.regexp("^[> ]*(南贤在你的耳边悄声说道.*|这里没有 nan xian 这个人。)$")
if string.find(l, "南贤") then Execute("e") end -- 在副本里瞎逛时被踢出,有可能停在武庙,也有可能刚好逛到北大街,所以这里看下自己究竟是不是在武庙
end
until me.terminate() -- 用户输入stop命令,这里出了副本就不再进了
end
每个房间的战斗函数,每次在迷宫里walk的时候会回调这个函数
me.enemy_list = {"tiger", "bear", "wolf", "snake", "dragon", "zombie"}
me.fight = function()
local enemycount = 0
for _, enemy in pairs(Maze.obj) do -- 对迷宫里存在的敌人下kill指令。我看见不少人的机器为了偷懒,直接发一堆kill指令,结束后发一堆get all from corpse n (森林机器),虽然不影响机器运行,但是由于发了很多无效指令,不得不到处wa防止被雷劈
for _, v in ipairs(me.enemy_list) do
if string.find(enemy, v) then
Execute("kill ".. enemy)
enemycount = enemycount + 1
break
end
end
end
if enemycount > 0 then
Me.auto_pfm() -- 如果该房间存在敌人,那么自动pfm
if var.mazeName == "forest" then -- 森林副本战斗结束之后搜尸体
wait.time(0.1)
for i = 1, enemycount do Execute("get all from corpse " .. i) end
end
end
if Maze.baoxiang then -- 如果存在宝箱,那么捡宝
Maze.baoxiang = false
Execute("open bao xiang;get all from bao xiang") -- 这里根据个人喜好,可以修改为只捡宝箱里的黄金
end
Me.check_state(function()
if var.w10b and var.w10b ~= "" then -- 检查状态,如果有10b且内力过低,则摸10b
if Me.force < (var.lowforce + 0 or 80000) then
Execute("touch " .. var.w10b)
end
else
if Me.force < 10000 then -- 如果没有10b,则在内力低于1万的时候吃罗刹丹
Execute("eat luosha dan")
local l, w = wait.regexp("^[> ]*(你吃下一粒罗刹无常丹,内力得到了完全的补充。|你身上没有 luosha dan 这样东西。)$")
if string.find(l, "罗刹无常丹") then wait.time(3) end
end
end
Me.heal() -- 在前面确保内力之后,进行疗伤
Me.eat(false, false) -- 需要吃喝就吃喝吧
end)
Execute("jdo") -- 每次打扫迷宫之后,自行jdo这个alias,如果有10b的话,可以alias jdo do yanjiu,lian,jiqu,没有10b可以alias jdo jiqu,当然也可以yanjiu+jiqu,练习就不必了,毕竟没有10b就不要在这里浪费内力了
wait.time(1)
Execute("halt")
if var.mazeName == "forest" and Maze.isOut() then
Execute("give all to hunter") --森林副本的出口出需要give all
end
if me.terminate() or me.needOutOfMaze() or me.kickedout then
return 1
end
if tonumber(var.explimit) and Me.exp and tonumber(var.explimit) < Me.exp then -- 如果到了经验上限,自动把经验bup给宠物,不喜欢bup不要设置经验上限,或者直接把代码去掉
Execute("bup 1000000")
wait.time(5)
end
return 0
end
页:
[1]