枫丹地脉花v.2.4版本:20250613 (#1078)

* v.2.4版本:20250613

v.2.4版本:20250613
1、特殊处理第二线路第5朵花,避免传送到螃蟹。
2、调整领取OCR范围,添加选择优先使用的树脂类型(适配3次地脉双倍)。
3、调整按次数执行逻辑,解决次数大于单线路打不够次数的问题。

* v.2.4版本:20250613

v.2.4版本:20250613
1、特殊处理第二线路第5朵花,避免传送到螃蟹。
2、调整领取OCR范围,添加选择优先使用的树脂类型(适配3次地脉双倍)。
3、调整按次数执行逻辑,解决次数大于单线路打不够次数的问题。
This commit is contained in:
kaedelcb
2025-06-13 14:57:59 +08:00
committed by GitHub
parent 13dd572405
commit 2f47ec539f
4 changed files with 116 additions and 59 deletions

View File

@@ -60,3 +60,8 @@ v.2.2版本20250524
v.2.3版本20250528
1、优化寻找地脉花逻辑。
v.2.4版本20250613
1、特殊处理第二线路第5朵花避免传送到螃蟹。
2、调整领取OCR范围添加选择优先使用的树脂类型适配3次地脉双倍
3、调整按次数执行逻辑解决次数大于单线路打不够次数的问题。

View File

@@ -75,29 +75,40 @@
var position ={};
var Lastexecution = false;//线路执行标志,用于判断上一线路是否执行。
var Fightquick = settings.Fightquick ? settings.Fightquick : false;
var Fighttimeout = settings.timeout = settings.timeout * 1000 || 120000;
var Fighttimeout = settings.timeout = settings.timeout * 1000 || 240000;
const ocrRegion2 = { x: 0, y: 200, width: 300, height: 300 }; // 追踪任务区域
const ocrRo2 = RecognitionObject.ocr(ocrRegion2.x, ocrRegion2.y, ocrRegion2.width, ocrRegion2.height);
const ocrRegion1 = { x: 800, y: 200, width: 300, height: 100 }; // 中心区域
const ocrRo1 = RecognitionObject.ocr(ocrRegion1.x, ocrRegion1.y, ocrRegion1.width, ocrRegion1.height);
var firstresin = settings.firstresin ? settings.firstresin : false;
var onerewards = firstresin ? "使用原粹树脂" : "使用浓缩树脂";
var secendrewards = firstresin ? "使用浓缩树脂" : "使用原粹树脂";
var doneCount = 0;
filePath = ""
// 读取原始次数配置
var rawTimes = settings.times*2 ? settings.times : "12";
var rawTimes = settings.times*2 ? settings.times : "6";
var color = settings.color ? settings.color : 1;
var BIAOZZ = "assets/model/BIAOZ.bmp"
var timesValue = 12; // 设置默认值
var num = parseFloat(rawTimes) * 2; // 直接计算乘以2后的值并尝试转换为浮点数
// 如果输入是有效的数字并且在合理范围内则更新timesValue
if (/^-?\d+\.?\d*$/.test(rawTimes) && num >= 1 && num <= 198) {
timesValue = Math.max(1, Math.min(198, Math.floor(num))); // 确保timesValue为整数并且不超过上限
}
var timesConfig = { value: timesValue };
if (color == 2){ var DIMAIHUA = "assets/model/DIMAIHUA-huank.bmp";}
else if (color == 1){var DIMAIHUA = "assets/model/DIMAIHUA-lank.bmp";}
else{var DIMAIHUA = "assets/model/DIMAIHUA-lank.bmp";}
log.debug(`DEBUG:${SHUV}.${color}.${rawTimes}`);//调试LOG
if (Rewards){log.warn("结束后领励练点和提交每日!");if(settings.nh === undefined || settings.nh === "") {log.warn("好感队未配置,领奖励时不切换队伍")}}
if (settings.nh === undefined || settings.nh === "") { log.warn("好感队禁用!");haoganq=0}else{var haogandui = settings.nh;haoganq=1;if(settings.n === undefined ) {throw new Error("好感队已经设置,请填战斗队伍!")}}
if (settings.n === undefined || settings.n === "") { log.warn("队伍名称未配置,不更换队伍!");SHUOVER=1;}
if (SHUV == 1) {log.warn("线路模式 '单线路!'");}else{log.warn("线路模式 '树脂耗尽模式,强制打完整体线路!'");rawTimes=12}
if (SHUV == 1) {log.warn(`线路模式 ' 按次数刷取 ${timesConfig.value/2} 次' `);}else{log.warn("线路模式 ' 浓缩和原粹树脂耗尽模式最多99次 '");timesConfig.value = 198;}
if (color == 1) {log.warn("地脉类型 ' 蓝色-经验书花!'");}else{log.warn("地脉类型 ' 黄色-摩拉花!'")}
let nowuidString = settings.nowuid ? settings.nowuid : "";
@@ -105,8 +116,6 @@
setGameMetrics(1920, 1080, 1);
//================= 1.设定路线 =================
@@ -210,15 +219,8 @@
};
var timesValue = 12; // 设置默认值
var num = parseFloat(rawTimes) * 2; // 直接计算乘以2后的值并尝试转换为浮点数
// 如果输入是有效的数字并且在合理范围内则更新timesValue
if (/^-?\d+\.?\d*$/.test(rawTimes) && num >= 1 && num <= 24) {
timesValue = Math.max(1, Math.min(12, Math.floor(num))); // 确保值在1到12之间并向下取整
}
var timesConfig = { value: timesValue };
const allFlowerCoords = [
// 线路1
{ line: 1, flower: 1, x: 773, y: 669 },
@@ -408,7 +410,13 @@
async function VeinEntrance() {
for (let i = 0;i < 2;i++) {
let JIECHU = await Textocr("接触地脉溢口",3,2,0,1188,358,200,400);
if (JIECHU.found){await keyPress("F");await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));await keyPress("F");break;}else{if(i == 1){
if (JIECHU.found)
{
await keyPress("F");await dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));await keyPress("F");break;
}
else{
if(i == 1)
{
log.warn("没找到地脉花,尝试强制转圈寻找,不管有没找到都执行战斗...");
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));
await keyDown("W");await sleep(500);await keyUp("W");
@@ -420,14 +428,15 @@
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": true }));
await keyDown("W");await sleep(1500);await keyUp("W");
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false }));
break;}
break;
}
}
}
}
//定义领取动作,好感队伍是否添加?
async function claimRewards() {
log.info("尝试领取奖励,优先使用浓缩~");
log.info(`尝试领取奖励,优先${onerewards}'`);
let SHUN01 = await Textocr("接触地脉之花",1.5,2,0,1188,358,200,400);
if (SHUN01.found) {
log.info("找到地脉之花,开始领取奖励...");
@@ -447,17 +456,17 @@
}
}
await sleep(500);
let SHUN = await Textocr("使用浓缩树脂",1,1,0,672,726,191,53);
let SHUY = await Textocr("使用原粹树脂",1,1,0,877,726,193,53);
let SHUB = await Textocr("补充原粹树脂",1,0,0,877,726,193,53);
let SHUN = await Textocr(onerewards,1,1,0,566,656,819,170);
let SHUY = await Textocr(secendrewards,1,1,0,566,656,819,170);
await sleep(1000);
let SHUB = await Textocr("补充原粹树脂",1,0,0,566,656,819,170);
if (SHUB.found){log.warn("树脂消耗完毕,结束任务");await keyPress("VK_ESCAPE");FINDagin=0;await sleep(1000);SHUOVER=2;return false;}
else if (SHUN.found || SHUY.found) {
log.info("找到树脂,已经使用...");FINDagin=0;dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: true })); return true;
}else{
log.warn("未找到树脂,尝试领取奖励...");
let SHUN = await Textocr("使用浓缩树脂",0.5,1,0,672,726,191,53);
let SHUY = await Textocr("使用原粹树脂",0.5,1,0,877,726,193,53);
let SHUN = await Textocr(onerewards,0.5,1,0,566,656,819,170);
let SHUY = await Textocr(secendrewards,0.5,1,0,566,656,819,170);
if (SHUN.found || SHUY.found) {FINDagin=0; return true;}else{log.warn("领取错误,退出!");if (FINDagin===1){SHUOVER=1;log.warn("模糊模式,地脉不在初始位置,继续寻找!");return true}else{SHUOVER=2;return false;}}//SHUOVER=2
}
}
@@ -589,7 +598,6 @@
// 定义路线常量
var selectedPath = pathingMap[`路线${position.line} ${['厄里那斯', '秋分山西侧锚点左下', '秋分山西侧锚点右', '柔灯港上锚点', '新枫丹科学院左锚点', '芒索斯山东麓'][position.line - 1]}`]
var selectedFolder = folderMap[`路线${position.line} ${['厄里那斯', '秋分山西侧锚点左下', '秋分山西侧锚点右', '柔灯港上锚点', '新枫丹科学院左锚点', '芒索斯山东麓'][position.line - 1]}`]
var maxExecutions = Math.min(timesConfig.value, selectedPath.length);
var executedCount = (position.flower-1)*2+0;
Lastexecution = false;
@@ -597,35 +605,71 @@
log.info(`开始执行第 ${position.line} 线路的第 ${executedCount/2 + 1}/${selectedPath.length/2} 朵地脉花...`);
for (let i = 0; i < selectedPath.length; i += 2){
// log.info(`executedCount: ${executedCount} maxExecutions: ${maxExecutions}次`);
if (executedCount >= maxExecutions) {
log.info("本线路已达到执行次数,终止运行!");
if (executedCount/2 + 1 > selectedPath.length/2) {
log.info("本线路执行完毕...");
break;}
if (doneCount >= timesConfig.value/2){
SHUOVER=2;log.info(`地脉花执行完成 ${timesConfig.value/2} 次,结束执行...`);
return true;
}
const jsonFile1 = selectedPath[i+position.flower*2-2];
if (jsonFile1 == undefined) {
log.info(`本线路完结,未达设定执行次数 ${timesConfig.value/2} ,继续执行...`);
return true;
}
const jsonFile2 = selectedPath[i+position.flower*2-1];
// 执行单个到达地脉花路径文件1
const choicePath = `${selectedFolder}${jsonFile1}`
log.info(`开始执行前往都地脉花:${jsonFile1}`);
if(SMODEL){
if (!Lastexecution || (position.line==1 && (i+position.flower*2-2)==8)) {
if(position.line==2 && (i+position.flower*2-2)==8){await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5秋分山左左下下1-线路修复.json");}
else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);}
}else{
const choicePath = `${selectedFolder}${jsonFile1}`
//const pathingList = file.readPathSync(choicePath);
if(position.line==2 && (i+position.flower*2-2)==8 && Lastexecution){
await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5秋分山左左下下1-线路修复.json");}
else
{
if(position.line==2 && (i+position.flower*2-2)==8)//特殊处理
{
let pathDic = JSON.parse(file.readTextSync(choicePath));
if (pathDic["positions"].length > 3) {
log.info(`第 2 线路第 5 朵花特殊处理...`);
await genshin.tp("4402.5048", "2295.4807", true);
await genshin.returnMainUi();
pathDic["positions"].splice(0, 1);
await pathingScript.run(JSON.stringify(pathDic));
}else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);}
}
}
else
{
let pathDic = JSON.parse(file.readTextSync(choicePath));
if (pathDic["positions"].length > 3)
{
pathDic["positions"] = pathDic["positions"].slice(-3);
}
await pathingScript.run(JSON.stringify(pathDic));
}
}else{
if(position.line==2 && (i+position.flower*2-2)==8){await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5秋分山左左下下1-线路修复.json");}
else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);}
if(position.line==2 && (i+position.flower*2-2)==8 && Lastexecution)
{
await pathingScript.runFile("assets/枫丹地脉花-路线2 秋分山西侧锚点左下/线路修复/枫丹地脉花-路线2 秋分山西侧锚点左下-5秋分山左左下下1-线路修复.json");
}
else
{
if(position.line==2 && (i+position.flower*2-2)==8)//特殊处理
{
let pathDic = JSON.parse(file.readTextSync(choicePath));
log.info(`第 2 线路第 5 朵花特殊处理...`);
await genshin.tp("4402.5048", "2295.4807", true);
await genshin.returnMainUi();
pathDic["positions"].splice(0, 1);
await pathingScript.run(JSON.stringify(pathDic));
}else{await pathingScript.runFile(`${selectedFolder}${jsonFile1}`);}
}
}
// 寻找地脉溢口,文字识别不到转圈寻找,不管有没找到都执行战斗,最后领取奖励判断是否继续执行
@@ -633,7 +677,8 @@
checkRewardPage();// 执行自动战斗并同步检测领奖页面
await VeinEntrance();
await sleep(1000);
dispatcher.addTimer(new RealtimeTimer("AutoPick", { "forceInteraction": false }));
await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false})); await keyPress("F");
log.warn("开始战斗...");
if (!Fightquick){
await dispatcher.runTask(new SoloTask("AutoFight")); //固定执行两次战斗,执行自动战斗,配置器中的设置建议填你的队伍打一次大概得时间
@@ -648,10 +693,11 @@
//执行到地脉花地点的寻路脚本
log.info(`开始执行寻找地脉花奖励:${jsonFile2}`);
await dispatcher.addTimer(new RealtimeTimer("AutoPick", { forceInteraction: false}));
await pathingScript.runFile(`${selectedFolder}${jsonFile2}`);
await sleep(3000);
// 领取奖励,开始找地脉口
log.info(`开始第 ${executedCount/2+1} 朵花的奖励领取`);
log.info(`开始本线路${executedCount/2+1} 朵花的奖励领取`);
if (haoganq==1){log.info(`切换好感队伍:'${haogandui}'`);await genshin.returnMainUi(); await sleep(1000);await genshin.SwitchParty(haogandui);}
shouldContinueChecking = false;
await sleep(2000);
@@ -667,6 +713,7 @@
// 冷却等待(可选)
await sleep(1000);
executedCount=executedCount+2;
doneCount++;
}
FINDagin = 0; //重置地脉花寻找标志。lv.1.2新增,用于判断是否找线路余下地脉花。
return true;// 线路完成

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "地脉花-可禁UID/领每日/好感队切换",
"version": "2.3",
"name": "地脉花-可禁UID/领每日/优先树脂类型",
"version": "2.4",
"bgi_version": "0.44.8",
"description": "枫丹地脉花蓝花金花通用。生存压力大请带盾奶避免纯水输出请注意说明文件。如有BUG请联系作者QQ:119996800",
"tags":["地脉花"],

