//鹤羽原创,翻版必究 //制作脚本最关键的部分不是语句,因为所有语句的功能和用法都可以查询到,即使不记得也无所谓。最关键在于制作的逻辑。 //因此首先要把需要用脚本操作的过程手工做一遍,找到每一个关键的步骤和需要判断的关键点坐标、颜色等。 //然后把这些主要的判断和动作串起来,就形成了一个初步的脚本框架。在这个大框架中再添加,完善就比较容易了。 //本例中要完成挂机过程,其实只需要以下几个过程: //1、判断什么时候进入战斗画面 //2、如果在战斗画面是不是轮到玩家攻击 //3、如何攻击 //4、如何判断攻击结束并退出了战斗画面 //另外一个附加的问题是加血,可以在大框架确定以后再考虑插入。 //后面的脚本是一个完整的功能脚本,大家可以从脚本说明中看出这几个过程的顺序以及各自的判断方式、选择的点和颜色, //当然这种选择不是唯一的,大家可以根据自己的理解进行选择。 //脚本中使用了后台技术,虽然这个游戏实际上并不能完全支持后台(比如不支持后台键盘,后台鼠标也只在鼠标放在游戏窗口中才生效)。 //这里只是举例说明一下后台插件的使用方法。 //-------------------------------------------------------------- //获得游戏窗口句柄和位置尺寸等信息以便使用后台操作 Plugin hw=Window.mousepoint() Plugin clintrect=Window.GetClientRect(hw) rect=split(clintrect,"|",-1,1) xoffset=cint(rect(0)) yoffset=cint(rect(1)) xwinsize=cint(rect(2)) ywinsize=cint(rect(3)) //系统和窗口初始化完毕------------------------------------------ // //以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400) If xwinsize<>550 or ywinsize<>400 VBSCall messagebox("请将鼠标放在游戏窗口内启动脚本。") Goto end EndIf // //以下程序段用于参数设置 UserVar attackmode=DropList{普通:0|技能:1}=0 攻击模式 UserVar fillredscale=30 补血百分比 //参数设置完毕-------------------------------------------------- // //以下程序段用于定义关键点(所有点位均以游戏窗口左上角为基准零点) //之所以把一些关键点位都集中在一起定义是为了方便以后修改 // //1、血条左边界点和血条长度及颜色(这个游戏的血条大约是90个像素点) xred0=82: yred=36: dxred=90: colorred="0066FF" xred=xred0+cint(fillredscale*dxred/100) // //2、迷你小地图上的人物标志点和颜色(如果进入战斗状态小地图上会出现蓝色方块表示人物位置,因此可用来判断是否遇敌) xme=495: yme=70: colorme="CC9900" // //3、回合标志(回合标志取第一个字上的点,为了判断什么时候开始攻击) xround=208: yround=26: colorround="003399" // //4、mini地图上的敌人位置和位差(最左侧敌人为1,右侧敌人按位差移动) xanimy1=448: yanimy1=62: dxanimy=25: dyanimy=-9: coloranimy="0066FF" //定义基本点完毕------------------------------------------------ // // //**************************************************************** // //挂机程序正式开始 Rem start Plugin Bkgnd.MoveTo(hw,0,0) //一直向上移动,直到遇敌,因为无地图限制所以往一个方向运动即可 KeyDown 38 // Rem 等待遇敌 //获得小地图上的定义点,判断是否出现蓝框 Plugin color1=BkgndColor.GetPixelColor(hw,xme,yme) //如果不遇敌则反复判断 If color1<>clng("&H" & colorme) Delay 100 Goto 等待遇敌 EndIf //检测到小地图蓝框则执行下面的遇敌处理 //遇敌后首先停止移动 KeyUp 38 Delay 100 Rem 等待攻击 //再次判断人物蓝框和回合标志 Plugin color1=BkgndColor.GetPixelColor(hw,xme,yme) //如果人物蓝框消失,表示战斗结束 If color1<>clng("&H" & colorme) Goto start EndIf Plugin color1=BkgndColor.GetPixelColor(hw,xround,yround) //如果没有回合标志镖师还在等待战斗状态 If color1<>clng("&H" & colorround) Delay 100 Goto 等待攻击 EndIf //回合标志出现,按顺序搜索小地图上的敌人 i=0 While i<3 Plugin color1=BkgndColor.GetPixelColor(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i) If color1=clng("&H" & coloranimy) //如果找到任何一个敌人,则实施攻击并回到等待攻击状态,等待下一回合 Gosub 战斗 Goto 等待攻击 EndIf i=i+1 EndWhile //没有找到敌人,表示攻击结束,进入移动状态 //因为此游戏补血没有消耗,所以战斗结束后补血一次