【MUSH】机器人初级实例教程系列(一)
本帖最后由 jcl 于 2013-5-2 09:09 编辑关于什么是MUSH,为什么要用MUSH,就不说了,介绍看这里 http://mc.chinaido.com/ ,如果英文好可以直接看这里 http://www.gammon.com.au/mushclient/
本系列面向的读者群需要有以下基础:
1,能熟练操作MUSHClient,或者有自行摸索软件使用方法的能力。
2,有一定的程序设计基础,懂LUA最佳。或者有自行学习程序设计的能力亦可。
3,稍微懂点英文。
如果没有以上基础,且没有自行补足基础的能力,那么还是离开吧。
MUSH机器和ZMud机器的区别:
Zmud机器,基本上就是一大堆触发器,快捷命令以及变量的集合。简单机器无所谓,复杂的机器很难维护,且代码无法复用,每次新写机器都要重新弄(或者从其他机器导出的文本里面拷贝),如果有问题需要修改的时候,到处都要改。
MUSH机器,支持两种模式,第一种就是和Zmud一样,弄一大堆触发器,快捷命令和变量,但是这种模式太初级了,不流行。第二种就是程序设计模式。这种模式优点很多,基本上现代软件工程的优点都可以说是优点,什么模块化啦,代码复用啦,等等。
MUSH机器在MUSH里面是以插件(Plugins)的形式存在,可以被多个不同的角色(World)导入,互不影响。同一个角色也可以同时导入多个机器(只要机器本身的alias等不冲突)。
(当然,MUSH也有缺点,例如没有按钮,不能set prompt hp,不能在命令行直接敲#wa来延时等,如果你不能忍受的话,请离开。本帖的目的并不是鼓动大家都来用MUSH,而是给部分想尝试MUSH的人一点小小帮助而已,毕竟本人并不会因为各位使用MUSH而获得任何好处,相反还有付出更多精力,例如要回答麻友提出的问题等)
本帖也不是详细的教程手册帖,想看教程手册的话,最好还是直接看MUSH自带的帮助文档。本帖只是帖出一下机器的代码,给大家一个示例,帮助MUSH新人学习一下MUSH机器改怎么写。本帖贴出的实例也不是唯一的模式,也不一定是最好的模式,毕竟在程序设计的领域,写法千变万化,各有优劣,大家尽可以学会之后推陈出新,写出更加优异的机器分享出来。(这可以算是本人能获益的唯一目的了,如果有其他人分享机器代码,再下也就能拿来直接用了:D )
既然是实例帖,那么就先来一段实例吧。
以下是自动吃丹保护的机器,原理:利用hp -s获取当前剩余精和血,挨打时计算,如果小于某个值就吃大红。
本机器不限定BOSS7,任何场合都适用,而且不影响其它机器,可以长期加载,无任何副作用。
详情请看代码里面的注释:
<!--Triggers 先是两个触发器,用于获取当前剩余精和血,以及触发挨打之后的动作 -->
<triggers>
<trigger enabled="y" regexp="y" send_to="10" sequence="10" match="^[>\s\d/]*精气(-?\d+)/.*气血(-?\d+)/.*$" script="me.status" />
<trigger enabled="y" regexp="y" send_to="10" sequence="10" match="^[>\s\d/]*\(.*对你造成(.*)点(.*)伤害。\)$" script="me.damage" />
</triggers>
<script>
<![CDATA[
me = {}
me.mp_limit = 20000 -- 精气下限,少于该值吃药
me.hp_limit = 100000 -- 气血下限,少于该值吃药
me.lt = os.time()
me.full = function()
if me.mp < me.mp_limit or me.hp < me.hp_limit then -- 下限判断
Execute("j") -- 这里的j是一个alias,一般 alias j do eat xuanyuan dan,eat jiuhua wan,eat baola dan,eat tianmo shengxuegao,eat shengsheng dan,eat baoming dan 之所以用j而不用eatdan是因为在某些特殊场合自己敲起来方便
me.mp, me.hp = nil, nil -- 在下面的hp -s返回之前,不再吃药。防止在极端场合被雷劈(7连以上的大招,招招毙命,这种场合应该极少)
Send("hp -s")
end
end
me.status = function(name, l, w)
me.mp, me.hp = tonumber(w), tonumber(w) -- 获取当前剩余精和血
me.full() -- 调用吃大红的方法,该方法内部会做下限判断,不会乱吃,所以放心调用
end
me.damage = function(name, l, w)
if me.mp and me.hp then
if w == "精气" then
me.mp = me.mp - tonumber(w) -- 计算挨打之后剩余精气
elseif w == "气血" then
me.hp = me.hp - tonumber(w) -- 计算挨打之后剩余气血
end
me.full() --调用吃大红的方法
end
me.check()-- 调用获取当前气血的方法 hp -s
end
me.check = function()
local ct = os.time()
local lt = me.lt
if ct - lt > 1 then -- 这句话可以避免连续因调用造成被雷劈!!!
me.lt = ct
Send("hp -s")
end
end
]]>
</script>
这个机器很简单,其实就两个触发,所以MUSH的特色也没怎么用到,和Zmud模式差不多,无非就是zmud的代码都是挤成一行,而MUSH的代码可以格式化,例如缩进啊等,代码更加美观,维护起来也更加方便。
更加复杂的机器,以后再讲。
本贴先就此告一段落,欲知后事如何,请听下回分解。
该机器经历BOSS7考验的实际过程(去掉了无关信息)
看起来罗祥想杀死你!
( 罗祥对你造成1782601点气血伤害。)
j
hp -s
你吃下一粒轩辕补心丹,再也感觉不到任何疲惫。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
精气95611/95611(100%) 气血1137681/1137681(100%) 内力251872 潜能31864023 体会117638
( 罗祥对你造成75970点气血伤害。)
hp -s
( 罗祥对你造成34828点气血伤害。)
精气95611/95611(100%) 气血1026883/1137681(100%) 内力251872 潜能31864023 体会117638
( 罗祥对你造成1950520点气血伤害。)
j
hp -s
( 罗祥对你造成541840点精气伤害。)
j
你感觉身体非常的虚弱,一点力气也使不出来了。。。
( 罗祥对你造成2095318点气血伤害。)
j
( 罗祥对你造成605107点精气伤害。)
j
你刚服用过药,需药性发挥完效用以后才能继续服用。
你慢慢服下一颗九花玉露丸,呼吸吐纳,将丹药效力全数吸收。
不一会儿你只觉得精神饱满,神气完足,内力充沛之极。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
精气95611/95611(100%) 气血1137681/1137681(100%) 内力251872 潜能31864023 体会117638
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
你上一个动作还没有完成。
( 罗祥对你造成37870点气血伤害。)
hp -s
( 罗祥对你造成19484点气血伤害。)
精气95611/95611(100%) 气血1080327/1137681(100%) 内力251872 潜能31864023 体会117638
你感觉身体非常的虚弱,一点力气也使不出来了。。。
( 罗祥对你造成30276点气血伤害。)
hp -s
( 罗祥对你造成11767点气血伤害。)
精气95611/95611(100%) 气血1039607/1100904(96%) 内力251872 潜能31864023 体会117638
吃了两颗丹,到这里BOSS挂了
页:
[1]