|
MushClient的Lua脚本对命令的原始发送采用的是Send函数,而Execute是其命令解释器封装,其不同之处是Execute可以调用alias、解析脚本标识符标识的简单脚本等以完成复杂动作指令。
我们对Execute函数再次挂接封装,可以达到一些意想不到的好处。这里,为啥不直接对Execute再封装而是要挂接呢?
例如
MyExecute=function(doing)
--之前处理
Execute(doing)
--之后处理
end
以后调用MyExecute就可以了吧,但是已有的很多代码很多是用最终要调用Execute的,所以除非全部替换Execute,那么还是挂接Execute的好。
好处有哪些呢?
其一 行走状态的直接切换:
假设我们给定的脚本标识符是`(左上角~`这个键上的符号),我们一般爱把走路直接绑定到数字键盘上,如north绑定到8,按8可以向北走,我们也可以用脚本解析绑定例如`Execute("north"),绑定到8,可以按8向北走。
把下面的代码写到脚本文件中,确保加载时调用一次
_Execute=Execute
Execute=function(doing)
Note("执行"..doing)
_Execute(doing)
end
这时执行按键8操作时,不仅会向北走,还会显示执行north,已经挂接上Execute函数了,很多脚本以Execute执行的内容都会显示,算是比较中层的挂接(挂接Send为底层的)。
假如有正常行走状态和赶车行走状态我们可以这样处理一下
Execute=function(doing)
if doing是基本方向指令 and 在赶车状态中 then
_Execute("gan che to "..doing)
else
_Execute(doing)
end
end
建立Alias ganche,发送脚本标记赶车状态后,输入ganche,当再按键方向键操作时就可以直接支持赶车操作了。
其二 复杂指令流记录:
当我们给一个记录指令流标记,就可以实时记录指令流。
建立个指令流池ExecutedPool={}
当有标记时,可以把实时把所有doing指令用table.insert(ExecutePool,doing)插入池中。
记录了复杂指令流,其简单用途就是非常方便的制作遍历路径,按键操作路径都可以被正常记录下来。
复杂用途,是分析制作更复杂的机器人,例如记录所有指令后,可以按照,时间、地点、人物、状态、npc等,情况直接给出各种状态下对应指令的学习,完成自动执行,能够分析的维度越多则可以学习的更加聪明,人是什么时间、什么地点、什么状态、什么任务、什么npc等等情况下执行了什么指令,机器人可以同样按照这些情况直接自动回放学习的记录。
北大侠客行MUD,中国最好的MUD |
|