mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-16 03:33:25 +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} 原粹树脂数量
|
||||
*/
|
||||
async function countOriginalResin(tryOriginalMode,opToMainUi) {
|
||||
async function countOriginalResin(tryOriginalMode,opToMainUi,openMap) {
|
||||
if (tryOriginalMode) {
|
||||
log.info("尝试使用原始模式");
|
||||
return await countOriginalResinBackup()
|
||||
} else {
|
||||
let ocrPhysical = await physical.ocrPhysical(opToMainUi);
|
||||
log.info('尝试使用优化模式');
|
||||
let ocrPhysical = await physical.ocrPhysical(opToMainUi,openMap);
|
||||
await sleep(600)
|
||||
if (ocrPhysical && ocrPhysical.ok) {
|
||||
return ocrPhysical.remainder;
|
||||
} else {
|
||||
log.error(`ocrPhysical error`);
|
||||
throw new Error("ocrPhysical error");
|
||||
}
|
||||
}
|
||||
@@ -457,43 +459,47 @@ this.countAllResin = async function () {
|
||||
setGameMetrics(1920, 1080, 1);
|
||||
log.info("开始统计树脂数量");
|
||||
|
||||
// 返回主界面
|
||||
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 genshin.returnMainUi();
|
||||
await sleep(CONFIG.UI_DELAY);
|
||||
|
||||
// 打开地图界面统计原粹/浓缩树脂
|
||||
await openMap();
|
||||
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("开始统计地图界面中的树脂");
|
||||
|
||||
if (!tryPass){
|
||||
// 如果第一次尝试失败,则切换到蒙德
|
||||
await switchtoCountrySelection(CONFIG.COORDINATES.MONDSTADT.x, CONFIG.COORDINATES.MONDSTADT.y)
|
||||
resinCounts.original = await countOriginalResin(!tryPass);
|
||||
}
|
||||
resinCounts.condensed = await countCondensedResin();
|
||||
if (!tryPass) {
|
||||
// 打开补充树脂界面统计须臾/脆弱树脂
|
||||
await openReplenishResinUi();
|
||||
await sleep(CONFIG.UI_DELAY);
|
||||
|
||||
// 打开补充树脂界面统计须臾/脆弱树脂
|
||||
await openReplenishResinUi();
|
||||
await sleep(CONFIG.UI_DELAY);
|
||||
|
||||
// 点击避免选中效果影响统计
|
||||
click(CONFIG.COORDINATES.AVOID_SELECTION.x, CONFIG.COORDINATES.AVOID_SELECTION.y);
|
||||
await sleep(500);
|
||||
|
||||
log.info("开始统计补充树脂界面中的树脂");
|
||||
resinCounts.transient = await countTransientResin();
|
||||
resinCounts.fragile = await countFragileResin();
|
||||
// 点击避免选中效果影响统计
|
||||
click(CONFIG.COORDINATES.AVOID_SELECTION.x, CONFIG.COORDINATES.AVOID_SELECTION.y);
|
||||
await sleep(500);
|
||||
|
||||
log.info("开始统计补充树脂界面中的树脂");
|
||||
resinCounts.transient = await countTransientResin();
|
||||
resinCounts.fragile = await countFragileResin();
|
||||
}
|
||||
// 显示结果
|
||||
displayResults(resinCounts);
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ async function saveOnlyNumber(str) {
|
||||
* - min {number}: 最小可执行体力值
|
||||
* - remainder {number}: 当前剩余体力值
|
||||
*/
|
||||
async function ocrPhysical(opToMainUi = false) {
|
||||
async function ocrPhysical(opToMainUi = false,openMap=false) {
|
||||
// 检查是否启用体力识别功能,如果未启用则直接返回默认结果
|
||||
if (!settings.isResinExhaustionMode) {
|
||||
log.info(`===未启用===`)
|
||||
@@ -79,8 +79,10 @@ async function ocrPhysical(opToMainUi = false) {
|
||||
}
|
||||
//设置最小可执行体力值
|
||||
let minPhysical = MinPhysical
|
||||
//打开地图界面
|
||||
await keyPress('M')
|
||||
if (openMap){
|
||||
//打开地图界面
|
||||
await keyPress('M')
|
||||
}
|
||||
await sleep(ms)
|
||||
log.debug(`===[点击+]===`)
|
||||
//点击+ 按钮 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 regionA = captureGameRegion()
|
||||
// let buttonA = captureGameRegion().find(templateMatchAddButtonRo);
|
||||
let buttonA = region.find(templateMatchAddButtonRo);
|
||||
let buttonA = regionA.find(templateMatchAddButtonRo);
|
||||
regionA.Dispose()
|
||||
|
||||
await sleep(ms)
|
||||
@@ -178,7 +180,7 @@ async function ocrPhysical(opToMainUi = false) {
|
||||
let execute = (remainder - minPhysical) >= 0
|
||||
log.info(`最小可执行原粹树脂:{min},原粹树脂:{key}`, minPhysical, remainder,)
|
||||
|
||||
await keyPress('VK_ESCAPE')
|
||||
// await keyPress('VK_ESCAPE')
|
||||
return {
|
||||
ok: execute,
|
||||
min: minPhysical,
|
||||
@@ -187,6 +189,7 @@ async function ocrPhysical(opToMainUi = false) {
|
||||
} catch (e) {
|
||||
throwError(`识别失败,err:${e.message}`)
|
||||
} finally {
|
||||
//返回地图操作
|
||||
if (opToMainUi) {
|
||||
await toMainUi(); // 切换到主界面
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user