feat(AutoPlanDomain): 添加树脂类型配置和使用优先级功能

- 在配置文件中新增树脂类型名称数组,支持原粹树脂、浓缩树脂、须臾树脂、脆弱树脂
- 实现动态初始化物理树脂配置,从配置中读取树脂类型并生成默认配置
- 修改秘境执行逻辑,只对启用的树脂类型进行优先级排序
- 更新树脂使用优先级判断条件,启用树脂优先级配置功能
- 更新 README 文档,添加树脂使用顺序配置说明和示例
- 在计划配置语法中添加 physical 配置项说明
This commit is contained in:
yan
2026-02-13 03:33:13 +08:00
parent bf8d3e7827
commit bcd7ef83aa
3 changed files with 40 additions and 22 deletions

View File

@@ -42,21 +42,22 @@
**字段详解**
| 位置 | 字段 | 是否必填 | 说明 | 示例 |
|:---:|:---:|:---:|:--------------------------------------:|:-----------------------:|
| 1 | 队伍名称 | 可选 | BetterGI 中已保存的队伍名称(用于切换队伍) | 速刷 / 雷国 / 国家队 |
| 2 | 秘境名称/刷取物品名称 | **必填** | 与 BetterGI 自动秘境识别的名称保持一致 | 苍白的遗荣 / 炽烈的炎之魔女 / 辰砂往生录 |
| 3 | 刷几轮 | 可选 | 整数,执行几轮(每轮 = 1次完整秘境 | 3 / 5 / 10 |
| 4 | 限时/周日 | 可选 | 1=周一~周六可用、2=周日可用、3=仅周日、留空=不限制 | 1 / 2 / 3 |
| 5 | 周几执行(0-6) | 可选 | 0=周日,1=周一,...,6=周六;可多选按`/`分割,不填=每天都可执行 | 0/3,3 |
| 6 | 执行顺序 | 可选 | 数字越大越优先执行(同时间点先跑优先级高的) | 9 / 5 / 1 |
| 位置 | 字段 | 是否必填 | 说明 | 示例 |
|:--:|:-----------:|:---:|:--------------------------------------------:|:-----------------------:|
| 1 | 队伍名称 | 可选 | BetterGI 中已保存的队伍名称(用于切换队伍) | 速刷 / 雷国 / 国家队 |
| 2 | 秘境名称/刷取物品名称 | **必填** | 与 BetterGI 自动秘境识别的名称保持一致 | 苍白的遗荣 / 炽烈的炎之魔女 / 辰砂往生录 |
| 3 | 刷几轮 | 可选 | 整数,执行几轮(每轮 = 1次完整秘境 | 3 / 5 / 10 |
| 4 | 限时/周日 | 可选 | 1=周一~周六可用、2=周日可用、3=仅周日、留空=不限制 | 1 / 2 / 3 |
| 5 | 周几执行(0-6) | 可选 | 0=周日,1=周一,...,6=周六;可多选按`/`分割,不填=每天都可执行 | 0/3,3 |
| 6 | 树脂使用顺序 | 可选 | 原粹树脂,浓缩树脂,须臾树脂,脆弱树脂`/`分割,不填=默认执行 原粹树脂 | 原粹树脂/浓缩树脂,须臾树脂 |
| 7 | 执行顺序 | 可选 | 数字越大越优先执行(同时间点先跑优先级高的) | 9 / 5 / 1 |
**配置示例**
```
速刷|苍白的遗荣|3|1|0/3|9, # 优先级最高,周日,周三刷3轮遗荣
国家队|炽烈的炎之魔女|5|||5, # 优先级次之每天刷5轮魔女
雷国|无想之刃狭间|2|2|0|2 # 只在周日刷,优先级较低
速刷|苍白的遗荣|3|1|0/3||9, # 优先级最高,周日,周三刷3轮遗荣
国家队|炽烈的炎之魔女|5||||5, # 优先级次之每天刷5轮魔女
雷国|无想之刃狭间|2|2|0|浓缩树脂/原粹树脂|2 # 只在周日刷,优先使用浓缩树脂后使用原粹树脂,优先级较低
```
(注意:最后一条也可以不带逗号)
### 计划配置语法config/domain_config.json 配置)
@@ -66,6 +67,12 @@
"order": 1, // 顺序值
"days": [0],// 执行日期
"autoFight": {
"physical": [
{"order": 0, "name": "原粹树脂", "open": true},
{"order": 1, "name": "浓缩树脂", "open": false},
{"order": 2, "name": "须臾树脂", "open": false},
{"order": 3, "name": "脆弱树脂", "open": false}
],//树脂开启和使用顺序
"domainName": undefined,//秘境名称
"partyName": undefined,//队伍名称
"sundaySelectedValue": undefined,//周日|限时选择的值

View File

@@ -30,6 +30,7 @@ const config = {
physical: {
min: 20,//最小体力
current: 0,//当前体力
names: ["原粹树脂", "浓缩树脂", "须臾树脂", "脆弱树脂"]
}
},
//
@@ -174,8 +175,8 @@ async function initConfig() {
// config.user.physical.min = physical.min
// 初始化uid
config.user.uid = await ocrUid()
const bgi_tools_token = settings.bgi_tools_token||"Authorization= "
const list = Array.from(bgi_tools_token.split("=")).map(item=>item.trim());
const bgi_tools_token = settings.bgi_tools_token || "Authorization= "
const list = Array.from(bgi_tools_token.split("=")).map(item => item.trim());
config.bgi_tools.token.name = list[0]
config.bgi_tools.token.value = list[1]
config.bgi_tools.api.httpPullJsonConfig = settings.bgi_tools_http_pull_json_config

View File

@@ -11,12 +11,22 @@ import {ocrPhysical} from "./utils/physical";
*/
async function autoDomain(autoFight) {
//定死做预留冗余 先不实现 不能指定次数 只能指定启用
let physical_domain = autoFight?.physical || [
{order: 0, name: "原粹树脂", count: 1, open: true},
{order: 1, name: "浓缩树脂", count: 0, open: false},
{order: 2, name: "须臾树脂", count: 0, open: false},
{order: 3, name: "脆弱树脂", count: 0, open: false},
]
let physical_domain = autoFight?.physical
// || [
// {order: 0, name: "原粹树脂", count: 1, open: true},
// {order: 1, name: "浓缩树脂", count: 0, open: false},
// {order: 2, name: "须臾树脂", count: 0, open: false},
// {order: 3, name: "脆弱树脂", count: 0, open: false},
// ]
if (!physical_domain) {
const names = config.user.physical.names;
physical_domain = []
names.forEach((name, index) => {
physical_domain.push({order: index, name: name, open: index === 0})
})
}
physical_domain.sort((a, b) => a.order - b.order)
// 不包含原粹树脂的和
const noOriginalSum = physical_domain.filter(item => item.name.trim() !== "原粹树脂")
@@ -24,7 +34,7 @@ async function autoDomain(autoFight) {
// 只包含原粹树脂的和
const originalSum = physical_domain.find(item => item.name?.trim() === "原粹树脂")
.map(item => item.open ? 1 : 0).reduce((acc, curr) => acc + curr, 0);
const resinPriorityList = physical_domain.map(item => item.name?.trim())
const resinPriorityList = physical_domain.filter(item => item.open).map(item => item.name?.trim())
// /** 树脂使用优先级列表 */
// resinPriorityList: string[];
// /** 使用原粹树脂次数 */
@@ -49,8 +59,8 @@ async function autoDomain(autoFight) {
domainParam.autoArtifactSalvage = false
//关闭榨干原粹树脂
domainParam.specifyResinUse = true
//配置原粹树脂使用优先级
if (false && resinPriorityList.length > 0) {
//配置树脂使用优先级
if (resinPriorityList.length > 0) {
domainParam.resinPriorityList = resinPriorityList
}
// log.debug(`开始执行秘境任务`)