更新AbundantOre (#1749)

* Update AbundantOre js script

* fix

* fix
This commit is contained in:
Jamis
2025-08-28 23:12:38 +08:00
committed by GitHub
parent feefed5cac
commit 3b5873f390
4 changed files with 58 additions and 15 deletions

View File

@@ -25,9 +25,9 @@
顾名思义
- 地面挖矿队伍中必须有诺艾尔,只挖水下的矿则无此限制
- 矿产资源的刷新时间记录在脚本目录下`records/persistent_data.json`文件中,升级、重新订阅脚本或重新安装BetterGI可能导致该记录丢失请自行备份。
- 矿产资源的刷新时间记录在脚本目录下`local/persistent_data.json`文件中升级或重新安装BetterGI可能导致该记录丢失请自行备份。
## 进阶使用
- 如果有多个游戏帐号可在最后一个输入框内为每个游戏帐号填写一个唯一的字符串以使他们的刷新时间分开保存互不干扰。这个唯一的字符串并不必须是帐号的UID只要互不相同就可以了。
- 对于少部分路线没有完成地图探索任务,又不想跳过整个区域的玩家,可以将想要跳过的脚本文件名称填入`assets/disabled_paths.conf`文件中以跳过这些地图追踪脚本,注意这个文件在重新订阅或更新时会被覆写
- 对于没有完成地图探索任务而无法正常完成某些路线的玩家,如果不想跳过整个区域,可以将想要跳过的脚本文件名称填入`local/disabled_paths.txt`文件中以跳过这些地图追踪脚本,语法请参考`assets/disabled_paths.conf`

View File

@@ -1,3 +1,23 @@
function forge_pathing_start_log(name) {
const t = new Date();
const timestamp = t.toTimeString().slice(0, 8) + "." + String(t.getMilliseconds()).padStart(3, "0");
var c = "Forging start log\n\n";
c += `[${timestamp}] [INF] BetterGenshinImpact.Service.ScriptService\n------------------------------\n\n`;
c += `[${timestamp}] [INF] BetterGenshinImpact.Service.ScriptService\n→ 开始执行地图追踪任务: "${name}"`;
log.debug(c);
}
function forge_pathing_end_log(name, elapsed_time) {
const elapsed_min = Math.floor(elapsed_time / 1000 / 60);
const elapsed_sec = (elapsed_time / 1000 % 60).toFixed(3);
const t = new Date();
const timestamp = t.toTimeString().slice(0, 8) + "." + String(t.getMilliseconds()).padStart(3, "0");
var c = "Forging end log\n\n";
c += `[${timestamp}] [INF] BetterGenshinImpact.Service.ScriptService\n→ 脚本执行结束: "${name}", 耗时: ${elapsed_min}${elapsed_sec}\n\n`;
c += `[${timestamp}] [INF] BetterGenshinImpact.Service.ScriptService\n------------------------------`;
log.debug(c);
}
function get_exclude_tags() {
var tags = [];
if (settings.exclude_fights) {
@@ -67,11 +87,12 @@ function load_filename_to_path_map() {
}
var persistent_data = {};
const in_memory_skip_tasks = new Set();
function load_persistent_data() {
var file_content = "";
try {
file_content = file.readTextSync("records/persistent_data.json");
file_content = file.readTextSync("local/persistent_data.json");
} catch (error) {}
if (file_content.length !== 0) {
persistent_data = JSON.parse(file_content);
@@ -81,16 +102,21 @@ function load_persistent_data() {
const disabled_paths = new Set();
function load_disabled_paths() {
const file_content = file.readTextSync("assets/disabled_paths.conf");
for (var l of file_content.split("\n")) {
l = l.trim();
if (l.length === 0) {
continue;
for (const path of ["assets/disabled_paths.conf", "local/disabled_paths.txt"]) {
var file_content = "";
try {
file_content = file.readTextSync(path);
} catch (error) {}
for (var l of file_content.split("\n")) {
l = l.trim();
if (l.length === 0) {
continue;
}
if (l.startsWith("//") || l.startsWith("#")) {
continue;
}
disabled_paths.add(l);
}
if (l.startsWith("//") || l.startsWith("#")) {
continue;
}
disabled_paths.add(l);
}
}
@@ -101,7 +127,7 @@ function load_statistics_data() {
}
async function flush_persistent_data() {
await file.writeText("records/persistent_data.json", JSON.stringify(persistent_data, null, " "));
await file.writeText("local/persistent_data.json", JSON.stringify(persistent_data, null, " "));
}
async function mark_task_finished(task_name) {
@@ -136,6 +162,9 @@ function get_some_tasks() {
const exclude_tags = new Set(get_exclude_tags());
var filtered_statistics = [];
for (const [key, value] of Object.entries(statistics)) {
if (in_memory_skip_tasks.has(key)) {
continue;
}
if (disabled_paths.has(key)) {
continue;
}
@@ -298,9 +327,18 @@ async function run_pathing_script(name, path_state_change, current_states) {
}
}
const cancellation_token = dispatcher.getLinkedCancellationToken();
const t0 = Date.now();
forge_pathing_start_log(name);
await pathingScript.run(json_content);
const elapsed_time = Date.now() - t0;
forge_pathing_end_log(name, elapsed_time);
if (!cancellation_token.isCancellationRequested) {
await mark_task_finished(name);
if (elapsed_time > 5000) {
await mark_task_finished(name);
} else {
in_memory_skip_tasks.add(name);
log.warn("脚本运行时间小于5秒可能发生了错误不写记录");
}
} else {
throw new Error("Cancelled");
}

View File

@@ -1,13 +1,18 @@
{
"bgi_version": "0.49.0",
"manifest_version": 1,
"name": "矿产资源批发",
"version": "0.1",
"version": "0.2",
"description": "自动记录矿石刷新时间,优先选择效率最高的路线,支持按区域、种类、数量自动规划挖矿路线",
"authors": [
{
"name": "芝士贝果"
}
],
"saved_files": [
"local/disabled_paths.txt",
"local/persistent_data.json"
],
"settings_ui": "settings.json",
"main": "main.js"
}