按键精灵2014
脚本流程
绑定游戏脚本使用了大漠插件,先注册大漠插件之后进行绑定游戏『查找游戏窗口句柄』使用大漠的 FindWindow 命令来查找游戏窗口句柄FindWindow命令是模糊查找当要查找的窗口句柄,类名或者标题有一部分不固定会变化的时候,我们可以使用FindWindow命令进行模糊查找例如许多类名为Afx:¥%#¥……%#¥ 的窗口,Afx后面的值通常都是变化的研究了下,拳皇里的这个类名倒是不会变化,但是为了安全起见,咱们还是模糊查找吧。
角色定位角色在左边和角色在右边时,出招里的方向键是不一样的,所以需要判断下角色当前是在什么位置。那么,要如何判断呢? 我们观察游戏里的角色动作,站着、蹲着、或者摆一个招式的时候,总有一些地方是不会变化的。这里我们选择蹲着,因为蹲着相较于其他动作静态,便于识别。
『小技巧』 当我们测试的时候,游戏里的人物如果会反抗的话,非常影响调试,所以我们可以按下 Alt+c组合键
把p2设置为攻击无效,这样我们就可以毫无顾忌进行调试了 调用InputKeys函数InputKeys函数用于分析按键,是按下按住还是松开用键盘 WASD来操作方向,很多招戳不出来。为什么呢?键盘WASD和摇杆不同,例如:禁千二百十一式·八稚女:↓↘→↘↓↙←+A或C 八神的这一招八稚女,用摇杆摇就是 下、右下、右、右下、下、左下、左、A或者C但是,在键盘上操作的话,右下这个操作我们需要同时按下S和D,左下需要同时按下WA既然键盘WASD操作起来这么麻烦我们就来模拟摇杆
我们将5想象成摇杆的杆子
那么,4、6、8、2就分别是左、右、上、下 (键盘操作:A、 D 、W 、S)7、9、1、3 对应左上、右上、左下、右下(键盘操作:WA、WD、 AS、DS)技能键为:A、B、C、D对应轻拳、轻脚、重拳、重脚 (键盘操作:J、K、L、U)注意:我们并不是要在小键盘上按键,而是借用小键盘来更好的理解模拟摇杆的操作 而实际上,我们应用到的只是 1到9的这几个数字 当输入4的时候,经过函数的判断处理,按下的则是A键 当按下A键时,经过函数的判断处理,则按下J键
『InputKeys函数』 语法: Call InputKeys("+/-方向键,+/-技能键,延时") 方向键和技能键前 加上+号:按住方向键或者技能键不放 加上-号 :松开方向键或者技能键 无符号 :按下方向键或者技能键 如果有多个操作,操作于操作之间用|线连接 例如八神的横踢动作:
整体代码Dim Player // 角色 : 八神、火舞、胖子、雅典娜Dim PlayPos // 0 = 左 、 1 = 右 、 -1 = 未知Dim KeyStkN_8, KeyStkN_2, KeyStkN_4, KeyStkN_6 // 需要按下的按键Dim KeyStkO_8, KeyStkO_2, KeyStkO_4, KeyStkO_6 // 需要释放的按键Dim KeyStkS_8, KeyStkS_2, KeyStkS_4, KeyStkS_6 // 独立控制的按键 Call Register()Call dm.SetPath("c:\tz_kof")Call dm.SetShowErrorMsg(0) // 绑定游戏窗口hwnd = dm.FindWindow("Afx:", "Kawaks")Call dm.SetWindowState(hwnd, 12)Call dm.BindWindowEx(hwnd, "gdi", "normal", "normal", "dx.public.active.api|dx.public.active.message", 0) Player = "八神"/*---------------------------出招---------------------------*/'/* 八神 Do // 重新定位角色方向 Call PlayerPos() // 轻拳 Call InputKeys("6,D,0|+1,,300|-,,0") // 梦弹 Call InputKeys("+6,A,50|,A,100|-,,0|+1,,400|-,,0") // 八稚女近身 Call InputKeys("2363214,A,0|+1,,1000|-,,0") // 琴月d阴近身 Call InputKeys("63214,B,0|+1,,800|-,,0") // 三段葵花 Call InputKeys("214,A,60|214,A,60|214,A,60|214,A,60|214,A,0|+1,,300|-,,0") // 下蹲重脚 Call InputKeys("+2,,60|,D,200|-,,0|+1,,600|-,,0") // 暗勾手 + 三发琴月阴抢开 Call InputKeys("63214,B,0|+1,,1600|-,,0") Call InputKeys("63214,B,0|+1,,1600|-,,0") Call InputKeys("63214,B,0|+1,,1600|-,,0") // 三段葵花 Call InputKeys("214,A,60|214,A,60|214,A,60|214,A,60|214,A,0|+1,,800|-,,0") Loop'*/
/*---------------------------出招---------------------------*/ // 角色定位Function PlayerPos() dm.KeyDown 83 Delay 400 PlayPos = dm.FindPic(0, 0, 610, 450, Player & "_定位_左.bmp|" & Player & "_定位_右.bmp", "000000", 0.9, 0, intX, intY) Select Case PlayPos Case 0 TracePrint "角色在左侧" Case 1 TracePrint "角色在右侧" Case Else TracePrint "无法识别角色方向" End Select dm.KeyUp 83 Delay 100End Function // 指令串解析Function InputKeys(KeyList) KeyStu = Split(KeyList, "|") For j = 0 To UBound(KeyStu) KeyStr = Split(KeyStu(j), ",")(0) // 方向键 KeyCmd = Split(KeyStu(j), ",")(1) // 指令键 KeySlp = Split(KeyStu(j), ",")(2) // 延时 // 解析方向控制 [状态指令还是连贯指令] Select Case Left(KeyStr,1) Case "+" // 状态指令输入 KeyStr = Replace(KeyStr, "+", "") For i = 1 To Len(KeyStr) KeyChr = Mid(KeyStr, i, 1) Call StateKey(KeyChr, True) Next Case "-" // 状态指令取消 [后面的指令连贯输入] KeyStr = Replace(KeyStr, "-", "") Call StateKey(KeyChr, False) For i = 1 To Len(KeyStr) KeyChr = Mid(KeyStr, i, 1) Call InputKey(KeyChr, False) Next Case Else // 连贯指令输入 For i = 1 To Len(KeyStr) KeyChr = Mid(KeyStr, i, 1) Call InputKey(KeyChr, False) Next End Select // 控制按键 Select Case Left(KeyCmd, 1) Case "+" // 状态指令输入 KeyCmd = Replace(KeyCmd, "+", "") For i = 1 To Len(KeyCmd) KeyChr = Mid(KeyCmd, i, 1) Call InputKey(KeyChr, True) Next Case "-" // 状态指令取消 [后面的指令连贯输入] KeyCmd = Replace(KeyCmd, "-", "") For i = 1 To Len(KeyCmd) KeyChr = Mid(KeyCmd, i, 1) Call InputKey(KeyChr, False) Next Case Else // 连贯指令输入 For i = 1 To Len(KeyCmd) KeyChr = Mid(KeyCmd, i, 1) Call InputKey(KeyChr, True) Next For i = 1 To Len(KeyCmd) KeyChr = Mid(KeyCmd, i, 1) Call InputKey(KeyChr, False) Next End Select Delay CLng(KeySlp) NextEnd Function