suwuji 发表于 2015-11-7 20:49:05

Mush Lua脚本Execute挂接

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

littleknife 发表于 2015-11-9 19:45:17

楼主的思路非常好~~。目前你的用途主要是记录键盘操作,或指令流。。。要是还能举例说明其他用法就更完美了,比如:这个部分::>>。例如记录所有指令后,可以按照,时间、地点、人物、状态、npc等,情况直接给出各种状态下对应指令的学习,完成自动执行,能够分析的维度越多则可以学习的更加聪明,人是什么时间、什么地点、什么状态、什么任务、什么npc等等情况下执行了什么指令,机器人可以同样按照这些情况直接自动回放学习的记录

ltblue 发表于 2015-11-21 10:44:27

对于我这类目标是全自动机器人的来说,貌似键盘流没啥意义
不过,你们游戏里没有nd或者nu这类的情况吗?

suwuji 发表于 2015-11-21 10:58:55

回复 3# ltblue
这个不是按键流,是指令流。绑定nd,nu是很简单的,比如加上ctrl键等等。

ltblue 发表于 2015-11-21 11:59:45

回复 4# suwuji


    我打算全自动,所以尽量减少手动输入
页: [1]
查看完整版本: Mush Lua脚本Execute挂接