@@ -75,29 +75,40 @@
var position = { } ;
var Lastexecution = false ; //线路执行标志,用于判断上一线路是否执行。
var Fightquick = settings . Fightquick ? settings . Fightquick : false ;
var Fighttimeout = settings . timeout = settings . timeout * 1000 || 1 20000;
var Fighttimeout = settings . timeout = settings . timeout * 1000 || 24 0000 ;
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 , 72 6, 191 , 53 ) ;
let SHUY = await Textocr ( "使用原粹树脂" , 1 , 1 , 0 , 877 , 72 6, 193 , 53 ) ;
let SHUB = await Textocr ( "补充原粹树脂" , 1 , 0 , 0 , 877 , 726 , 193 , 53 ) ;
let SHUN = await Textocr ( onerewards , 1 , 1 , 0 , 566 , 65 6, 8 19, 170 ) ;
let SHUY = await Textocr ( secendrewards , 1 , 1 , 0 , 566 , 65 6, 8 19, 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 , 72 6, 191 , 53 ) ;
let SHUY = await Textocr ( "使用原粹树脂" , 0.5 , 1 , 0 , 877 , 72 6, 193 , 53 ) ;
let SHUN = await Textocr ( onerewards , 0.5 , 1 , 0 , 566 , 65 6, 8 19, 170 ) ;
let SHUY = await Textocr ( secendrewards , 0.5 , 1 , 0 , 566 , 65 6, 8 19, 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-线路修复.js on" ) ; }
else { await pathingScript . runFile ( ` ${ selectedFolder } ${ jsonFile1 } ` ) ; }
if ( position . line == 2 && ( i + position . flower * 2 - 2 ) == 8 && Lastexecuti on )
{
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 ; // 线路完成