mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-05-17 09:36:55 +08:00
AutoFriendshipFight 稳定性重构:资源清理、异步收口、配置统一(v1.5.8) (#3197)
* 战斗好感js:释放前增加延迟,并简化清理逻辑 通过等待 500 毫秒的休眠操作,为.NET 任务在释放 V8 对象后预留额外执行时间,以此避免触发对象已释放异常(ObjectDisposedException)。简化finally代码块中battleTask的清理逻辑:仅当battleTask和awaitBattleTask均已赋值时才执行清理操作;将任务与等待超时设置为竞争执行;清理过程中静默忽略所有错误,防止因取消操作或超时问题导致finally代码块阻塞 * Bump version to 1.5.5 and update changelog Update manifest version to 1.5.5 and add a v1.5.5 entry to the README changelog. The release notes mention stability improvements: add a short delay after releasing resources to reduce ObjectDisposedException likelihood and optimize fight task cleanup to avoid stuck cleanup phases. * v1.5.6:移除游泳状态持久化监测,统一使用 Assets/ 路径 将资源 / 路径引用从 assets/ 重命名为 Assets/(涉及 README 文档、main.js 路径加载逻辑、AutoPath 查找逻辑)。 移除持久化游泳追踪功能及相关设置 / 逻辑:删除 DEFAULT_SWIM_CONSECUTIVE_LIMIT 常量、SwimTracker 实现代码、游泳相关错误码 / 提示信息,以及 settings.json 中的 swimConsecutiveLimit 配置项。 简化游泳处理逻辑:检测到盗宝团进入游泳状态时,立即恢复至雕像状态,并将该回合判定为失败。 在释放图像素材前添加 500 毫秒的异步等待休眠,降低对象已释放异常(ObjectDisposedException)的触发风险。 更新 README 文档的更新日志,记录移除持久化游泳追踪功能、修改 Assets/ 路径的变更。 * AutoFriendshipFight: resource cleanup & swim fix Bump version to v1.5.7 and add changelog entry. Improve resource lifecycle handling by making template recognition objects mutable, extending post-exit sleep, explicitly disposing template/mat objects, and nulling references to reduce ObjectDisposedException risk. Add SwimTracker helper to centralize swim/statue recovery detection for 盗宝团. Harden executeBattleTasks: introduce awaitBattleTask flag and longer wait, better race/cleanup semantics for background AutoFight tasks, improved error handling/logging, and ensure path promises are caught when timing out. README and manifest updated accordingly. * Make swim recovery per-enemy configurable Introduce a swimRecoveryEnabled flag in the enemy config and change SwimTracker to read that flag (falling back to previous behaviour: only 武盗/盗宝团 enabled). Replace the hardcoded enemyType === "盗宝团" check in executeSingleFriendshipRound with SwimTracker(enemyType).enabled. Remove the now-unused getTodayKey helper and delete swim_stats.json as part of cleanup. This centralizes the swim-recovery toggle so it can be extended per enemy and removes obsolete daily swim stats storage. * Force recover flag on statue recovery When battleResult.status is "recovered_to_statue", always call recoverAfterFailure with a true second argument and add a Chinese comment explaining the game auto-returned to the seven-day statue. This simplifies the previous conditional (enemyType === "盗宝团") and ensures consistent recovery handling for this status. * Make disableAsyncFight apply to all enemies Respect the disableAsyncFight setting for all enemy types (including 盗宝团). main.js now only uses the async/ocr detect flow for 盗宝团 when disableAsyncFight is false. README and settings.json labels were updated to reflect that disabling async fights makes synchronous mode apply to every enemy, improving stability and unifying behavior across encounters. * Toggle battle path flag for 盗宝团 Pass a conditional flag to runBattlePathToBattlePoint so it receives true when enemyType === "盗宝团" (previously always false). This enables a special path/behavior for the 盗宝团 enemy during executeSingleFriendshipRound to handle its unique movement/positioning. * Update repo/js/AutoFriendshipFight/README.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix README quotes and assets path casing Replace ASCII quotes with Chinese-style quotes around “战斗结束检测” for typographic consistency, and correct the assets directory name from `Assets/AutoPath/` to `assets/AutoPath/` in the README to match repository naming and avoid confusion. * Use lowercase 'assets' paths Normalize asset path casing in repo/js/AutoFriendshipFight/main.js by replacing "Assets" with "assets" for image and AutoPath JSON references. Updated template image loads (exp.png, mora.png) and pathing file accesses in AutoPath, getBattlePointFromBattlePath, and runBattlePathToBattlePoint to avoid file-not-found issues on case-sensitive filesystems. No behavioral logic changes. * Add managed game region caching and OCR helpers Introduce a gameRegionManager to centralize screenshot capture/caching and lifecycle management (retain/release, disposeOldGameRegions, flushGameRegionCache, getManagedGameRegion) to reduce ObjectDisposedException risks and enforce minimum capture intervals. Add OCR utilities (normalizeOcrText, readActivityListText, readActivityListTextFromCapture) and replace direct captureGameRegion usages in task detection, result waiting and exp/mora detection with the managed API. Add SWIM_RECOVERED error message constant and use it for swim-recovery paths. Bump manifest version to 1.5.8 and update README (note stability/paths change and assets path case). Misc: small style/robustness fixes (logging, null checks, cancellation handling) and ensure cache is flushed on exit. * Improve flushGameRegionCache disposal and timeouts Add timeouts and safer disposal logic to flushGameRegionCache to avoid indefinite waits. Wait for capturing/disposing flags with a short deadline and log+abort if exceeded; during flush only remove regions that are not currently borrowed (borrowCount<=0), with a secondary deadline to avoid blocking. Preserve borrow counts for still-borrowed regions, remove stale borrowCount entries for regions no longer in cache, and reset lastCaptureTs when cache becomes empty. Adds warning logs for timeout cases. * Refactor formatting and resource handling Reformat code for readability and tighten resource management: multiline/enhanced formatting for ENEMY_CONFIG and template matches, normalize indentation/spacing across functions. Improve gameRegionManager lifecycle (clearer isCapturing/isDisposing handling), add waits and timeout warnings in flushGameRegionCache, ensure borrowCountByRegion is cleaned for removed regions, and make getManagedGameRegion capture/dispose flow more robust. Also standardize safeDispose and empty-catch behavior, tidy OCR/battle/task related flows and error handling. These changes aim to reduce resource leaks, race conditions and improve maintainability without altering core logic. * Refactor battle flow and naming; add helpers Refactor battle execution and main loop for clarity and robustness. Renamed core functions for clarity (AutoFriendshipDev -> runFriendshipLoop, LogTimeTaken -> formatElapsedTime, CalculateEstimatedCompletion -> estimateCompletionTime) and added numerous helper utilities to centralize behavior: cancellation/silence helpers, timeout/error detection, wrapper helpers, cleanup logic, and separate sync/async battle execution paths. Extracted specialized flows (treasure hoarder async round, swim-recovery-aware path runner, and unified battle result handling) to reduce duplication and improve error/recovery handling (including auto-return-to-statue logic). Overall changes improve async coordination, avoid unhandled promise rejections, and make time formatting/logging consistent. * Improve battle timeout & party switch error handling Propagate battle timeouts and rejection errors as exceptions and map timeouts to a script error code for consistent reporting. In executeBattleTasksSyncMode, throw a battle_timeout instead of returning a false result. In executeBattleTasksAsyncMode, always throw battle_rejected errors (removed the cancellation-only check). In executeBattleTasks catch, convert battle_timeout to a standardized script error (ERROR_CODES.BATTLE_TIMEOUT). Enhance switchPartyIfNeeded: after teleporting to the Statue of The Seven, verify the switch result and if it still fails, log and notify the user, return to the main UI and throw an error instead of silently continuing. Also ensure cancellation errors are rethrown and other errors are propagated instead of being swallowed. --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
@@ -101,9 +101,9 @@
|
||||
- 单次战斗超时时间(默认120秒)
|
||||
- 战斗超时会直接取消任务,因此不建议过短
|
||||
- 脚本会自动检测任务结束,识别精度很高
|
||||
- 禁用异步战斗(更稳定;需配置“战斗结束检测”;对盗宝团无效)
|
||||
- 适用于愚人众/鳄鱼等:依赖“自动检测战斗结束”退出战斗
|
||||
- 盗宝团:仍使用路径战斗 + OCR 判定流程
|
||||
- 禁用异步战斗(更稳定;需配置“战斗结束检测”;对所有敌人生效)
|
||||
- 依赖“自动检测战斗结束”退出战斗
|
||||
- 开启后包括盗宝团在内的所有敌人都走同步战斗模式
|
||||
|
||||
#### 一键运行
|
||||
配置完成后,直接运行脚本即可开始自动刷取好感度。
|
||||
@@ -227,6 +227,10 @@
|
||||
|
||||
| 版本 | 更新内容 |
|
||||
|------|----------|
|
||||
| **v1.5.8** | 稳定性与规范性优化:统一截图托管与退出清理,补强异步战斗收口;禁用异步战斗对所有敌人生效;路径统一为 `assets/`,代码风格与注释同步整理 |
|
||||
| **v1.5.7** | 退出清理阶段补充释放模板匹配对象并延长宽限期,进一步降低宿主侧异步回调访问已释放对象的概率 |
|
||||
| **v1.5.6** | 移除游泳统计持久化与相关配置,减少运行期写文件干扰;资源路径统一为 `assets/` |
|
||||
| **v1.5.5** | 稳定性提升:退出释放资源后增加短延时,降低 ObjectDisposedException 概率;战斗任务清理逻辑优化,避免清理阶段卡住 |
|
||||
| **v1.5.3** | 稳定性提升:资源释放更完整;盗宝团游泳统计仅在盗宝团启用;“禁用异步战斗”增加超时保护避免卡死;设置说明更易懂 |
|
||||
| **v1.4.2** | 新增拾取模式,能选择不拾取 |
|
||||
| **v1.3** | 新增愚人众支持,优化敌人类型切换 |
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "战斗好感:自动好感度&卡时间",
|
||||
"version": "1.5.4",
|
||||
"version": "1.5.8",
|
||||
"bgi_version": "0.45.1",
|
||||
"tags": [
|
||||
"好感",
|
||||
@@ -20,4 +20,4 @@
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
{
|
||||
"name": "disableAsyncFight",
|
||||
"type": "checkbox",
|
||||
"label": "禁用异步战斗(更稳定;需配置“战斗结束检测”;对盗宝团无效)"
|
||||
"label": "禁用异步战斗(更稳定;需配置“战斗结束检测”;对所有敌人生效)"
|
||||
},
|
||||
{
|
||||
"name": "use1000Stars",
|
||||
@@ -59,11 +59,5 @@
|
||||
"type": "input-text",
|
||||
"label": "战斗超时时间\n【选填,默认为120秒】",
|
||||
"default": 120
|
||||
},
|
||||
{
|
||||
"name": "swimConsecutiveLimit",
|
||||
"type": "input-text",
|
||||
"label": "游泳连续触发阈值\n【选填,默认5;当日连续触发达到阈值后会提示“战斗策略或配队严重不合理”并终止】",
|
||||
"default": 5
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"date": "2026-04-26",
|
||||
"totalSwimCount": 0,
|
||||
"consecutiveSwimCount": 0
|
||||
}
|
||||
Reference in New Issue
Block a user