当前位置: 首页 > 后端技术 > Node.js

游戏自动化脚本开发经验分享

时间:2023-04-04 01:19:30 Node.js

后台技术栈:Auto.js+Android设备无障碍接入无需root实现功能:【三国杀十周年】公会自动击鼓,暂时只实现这个.后面有时间再更新其他任务逻辑思路的概览:使用OCR功能拆解页面控件分析页面状态(任务完成状态),然后通过Auto.js点击按钮完成相应的任务.项目目录├──README.md├──main.js//入口逻辑├──package.json├──project.json├──secret.js//百度令牌└──src├──asset//资源文件│├──demo//OCR测试使用││└──index.js│├──img││├──WechatIMG604.jpeg││└──WechatIMG605.jpeg│└──page//page配置信息,通过OCR解析页面生成,主要为JSON格式,记录控制信息│├──README.md│├──gonghui//公会页面││├──gonghui.js││└──huodong.js│├──shouye.js//首页│└──wujiang//武将页面│└──wujiang.js├──config.js├──lib│└──utilTool.js//常用方法└──task//任务逻辑相互隔离├──gonghui.js//公会任务逻辑├──renwu.js//以下为其他任务,未完成├──weixin.js└──zhuolu.js逻辑实现行会任务逻辑varutilJS=require("../lib/utilTool");varutilTool=utilJS.utilTool;varshouye=require("../asset/page/shouye");vargonghui=require("../asset/page/gonghui/gonghui");varhuodong=require("../asset/page/gonghui/huodong");//公会任务functionGonghuiTask(){}GonghuiTask.prototype.init=function(){utilTool.clickButton(shouye,"guild");//内部方法,点击控件utilTool.clickButton(gonghui,"activity");while(!utilTool.findText("消费元宝20")){//如果有消费元宝20等字样,则表示免费打鼓已达到上限//表示仍可打鼓utilTool.clickButton(huodong,"打鼓");实用工具。clickBack();};module.exports={gonghuiTask:newGonghuiTask(),};功能比较简单,就是进入首页后,点击公会、活动等按钮,成功进入击鼓任务页面,然后检测当前任务状态。是否可以打鼓。即一行utilTool.findText("消费元宝20"),详细方法如下//内部封装方法获取当前页面截图,开启OCR解析查看当前页面相关文字描述varresult=page.find(function(item){if(item.words==text){返回真;}});返回结果;};难点分析在三国志游戏版中,无法通过Auto.js自带的工具来分析控件,也无法通过click("activity")框架方法来点击一个按钮控件。整个游戏页面被封装,所有属性都没有暴露,所以无法通过text("xxcopywriting")或者其他方式很好的定位到各个控件。因此,本脚本采用百度OCR的网络图片功能,分析百度OCR有几种不同的场景。经过调试,网络图片的OCR在这个场景下是最准确的,基本可以准确翻译90%的文字内容OCR调用最后返回的数据内容存放在/asset/page/文件夹下(OCR成本高,返回时间太长,所以数据会提前缓存起来,而不是每次脚本运行时都调用)。数据格式如下module.exports=[{words:"Letter",location:{top:31,left:1976,width:68,height:33},chars:[],},{words:"Recharge",location:{top:29,left:2136,width:65,height:32},chars:[],},{words:"World",location:{top:996,left:130,width:70,height:34},chars:[],},{words:"痕迹来了,可燃之城",location:{top:1007,left:271,width:182,height:26},chars:[],},{words:"更多",location:{top:1031,left:1021,width:54,height:30},chars:[],},{words:"Package",location:{top:1031,left}:1142,宽度:55,高度:29},字符:[],},{单词:“朋友”,位置:{顶部:1032,左侧:1264,宽度:57,高度:28},字符:[],},...];数据内容主要包括对应的文本内容,以及文本的位置、大小等。有了这些数据,我们就可以达到我们想要的效果了。借助Auto.js,让脚本根据我们的需要点击某个区域。具体方法如下//遍历位置,点击按钮UtilTool.prototype.clickButton=function(arrays,name){varflag=false;for(vari=0;i