本帖最后由 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[1]), tonumber(w[2]) -- 获取当前剩余精和血
me.full() -- 调用吃大红的方法,该方法内部会做下限判断,不会乱吃,所以放心调用
end
me.damage = function(name, l, w)
if me.mp and me.hp then
if w[2] == "精气" then
me.mp = me.mp - tonumber(w[1]) -- 计算挨打之后剩余精气
elseif w[2] == "气血" then
me.hp = me.hp - tonumber(w[1]) -- 计算挨打之后剩余气血
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的代码可以格式化,例如缩进啊等,代码更加美观,维护起来也更加方便。
更加复杂的机器,以后再讲。
本贴先就此告一段落,欲知后事如何,请听下回分解。
|