此次在之前的脚本基础上增加了一些功能,例如挂机时角色自动跑到了偏离原有挂机位置很远的地方,这个时候就需要进行复位原来挂机坐标,另外也增加了每个技能的CD延迟设置功能,这样确保在某些地图挂机只是用自己需要的技能和对应的CD延迟设置。挂机复位原理就是启动的时候打开大地图查找自己当前界面坐标并记录,然后每隔指定时间就打开大地图比对下当前所在点坐标,如果偏离绝对值5个点坐标就往初始坐标点跑,然后继续挂机怪。
此次更新同时也对上次的脚本的一些地方进行了问题修复和优化,上次的脚本可以查看笔记:https://sulao.cn/post/993.html
下面就直接贴上此次更新的所有代码,脚本部分的代码如下:
//分辨率使用1280*720,dpi 240,不要开启模拟器的极致多开模式 SetControlBarPos 0.6,0 // 设置悬浮窗停靠位置 Dim checkIntervalArray = Array(300, 600, 1800, 3600, 10800) //检测间隔时间 Dim skillIntervalArray = Array(1, 5, 10, 30, 60, 120, 300) //技能CD时间 Dim skillPointArray = Array("1190,440", "1075,460", "1000,550", "1020,660") //技能坐标 Dim property_step = 20 //血条步长 Dim bloodPixelColor = GetPixelColor(220 + CInt(ReadUIConfig("bloodPercent"))*property_step, 60) //指定坐标血条颜色 Dim bluePixelColor = GetPixelColor(130 + CInt(ReadUIConfig("bluePercent"))*property_step, 80) //指定坐标灵力颜色 //以下所有取色可能不同模拟器或者不同显卡需要进行重新取色 Dim autoButtoColor = "94DFF7" //挂机按钮位置颜色(GetPixelColor(930, 260)) Dim itemColorArray = Array("3155DE", "000029", "EF7531", "522000", "FFFFFF") //随身商店窗口药水颜色+卷轴颜色 Dim dianjinColor = "63AAAD" //点金手弩颜色 Dim zhanshenColor = "42758C" //战神宝铠颜色 Dim hushaColor = "B5A2A5" // 虎煞魔凯颜色 Dim pointColor = "63CBFF|52B6F7|1882CE|1882D6" //小地图定位点颜色 //定义所有需要的延迟 Dim delay100 = 100 Dim delay200 = 200 Dim delay300 = 300 Dim delay500 = 500 //加血 Function AddBlood(bloodPixelColor, bloodpercent, property_step) Dim bloodColor bloodColor = GetPixelColor(220 + bloodpercent*property_step, 60) If bloodColor <> bloodPixelColor Then Tap 880, 575 TracePrint GetNetworkTime()&" 当前血量不足,正在加血!" Delay delay300 End If End Function //加魔 Function AddBlue(bluePixelColor, bluepercent, property_step) Dim blueColor blueColor = GetPixelColor(130 + bluepercent*property_step, 80) If blueColor <> bluePixelColor Then Tap 880, 665 TracePrint GetNetworkTime()&" 当前魔力不足,正在加魔!" Delay delay300 End If End Function //售卖装备药水(需要至尊角色) Function sellItem(pointX, pointY) Tap pointX, pointY // 点击药水 Delay delay200 Tap 850, 500 //点击数量 Delay delay200 Tap 600, 240 //数量9 Delay delay100 Tap 600, 240 //数量9 Delay delay100 Tap 710, 470 //确认 Delay delay100 Tap 840, 640 //点击售卖 Delay delay200 End Function //卖装备,清理药水(需要至尊角色) Function checkInventory(itemColorArray, isCheck, retainCount) Dim curEquipColor, result Dim package_x = 200 // 背包第一格初始x轴坐标 Dim package_y = 200 // 背包第一格初始y轴坐标 Tap 1160, 270 //打开背包 Delay delay500 Tap 950, 650 //整理背包 Delay delay500*4 Tap 660, 650 //打开商店 Delay delay300 Tap 1090, 270 //切换到售卖标签 Delay delay200 TracePrint GetNetworkTime()&" 开始循环检测售卖背包物品..." For i = 0 To 50 curEquipColor = GetPixelColor(package_x, package_y) // 获取第一格物品颜色 result = CmpColor(package_x, package_y, Join(itemColorArray, "|"), 1.0) If result > -1 Then TracePrint GetNetworkTime()&" 检测到药水,当前装备已售完,跳出循环..." Exit For // 找到药水颜色,跳出循环 End If Tap package_x, package_y //售卖第一格准备 Delay delay200 Tap 840, 640 //点击售卖 Delay delay200 Next TracePrint GetNetworkTime()&" 售卖装备完成!" If isCheck Then //检测药水,多余的药水进行售卖 Dim x, y, distances_x, distances_y, itemColor Dim packagend_x = 564 Dim packagend_y = 572 Dim blood = 0 Dim blue = 0 For y = 0 To 4 distances_y = y * 93 // 背包y轴偏移 For x = 0 To 4 distances_x = x * 91 // 背包x轴偏移 itemColor = GetPixelColor(packagend_x - distances_x, packagend_y - distances_y) Select Case itemColor Case itemColorArray(1),itemColorArray(3) TracePrint GetNetworkTime()&" 找到高级药水,开始进行售卖" Call sellItem(packagend_x - distances_x, packagend_y - distances_y) Case itemColorArray(0) blood = blood + 1 If blood > retainCount Then TracePrint GetNetworkTime()&" 找到超过保留顶级生命药水,开始进行售卖" Call sellItem(packagend_x - distances_x, packagend_y - distances_y) End If Case itemColorArray(2) blue = blue + 1 If blue > 1 Then TracePrint GetNetworkTime()&" 找到超过保留顶级灵力药水,开始进行售卖" Call sellItem(packagend_x - distances_x, packagend_y - distances_y) End If End Select Next Next TracePrint GetNetworkTime()&" 售卖多余药水完成,准备退出商店!" End If Tap 70, 470 //点击任意空白区域退出 End Function //保留指定物品(需要至尊角色) Function saveItem() Dim result Dim package_x = 195 // 背包第一格初始x轴坐标 Dim package_y = 200 // 背包第一格初始y轴坐标 //拼接需要保存装备颜色值 Dim colors = "ff0000" If ReadUIConfig("dianjin") Then colors = colors&"|"&dianjinColor End If If ReadUIConfig("zhanshen") Then colors = colors&"|"&zhanshenColor End If If ReadUIConfig("husha") Then colors = colors&"|"&hushaColor End If Tap 1160, 270 //打开背包 Delay delay500 Tap 950, 650 //整理背包 Delay delay500*4 Tap 755, 650 //打开仓库 Delay delay500 TracePrint GetNetworkTime()&" 开始循环检测背包物品颜色是否为保留物品..." Dim n, x, y, distances_x, distances_y, itemColor For y = 0 To 4 distances_y = y * 92 // 背包y轴偏移 For x = 0 To 4 distances_x = x * 97 // 背包x轴偏移 result = CmpColor(package_x + distances_x, package_y + distances_y, colors, 1.0) // 比对当前背包坐标物品颜色 If result > -1 Then TracePrint GetNetworkTime()&" 找到保留物品,准备存入仓库..." Tap package_x + distances_x, package_y + distances_y // 点击装备 Delay delay300 Tap 890, 630 // 点击保存 ?保存按钮坐标是一个上下范围,不固定 Delay delay200 End If Next Next TracePrint GetNetworkTime()&" 检测装备完毕,退出仓库窗口!" Tap 70, 470 //点击任意空白区域退出 // Delay 200 // Tap 70, 470 //防止卡顿或者意外出错,连点两次空白,确保退出 End Function //获得初始位置坐标 Function initCoordinate(pointColor) Dim intX, intY Tap 1170, 102 //点开大地图 Delay delay500*2 Dim isFindPoint = FindColor(200, 180, 720, 610, pointColor, 0, 1, intX, intY) If isFindPoint < 0 Then TracePrint GetNetworkTime()&"没有获取到当前初始坐标点!!!" End If initCoordinate = Array(intX, intY) Tap 70, 470 //点击任意空白区域退出 End Function //复位点,偏离挂机点复位 Function pointReset(pointColor, initPointArray) Dim intX, intY Tap 1170, 102 //点开大地图 Delay delay500*2 Dim isFindPoint = FindColor(200, 180, 720, 610, pointColor, 0, 1, intX, intY) If isFindPoint > -1 Then TracePrint GetNetworkTime()&" 当前挂机坐标为"&intX&","&intY If Abs(initPointArray(0) - intX) > 5 Or Abs(initPointArray(1) - intY) > 5 Then // 当x,y坐标其中之一远离初始坐标 Tap initPointArray(0), initPointArray(1) //点击初始坐标位置(跑过去) Delay delay300 Tap 70, 470 //点击空白区域关闭地图 Delay delay200 //开始边跑边比对背景颜色,检测多个背景点颜色,其中一个能够匹配说明已经复位到初始挂机点 Do While True Dim point_x = GetPixelColor(400,20) Dim point_y = GetPixelColor(1000,100) Delay delay500*2 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) If GetPixelColor(400,20) = point_x Or GetPixelColor(1000,100) = point_y Then TracePrint GetNetworkTime()&" 已跑到初始挂机点,退出当前循环! " Exit Do End If Loop Else Tap 70, 470 //点击空白区域关闭地图 End If Else Tap 70, 470 //点击空白区域关闭地图 End If End Function If ReadUIConfig("isReset") Then //如果开启复位就获取角色初始位置 Dim initPointArray = initCoordinate(pointColor) //人物初始坐标 If initPointArray(0) < 0 Then ShowMessage "没有获取到人物初始坐标,重启当前脚本重新开始挂机", 5000, 400, 140 ExitScript End If ShowMessage "开始挂机,当前人物初始坐标为:"&initPointArray(0)&","&initPointArray(0), 5000, 400, 140 Delay delay300 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) End If Dim num = 1 Do While True // 如果是月卡用户直接点击挂机按钮 If ReadUIConfig("isMonthCard") Then If autoButtoColor <> GetPixelColor(930, 260) Then Tap 1245, 350 ShowMessage GetNetworkTime()&" 开始月卡挂机..." End If Delay delay500*9 Else //循环施展技能第一栏和第二栏技能 Dim skillArray For i = 0 To 3 If ReadUIConfig("skill"&i) Then If num Mod skillIntervalArray(ReadUIConfig("skillInterval"&i)) = 0 Then skillArray = Split(skillPointArray(i), ",") Tap skillArray(0), skillArray(1) Delay delay500 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) End If End If Next //捡取物品 If num Mod 6 = 0 Then Tap 1115, 685 //怪物目标定位 If ReadUIConfig("isPick") Then Tap 1240, 685 //捡东西 Delay delay300 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) End If End If //角色挂机点复位 If ReadUIConfig("isReset") Then If num Mod checkIntervalArray(CInt(ReadUIConfig("ResetInterval"))) = 0 Then If initPointArray(0) > -1 Then Call pointReset(pointColor, initPointArray) Delay delay200 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) Else TracePrint GetNetworkTime()&"没有获取到当前初始坐标点, 不能挂机跑位!" End If End If End If Call AddBlue(bluePixelColor, CInt(ReadUIConfig("bluePercent")), property_step) End If If num Mod checkIntervalArray(CInt(ReadUIConfig("sellInterval"))) = 0 Then //保存装备 If ReadUIConfig("isSave") Then Call saveItem() Delay delay200 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) End If //售卖多余药水 If ReadUIConfig("isSell") Then Call checkInventory(itemColorArray, ReadUIConfig("isCheck"), CInt(ReadUIConfig("saveNum"))+1) Delay delay200 Call AddBlood(bloodPixelColor, CInt(ReadUIConfig("bloodPercent")), property_step) End If End If num = num + 1 Loop
UI界面的代码如下:
界面1: { 挂机基本设置: { 水平布局: { 文字框: { 名称:"notice1", 显示内容:"请使用雷电模拟器,分辨率1280*720(dpi240),勿开启极致多开模式", 文字大小:18, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isMonthCardtips", 显示内容:"月卡用户:", 文字大小:16, 高度:60, 宽度:0 }, 多选框: { 名称:"isMonthCard", 提示内容:"如果勾选下面功能均失效,使用月卡挂机", 选中:false, 文字大小:16, 高度:0, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"bloodTips", 显示内容:"自动加血:", 文字大小:16, 高度:60, 宽度:0 }, 下拉框: { 名称:"bloodPercent", 选项: [ "40%", "50%", "60%", "70%", "80%" ], 初始选项:2 }, 文字框: { 名称:"bloodTips1", 显示内容:" 以下血量时自动加血", 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"blueTips", 显示内容:"自动加魔:", 文字大小:16, 高度:60, 宽度:0 }, 下拉框: { 名称:"bluePercent", 选项: [ "10%", "20%", "30%", "40%", "50%" ], 初始选项:1 }, 文字框: { 名称:"blueTips1", 显示内容:" 以下灵力时自动加魔", 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isPicktips", 显示内容:"捡取物品:", 文字大小:16, 高度:60, 宽度:0 }, 多选框: { 名称:"isPick", 提示内容:"捡取掉落地上的装备物品", 选中:false, 文字大小:16, 高度:0, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isResetTips", 显示内容:"挂机复位:", 文字大小:16, 高度:60, 宽度:0 }, 多选框: { 名称:"isReset", 提示内容:"偏离挂机位置检测并跑回原位", 选中:false, 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isResetTips1", 显示内容:"检测间隔:", 文字大小:16, 高度:60, 宽度:0 }, 下拉框: { 名称:"ResetInterval", 选项: [ "5分钟", "10分钟", "30分钟", "60分钟", "180分钟" ], 初始选项:0 }, 文字框: { 名称:"isReseTips2", 显示内容:" 不在初始位置自动跑回去(需要勾选挂机复位功能)", 文字大小:16, 高度:60, 宽度:0 }, }, }, 背包清理设置: { 水平布局: { 文字框: { 名称:"notice2", 显示内容:"背包功能需要开启随身商店功能,角色需要开启至尊功能 ", 文字大小:18, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"sellTips", 显示内容:"***********************************物品售卖***********************************", 文字大小:16, 高度:60, 宽度:0, }, }, 水平布局: { 文字框: { 名称:"isSellTips", 显示内容:"售卖物品:", 文字大小:16, 高度:60, 宽度:0 }, 多选框: { 名称:"isSell", 提示内容:"开启后会自动打开随身商店进行物品售卖", 选中:false, 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isSellTips1", 显示内容:"售卖间隔:", 文字大小:16, 高度:60, 宽度:0 }, 下拉框: { 名称:"sellInterval", 选项: [ "5分钟", "10分钟", "30分钟", "60分钟", "180分钟" ], 初始选项:0, }, 文字框: { 名称:"isSellTips2", 显示内容:" 间隔指定时间售卖背包物品", 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"sellTips2", 显示内容:"***********************************药水清理***********************************", 文字大小:16, 高度:60, 宽度:0, }, }, 水平布局: { 文字框: { 名称:"isCheckTips", 显示内容:"清理药水:", 文字大小:16, 高度:60, 宽度:0 }, 多选框: { 名称:"isCheck", 提示内容:"保留指定数量顶级生命药水,顶级灵药保留1格", 选中:false, 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isCheckTips1", 显示内容:"保留数量:", 文字大小:16, 高度:60, 宽度:0 }, 下拉框: { 名称:"saveNum", 选项: [ "1格", "2格", "3格", "4格", "5格" ], 初始选项:3, }, 文字框: { 名称:"isCheckTips2", 显示内容:" 顶级生命药水,其他高中级药水均会被自动清除", 文字大小:16, 高度:60, 宽度:0 }, }, }, 装备保存设置: { 水平布局: { 文字框: { 名称:"notice3", 显示内容:"保存装备需要开启随身仓库功能,角色需要开启至尊功能 ", 文字大小:18, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"isSaveTips", 显示内容:"保存装备:", 文字大小:16, 高度:60, 宽度:0 }, 多选框: { 名称:"isSave", 提示内容:"保留装备间隔时间同售卖物品间隔时间", 选中:false, 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"itemList", 显示内容:"***********************************装备列表***********************************", 文字大小:16, 高度:60, 宽度:0, }, }, 水平布局: { 多选框: { 名称:"muzhang", 提示内容:"精制木杖", 选中:false, 文字大小:16, 高度:60, 宽度:160 }, 多选框: { 名称:"shemao", 提示内容:"点钢蛇矛", 选中:false, 文字大小:16, 高度:60, 宽度:160 }, 多选框: { 名称:"zuimao", 提示内容:"鹰嘴矛", 选中:false, 文字大小:16, 高度:60, 宽度:160 }, 多选框: { 名称:"dianjin", 提示内容:"点金手弩", 选中:false, 文字大小:16, 高度:60, 宽度:160 }, 多选框: { 名称:"zhanshen", 提示内容:"战神宝铠", 选中:false, 文字大小:16, 高度:60, 宽度:160 }, 多选框: { 名称:"husha", 提示内容:"虎煞魔铠", 选中:false, 文字大小:16, 高度:60, 宽度:160 }, }, }, 技能延迟设置: { 水平布局: { 文字框: { 名称:"notice4", 显示内容:"各技能CD时间不一样,可以单独设置每个技能施展间隔时间 ", 文字大小:18, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"skillBar1", 显示内容:"*********************************第一技能栏*********************************", 文字大小:16, 高度:60, 宽度:0, }, }, 水平布局: { 文字框: { 名称:"skillTips0", 显示内容:"第1技能:", 文字大小:16, 高度:60, 宽度:0, }, 多选框: { 名称:"skill0", 提示内容:"CD时间:", 选中:true, 文字大小:16, 高度:0, 宽度:0, }, 下拉框: { 名称:"skillInterval0", 选项: [ "无CD", "5秒", "10秒", "30秒", "60秒", "120秒", "300秒" ], 初始选项:2, }, }, 水平布局: { 文字框: { 名称:"skillTips1", 显示内容:"第2技能:", 文字大小:16, 高度:60, 宽度:0, }, 多选框: { 名称:"skill1", 提示内容:"CD时间:", 选中:true, 文字大小:16, 高度:0, 宽度:0, }, 下拉框: { 名称:"skillInterval1", 选项: [ "无CD", "5秒", "10秒", "30秒", "60秒", "120秒", "300秒" ], 初始选项:0, }, }, 水平布局: { 文字框: { 名称:"skillTips2", 显示内容:"第3技能:", 文字大小:16, 高度:60, 宽度:0, }, 多选框: { 名称:"skill2", 提示内容:"CD时间:", 选中:true, 文字大小:16, 高度:0, 宽度:0, }, 下拉框: { 名称:"skillInterval2", 选项: [ "无CD", "5秒", "10秒", "30秒", "60秒", "120秒", "300秒" ], 初始选项:1, }, }, 水平布局: { 文字框: { 名称:"skillTips3", 显示内容:"第4技能:", 文字大小:16, 高度:60, 宽度:0, }, 多选框: { 名称:"skill3", 提示内容:"CD时间:", 选中:true, 文字大小:16, 高度:0, 宽度:0, }, 下拉框: { 名称:"skillInterval3", 选项: [ "无CD", "5秒", "10秒", "30秒", "60秒", "120秒", "300秒" ], 初始选项:2, }, }, }, 高级功能设置: { 水平布局: { 文字框: { 名称:"notice5", 显示内容:"游戏高级功能请慎用,开启高级功能较慢,请耐心等待", 文字大小:18, 高度:60, 宽度:0 }, }, 水平布局: { 文字框: { 名称:"speedTips", 显示内容:"***********************************游戏加速***********************************", 文字大小:16, 高度:60, 宽度:0, }, }, 水平布局: { 按钮: { 名称:"openAtkSpeed", 显示内容:"开启攻击加速", 点击响应:"openAtk", 文字大小:0, 高度:60, 宽度:200, }, 按钮: { 名称:"closeAtkSpeed", 显示内容:"关闭攻击加速", 点击响应:"closeAtk", 文字大小:0, 高度:60, 宽度:200, }, }, 水平布局: { 按钮: { 名称:"openRunSpeed", 显示内容:"开启移动加速", 点击响应:"openRun", 文字大小:0, 高度:60, 宽度:200, }, 按钮: { 名称:"closeRunSpeed", 显示内容:"关闭移动加速", 点击响应:"closeRun", 文字大小:0, 高度:60, 宽度:200, }, }, 水平布局: { 文字框: { 名称:"transTips", 显示内容:"***********************************地图传送***********************************", 文字大小:16, 高度:60, 宽度:0, }, }, 水平布局: { 文字框: { 名称:"isTranstips1", 显示内容:"传送位置:", 文字大小:16, 高度:60, 宽度:0 }, 下拉框: { 名称:"transPoint", 选项: [ "沙漠4", "神殿1", "神殿2", "神殿3", "铁路1", "铁路2", "雪地1", "雪地2", "迷失" ], 初始选项:2, }, 文字框: { 名称:"isTranstips2", 显示内容:" 开启定点传送以后可以传送到地图入口", 文字大小:16, 高度:60, 宽度:0 }, }, 水平布局: { 按钮: { 名称:"transTips", 显示内容:"传送指定位置", 点击响应:"transferPoint", 文字大小:0, 高度:60, 宽度:200, }, }, ? }, }
功能图片如下: