mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-05-21 22:35:48 +08:00
feat(resin): 优化树脂数量统计功能 (#2555)
- 修改countOriginalResin函数增加openMap参数支持 - 添加优化模式日志输出和错误处理 - 调整游戏界面操作流程,先返回主界面再打开地图 - 重构树脂统计逻辑,区分补充树脂界面和地图界面统计 - 修复physical.js中的区域识别错误 - 移除不必要的ESC键操作 - 添加统计流程的详细日志记录
This commit is contained in:
@@ -205,16 +205,18 @@ async function recognizeNumberByOCR(ocrRegion, pattern) {
|
|||||||
* 统计原粹树脂数量
|
* 统计原粹树脂数量
|
||||||
* @returns {number} 原粹树脂数量
|
* @returns {number} 原粹树脂数量
|
||||||
*/
|
*/
|
||||||
async function countOriginalResin(tryOriginalMode,opToMainUi) {
|
async function countOriginalResin(tryOriginalMode,opToMainUi,openMap) {
|
||||||
if (tryOriginalMode) {
|
if (tryOriginalMode) {
|
||||||
log.info("尝试使用原始模式");
|
log.info("尝试使用原始模式");
|
||||||
return await countOriginalResinBackup()
|
return await countOriginalResinBackup()
|
||||||
} else {
|
} else {
|
||||||
let ocrPhysical = await physical.ocrPhysical(opToMainUi);
|
log.info('尝试使用优化模式');
|
||||||
|
let ocrPhysical = await physical.ocrPhysical(opToMainUi,openMap);
|
||||||
await sleep(600)
|
await sleep(600)
|
||||||
if (ocrPhysical && ocrPhysical.ok) {
|
if (ocrPhysical && ocrPhysical.ok) {
|
||||||
return ocrPhysical.remainder;
|
return ocrPhysical.remainder;
|
||||||
} else {
|
} else {
|
||||||
|
log.error(`ocrPhysical error`);
|
||||||
throw new Error("ocrPhysical error");
|
throw new Error("ocrPhysical error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -457,43 +459,47 @@ this.countAllResin = async function () {
|
|||||||
setGameMetrics(1920, 1080, 1);
|
setGameMetrics(1920, 1080, 1);
|
||||||
log.info("开始统计树脂数量");
|
log.info("开始统计树脂数量");
|
||||||
|
|
||||||
// 返回主界面
|
await genshin.returnMainUi();
|
||||||
let toMainUi=true
|
|
||||||
// await genshin.returnMainUi();
|
|
||||||
// await sleep(CONFIG.UI_DELAY);
|
|
||||||
|
|
||||||
let tryPass = true;
|
|
||||||
try {
|
|
||||||
resinCounts.original = await countOriginalResin(false,toMainUi);
|
|
||||||
} catch (e) {
|
|
||||||
tryPass = false
|
|
||||||
}
|
|
||||||
await sleep(CONFIG.UI_DELAY);
|
await sleep(CONFIG.UI_DELAY);
|
||||||
|
|
||||||
// 打开地图界面统计原粹/浓缩树脂
|
// 打开地图界面统计原粹/浓缩树脂
|
||||||
await openMap();
|
await openMap();
|
||||||
await sleep(CONFIG.UI_DELAY);
|
await sleep(CONFIG.UI_DELAY);
|
||||||
|
let tryPass = true;
|
||||||
|
try {
|
||||||
|
log.info("[开始]统计补充树脂界面中的树脂");
|
||||||
|
resinCounts.original = await countOriginalResin(false,false);
|
||||||
|
moveMouseTo(CONFIG.COORDINATES.AVOID_SELECTION.x, CONFIG.COORDINATES.AVOID_SELECTION.y)
|
||||||
|
await sleep(500);
|
||||||
|
resinCounts.transient = await countTransientResin();
|
||||||
|
resinCounts.fragile = await countFragileResin();
|
||||||
|
log.info("[完成]统计补充树脂界面中的树脂");
|
||||||
|
// 点击避免选中效果影响统计
|
||||||
|
click(CONFIG.COORDINATES.AVOID_SELECTION.x, CONFIG.COORDINATES.AVOID_SELECTION.y);
|
||||||
|
} catch (e) {
|
||||||
|
tryPass = false
|
||||||
|
}
|
||||||
|
await sleep(CONFIG.UI_DELAY);
|
||||||
log.info("开始统计地图界面中的树脂");
|
log.info("开始统计地图界面中的树脂");
|
||||||
|
|
||||||
if (!tryPass){
|
if (!tryPass){
|
||||||
// 如果第一次尝试失败,则切换到蒙德
|
// 如果第一次尝试失败,则切换到蒙德
|
||||||
await switchtoCountrySelection(CONFIG.COORDINATES.MONDSTADT.x, CONFIG.COORDINATES.MONDSTADT.y)
|
await switchtoCountrySelection(CONFIG.COORDINATES.MONDSTADT.x, CONFIG.COORDINATES.MONDSTADT.y)
|
||||||
resinCounts.original = await countOriginalResin(!tryPass);
|
resinCounts.original = await countOriginalResin(!tryPass);
|
||||||
}
|
}
|
||||||
resinCounts.condensed = await countCondensedResin();
|
resinCounts.condensed = await countCondensedResin();
|
||||||
|
if (!tryPass) {
|
||||||
|
// 打开补充树脂界面统计须臾/脆弱树脂
|
||||||
|
await openReplenishResinUi();
|
||||||
|
await sleep(CONFIG.UI_DELAY);
|
||||||
|
|
||||||
// 打开补充树脂界面统计须臾/脆弱树脂
|
// 点击避免选中效果影响统计
|
||||||
await openReplenishResinUi();
|
click(CONFIG.COORDINATES.AVOID_SELECTION.x, CONFIG.COORDINATES.AVOID_SELECTION.y);
|
||||||
await sleep(CONFIG.UI_DELAY);
|
await sleep(500);
|
||||||
|
|
||||||
// 点击避免选中效果影响统计
|
|
||||||
click(CONFIG.COORDINATES.AVOID_SELECTION.x, CONFIG.COORDINATES.AVOID_SELECTION.y);
|
|
||||||
await sleep(500);
|
|
||||||
|
|
||||||
log.info("开始统计补充树脂界面中的树脂");
|
|
||||||
resinCounts.transient = await countTransientResin();
|
|
||||||
resinCounts.fragile = await countFragileResin();
|
|
||||||
|
|
||||||
|
log.info("开始统计补充树脂界面中的树脂");
|
||||||
|
resinCounts.transient = await countTransientResin();
|
||||||
|
resinCounts.fragile = await countFragileResin();
|
||||||
|
}
|
||||||
// 显示结果
|
// 显示结果
|
||||||
displayResults(resinCounts);
|
displayResults(resinCounts);
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ async function saveOnlyNumber(str) {
|
|||||||
* - min {number}: 最小可执行体力值
|
* - min {number}: 最小可执行体力值
|
||||||
* - remainder {number}: 当前剩余体力值
|
* - remainder {number}: 当前剩余体力值
|
||||||
*/
|
*/
|
||||||
async function ocrPhysical(opToMainUi = false) {
|
async function ocrPhysical(opToMainUi = false,openMap=false) {
|
||||||
// 检查是否启用体力识别功能,如果未启用则直接返回默认结果
|
// 检查是否启用体力识别功能,如果未启用则直接返回默认结果
|
||||||
if (!settings.isResinExhaustionMode) {
|
if (!settings.isResinExhaustionMode) {
|
||||||
log.info(`===未启用===`)
|
log.info(`===未启用===`)
|
||||||
@@ -79,8 +79,10 @@ async function ocrPhysical(opToMainUi = false) {
|
|||||||
}
|
}
|
||||||
//设置最小可执行体力值
|
//设置最小可执行体力值
|
||||||
let minPhysical = MinPhysical
|
let minPhysical = MinPhysical
|
||||||
//打开地图界面
|
if (openMap){
|
||||||
await keyPress('M')
|
//打开地图界面
|
||||||
|
await keyPress('M')
|
||||||
|
}
|
||||||
await sleep(ms)
|
await sleep(ms)
|
||||||
log.debug(`===[点击+]===`)
|
log.debug(`===[点击+]===`)
|
||||||
//点击+ 按钮 x=1264,y=39,width=18,height=19
|
//点击+ 按钮 x=1264,y=39,width=18,height=19
|
||||||
@@ -95,7 +97,7 @@ async function ocrPhysical(opToMainUi = false) {
|
|||||||
let templateMatchAddButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`${add_objJson.path}`), add_objJson.x, add_objJson.y, add_objJson.width, add_objJson.height);
|
let templateMatchAddButtonRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync(`${add_objJson.path}`), add_objJson.x, add_objJson.y, add_objJson.width, add_objJson.height);
|
||||||
let regionA = captureGameRegion()
|
let regionA = captureGameRegion()
|
||||||
// let buttonA = captureGameRegion().find(templateMatchAddButtonRo);
|
// let buttonA = captureGameRegion().find(templateMatchAddButtonRo);
|
||||||
let buttonA = region.find(templateMatchAddButtonRo);
|
let buttonA = regionA.find(templateMatchAddButtonRo);
|
||||||
regionA.Dispose()
|
regionA.Dispose()
|
||||||
|
|
||||||
await sleep(ms)
|
await sleep(ms)
|
||||||
@@ -178,7 +180,7 @@ async function ocrPhysical(opToMainUi = false) {
|
|||||||
let execute = (remainder - minPhysical) >= 0
|
let execute = (remainder - minPhysical) >= 0
|
||||||
log.info(`最小可执行原粹树脂:{min},原粹树脂:{key}`, minPhysical, remainder,)
|
log.info(`最小可执行原粹树脂:{min},原粹树脂:{key}`, minPhysical, remainder,)
|
||||||
|
|
||||||
await keyPress('VK_ESCAPE')
|
// await keyPress('VK_ESCAPE')
|
||||||
return {
|
return {
|
||||||
ok: execute,
|
ok: execute,
|
||||||
min: minPhysical,
|
min: minPhysical,
|
||||||
@@ -187,6 +189,7 @@ async function ocrPhysical(opToMainUi = false) {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
throwError(`识别失败,err:${e.message}`)
|
throwError(`识别失败,err:${e.message}`)
|
||||||
} finally {
|
} finally {
|
||||||
|
//返回地图操作
|
||||||
if (opToMainUi) {
|
if (opToMainUi) {
|
||||||
await toMainUi(); // 切换到主界面
|
await toMainUi(); // 切换到主界面
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user