按键精灵手机版游戏脚本学习手册(免费部分) | 您所在的位置:网站首页 › 脚本精灵脚本制作教程手机版 › 按键精灵手机版游戏脚本学习手册(免费部分) |
一、 课前准备1. 序言 按键精灵手机版游戏脚本教学(以下均称为手机按键),适用于零基础人群或者是写脚本无从下手的基础薄弱的人群,最终达到组建家庭小型工作室的目的。本教程仅针对游戏脚本的编写来进行教学的,对于其他类型APP处理,如抢单脚本、引流脚本之类的不太适用,写法上和学习思路上有较大的区别。学习30天左右,可以独自完成常见类型游戏的脚本编写(FPS射击类游戏、MOBA竞技类游戏、横版格斗类游戏除外),了解常见计算机硬件,可独自组建和维护家庭工作室。 1.1脚本和外挂的区别脚本:一系列可以反复执行的命令。通过一些判断条件,可以让这些命令具有一定的智能效果。应用领域例如: 1.游戏中实现自动打怪,自动补血,自动说话等; 2.办公族可用按键精灵自动处理表格间数据的转换,自动调整文档格式、文章排版等; 3.利用按键精灵实现定时自动打开检验网页链接,文献检索,收集资料等重复操作; 外挂:篡改游戏原本正常的设定和规则,大幅增强游戏角色的技能和超越常规的能力。应用领域例如: 1.辅助外挂:重复运行游戏内需要重复性操作(不涉及篡改游戏数据),比如传奇自动打怪,但是很多游戏已经内置了这些功能,叫做内挂。 2.变态外挂:DNF全屏秒杀,FPS游戏透视爆头,传奇游戏加速等,一般是通过内存或者封包实现。 1.2手游脚本和PC脚本的区别手游脚本原理和PC脚本的原理基本上是相似的,基本上都是图色、内存、封包那一套东西,但是PC端游都需要过保护,例如腾讯的TP验证,对于新手来说,根本过不了保护那一关,这一关都过不了,你会写图色脚本又有什么用呢?而且PC端游功能复杂,只会图色效率很低,内存和封包,不是科班出身的基本上都看不懂,就不要说学习了,所以外行学习按键精灵或者易语言去写图色脚本,没什么用处,浪费时间浪费钱而已。作为外行,我建议掌握按键手机版的写法后,再去学习易语言的中控,投入最少的钱和时间,获得最大的收益。 1.3了解我国相关刑法1.破坏计算机信息系统罪,根据《中华人民共和国刑法》第二百八十六条规定,破坏计算机信息系统罪是指违反国家规定,对计算机信息系统功能或计算机信息系统中存储、处理或者传输的数据和应用程序进行破坏,或者故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的行为。获利5000块钱以上或者造成一万块钱以上的损失处5年以下有期徒刑。 2.非法经营罪,根据《中华人民共和国刑法》第二百二十五条的规定,是指违反国家规定,有下列非法经营行为之一的犯罪:(一)未经许可经营法律、行政法规规定的专营、专卖物品或其他限制买卖的物品的;(二)买卖进出口许可证、进出口原产地证明以及其他法律、行政法规规定的经营许可证或者批准文件的;(三)未经国家有关主管部门批准,非法经营证券、期货或者保险业务的,或者非法从事资金结算业务的;(四)从事其他非法经营活动,扰乱市场秩序,情节严重的行为。个人营业额达到5万以上或者盈利达到一万以上处三年以下有期徒刑。 3.侵犯著作权罪,根据《中华人民共和国刑法》第二百一十七条规定,侵犯著作权罪,是指以营利为目的,未经著作权人许可复制发行其文字、音像、计算机软件等作品,出版他人享有独占出版权的图书,未经制作者许可复制发行其制作的音像制品,制作、展览假冒他人署名的美术作品,违法所得数额较大或者有其他严重情节的行为。如果不是情节特别严重,一般都是赔钱私了。 2.手机按键的学习思路根据我的个人经验,我把按键图色脚本基础内容分为4部分 图色:既然是图色脚本,掌握常用的图色功能是重中之重,主要是学习找色、比色、找字、找图、文字识别的灵活使用。Function函数:通过封装函数,可以极大的减少不必要的代码,主要是学习参数的传递,封装,返回值数组:稍微复杂的脚本,都会用到数组来进行传参,主要是学习数组的合成、分割、排序多线程:复杂的脚本需要用到多线程来并行处理任务,主要是学习多线程的控制、防止线程之间的干扰按键图色脚本进阶内容学习分为3部分 掌握常见功能模块,例如定时功能、循环遍历、循环查找、拾取物品、对接第三方平台、数组应用实现一个完整的脚本从面向过程编程到面向对象编程的思路转换3.如何学好手机按键看得懂源码或者视频不代表你就写的出来,再简单的东西也要自己过一遍才知道。写功能之前先把思路理清楚,做这个功能分多少步,每一步干什么,每一步需要用到什么。面向百度编程,不懂的东西去百度搜索,永远不要等着别人给你讲。站在巨人的肩膀上,分析别人的作品可以快速成长。不到万不得已,不要用别人的插件自信,相信自己的技术4.电脑调试&软件下载安装电脑硬件要求:4核8线程CPU,内存8G及其以上 开启VT:新款电脑默认开启,老款电脑自行百度如何在BIOS中开启VT 笔记本电脑:在电池模式中,切换为高性能模式 按键精灵手机助手下载地址:http://download.myanjian.com/ 二、 基础语法和命令学习1. 基础语法1.1标识符为变量、常量、数据类型、子程序、函数等定义的名字 例如 Dim a 这里的a就是标识符,注意按键精灵中标识符不区分大小写,并且是唯一的,例如: Dim a和dim A是一个意思 1.2关键字关键字就是计算机中面向硬件的指令,简单的说就是方面用户和计算机进行交互的速记符,一般要求编程时用户定义的标识符的时候不能和关键字重名,否则程序运行出错。 我们在给程序命名时,不能使用这些关键字、保留字、命令名称进行命名。例如: Dim dim Dim true 这是错误的用法 1.3赋值使用 = 把右边的值赋予给左边,例如: Dim a=1 赋值可以被覆盖的,例如: Dim 女朋友=夜刀神十香 女朋友=时崎狂三 如果等号表示赋值的时候,左边=右边 和 右边=左边 代表的含义是不一样的,例如 Dim a=1 Dim b=2 a=b的结果为 a=1 b=1 因为a=1,b=a,所以b=1 b=a的结果为 b=2 a=2 因为b=2,a=b,所以a=2 1.4常量常量是一个不可变的值,在计算机中是只读的,例如 圆周率 π=3.1415926 ,假如我们要计算圆的面积S Dim S=πR2 那么这个π的值一是不会再改变,这个π就是常量 1.5变量变量是相对常量来说的,就是可以变化的值,再计算机中是可读可写的,例如 Dim S=πR2 半径R的是可以变化的,这个R就是变量,在按键精灵手机版中,变量可简单分为局部变量、全局变量、共享变量 局部变量:定义在所有子程序或者函数内的变量 全局变量:定义在所有子程序或者函数外的变量 共享变量:作用类似于全局变量,用于多线程中传递参数(全局变量不能直接用于多线程) 1.6数据类型按键精灵安卓版中有如下几种类型, 布尔:取值范围是0或者1,即只能是true 或者false; 数值:1,2,3,i8(-2^n-1 - 2^n-1-1),i16,i32,u8(0 - 2^n-1),u16,u32,f32,f64 (了解即可) 字符:"a" "b" "c" 字符串:"abc132啊哦饿" 数组:a={1,2,3} a=array(1,2,3) 表:table = {"tb1":123, "tb2":"字符串123", "tb3":{1, 2, 3}}(了解即可) 时间日期:%Y-%m-%d %H:%M:%S (了解即可) 1.7数据转换按键精灵中提供了6种数据转换 CBool:数字0转成布尔值为False,非0的数转为布尔值为True(了解即可) CInt 转整数:转换成功后返回短整型数据类型的值,注意:返回此数值是经过四舍五入的结果 CLng 转整数:转换成功后返回长整型数据类型的值,注意:返回此数值是经过四舍五入的结果(了解即可) CStr 转字符串:转换成功后返回字符串型后数据类型的值 CSng 转浮点数:转换成功后返回单精度浮点数数据类型的值 CDbl 转浮点数:转换成功后返回双精度浮点数的值(了解即可) 1.8注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。注释只是为了提高可读性,不会被计算机编译。 按键精灵安卓版中,需要注释的类容前面加"//",注释的用法如下: //橙苏博客 1.9调试信息常用的调试信息有TracePrint 和ShowMessage,TracePrint可以再控制台中显示,ShowMessage可以在界面显示,例如: TracePrint “橙苏博客” ShowMessage “橙苏博客”,1000,500,500 1.10课后习题指出下面的标识符Dim 张三 Dim a=b Dim c 2.指出下面错误的标识符命名 Dim TRUE Dim true Dim TRue 3.当 = 代表赋值时,a=b 和b=a 是否等价? 4.简述全局变量、局部变量、共享变量的区别? 5."0"和0是否等价? 6."a"&"b"&"c" 和"abc"是否等价? 7.123=CInt("123")正确吗? "123"=CStr(123)正确吗?下面那个可以输出0.5(1)Traceprint Int(0.5) (2)Traceprint CInt(0.5) (3)Traceprint CLng(0.5) (4)Traceprint CSng(0.5) (5)Traceprint CDbl(0.5) 2. 基本命令2.1触摸命令Keypress:按一下某个键,每个键都有对应的键代码,可查询键码表 应用场景:输入某些文字或按下某些功能键,例如: Keypress 67 代表按下删除键 Keydown和keyup:按下某个键过一段时间再弹起(了解即可) 应用场景:长按功能键,例如: 模拟手动关机的例子 KeyDown "Power" //模拟按住电源键不放 Delay 3000 //延时3秒 KeyUp "Power" //松开电源键 备注:有按下就必须有弹起 Tap:单点一下屏幕 应用场景:模拟点击操作,例如: Tap 200,200 Randomtap(X,Y,10) 备注:游戏中必须做到随机点击,不能固定点某一个地方,否则会被封号 Touch:按住某点一段时间后松开 应用场景:传奇中长按进行连续攻击,例如: 点击屏幕坐标(100,100)的点,并持续按住100毫秒(0.1秒) Touch 100,100,100 Randomtap、Randomstap:随机范围的点击 应用场景:tap的升级版,以目标点位为中心的随机范围点击,例如: Randomtap(100,100,100) (0,0,200,200) Swipe滑动:任意方向的滑动 应用场景:切换屏幕,摇杆类游戏,例如: 用300毫秒的时间,从点100,100划动到点200,200 Swipe 100,100,200,200,300 Touchdown、touchmove、touchup:类似于拖到的效果 应用场景:验证码滑块拖动,例如 TouchDown 100, 100, 1//按住屏幕上的100,100坐标不放,并设置此触点ID=1 TouchMove 300, 300, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标 TouchUp 1//松开弹起ID=1的触点 备注:swipe可以做的,Touchdown、touchmove、touchup也可以做,但是Touchdown、touchmove、touchup能做,swipe不一定能做。 2.2控制命令For:有限次的循环,默认步长为1 应用场景:遍历数组和二重循环,用的非常多 用法1: For 10 Traceprint “我被循环了10次” Next 用法2: For i=1 to 10 Traceprint “这是第“& i &”次循环” Next 用法3:(了解即可) For i=0 to 10 step 2 Traceprint “我被循环了6次” Next 用法4: For each i in 数组 Traceprint 数组(i-1) Next 用法5: For i=0 to 5 For j=0 to 5 Traceprint i,j Next Next If:如果……则 用法1: If 10 While:如果……则循环 用法1: While true Traceprint “一直循环” Delay 100 Wend 用法2: Dim t=0 While true Traceprint “循环中” t=t+1 If t>5 then Exit while End if Delay 100 Wend 备注:循环时一定要加延迟,否则程序会因为CPU使用率增加而变卡 Do:循环 和while区别不大,一个是满足情况才循环,一个是满足情况下退出循环(了解即可) Rem、Goto :跳转到标记(了解即可) 用法1: Rem 标记 Traceprint “1” Goto 标记 备注:可以做到循环的效果,但是不建议使用goto,容易打乱程序结构 Call:调用 用法1: Call 测试程序() 用法2: 测试程序() 用法3: Call 测试程序(参数一,参数二) Sub:子程序 用法1: Sub 测试程序() Traceprint “测试程序” End sub 用法2: Sub 测试程序(参数1,参数2) Dim a=参数1+参数2 End sub Function:函数,用法和sub几乎一致,但是多了返回值 用法1: Function 测试程序() Traceprint “测试程序” End function 用法2: Function 测试程序(参数1,参数2) Dim a=参数1+参数2 End function 用法3: Function 测试程序(参数1,参数2) Dim a=参数1+参数2 If a>0 then 测试程序=true Else 测试程序=false End if End function If 测试程序(参数1,参数2)=true then Traceprint “测试程序” End If 备注:sub和function自己调用自己的时候,要进行次数限制,否则会无限套娃。 掌握function传参和给自身赋值 EndScript:强制结束程序运行 用法1: For 3 Tracetrint “1” Endscript Next OnScriptExit:脚本结束事件 用法: Function OnScriptExit() //这里面写脚本停止时想自动运行的代码 End Function 2.3课后习题1.keypress “a”和keypress “A”的效果一样吗? 2.执行keydown后,可以不执行keyup的正确吗? 3.Randomtap(10,10,10)的实际点击范围是多大? 4.Swipe指令能否完成图标的拖动效果? 5.for i=0 to 5 step 2 会循环多少次? 6.If语句中,else一般写在elseif前面正确吗? 7.If语句中,可以有两个及其以上的else正确吗? 8.Select case语句中,支持判断语句吗,如select case 16 then 测试程序=true Else 测试程序=false End If End function 3. 图色命令3.1颜色命令Findcolor:区域找色 用法1: FindColor x1,y1,x2,y2,"123456-000000|aabbcc-030303|ddeeff-202020",0,1.0,intX,intY 用法2: 返回值=FindColor(x1,y1,x2,y2, "0000FF-101010|FFFFFF-000000|FF00FF",0, 0.9, intX, intY) Findmulticolor:多点找色 用法1: FindMultiColor x1,y1,x2,y2,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY CmpColorEx:多点比色 用法: If CmpColorEx("300|500|FFFFFF|123456-102030,305|505|FFFFFF",0.9) = 1 Then TracePrint "全部点颜色相等" Else TracePrint "有一个或多个颜色不符合" End If Getcolornum:获取区域颜色数量 用法1: 颜色数量 = GetColorNum(26,20,31,26,"FFFFFF|123456-000000",1.0) 用法2: FindColor x1,y1,x2,y2,"123456-000000|aabbcc-030303|ddeeff-202020",0,1.0,intX,intY If intX>-1 then 颜色数量 = GetColorNum(intX-10,intY-10, intX+10, intY+10,"FFFFFF|123456-000000",1.0) End If 3.2图形命令KeepCapture:截图至内存 Findpic:找图 用法1: FindPic x1,y1,x2,y2, "Attachment:1.png","000000",0, 0.8, intX, intY 用法2: 返回值=FindPic(x1,y1,x2,y2, "Attachment:1.png|Attachment:2.png","000000",0, 0.8, intX, intY) ReleaseCapture:释放内存中的截图 备注:使用截屏至内存,找图完毕后,要及时释放内存中的截图。 3.3文字命令SetDictEx:设置字库文件 用法: SetDictEx(0, "Attachment:xxx.txt") UseDict:使用字库文件 用法: UseDict(0) Findstr:找字 用法1: FindStr 0,0,2000,2000,"长安","9f2e3f-000000",1.0,intX,intY 用法2: 索引值 = FindStr(0,0,2000,2000,"长安|洛阳","9f2e3f-000000",0.9,intX,intY) 备注: 设置偏色时,字体清晰可见即可,偏色过大,会导致字体糊成一团。 找字的用途不仅仅局限于找字符串,其他形状也是可以的 Ocr:文字识别 用法: 识别文字 = Ocr(x1,y1,x2,y2,"9f2e3f-030303|2d3f2f-000000|3f9e4d-100000",0.9) 备注:一般不要使用Ocr做文字识别去判断,找字会快一些。 Image.OcrText:本地光学文字识别 用法: 识别文字=Image.OcrText(665,1138,690,1200, 0, 3) 备注:此命令用于识别白色中文方块字效果较好 smartOcr:智能识别数字(此命令为隐藏命令,准确度不高不稳定) 用法: 识别数字 = SmartOcr(665,1138,690,1200,"FFFFFF-101010") 备注:一般用于识别数字,不能识别坐标中的逗号。 3.4图色技巧总结无论是找色,找图,找字,都应该尽可能缩小查找区域,区域越大,查找速度越慢,越容易出错找不到图色时,应当先微调,再粗调,微调就是调偏色“FFFFFF-000000”,粗调就是调相似度。找色的偏色一般为“050505”或者“101010”,找图或者找字偏色一般为“202020”-“404040”,粗调不低于0.8。找图色经常找错的时候,偏色设置为“050505”以下,相似度设置为1.0,来提高准确性原则上使用优先度是:区域找色>多点比色>多点找色>找字>找图3.5课后习题简述多点找色和多点比色的区别?使用KeepCapture命令后找图的截取的内容是实时的吗?为什么使用完KeepCapture后要及时释放内存中的截图?Findstr找字,文字二值化后显示不完整,做成的字库将无法识别文字,正确吗?Findstr只能用于找字符不能用于找图案,正确吗?将以上区域找色,多点找色,区域找图,区域找字使用function函数进行封装,并完成以下要求1.查找到时返回true,未查找到时返回false 2.对于以上两种返回结果,都可以设置是否进行随机范围的点击 4. 扩展命令4.1Device设备命令Device.GetImsi()获取设备IMSI号(了解内容) 应用场景:制作本地收费系统时会用到,配合MD5进行加解密 用法: 设备IMSI号 = Device.GetImsi() GetDeviceId:获取设备唯一编号(了解内容) 应用场景:制作本地收费系统时会用到,配合MD5进行加解密 用法: 返回值=GetDeviceID() Device.GetDPI()获取屏幕DPI大小(了解内容) 应用场景:用户定制实体手机脚本时用到 用法: 返回值 = Device.GetDPI() GetScreenX()获取屏幕宽度(了解内容) 应用场景:用户定制实体手机脚本时用到 用法: 屏幕横坐标X=GetScreenX() GetScreenY()获取屏幕高度(了解内容) 应用场景:用户定制实体手机脚本时用到 用法 屏幕纵坐标Y=GetScreenY() Device.Reboot()重启设备 应用场景:定时重启虚拟机,配合收费版的按键小精灵开机自启运行脚本 用法: Device.Reboot() 4.2Sys系统命令Sys.ClearMemory()清理内存 应用场景:类似于一键清理垃圾加速功能,按键精灵本身和白名单不会被清除,一定程度上可以防止脚本因长时间运行而崩溃 Sys.GetFront()获取当前应用包名(了解内容) 应用场景:不知道应用包名的时候,来读取前台应用包名 用法: 返回值 = Sys.GetFront() GetRunningApp:获取应用包名(了解内容) 应用场景:读取所有运行中程序的包名 用法: Dim arr() //定义一个数组变量 arr=GetRunningApp() For each n in arr TracePrint n Next Sys.isRunning()判断包名是否运行 应用场景:判断某后台运行应用是不是崩溃了,例如外服游戏挂VPN,判断VPN是否掉线 用法: 返回值 = Sys.isRunning(应用包名) Sys.AppIsFront()判断应用是否在前台 应用场景:例如判断游戏是否掉线 用法: 返回值 = Sys.AppIsFront(应用包名) 4.3Log日志命令Log.Open 开启日志 应用场景:将程序中的TracePrint打印保存在文本中,方便定位故障原因 用法: Log.Open Log.Close 关闭日志 用法: Function OnScriptExit() log.Close End Function 4.4其他常用命令Inputtext输入内容 应用场景:在对话框中输入字符串 用法 Inputtext "abcdefg" Delay延迟 应用场景:程序运行完毕后,暂停一会在运行下一个程序 用法 Delay 50 Runapp启动应用 应用场景:启动某个APP 用法 Runapp “com.android.settings” Killapp关闭应用 应用场景:关闭某个APP 用法 Killapp “com.android.settings” Import导入插件 应用场景:使用插件时的导入命令,注意插件名称的大小写。 用法 Import "shanhai.lua" Readuiconfig读界面配置 应用场景:读取脚本UI界面中的数据 用法1: ReadUIConfig("多选框")=true 备注:读取出来的是布尔值 用法2: ReadUIConfig("下拉框")=1 备注:读取出来的是数值 用法3: ReadUIConfig("输入框")="" 备注:读取出来的是字符串 //调试的时候,记得先在预览界面上保存 4.5课后习题了解UTF-8字符串命令、字符串函数、界面函数判断下拉框的第一条数据的代码为ReadUIConfig("下拉框")=1正确吗?ReadUIConfig("下拉框")>0的写法正确吗?ReadUIConfig("输入框")读取到的内容是字符串还是数值?5. 标准库函数5.1数学函数Abs绝对值 应用场景:将负值转化为正值 用法 Abs(-10) Fix取整 应用场景:删除数值的小数部分并,返回以整数表示的结果 用法: Fix(-8.5) Int取整 应用场景:删除数值的小数部分,并返回以整数表示的结果 用法: Int(-8.5) 备注:Int返回小于或等于数值的第一个负整数,Fix返回大于或等于数值的第一个负整数 Randomize初始化随机数 Rnd随机数 应用场景:在生成随机数前使用一次 用法: //Int((最大值 - 最小值 + 1) * Rnd() + 最小值) Dim MyValue Randomize MyValue = Int(((6-2+1) * Rnd()) + 1) Traceprint MyValue Round四舍五入 用法 Round(4.5) 5.2数组函数Array合成数组 应用场景:给数组函数传参 用法 Dim i=array(1,”abc”,{4,5}) Dim i={1,2,3} Split分割数组 应用场景:将数组分割为若干段字符串,格式Split(数组,分隔符) 用法 Dim a={“123|456”,”789|369”} Dim 数组()=Split(a(0),”|”) Ubound数组长度 应用场景:获取数组长度,一般循环时会用到 用法 For i=0 to ubound(数组) Traceprint 数组(i) Next 练习例子:数组传参、二分法排序、冒泡排序法 5.3时间日期函数Time()当前系统从1970年1月1日至今所经过的秒数 应用场景:定时器 用法 Dim t=time() Delay 1000 Time()-t>1 then Traceprint “过去1秒了” End If Tickcount()获取脚本运行时间 应用场景:定时器 用法 Dim t= Tickcount() Delay 1000 Tickcount()-t>1000 then Traceprint “过去1秒了” End IF 备注:以上2种常用于定时器功能 5.4运算符5.4.1算术运算符+加 -减 *乘 /除 \整除 用法 A=4\3 Mod求余 用法 A=4 Mod 3 5.4.2连接运算符&强制连接:强制两个表达式进行字符串连接 用法 Traceprint 1&”1” 5.4.3关系运算符=等于、赋值 不等于 >大于 =大于等于 = 30 Then Do Until DateTime.Hour() = 15 TracePrint "开始活动"&now() Delay 5000 Loop TracePrint "活动结束" End If Delay 1000 Wend 6.2多线程命令Thread.setshareVar设置共享变量,变量可以是任意类型 用法 Thread.setshareVar”共享变量”,1 Thread.getshateVar 获取共享变量 用法 Thread.getshateVar(“共享变量”) Thread.start启动线程 用法 Dim a=thread.start(主程序) Sub 主程序() Traceprint “这是主程序” End Sub Thread.stop结束线程 用法 Thread.stop(a) Thread.wait等待线程(了解即可) 用法 Thread.wait(a) 备注:当需要并行处理任务的时候或者单线程处理任务不及时的时候,就需要用到多线程,但是不能滥用多线程。一般来说游戏脚本线程数量不应多于1条,并且要尽可能不使用多线程 注意事项: 主线程停止后子线程会停止多线程中的无法直接使用全局变量,需要进行传参才可以使用避免频繁启停多线程,容易导致内存堆栈溢出,从而脚本崩溃多线程运行时需要避免出现线程间相互干扰的情况6.3课后习题1.了解File文件操作命令(课后了解) 2.简述多线程的控制思路 |
CopyRight 2018-2019 实验室设备网 版权所有 |