mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-04-22 22:10:02 +08:00
AutoDomainCustomizable - 0.10 (#3108)
* V0.10 * 调整战斗策略设置方式 * 在显示日志中新增说明 * 读我文件排版 * 调试模式新增显示传入参数 * 修正刷完樹脂模式 修正刷完樹脂模式的邏輯 * 修正設置文字 修正刷完模式的文字描述
This commit is contained in:
@@ -10,9 +10,11 @@
|
||||
遇到无法排除的问题,请将日志去除敏感资讯(如帐户名称)后,至github提issue上传。
|
||||
本JS脚本修改者没有QQ帐号。
|
||||
|
||||
**强烈建议**先以调试模式运行后再上传日志。
|
||||
|
||||
没有附上日志纪录的问题将被 **无视** 。
|
||||
|
||||
日志预设位置在 BetterGI\\log\\
|
||||
日志预设位置在`BetterGI\log\`。
|
||||
|
||||
---
|
||||
|
||||
@@ -41,6 +43,8 @@
|
||||
* 请在下拉菜单中选择目标副本。
|
||||
* **注意**:【角色天赋】、【武器升级】、【圣遗物】三类选项**互斥** (只能选其中一个),若同时选择多项,脚本将报错停止。
|
||||
|
||||
<br>
|
||||
|
||||
* **树脂策略配置**
|
||||
|
||||
* **刷取至树脂耗尽 (最高优先级)**
|
||||
@@ -48,6 +52,8 @@
|
||||
* 若启用此选项,脚本将**忽略**下方所有具体次数的设定。
|
||||
* 依照配置中 **树脂刷取顺序** 栏位中的树脂种类依序刷取至耗尽,未填写在顺序栏位中的树脂 **不会** 进行刷取。
|
||||
|
||||
<br>
|
||||
|
||||
* **指定每种树脂刷取数量**
|
||||
|
||||
* 仅在“刷取至树脂耗尽”**关闭** 时生效。
|
||||
@@ -66,34 +72,47 @@
|
||||
* **适用场景**:仅在确认游戏内有“限时全开”或“精通移涌”活动时使用。
|
||||
* **警告**:若当日未开放该素材且无活动,勾选此项将会导致刷错素材。
|
||||
|
||||
<br>
|
||||
|
||||
* **自动切换到指定队伍**
|
||||
|
||||
* 输入预设队伍名称(需与游戏内完全一致,支持正则表达式),留空则不切换。
|
||||
* 输入队伍名称(需与游戏内完全一致,支持正则表达式),留空则不切换。
|
||||
|
||||
<br>
|
||||
|
||||
* **秘境刷取轮数**
|
||||
|
||||
* `0`:刷到体力耗尽或达到指定树脂次数(默认)。
|
||||
* `数字`:刷满该场数后强制停止(无论是否还有体力)。
|
||||
|
||||
<br>
|
||||
|
||||
* **战斗完成后等待时间**
|
||||
|
||||
* 设置战斗结算后的缓冲秒数(默认 5 秒),防止因电脑读取卡顿导致过早退出或识别失败。
|
||||
|
||||
<br>
|
||||
|
||||
* **结束后自动分解圣遗物**
|
||||
|
||||
* **功能**:开启后,任务结束前会自动执行圣遗物分解逻辑。
|
||||
* **分解星级**:可指定分解 **1~4 星** 的圣遗物(需配合下拉菜单设置)。
|
||||
|
||||
<br>
|
||||
|
||||
* **启用调试模式**
|
||||
|
||||
* 开启后会输出更多详细日志信息,用于脚本出错时排查问题。
|
||||
|
||||
* **战斗策略文件名**
|
||||
<br>
|
||||
|
||||
* **功能**:指定使用的战斗策略文件。
|
||||
* **位置**:文件需放置在 `BetterGI/User/AutoFight/` 目录下。
|
||||
* **用法**:填写文件名即可,无需写 `.txt` 后缀(如填写 `胡桃`,实际查找 `User/AutoFight/胡桃.txt`)。
|
||||
* **留空**:使用 BetterGI 默认战斗策略。
|
||||
* **指定战斗策略**
|
||||
|
||||
* **功能**:指定使用的战斗策略文件,默认根据队伍自动选择战斗策略。
|
||||
* **策略文件存放位置**:`BetterGI/User/AutoFight/`
|
||||
* **用法**:在下拉选单中选择指定战斗策略,并在战斗策略名称栏位中填写文件名,无需写 `.txt` 后缀(如填写 `胡桃`,实际查找 `User/AutoFight/胡桃.txt`)。
|
||||
|
||||
<br>
|
||||
|
||||
---
|
||||
|
||||
@@ -124,13 +143,21 @@
|
||||
|
||||
## 📜 更新日志
|
||||
|
||||
|
||||
### v0.10 - [RJFAC](https://github.com/RJFAC)
|
||||
* 调整战斗策略设置方式
|
||||
* 在显示日志中新增说明
|
||||
* 读我文件排版
|
||||
* 调试模式新增显示传入参数
|
||||
|
||||
### v0.8 - [风铃](https://github.com/zephyr-bell)
|
||||
* 支持自定义战斗策略文件
|
||||
|
||||
---
|
||||
|
||||
## 💻 关于作者
|
||||
|
||||
## 👨💻 关于作者
|
||||
|
||||
* **原作者**: [huiyadanli](https://github.com/huiyadanli), iris, 霁
|
||||
* **修改者**: [RJFAC](https://github.com/RJFAC), [风铃](https://github.com/zephyr-bell)
|
||||
* **辅助生成**: AI
|
||||
* **辅助生成**: AI
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// Version: 1.1
|
||||
// Version: 1.7
|
||||
// Modified Date: 2026-04-11
|
||||
(async function () {
|
||||
// =========================================================================
|
||||
// 0. 动态加载数据 (基于 Genshin_Domains_SC_Live_Source.json)
|
||||
@@ -8,40 +9,30 @@
|
||||
|
||||
try {
|
||||
let rawContent = file.ReadTextSync(DB_FILENAME);
|
||||
|
||||
if (!rawContent) {
|
||||
throw new Error("读取文件返回空内容");
|
||||
}
|
||||
if (!rawContent) throw new Error("读取文件返回空内容");
|
||||
|
||||
let sourceData = JSON.parse(rawContent);
|
||||
|
||||
if (!sourceData || !sourceData.domains) {
|
||||
throw new Error("JSON文件格式不正确,缺少 domains 字段");
|
||||
}
|
||||
if (!sourceData || !sourceData.domains) throw new Error("JSON文件格式不正确,缺少 domains 字段");
|
||||
|
||||
// --- 1. 转换角色天赋素材 ---
|
||||
// 转换角色天赋素材
|
||||
if (sourceData.domains.talent_books) {
|
||||
sourceData.domains.talent_books.forEach(item => {
|
||||
let domain = item.domain_name_sc;
|
||||
let schedule = item.schedule;
|
||||
if (schedule.Mon_Thu) MATERIAL_DB[schedule.Mon_Thu] = { domain: domain, idx: 1 };
|
||||
if (schedule.Tue_Fri) MATERIAL_DB[schedule.Tue_Fri] = { domain: domain, idx: 2 };
|
||||
if (schedule.Wed_Sat) MATERIAL_DB[schedule.Wed_Sat] = { domain: domain, idx: 3 };
|
||||
if (item.schedule.Mon_Thu) MATERIAL_DB[item.schedule.Mon_Thu] = { domain: domain, idx: 1 };
|
||||
if (item.schedule.Tue_Fri) MATERIAL_DB[item.schedule.Tue_Fri] = { domain: domain, idx: 2 };
|
||||
if (item.schedule.Wed_Sat) MATERIAL_DB[item.schedule.Wed_Sat] = { domain: domain, idx: 3 };
|
||||
});
|
||||
}
|
||||
|
||||
// --- 2. 转换武器升级素材 ---
|
||||
// 转换武器升级素材
|
||||
if (sourceData.domains.weapon_materials) {
|
||||
sourceData.domains.weapon_materials.forEach(item => {
|
||||
let domain = item.domain_name_sc;
|
||||
let schedule = item.schedule;
|
||||
if (schedule.Mon_Thu) MATERIAL_DB[schedule.Mon_Thu] = { domain: domain, idx: 1 };
|
||||
if (schedule.Tue_Fri) MATERIAL_DB[schedule.Tue_Fri] = { domain: domain, idx: 2 };
|
||||
if (schedule.Wed_Sat) MATERIAL_DB[schedule.Wed_Sat] = { domain: domain, idx: 3 };
|
||||
if (item.schedule.Mon_Thu) MATERIAL_DB[item.schedule.Mon_Thu] = { domain: domain, idx: 1 };
|
||||
if (item.schedule.Tue_Fri) MATERIAL_DB[item.schedule.Tue_Fri] = { domain: domain, idx: 2 };
|
||||
if (item.schedule.Wed_Sat) MATERIAL_DB[item.schedule.Wed_Sat] = { domain: domain, idx: 3 };
|
||||
});
|
||||
}
|
||||
|
||||
// --- 3. 转换圣遗物 (type: 'artifact') ---
|
||||
// 转换圣遗物
|
||||
if (sourceData.domains.artifacts) {
|
||||
sourceData.domains.artifacts.forEach(item => {
|
||||
let domain = item.domain_name_sc;
|
||||
@@ -49,9 +40,7 @@
|
||||
MATERIAL_DB[key] = { domain: domain, type: "artifact" };
|
||||
});
|
||||
}
|
||||
|
||||
log.info(`【系统】成功加载外部数据文件: ${DB_FILENAME},包含 ${Object.keys(MATERIAL_DB).length} 条记录`);
|
||||
|
||||
} catch (e) {
|
||||
log.error(`【致命错误】无法读取或解析 ${DB_FILENAME}`);
|
||||
log.error(`错误详情: ${e.message}`);
|
||||
@@ -59,76 +48,102 @@
|
||||
}
|
||||
|
||||
// =========================================================================
|
||||
// 1. 读取并验证用户设置 (防呆机制)
|
||||
// 1. 读取并验证用户设置 (全 input-text 防呆机制)
|
||||
// =========================================================================
|
||||
let userConfig = settings;
|
||||
let enableDebug = userConfig.EnableDebug;
|
||||
|
||||
// --- 调试模式输出所有使用者设定参数 ---
|
||||
if (enableDebug) {
|
||||
log.info("[DEBUG] ====== 收到使用者设定参数 (User Config) ======");
|
||||
for (let key in userConfig) {
|
||||
log.info(`[DEBUG] ${key}: ${userConfig[key]}`);
|
||||
}
|
||||
log.info("[DEBUG] ==============================================");
|
||||
}
|
||||
|
||||
let pForceRunMode = userConfig.ForceRunMode;
|
||||
let pRunUntilDepleted = userConfig.RunUntilResinDepleted;
|
||||
let pAutoArtifactSalvage = userConfig.AutoArtifactSalvage;
|
||||
let pMaxArtifactStar = userConfig.MaxArtifactStar || "4";
|
||||
|
||||
// --- 1.1 秘境目标防呆 ---
|
||||
let pTalent = userConfig.TargetTalentMaterialName;
|
||||
let pWeapon = userConfig.TargetWeaponMaterialName;
|
||||
let pArtifact = userConfig.TargetArtifactName;
|
||||
let pForceRunMode = userConfig.ForceRunMode;
|
||||
|
||||
let selectedCount = (pTalent ? 1 : 0) + (pWeapon ? 1 : 0) + (pArtifact ? 1 : 0);
|
||||
|
||||
if (selectedCount === 0) {
|
||||
log.error("【配置错误】您未选择任何素材!请在天赋、武器或圣遗物中选择一项。");
|
||||
return;
|
||||
}
|
||||
|
||||
if (selectedCount > 1) {
|
||||
log.error("【配置冲突】您同时选择了多种类型的素材!请只保留一项,将其余两项设为空。");
|
||||
return;
|
||||
}
|
||||
|
||||
let pTargetMaterial = pTalent || pWeapon || pArtifact;
|
||||
let pPartyName = userConfig.PartyName || "";
|
||||
let pRunUntilDepleted = userConfig.RunUntilResinDepleted;
|
||||
let pAutoArtifactSalvage = userConfig.AutoArtifactSalvage;
|
||||
let pMaxArtifactStar = userConfig.MaxArtifactStar || "4";
|
||||
|
||||
let pDomainName = "";
|
||||
let pSundaySelectedValue = "";
|
||||
let pCombatStrategyFile = userConfig.CombatStrategyFile || "";
|
||||
|
||||
// --- 数值读取与防呆验证 ---
|
||||
// --- 1.2 队伍名称防呆 (input-text) ---
|
||||
let pPartyName = (userConfig.PartyName || "").toString().trim();
|
||||
if (pPartyName !== "") {
|
||||
try {
|
||||
new RegExp(pPartyName); // 测试正则表达式是否合法
|
||||
} catch (e) {
|
||||
log.warn(`【配置警告】队伍名称的正则表达式语法错误: ${pPartyName},已重置为空 (不执行队伍切换)。`);
|
||||
pPartyName = "";
|
||||
}
|
||||
}
|
||||
|
||||
// --- 1.3 战斗策略防呆 (select + input-text) ---
|
||||
let pCombatStrategyType = (userConfig.CombatStrategyType || "").toString().trim();
|
||||
let pSpecifiedCombatStrategy = (userConfig.SpecifiedCombatStrategy || "").toString().trim();
|
||||
let pCombatStrategyPath = "";
|
||||
|
||||
if (pCombatStrategyType === "指定战斗策略") {
|
||||
if (!pSpecifiedCombatStrategy) {
|
||||
log.warn("【配置警告】您选择了'指定战斗策略'但未填写策略名称,系统将自动退回'根据队伍自动选择'。");
|
||||
} else if (/[\\/:*?"<>|]/.test(pSpecifiedCombatStrategy)) {
|
||||
log.warn(`【配置警告】指定的战斗策略名称包含非法字元: ${pSpecifiedCombatStrategy},系统将自动退回'根据队伍自动选择'。`);
|
||||
} else {
|
||||
pCombatStrategyPath = pSpecifiedCombatStrategy;
|
||||
}
|
||||
}
|
||||
|
||||
// --- 1.4 各项数值与树脂防呆 (input-text 与 select) ---
|
||||
let pOriginalAmount = parseInt(userConfig.OriginalResinAmount) || 0;
|
||||
let pOriginal40 = Math.floor(pOriginalAmount / 40);
|
||||
let pOriginal20 = Math.floor((pOriginalAmount % 40) / 20);
|
||||
|
||||
let pCondensed = parseInt(userConfig.CondensedResinUseCount) || 0;
|
||||
let pTransient = parseInt(userConfig.TransientResinUseCount) || 0;
|
||||
|
||||
// 脆弱树脂 (手动输入框防呆)
|
||||
// 脆弱树脂 (input-text)
|
||||
let pFragileRaw = parseInt(userConfig.FragileResinUseCount);
|
||||
let pFragile = (isNaN(pFragileRaw) || pFragileRaw < 0) ? 0 : pFragileRaw;
|
||||
if (userConfig.FragileResinUseCount && (isNaN(pFragileRaw) || pFragileRaw < 0)) {
|
||||
log.warn("【配置警告】脆弱树脂刷取数量输入无效或为负数,已自动重置为 0。");
|
||||
}
|
||||
|
||||
// 秘境轮数 (手动输入框防呆)
|
||||
// 秘境轮数 (input-text)
|
||||
let pDomainRoundNumRaw = parseInt(userConfig.DomainRoundNum);
|
||||
let pDomainRoundNum = (isNaN(pDomainRoundNumRaw) || pDomainRoundNumRaw < 0) ? 0 : pDomainRoundNumRaw;
|
||||
if (userConfig.DomainRoundNum && (isNaN(pDomainRoundNumRaw) || pDomainRoundNumRaw < 0)) {
|
||||
log.warn("【配置警告】秘境刷取轮数输入无效,已自动重置为 0 (无限轮直至树脂耗尽)。");
|
||||
}
|
||||
|
||||
// 战斗后等待时间 (手动输入框防呆)
|
||||
// 战斗后等待时间 (input-text)
|
||||
let pFightEndDelayRaw = parseInt(userConfig.FightEndDelay);
|
||||
let pFightEndDelay = (isNaN(pFightEndDelayRaw) || pFightEndDelayRaw < 0) ? 5 : pFightEndDelayRaw;
|
||||
if (userConfig.FightEndDelay && (isNaN(pFightEndDelayRaw) || pFightEndDelayRaw < 0)) {
|
||||
log.warn("【配置警告】战斗完成后等待时间输入无效,已恢复默认值 5 秒。");
|
||||
}
|
||||
|
||||
// 树脂刷取顺序防呆 (正则过滤与去重)
|
||||
// 树脂刷取顺序 (input-text)
|
||||
let rawOrderStr = (userConfig.ResinUsageOrder || "").toString().trim();
|
||||
if (/[^12345]/.test(rawOrderStr) && !pRunUntilDepleted) {
|
||||
if (/[^12345]/.test(rawOrderStr)) {
|
||||
log.warn(`【配置警告】树脂刷取顺序包含无效字符,非 1~5 的内容已被自动过滤。`);
|
||||
}
|
||||
|
||||
// 仅保留1~5,并去除重复数字
|
||||
let pOrderStr = [...new Set(rawOrderStr.replace(/[^12345]/g, '').split(''))].join('');
|
||||
if (rawOrderStr.replace(/[^12345]/g, '').length !== pOrderStr.length && !pRunUntilDepleted) {
|
||||
if (rawOrderStr.replace(/[^12345]/g, '').length !== pOrderStr.length) {
|
||||
log.warn(`【配置警告】树脂刷取顺序中存在重复设定的数字,已自动去重处理为: ${pOrderStr}`);
|
||||
}
|
||||
|
||||
@@ -141,7 +156,6 @@
|
||||
else if (char === '5') priorityList.push("脆弱树脂");
|
||||
}
|
||||
|
||||
// 零动作警告
|
||||
if (!pRunUntilDepleted && pOriginalAmount === 0 && pCondensed === 0 && pTransient === 0 && pFragile === 0 && pDomainRoundNum === 0) {
|
||||
log.warn("【配置警告】您未设置任何树脂消耗数量,也未限制秘境轮数!脚本可能进本后无事可做。");
|
||||
}
|
||||
@@ -151,6 +165,8 @@
|
||||
// =========================================================================
|
||||
const WEEK_MAP = ["日", "一", "二", "三", "四", "五", "六"];
|
||||
let materialInfo = MATERIAL_DB[pTargetMaterial];
|
||||
let pDomainName = "";
|
||||
let pSundaySelectedValue = "";
|
||||
|
||||
if (!materialInfo) {
|
||||
log.error(`【数据错误】无法在数据库中找到项目:${pTargetMaterial}`);
|
||||
@@ -159,7 +175,6 @@
|
||||
|
||||
if (materialInfo.type === 'artifact') {
|
||||
pDomainName = materialInfo.domain;
|
||||
pSundaySelectedValue = "";
|
||||
log.info(`【圣遗物模式】目标:${pTargetMaterial}`);
|
||||
} else {
|
||||
let requiredIdx = materialInfo.idx;
|
||||
@@ -169,13 +184,11 @@
|
||||
let serverOffsetMs = ServerTime.GetServerTimeZoneOffset();
|
||||
let utcNow = Date.now();
|
||||
let logicTimeMs = utcNow + serverOffsetMs - (4 * 60 * 60 * 1000);
|
||||
let logicDate = new Date(logicTimeMs);
|
||||
let dayOfWeek = logicDate.getUTCDay();
|
||||
let dayOfWeek = new Date(logicTimeMs).getUTCDay();
|
||||
let dayStr = WEEK_MAP[dayOfWeek];
|
||||
|
||||
if (enableDebug) {
|
||||
let serverTimeDate = new Date(utcNow + serverOffsetMs);
|
||||
log.info(`[DEBUG] 游戏服务器时间: ${serverTimeDate.toUTCString()}`);
|
||||
log.info(`[DEBUG] 游戏服务器时间: ${new Date(utcNow + serverOffsetMs).toUTCString()}`);
|
||||
}
|
||||
|
||||
let isDateOpen = (dayOfWeek === 0) ||
|
||||
@@ -194,63 +207,51 @@
|
||||
// =========================================================================
|
||||
// 3. 执行主流程
|
||||
// =========================================================================
|
||||
let taskParam = new AutoDomainParam(pDomainRoundNum);
|
||||
taskParam.DomainName = pDomainName;
|
||||
taskParam.PartyName = pPartyName;
|
||||
taskParam.AutoArtifactSalvage = pAutoArtifactSalvage;
|
||||
taskParam.MaxArtifactStar = pMaxArtifactStar;
|
||||
taskParam.SundaySelectedValue = pSundaySelectedValue;
|
||||
|
||||
// 处理战斗策略路径
|
||||
let pCombatStrategyPath = "";
|
||||
if (pCombatStrategyFile) {
|
||||
// 自动补充 .txt 后缀
|
||||
if (!pCombatStrategyFile.toLowerCase().endsWith(".txt")) {
|
||||
pCombatStrategyFile += ".txt";
|
||||
// 调用底层方法以支持路径转换,并将回传值賦予屬性
|
||||
taskParam.CombatStrategyPath = taskParam.SetCombatStrategyPath(pCombatStrategyPath);
|
||||
|
||||
taskParam.SpecifyResinUse = !pRunUntilDepleted;
|
||||
|
||||
// 樹脂數量與警告邏輯
|
||||
if (!pRunUntilDepleted) {
|
||||
taskParam.OriginalResin20UseCount = pOriginal20;
|
||||
taskParam.OriginalResin40UseCount = pOriginal40;
|
||||
taskParam.OriginalResinUseCount = 0;
|
||||
taskParam.CondensedResinUseCount = pCondensed;
|
||||
taskParam.TransientResinUseCount = pTransient;
|
||||
taskParam.FragileResinUseCount = pFragile;
|
||||
|
||||
if (pOrderStr === "") {
|
||||
log.warn("【配置警告】树脂刷取顺序完全留空!在指定次数模式下,脚本将不会消耗任何树脂。");
|
||||
} else {
|
||||
if (pCondensed > 0 && !pOrderStr.includes('1')) log.warn("【配置警告】浓缩树脂数量大于0,但未配置在刷取顺序(1)中,将被底层忽略!");
|
||||
if (pOriginal40 > 0 && !pOrderStr.includes('2')) log.warn("【配置警告】原粹树脂需要消耗40体力,但未配置在刷取顺序(2)中,将被底层忽略!");
|
||||
if (pOriginal20 > 0 && !pOrderStr.includes('3')) log.warn("【配置警告】原粹树脂需要消耗20体力,但未配置在刷取顺序(3)中,将被底层忽略!");
|
||||
if (pTransient > 0 && !pOrderStr.includes('4')) log.warn("【配置警告】须臾树脂数量大于0,但未配置在刷取顺序(4)中,将被底层忽略!");
|
||||
if (pFragile > 0 && !pOrderStr.includes('5')) log.warn("【配置警告】脆弱树脂数量大于0,但未配置在刷取顺序(5)中,将被底层忽略!");
|
||||
}
|
||||
pCombatStrategyPath = `User/AutoFight/${pCombatStrategyFile}`;
|
||||
log.info(`【战斗策略】使用战斗策略:${pCombatStrategyFile}`);
|
||||
} else {
|
||||
log.info(`【战斗策略】使用默认策略`);
|
||||
if (pOrderStr === "") {
|
||||
log.warn("【配置警告】树脂刷取顺序完全留空!在耗尽模式下,脚本将不会消耗任何树脂。");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 統一由 priorityList 決定刷取順序 (包含耗盡模式)
|
||||
if (priorityList.length > 0) {
|
||||
taskParam.SetResinPriorityList(...priorityList);
|
||||
} else {
|
||||
taskParam.SetResinPriorityList("");
|
||||
}
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
let taskParam = new AutoDomainParam(pDomainRoundNum);
|
||||
taskParam.DomainName = pDomainName;
|
||||
taskParam.PartyName = pPartyName;
|
||||
taskParam.AutoArtifactSalvage = pAutoArtifactSalvage;
|
||||
taskParam.MaxArtifactStar = pMaxArtifactStar;
|
||||
taskParam.SundaySelectedValue = pSundaySelectedValue;
|
||||
taskParam.CombatStrategyPath = pCombatStrategyPath;
|
||||
|
||||
taskParam.SpecifyResinUse = !pRunUntilDepleted;
|
||||
|
||||
if (!pRunUntilDepleted) {
|
||||
// 赋值各类型树脂次数
|
||||
taskParam.OriginalResin20UseCount = pOriginal20;
|
||||
taskParam.OriginalResin40UseCount = pOriginal40;
|
||||
taskParam.OriginalResinUseCount = 0; // 核心逻辑已改用 20/40 独立计算,此项设为0
|
||||
taskParam.CondensedResinUseCount = pCondensed;
|
||||
taskParam.TransientResinUseCount = pTransient;
|
||||
taskParam.FragileResinUseCount = pFragile;
|
||||
|
||||
// 逻辑冲突警告检查
|
||||
if (pOrderStr === "") {
|
||||
log.warn("【配置警告】树脂刷取顺序完全留空!在指定次数模式下,脚本将不会消耗任何树脂。");
|
||||
} else {
|
||||
if (pCondensed > 0 && !pOrderStr.includes('1')) log.warn("【配置警告】浓缩树脂数量大于0,但未配置在刷取顺序(1)中,将被底层忽略!");
|
||||
if (pOriginal40 > 0 && !pOrderStr.includes('2')) log.warn("【配置警告】原粹树脂需要消耗40体力,但未配置在刷取顺序(2)中,将被底层忽略!");
|
||||
if (pOriginal20 > 0 && !pOrderStr.includes('3')) log.warn("【配置警告】原粹树脂需要消耗20体力,但未配置在刷取顺序(3)中,将被底层忽略!");
|
||||
if (pTransient > 0 && !pOrderStr.includes('4')) log.warn("【配置警告】须臾树脂数量大于0,但未配置在刷取顺序(4)中,将被底层忽略!");
|
||||
if (pFragile > 0 && !pOrderStr.includes('5')) log.warn("【配置警告】脆弱树脂数量大于0,但未配置在刷取顺序(5)中,将被底层忽略!");
|
||||
}
|
||||
|
||||
// 传入自定义优先级
|
||||
if (priorityList.length > 0) {
|
||||
taskParam.SetResinPriorityList(...priorityList);
|
||||
} else {
|
||||
// 若留空,传递空字串防止报错
|
||||
taskParam.SetResinPriorityList("");
|
||||
}
|
||||
} else {
|
||||
taskParam.SetResinPriorityList("浓缩树脂", "原粹树脂");
|
||||
}
|
||||
|
||||
await dispatcher.RunAutoDomainTask(taskParam);
|
||||
|
||||
if (pFightEndDelay > 0) {
|
||||
@@ -260,6 +261,24 @@
|
||||
break;
|
||||
} catch (ex) {
|
||||
let msg = ex.message || "";
|
||||
|
||||
// --- 战斗策略档案不存在的降级重试逻辑 ---
|
||||
if (msg.includes("战斗脚本文件不存在")) {
|
||||
if (taskParam.CombatStrategyPath && taskParam.CombatStrategyPath !== "") {
|
||||
log.warn(`[脚本] 找不到指定的战斗策略档案!`);
|
||||
log.warn(`[脚本] 已触发降级机制:退回【根据队伍自动选择】模式,3 秒后重新启动任务...`);
|
||||
|
||||
// 调用底层方法正确切换为目录路径,并将回传值賦予屬性
|
||||
taskParam.CombatStrategyPath = taskParam.SetCombatStrategyPath("");
|
||||
|
||||
await sleep(3000);
|
||||
continue;
|
||||
} else {
|
||||
log.error("[脚本] 自动匹配战斗脚本失败:请检查 User/AutoFight 目录下是否有 txt 脚本,且脚本内角色是否符合当前队伍。");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (msg.includes("背包物品已满") || msg.includes("未检测到秘境结束")) {
|
||||
log.warn(`[脚本] 任务可能已完成,但检测到: ${msg}`);
|
||||
break;
|
||||
@@ -279,4 +298,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
})();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "传送并自动秘境(增强版)",
|
||||
"version": "0.8",
|
||||
"version": "0.10",
|
||||
"bgi_version": "0.57.0",
|
||||
"description": "BetterGI自带脚本的增强版,用于传送后并执行自动秘境。秘境中角色死亡复活后继续回去战斗。支持自定义各项参数(如树脂设置、自动废弃圣遗物、轮数设置等)与周期性素材刷取。(本脚本由AI辅助生成)",
|
||||
"authors": [
|
||||
|
||||
@@ -92,16 +92,10 @@
|
||||
"label": "自动切换到指定队伍 (支持正则)",
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "CombatStrategyFile",
|
||||
"type": "input-text",
|
||||
"label": "战斗策略",
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "RunUntilResinDepleted",
|
||||
"type": "checkbox",
|
||||
"label": "刷取至树脂耗尽 (优先用原粹后用浓缩)",
|
||||
"label": "刷取至树脂耗尽 (依树脂刷取顺序)",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
@@ -150,6 +144,19 @@
|
||||
"options": ["1", "2", "3", "4"],
|
||||
"default": "4"
|
||||
},
|
||||
{
|
||||
"name": "CombatStrategyType",
|
||||
"type": "select",
|
||||
"label": "战斗策略选择",
|
||||
"options": ["根据队伍自动选择(指定策略无效)", "指定战斗策略"],
|
||||
"default": "根据队伍自动选择(指定策略无效)"
|
||||
},
|
||||
{
|
||||
"name": "SpecifiedCombatStrategy",
|
||||
"type": "input-text",
|
||||
"label": "指定战斗策略名称 (不含.txt)",
|
||||
"default": ""
|
||||
},
|
||||
{
|
||||
"name": "FightEndDelay",
|
||||
"type": "input-text",
|
||||
@@ -168,4 +175,4 @@
|
||||
"label": "启用调试模式",
|
||||
"default": false
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user