自定義自動秘境腳本 (#2415)

可自定義參數的自動秘境腳本
This commit is contained in:
FFA
2025-11-30 11:11:50 +08:00
committed by GitHub
parent 19295e24ac
commit 3d8c735981
4 changed files with 330 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
# 传送并自动秘境 (增强版)
本脚本为 **BetterGI** 自带脚本的增强版本。允许用户直接在脚本设置中自定义“刷取次数”、“树脂类型”及其他高级参数,无需修改 BetterGI 全局设置。
---
## ✨ 主要功能
* **自定义树脂策略**:支持指定各类型树脂的使用次数,或选择自动刷取至树脂耗尽。
* **智能队伍切换**:进本前自动切换至指定队伍。
* **全自动托管**:直接调用 BetterGI 内置的自动秘境逻辑,支持自动传送、自动进门、战斗及领奖。
* **自动处理**:支持结束后自动分解圣遗物。
---
## 🚀 使用方法
> ⚠️ **重要**:本脚本的参数需要在**调度器**中配置!
1. 在调度器中添加脚本。
2. **右键点击**脚本并选择 **“修改JS脚本自定义配置”**。
### 📌 必填项
* **指定要前往的秘境**
* 请在下拉菜单中选择目标副本。
* **树脂策略 (二选一)**
* **☑️ 刷取至树脂耗尽 (勾选)**
* 优先使用原粹树脂,耗尽后使用浓缩树脂。
* 此模式下**忽略**下方的具体次数设定。
* **⬜ 指定每种树脂刷取次数 (不勾选)**
* 严格按照下方填写的各树脂次数进行刷取。
* 若四种树脂次数都为 0脚本将不会进行任何战斗。
### ⚙️ 可选项
* **自动切换到指定队伍**
* 输入预设队伍名称(需完全一致),留空则不切换。
* **秘境刷取轮数**
* `0`:刷到体力耗尽或达到指定次数。
* `数字`:刷满该场数后强制停止。
* **结束后自动分解圣遗物**
* 开启后自动执行分解逻辑。
* **周日副本序号**
* 仅周日全开时有效,填 `1` / `2` / `3` 对应界面选项。
### 🔧 进阶/除错项
* **战斗完成后等待时间**
* 建议设置 5 秒以上,防止战斗结束过快导致识别错误。
* **启用调试模式**
* 勾选后,日志窗口会显示详细参数,供排查问题使用。
> *注:复活重试次数、寻路优化等参数请直接在 BetterGI 主界面的设置中修改。*
---
## ❓ 常见问题
* **Q: 脚本显示“未找到秘境”?**
* **A:** 请确认选择的秘境名称是否在当前版本 BetterGI 支持列表中。
---
## 👨‍💻 关于作者
* **原作者**: huiyadanli, iris, 霁
* **修改者**: [RJFAC](https://github.com/RJFAC)
* **辅助生成**: AI

View File

@@ -0,0 +1,106 @@
(async function () {
// =========================================================================
// 1. 读取用户设置
// =========================================================================
let userConfig = settings;
let enableDebug = userConfig.EnableDebug;
// --- 参数解析 ---
let pDomainName = userConfig.DomainName;
let pPartyName = userConfig.PartyName || "";
let pRunUntilDepleted = userConfig.RunUntilResinDepleted;
let pAutoArtifactSalvage = userConfig.AutoArtifactSalvage;
let pMaxArtifactStar = userConfig.MaxArtifactStar || "4";
let pSundaySelectedValue = userConfig.SundaySelectedValue || "";
// 数值转换
let pOriginal = parseInt(userConfig.OriginalResinUseCount) || 0;
let pCondensed = parseInt(userConfig.CondensedResinUseCount) || 0;
let pTransient = parseInt(userConfig.TransientResinUseCount) || 0;
let pFragile = parseInt(userConfig.FragileResinUseCount) || 0;
let pDomainRoundNum = parseInt(userConfig.DomainRoundNum) || 0;
// 注意FightEndDelay 在 JS 层执行,作为 C# 任务结束后的额外等待
let pFightEndDelay = parseInt(userConfig.FightEndDelay) || 5;
// --- 检查 ---
if (!pDomainName) {
log.error("请先在配置中选择要前往的秘境!");
return;
}
// =========================================================================
// 2. 主流程
// =========================================================================
while (true) {
try {
// --- A. 创建并配置 C# 参数对象 ---
// 直接使用 EngineExtend 暴露的 AutoDomainParam 类
let taskParam = new AutoDomainParam(pDomainRoundNum);
// 填入参数 (仅填入 AutoDomainParam 实际支持的属性)
taskParam.DomainName = pDomainName;
taskParam.PartyName = pPartyName;
taskParam.AutoArtifactSalvage = pAutoArtifactSalvage;
taskParam.MaxArtifactStar = pMaxArtifactStar;
taskParam.SundaySelectedValue = pSundaySelectedValue;
// 重要:树脂设置逻辑
taskParam.SpecifyResinUse = !pRunUntilDepleted;
if (!pRunUntilDepleted) {
// 指定次数模式
taskParam.OriginalResinUseCount = pOriginal;
taskParam.CondensedResinUseCount = pCondensed;
taskParam.TransientResinUseCount = pTransient;
taskParam.FragileResinUseCount = pFragile;
// 设置优先级:从左到右
taskParam.SetResinPriorityList("浓缩树脂", "原粹树脂", "须臾树脂", "脆弱树脂");
} else {
// 刷到耗尽模式
taskParam.SetResinPriorityList("浓缩树脂", "原粹树脂");
}
if (enableDebug) {
log.info(`[DEBUG] 参数注入完成。模式: ${!pRunUntilDepleted ? "指定次数" : "刷到耗尽"}`);
log.info(`[DEBUG] 浓缩: ${pCondensed}, 原粹: ${pOriginal}, 周日: ${pSundaySelectedValue}`);
}
// --- B. 执行任务 ---
// 使用 RunAutoDomainTask 直接执行 C# 托管的完整流程
// 包含自动传送、自动进门、战斗及重试 logic
await dispatcher.RunAutoDomainTask(taskParam);
// --- C. 战后等待 (脚本层面额外等待) ---
if (pFightEndDelay > 0) {
log.info(`[脚本] 任务执行完毕,额外等待 ${pFightEndDelay} 秒...`);
await sleep(pFightEndDelay * 1000);
}
break;
} catch (ex) {
let msg = ex.message || "";
if (msg.includes("背包物品已满") || msg.includes("未检测到秘境结束")) {
log.warn(`[脚本] 任务可能已完成,但检测到: ${msg}`);
break;
}
else if (msg.includes("检测到复苏界面") || msg.includes("复苏")) {
log.warn(`[脚本] 角色死亡,准备复活重试...`);
await sleep(5000);
continue;
}
else if (msg.includes("TaskCanceledException") || msg.includes("A task was canceled")) {
log.info("[脚本] 任务已取消或停止。");
break;
}
else if (msg.includes("取消自动任务")) {
log.info("[脚本] 用户手动停止任务。");
break;
}
else {
log.error(`[脚本] 发生错误: ${msg}`);
throw ex;
}
}
}
})();

View File

@@ -0,0 +1,25 @@
{
"manifest_version": 1,
"name": "传送并自动秘境(增强版)",
"version": "0.4",
"bgi_version": "0.53.0",
"description": "BetterGI自带脚本的增强版。支持自定义传送后执行自动秘境的各项参数如多种树脂设置、自动废弃圣遗物、轮数设置等。(本脚本逻辑由AI辅助生成)",
"authors": [
{
"name": "huiyadanli",
"link": "https://github.com/huiyadanli"
},
{
"name": "iris"
},
{
"name": "霁"
},
{
"name": "RJFAC",
"link": "https://github.com/RJFAC"
}
],
"settings_ui": "settings.json",
"main": "main.js"
}

View File

@@ -0,0 +1,129 @@
[
{
"name": "DomainName",
"type": "select",
"label": "指定要前往的秘境 (自动传送到刷取的秘境)",
"options": [
"",
"仲夏庭园",
"塞西莉亚苗圃",
"震雷连山密宫",
"铭记之谷",
"孤云凌霄之处",
"无妄引咎密宫",
"华池岩岫",
"忘却之峡",
"太山府",
"芬德尼尔之顶",
"山脊守望",
"砂流之庭",
"菫色之庭",
"椛染之庭",
"沉眠之庭",
"岩中幽谷",
"缘觉塔",
"有顶塔",
"赤金的城墟",
"熔铁的孤塞",
"苍白的遗荣",
"深潮的余响",
"罪祸的终末",
"临瀑之城",
"褪色的剧场",
"蕴火的幽墟",
"深古瞭望所",
"虹灵的净土",
"昏识塔",
"荒废砌造坞",
"霜凝的机枢",
"失落的月庭",
"无光的深都"
],
"default": ""
},
{
"name": "PartyName",
"type": "input-text",
"label": "自动切换到指定队伍 (注意队伍名称是游戏内你手动设置的名称)",
"default": ""
},
{
"name": "RunUntilResinDepleted",
"type": "checkbox",
"label": "刷取至树脂耗尽 (优先用原粹后用浓缩,其余不用)",
"default": false
},
{
"name": "OriginalResinUseCount",
"type": "input-text",
"label": "原粹树脂刷取次数 (请输入数字)",
"default": "0"
},
{
"name": "CondensedResinUseCount",
"type": "input-text",
"label": "浓缩树脂刷取次数 (请输入数字)",
"default": "0"
},
{
"name": "TransientResinUseCount",
"type": "input-text",
"label": "须臾树脂刷取次数 (请输入数字)",
"default": "0"
},
{
"name": "FragileResinUseCount",
"type": "input-text",
"label": "脆弱树脂刷取次数 (请输入数字)",
"default": "0"
},
{
"name": "AutoArtifactSalvage",
"type": "checkbox",
"label": "结束后自动分解圣遗物",
"default": true
},
{
"name": "MaxArtifactStar",
"type": "select",
"label": "需要快速分解圣遗物的最高星级",
"options": [
"1",
"2",
"3",
"4",
"5"
],
"default": "4"
},
{
"name": "FightEndDelay",
"type": "input-text",
"label": "战斗完成后等待时间 (秒) (任务结束后的额外延迟)",
"default": "5"
},
{
"name": "DomainRoundNum",
"type": "input-text",
"label": "秘境刷取轮数 (0表示9999轮刷取至体力耗尽或达到指定次数)",
"default": "0"
},
{
"name": "SundaySelectedValue",
"type": "select",
"label": "周日副本序号 (限时副本全开时用)",
"options": [
"",
"1",
"2",
"3"
],
"default": ""
},
{
"name": "EnableDebug",
"type": "checkbox",
"label": "启用调试模式 (将在日志中显示详细参数信息)",
"default": false
}
]