View File

@@ -12,12 +12,12 @@
{
"name": "times",
"type": "input-text",
"label": "选填,单路线刷取次数可填1-6,默认6次打完整条线"
"label": "选填,刷取次数默认6次最多99次树脂耗尽模式下无效"
},
{
"name": "shuv",
"type": "select",
"label": "选填,默认“1”为只打一条线路选“2”为耗尽树脂模式",
"label": "默认“1”为按上面的次数刷取选“2”为耗尽树脂模式",
"options": [
"1",
"2"
@@ -26,7 +26,7 @@
{
"name": "color",
"type": "select",
"label": "选填,默认:蓝花(经验花)选“1” / 黄花(摩拉花)选“2”",
"label": "默认:蓝花(经验花)选“1” / 黄花(摩拉花)选“2”",
"options": [
"1",
"2"
@@ -35,7 +35,12 @@
{
"name": "nowuid",
"type": "input-text",
"label": "慎用,禁止特定UID刷地脉花用 / 隔开如12345/99999"
"label": "禁止特定UID刷地脉花用 / 隔开如12345/99999"
},
{
"name": "firstresin",
"type": "checkbox",
"label": "默认优先使用浓缩,勾选后优先使用原粹树脂"
},
{
"name": "Rewards",
@@ -45,16 +50,16 @@
{
"name": "SMODEL",
"type": "checkbox",
"label": "直跑模式:如下个花近直跑过去,不传送,测试慎用,要求44.8版本!"
"label": "直跑模式:如下个花近直跑过去不传送要求44.8版本!"
},
{
"name": "Fightquick",
"type": "checkbox",
"label": "更快检测结束战斗,开启后下方的超时时间才有效"
"label": "地脉花长出后马上停止战斗,开启后下方的超时时间才有效"
},
{
"name": "timeout",
"type": "input-text",
"label": "更快检测结束战斗的战斗超时时间,单位秒,默认120秒"
"label": "最长战斗超时时间单位秒默认240秒"
}
]