多语言展示
当前在线:1844今日阅读:60今日分享:41

脚本制作教程:按键精灵模拟拳皇出招脚本

目前官方正在举办的 “第二届脚本大赛”已经结束。这次的大赛主题是“拳皇”看小伙伴们脚本写的火热,我们风骚的06工程师也忍不住写了个战斗脚本据说,此脚本非常牛逼,能成功模拟拳皇里百分之百的招式动
工具/原料

按键精灵2014

方法/步骤
1

脚本流程

2

绑定游戏脚本使用了大漠插件,先注册大漠插件之后进行绑定游戏『查找游戏窗口句柄』使用大漠的 FindWindow 命令来查找游戏窗口句柄FindWindow命令是模糊查找当要查找的窗口句柄,类名或者标题有一部分不固定会变化的时候,我们可以使用FindWindow命令进行模糊查找例如许多类名为Afx:¥%#¥……%#¥ 的窗口,Afx后面的值通常都是变化的研究了下,拳皇里的这个类名倒是不会变化,但是为了安全起见,咱们还是模糊查找吧。

3

角色定位角色在左边和角色在右边时,出招里的方向键是不一样的,所以需要判断下角色当前是在什么位置。那么,要如何判断呢? 我们观察游戏里的角色动作,站着、蹲着、或者摆一个招式的时候,总有一些地方是不会变化的。这里我们选择蹲着,因为蹲着相较于其他动作静态,便于识别。

4

『小技巧』 当我们测试的时候,游戏里的人物如果会反抗的话,非常影响调试,所以我们可以按下 Alt+c组合键

5

把p2设置为攻击无效,这样我们就可以毫无顾忌进行调试了 调用InputKeys函数InputKeys函数用于分析按键,是按下按住还是松开用键盘 WASD来操作方向,很多招戳不出来。为什么呢?键盘WASD和摇杆不同,例如:禁千二百十一式·八稚女:↓↘→↘↓↙←+A或C 八神的这一招八稚女,用摇杆摇就是 下、右下、右、右下、下、左下、左、A或者C但是,在键盘上操作的话,右下这个操作我们需要同时按下S和D,左下需要同时按下WA既然键盘WASD操作起来这么麻烦我们就来模拟摇杆

6

我们将5想象成摇杆的杆子

7

那么,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键

8

『InputKeys函数』  语法: Call InputKeys("+/-方向键,+/-技能键,延时")           方向键和技能键前            加上+号:按住方向键或者技能键不放            加上-号 :松开方向键或者技能键            无符号  :按下方向键或者技能键          如果有多个操作,操作于操作之间用|线连接          例如八神的横踢动作:

9

整体代码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'*/

10

/*---------------------------出招---------------------------*/  // 角色定位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

推荐信息