按键精灵脚本教程黑客2009-04-20 21:39:45 阅读260 评论0 字号:大中小订阅按键精灵脚本教程第一部分会以补红脚本入手,穿带几乎所有基础知识,为后续的章节打下坚实的基础。
第二部分则是2D和3D游戏的自动打怪脚本的分析与制作,从思路到代码编写,再到问题的解决思路,给出详尽的描述。
第三部分转换思路,讲述其他非游戏的脚本如何制作,进而把按键精灵扩展到更多的领域。
方便日常生活所需。
第四部分超越按键,也是最后一部分,描述按键精灵结合独有的插件系统,编写出更加强大的软件功能。
在本教程起草之日起,请朋友们耐心等待,因第一次写此类教程,本着对大家负责的态度,教程写好要反复修改,衡量各知识点的编排的章节与要点。
进度会稍慢,以此保证,每周至少会更新一节。
历时半年之久,只求精品现世,望朋友们海涵。
初窥补红蓝脚本---------------------------------------------------------------------------------------------------------------------------------------------------------------本教程欢迎转载,但请注明:转载自简单游官方论坛:第一章概述第一章以补红脚本为基础,从简入繁,从易到杂,详细讲述补红脚本的制作方法与按键精灵基础知识。
在描绘整个补红脚本的基础上,为第二章自动打怪脚本的制作方式铺垫基础。
如果你能从坚持看完第一章,可以肯定的是,你会达到简单游已有的各专区补红蓝脚本的设计水平。
正文开始:很多朋友都留言来信询问,如何制作自己的补红补蓝脚本。
其实编写方法多种多样,不一而足。
在本章里,会以补红蓝脚本做为切入点,实际讲述各种脚本的编写方法。
并避开枯燥的编程概念讲解,以实为主,通过大量的应用例子掌握按键精灵。
首先出现在本节中的一些术语做一个简短的说明:坐标——屏幕象素的坐标值,如当前分辨率为1024×768,则屏幕左上角的坐标是:0,0。
右下角则是:1024,768。
抓色/抓点——抓取屏幕内某一象素点的坐标极颜色。
使用方法:控制命令->抓点坐标/颜色->在面图上点左键,加入到坐标点->退出抓点->选好坐标颜色后->插入关键字——按键精灵的保留字,不可以做变量使用。
了解以上内容后,就可以开始我们的脚本之旅了。
先考虑手动玩的情况,当自己的血或者魔法值低于某一临界值时,我们就要使用各种补血补魔的药品了。
同样,按键精灵也通过这点判断,如果屏幕坐标的某一点颜色,不等于血或魔的颜色,就该吃药了。
我们来看在按键精灵里的写法:IfColor 138 109 ef844b 1KeyPress 49 1EndIf对以上代码解释如下:如果(138,109)的颜色不等于#ef844b颜色,则按键<1>条件结束其中138,109是血条上任意问题,ef844b是血的颜色。
ifcolor——是按键精灵的关键字,表示这句是判断颜色。
138 109——分别是屏幕上X,Y的坐标值。
ef844b——是屏幕上的颜色16进制的BGR值1——代表条件,该位置可以设置0,1,2三个值,0是相等,1是不等,2是模糊相等只有以上的代码是不足够的,原因在于以上代码只运行一次。
我们要让他不断的检测颜色,这样就达到自动补红补蓝的目的了。
看两句代码:Rem sGoto s解释:“Rem s”可以理解为在该位置做一个标记s。
而“Goto s”则是无条件跳到此标记执行,其中s可以自定义,跳到Rem [标识符]处。
rem和goto都是按键精灵的关键字。
这里说一下程序运行机制,每行代码都有行号,脚本解释器要一行一行代码的执行下去,直到执行最后一行代码或碰到EndScript语句(该语句在后面会有讲解),没有任何代码可执行了,程序就退出。
我们的目的是让程序持续不断的进行检测,有了rem .. goto就完美解决了。
来看最后的实例:Rem sIfColor 138 109 ef844b 1KeyPress 49 1EndIfDelay 100Goto s解释:Delay 是暂停运行的关键字,后面跟随的100,表示暂停0.1秒。
整个程序结构清晰,一目了然,不再做过多的解释。
补蓝脚本留做作业。
回顾本节所讲解的关键内容:ifcolor .. endif 关键字的使用方法IfColor [X坐标] [Y坐标] [GBR颜色] [对比条件]rem .. goto 关键字的使用方法Rem [标记名]Goto [标记名]delay 关键字的使用方法Delay [暂停时间,单位毫秒]---------------------------------------------------------------------------------------------------------------------------------------------------------------再接再力渗透补红脚本本教程欢迎转载,但请注明:转载自简单游官方论坛:作者:舞月回顾上节所说的内容:1、ifcolor [x] [y] [颜色] [对比]ifcolor - 关键字,用于颜色对比x - 屏幕上横坐标y - 屏幕上枞坐标颜色- BGR三元色对比- 0:相等1:不等2:约等2、Rem [标记]rem - 关键字,在该行号做个标记,为goto做标记3、Goto [标记]goto - 关键字,跳转到相关标记。
标记可以是任何字母、数字、汉字、特殊符号,但该标记必须唯一。
否则会错误跳转。
4、Delay [毫秒]delay - 关键字,暂停XX毫秒继续运行。
我碰到过不止一款游戏,用上一节所讲述的脚本,使用并不正常。
通过测试分析,了解到游戏画面与血条画面刷新并不同步。
这会导致判断错误,解决办法是通过取游戏血条的底色来判断。
这个方法只适合底色不变,或变化不大的游戏。
对比值给0或2IfColor 138 109 1b7c5d 0KeyPress 49 1EndIf但如果底色是透明的(随环境变化而变化,没有固定的颜色),就比较不好做了,比如韩国的Archlord这款游戏。
先给出一篇代码,然后实例讲解。
i = 0For 5IfColor 138 109 2312ff 0i = i + 1EndIfIf i = 0//加血EndIf本段代码引出了两个概念:1、变量:如第一行的i = 0和ifcolor体中的i = i + 12、循环语句:for 53、条件语句:if i = 0下面分别对这两点进行讲解。
1、变量:变量的概念,对于初学者来说,确实不容易理解。
为了加深理解,这里放弃书面语描述,先讲变量如何使用。
我们来描绘这样一段生活中的场景:手里拎了很多东西,并想进超市,那么必然要存包,在从超市出来后,再把存起来的东西取出来。
再描绘另外一段生活中的场景:我们取银行存钱,拿着银行卡,可以在很多地方取钱消费。
就这样一个存和取的动作,已经代表了变量的应用,变量就是以上描述中的柜子和银行卡,我们把数据存到变量中,然后在需要该数据的时候再从变量拿出来用。
但实质上,变量并不是柜子,他是一个代替品,或者说是代名词,假设我们把数字22存到变量a中,那么a就代表了22,当我们需要使用这个22的时,直接用a来代替他就可以,22并不会从a中消失。
而他的特性就像柜子一样,可以储存我们需要他储存的各种数据。
看具体实例:a = 22 //在这里我们给一个变量名叫a的变量,赋值22b = a //这里则是把a变量的值22取出,赋值给b变量,而a变量的值不会消失,此时a和b的值都是22c = a + b //把a和b的值取出来做加法操作,赋值给c变量,此时a和b的值都是22,c的值是44a = a - 1 //这句和数学上的理解就不一样了,首先从a中取出值22,然后减1,最后的结果再送回给a,此时a的值是21把以下代码复制到按键精灵中,运行一次,看看效果,会加深理解。
VBSCall Call MessageBox(a)b = aVBSCall Call MessageBox(b)VBSCall Call MessageBox(a)c = a + bVBSCall Call MessageBox(a)VBSCall Call MessageBox(b)VBSCall Call MessageBox(c)a = a - 1VBSCall Call MessageBox(a)对于变量的描述,到此还远远不够,在此,仅解释了变量做加减法的操作,不过对于解释本节开始的代码已经足够。
更加复杂的内容,会在以后陆续讲到。
2、循环语句:for 5循环语句比较容易理解,for 5的作用就是循环for到endfor中的数据5次。
实际看一次效果会彻底理解,不再做过多解释:for 3VBSCall Call MessageBox(3)endfor这段代码会弹出三次3。
3、条件语句:if i = 0从语意上,我们看的出,如果i等于0,则做某些操作。
首先要说的,if作为按键精灵关键字,承担的作用就是分支语句块,关于这点会在下节做详细的描述。
if和ifcolor两个关键字是按键精灵唯一的条件语句。
条件语句,既满足条件,则执行某些操作,否则执行另外一些操作。
在if后面会跟随一个条件判断句,在这里就是i=0。
条件判断句的结果只有两种:“真”或“假”,“是”或“非”。
要么正确,否则就不正确,没有中立的存在。
从变量的解释中,我们看到i的值可能是0,也可能是1到4中任何一个数。
如果i是0的话,那么i=0的结果就是“真”,否则他就是“假”。
看具体实例:if 1=2 //假把下面代码复制到按键精灵中,运行一次,会对if语句有更深的理解。
a=1if a=1VBSCall Call MessageBox(1)endifif a=0VBSCall Call MessageBox(0)endif这里有一个可能引起歧义的地方,我在这里做一个解释。
我们发现在变量赋值的时候,我们使用“=”。
而两个值对比的时候,我们还是使用“=”。
到底这个=号有几种作用,什么时间发生什么作用呢?这里我说明一下:在=号不需要任何返回值的情况下,则是“赋值运算符”,需要返回值的情况,则是“比较运算符”。
在if当中,if语句后面,需要有一个真假值的存在,以判断if下面的语句是否执行。
通过以上两个概念的简单理解,我们来分析一下本节开始部分代码的流程:i = 0 //首先给变量i赋值0For 5 //循环执行5次ifcolor语句IfColor 138 109 2312ff 0 //如果左边(138,109)的颜色等于2312ffi = i + 1 //把i变量的值加1EndIf //结束ifcolor语句块EndFor //结束循环体If i = 0 //如果循环5次的颜色都不相等,则//加血EndIf //结束if语句块相信以上的解释,已经完整描述了该代码的作用。