[圣遗物批量强化]功能优化,功能新增 (#1862)

* docs: 重命名

* refactor: 更新页面滚动高度计算逻辑

* feat: 添加圣遗物属性命中功能并优化强化逻辑

* feat: 月落银 版本需求降至 0.49.0

* feat:
优化圣遗物属性 待激活 属性适配
添加圣遗物首次筛选命中属性功能

* refactor: 移除测试

* docs: 更新圣遗物筛选默认配置说明
This commit is contained in:
云端客
2025-09-12 00:09:59 +08:00
committed by GitHub
parent 306b30d86c
commit 06fe0970bd
4 changed files with 164 additions and 65 deletions

View File

@@ -1,4 +1,4 @@
# 脚本名称:圣遗物批量强化
# 圣遗物批量强化
功能描述:打开背包页面、按照未满级和等级升序排列后对首个圣遗物进行循环强化直到达到你设置的最大等级后继续执行下一个。还可以设置强化多少个圣遗物。
@@ -15,25 +15,24 @@
4. **最大圣遗物强化个数**:支持设置需要强化的圣遗物数量。
5. **属性排序**:支持按属性排序,使用简称,格式使用`|`分隔。支持的简称如下:
| 简称 | 全称 | 简称 | 全称 |
|:--:|:----:|:-----:|:-------:|
| % | 百分比 | 物伤 | 物理伤害加成 |
| 生命 | 生命值 | 风伤 | 风元素伤害加成 |
| 防御 | 防御力 | 水伤 | 水元素伤害加成 |
| 攻击 | 攻击力 | 雷伤 | 雷元素伤害加成 |
| 治疗 | 治疗加成 | 岩伤 | 岩元素伤害加成 |
| 精通 | 元素精通 | 草伤 | 草元素伤害加成 |
| 暴率 | 暴击率 | 冰伤 | 冰元素伤害加成 |
| 爆率 | 暴击率 | 火伤 | 火元素伤害加成 |
| 暴伤 | 暴击伤害 | 充能 | 元素充能效率 |
| 爆伤 | 暴击伤害 | ~~无~~ | ~~无~~ |
| 简称 | 全称 | 简称 | 全称 |
|:----:|:----:|:----:|:----:|
| % | 百分比 | 物伤 | 物理伤害加成 |
| 生命 | 生命值 | 风伤 | 风元素伤害加成 |
| 防御 | 防御力 | 水伤 | 水元素伤害加成 |
| 攻击 | 攻击力 | 雷伤 | 雷元素伤害加成 |
| 治疗 | 治疗加成 | 岩伤 | 岩元素伤害加成 |
| 精通 | 元素精通 | 草伤 | 草元素伤害加成 |
| 暴率 | 暴击率 | 冰伤 | 冰元素伤害加成 |
| 爆率 | 暴击率 | 火伤 | 火元素伤害加成 |
| 暴伤 | 暴击伤害 | 充能 | 元素充能效率 |
| 爆伤 | 暴击伤害 | ~~无~~ | ~~无~~ |
**示例**`生命%` 等价于 `生命值%`,均表示生命值百分比。
**注意**
- `生命%|防御%|攻击%|治疗` 只生效前三个(`生命%|防御%|攻击%`)。
- 重复属性(如 `生命%|生命%|攻击%`)会自动去重,仅保留 `生命%|攻击%`
- 顺序为 `1|2|3`
- 顺序为 `1|2|3`
6. **圣遗物套装筛选**:支持按圣遗物套装筛选(如:`如雷|苍白`),使用模糊匹配,无次数限制。
@@ -81,31 +80,27 @@
8. **启用命中属性** (`enableAttributeHolyRelic`)
- 类型:复选框
- 描述:是否启用命中属性功能(实验功能)。
- 描述:是否启用命中属性功能(实验功能)。不支持在升序情况下使用。
- 默认:禁用
- **特别说明**:不支持在升序情况下使用 。
9. **启用自定义命中属性覆盖通用命中属性** (`coverAttributeHolyRelic`)
- 类型:复选框
- 描述:启用后,自定义命中属性将覆盖通用命中属性(以部件为单位)。若禁用,则仅使用自定义命中属性,不使用通用命中属性(实验功能)。
- **特别说明**:假设通用命中属性为 `@花*爆率*爆伤|@羽*爆率*爆伤|@沙*爆率*爆伤|@冠#爆率#爆伤&*爆率*爆伤|@杯#物伤#风伤#水伤#火伤#雷伤#岩伤#冰伤#草伤&*爆率*爆伤`
,自定义命中属性为 `@花*爆率`,启用此选项时,仅“花”部件的命中属性会被覆盖为 `@花*爆率`
,其他部件仍使用通用命中属性。若禁用此选项,则仅使用自定义命中属性(如 `@花*爆率`),完全忽略通用命中属性。
- 描述:启用后,自定义命中属性将覆盖通用命中属性(以部件为单位)。若禁用,则仅使用自定义命中属性,不使用通用命中属性(实验功能)。
**特别说明**:假设通用命中属性为 `@花*爆率*爆伤|@羽*爆率*爆伤|@沙*爆率*爆伤|@冠#爆率#爆伤&*爆率*爆伤|@杯#物伤#风伤#水伤#火伤#雷伤#岩伤#冰伤#草伤&*爆率*爆伤`,自定义命中属性为 `@花*爆率`,启用此选项时,仅“花”部件的命中属性会被覆盖为 `@花*爆率`,其他部件仍使用通用命中属性。若禁用此选项,则仅使用自定义命中属性(如 `@花*爆率`),完全忽略通用命中属性。
- 默认:启用
10. **通用命中属性** (`commonAttributeHolyRelic`)
- 类型:文本输入
- 描述:设置通用的命中属性,格式需遵循特定语法(实验功能)。
- **语法说明**
- 描述:设置通用的命中属性,格式需遵循特定语法(实验功能)。
**语法说明**
- `@`:表示部件,需使用以下部件简称或全称(两者均可):
| 简称 | 全称 |简称 | 全称 |
| 简称 | 全称 | 简称 | 全称 |
|:----:|:----:|:----:|:----:|
| 羽 | 死之羽 |花 | 生之花 |
| 羽毛 | 死之羽 |沙 | 时之沙 |
| 杯 | 空之杯 |冠 | 理之冠 |
| 羽 | 死之羽 | 花 | 生之花 |
| 羽毛 | 死之羽 | 沙 | 时之沙 |
| 杯 | 空之杯 | 冠 | 理之冠 |
| 杯子 | 空之杯 |
- `#`:表示主词条(如生命%、物伤)。主词条存在时不可忽略,需以 `&` 终止。
- `*`:表示副词条(如爆率、爆伤)。副词条可忽略终止符 `!`,但建议添加以提高清晰度。
- `|`:表示部件终止,多个部件时不可忽略。
@@ -122,88 +117,126 @@
11. **自定义命中属性** (`inputAttributeHolyRelic`)
- 类型:文本输入
- 描述:设置自定义的命中属性,格式直接参考通用命中属性(`commonAttributeHolyRelic`)的语法(实验功能)。
- **语法说明**:同 `commonAttributeHolyRelic` 的语法,支持使用“核心功能”中属性排序的简称表及部件简称或全称。
- 描述:设置自定义的命中属性,格式直接参考通用命中属性(`commonAttributeHolyRelic`)的语法(实验功能)。支持使用“核心功能”中属性排序的简称表及部件简称或全称。
- 默认:空
12. **启用自动排序** (`toSort`)
12. **启用筛选圣遗物自定义命中属性覆盖筛选圣遗物通用命中属性** (`coverSiftAttributeHolyRelic`) **[1.1.3 新增]**
- 类型:复选框
- 描述:启用后,自定义筛选圣遗物属性(`inputSiftAttributeHolyRelic`)将覆盖通用筛选圣遗物属性(`commonSiftAttributeHolyRelic`),以部件为单位。若禁用,则仅使用自定义筛选圣遗物属性,完全忽略通用筛选圣遗物属性(实验功能)。
**特别说明**:假设通用筛选属性为 `@花*爆率*爆伤|@羽*爆率*爆伤`,自定义筛选属性为 `@花*生命%`,启用此选项时,仅“花”部件的筛选属性会被覆盖为 `@花*生命%`,其他部件仍使用通用筛选属性。若禁用此选项,则仅使用自定义筛选属性(如 `@花*生命%`),完全忽略通用筛选属性。
**注意**:此配置仅用于强化前的第一次圣遗物筛选。
- 默认:启用
13. **启用筛选圣遗物满足所有指定的子属性命中条件** (`meetAllSiftAttributeHolyRelic`) **[1.1.3 新增]**
- 类型:复选框
- 描述:启用后,筛选圣遗物时将严格要求满足所有指定的子属性条件(实验功能)。若禁用,则筛选条件可能不要求全部子属性都满足。
**注意**:此配置仅用于强化前的第一次圣遗物筛选。
- 默认:关闭
14. **筛选圣遗物通用命中属性** (`commonSiftAttributeHolyRelic`) **[1.1.3 新增]**
- 类型:文本输入
- 描述:设置通用的圣遗物筛选属性,格式遵循与通用命中属性(`commonAttributeHolyRelic`)相同的语法(实验功能)。用于在强化前筛选符合条件的圣遗物。
**语法说明**:同 `commonAttributeHolyRelic`,支持使用“核心功能”中属性排序的简称表及部件简称或全称。
**示例**`@花*生命%*攻击|@杯#生命%#物伤&*生命%` 表示筛选“花”部件副词条包含生命%和攻击、“杯”部件主词条为生命%或物伤且副词条包含生命%的圣遗物。
**注意**:此配置仅用于强化前的第一次圣遗物筛选。
- 默认:`@花*爆率*爆伤|@羽*爆率*爆伤|@沙*爆率*爆伤|@冠#爆率#爆伤&*爆率*爆伤|@杯#物伤#风伤#水伤#火伤#雷伤#岩伤#冰伤#草伤&*爆率*爆伤`
15. **筛选圣遗物自定义命中属性** (`inputSiftAttributeHolyRelic`) **[1.1.3 新增]**
- 类型:文本输入
- 描述:设置自定义的圣遗物筛选属性,格式直接参考通用筛选圣遗物属性(`commonSiftAttributeHolyRelic`)的语法(实验功能)。用于在强化前筛选符合条件的圣遗物。
**语法说明**:同 `commonAttributeHolyRelic`,支持使用“核心功能”中属性排序的简称表及部件简称或全称。
**注意**:此配置仅用于强化前的第一次圣遗物筛选。
- 默认:空
16. **启用自动排序** (`toSort`)
- 类型:复选框
- 描述:是否启用自动排序功能。若禁用,以下排序相关配置无效。
- 默认:启用
13. **属性排序** (`sortAttribute`)
17. **属性排序** (`sortAttribute`)
- 类型:文本输入
- 描述:设置排序属性,使用“|”分隔,支持简称(如:`生命%|雷伤|充能|通用`)。
- 默认:空
14. **主排序** (`sortMain`)
18. **主排序** (`sortMain`)
- 类型:下拉菜单
- 描述:设置主排序方式。
- 选项:`升序``降序`
- 默认:`升序`
15. **辅助排序** (`sortAuxiliary`)
19. **辅助排序** (`sortAuxiliary`)
- 类型:下拉菜单
- 描述:设置辅助排序方式。
- 选项:`等级顺序``品质顺序`
- 默认:`等级顺序`
16. **启用筛选圣遗物开关** (`toSift`)
20. **启用筛选圣遗物开关** (`toSift`)
- 类型:复选框
- 描述:是否启用圣遗物筛选功能。若禁用,以下筛选相关配置无效。
- 默认:启用
17. **圣遗物筛选** (`suit`)
21. **圣遗物筛选** (`suit`)
- 类型:文本输入
- 描述:按圣遗物套装筛选,使用`|`分隔,支持模糊匹配(如:`如雷|苍白`)。
- 描述:按圣遗物套装筛选,使用 `|` 分隔,支持模糊匹配(如:`如雷|苍白`)。
- 默认:空
18. **筛选圣遗物界面最大翻页次数** (`countMaxByHoly`)
22. **筛选圣遗物界面最大翻页次数** (`countMaxByHoly`)
- 类型:下拉菜单
- 描述:设置筛选圣遗物时的最大翻页次数。
- 选项:`1``2``3``4``5``6``7``8`
- 默认:`4`
19. **圣遗物筛选:锁定状态(标记)** (`holyRelicsLockMark`)
23. **圣遗物筛选:锁定状态(标记)** (`holyRelicsLockMark`)
- 类型:复选框
- 描述:筛选带有标记的圣遗物。
- 默认:禁用
20. **圣遗物筛选:仅锁定** (`holyRelicsLockY`)
24. **圣遗物筛选:仅锁定** (`holyRelicsLockY`)
- 类型:复选框
- 描述:筛选已锁定的圣遗物。
- 默认:禁用
21. **圣遗物筛选:未锁定** (`holyRelicsLockN`)
25. **圣遗物筛选:未锁定** (`holyRelicsLockN`)
- 类型:复选框
- 描述:筛选未锁定的圣遗物。
- 默认:禁用
22. **圣遗物筛选:已装备** (`holyRelicsEquipY`)
26. **圣遗物筛选:已装备** (`holyRelicsEquipY`)
- 类型:复选框
- 描述:筛选已装备的圣遗物。
- 默认:禁用
23. **圣遗物筛选:未装备** (`holyRelicsEquipN`)
27. **圣遗物筛选:未装备** (`holyRelicsEquipN`)
- 类型:复选框
- 描述:筛选未装备的圣遗物。
- 默认:禁用
24. **圣遗物筛选:来源(祝圣之霜定义)** (`holyRelicsSourceFrostSaint`)
28. **圣遗物筛选:来源(祝圣之霜定义)** (`holyRelicsSourceFrostSaint`)
- 类型:复选框
- 描述:筛选来源为“祝圣之霜定义”的圣遗物。
- 默认:禁用
25. **打开背包按键** (`knapsackKey`)
29. **打开背包按键** (`knapsackKey`)
- 类型:文本输入
- 描述:设置打开背包的快捷键。
- 默认:`B`
26. **日志开关** (`log_off`)
30. **日志开关** (`log_off`)
- 类型:复选框
- 描述:启用日志记录,用于开发者调试。
- 默认:禁用
## 版本历史
### 1.1.3 (2025-09-11)
- **新增**:添加筛选圣遗物属性相关配置:
- `coverSiftAttributeHolyRelic`:支持自定义筛选属性覆盖通用筛选属性。
- `meetAllSiftAttributeHolyRelic`:支持严格要求满足所有子属性条件。
- `commonSiftAttributeHolyRelic`:定义通用命中筛选属性。
- `inputSiftAttributeHolyRelic`:支持自定义命中筛选属性。
- 以上配置仅用于强化前的第一次圣遗物筛选。
- **适配**
- 圣遗物属性 待激活 属性适配
## 其他
- **作者**:云端客

View File

@@ -3,7 +3,6 @@
* @returns {Promise<void>}
*/
async function main(log_off = config.log_off) {
let ms = 600
setGameMetrics(1920, 1080, 1); // 设置游戏窗口大小和DPI
@@ -199,6 +198,10 @@ const config = {
inputAttributeHolyRelic: settings.inputAttributeHolyRelic,//自定义圣遗物属性
commonAttributeHolyRelic: settings.commonAttributeHolyRelic,//通用圣遗物属性
coverAttributeHolyRelic: settings.coverAttributeHolyRelic,//覆盖圣遗物通用属性以部件为单位
coverSiftAttributeHolyRelic: settings.coverSiftAttributeHolyRelic,//覆盖圣遗物通用属性以筛选条件为单位
meetAllSiftAttributeHolyRelic: settings.meetAllSiftAttributeHolyRelic,//满足所有筛选条件
commonSiftAttributeHolyRelic: settings.commonSiftAttributeHolyRelic,//通用筛选条件
inputSiftAttributeHolyRelic: settings.inputSiftAttributeHolyRelic,//自定义筛选条件
}
@@ -265,6 +268,9 @@ const HolyRelicParts = ['生之花', '死之羽', '理之冠', '时之沙', '空
const commonHolyRelicPartMap = !config.enableAttributeHolyRelic ? [] : parseHolyRelicToMap(config.commonAttributeHolyRelic)
const holyRelicPartMap = !config.enableAttributeHolyRelic ? [] : (!config.coverAttributeHolyRelic ? parseHolyRelicToMap() : takeDifferentHolyRelicToMap(parseHolyRelicToMap(), commonHolyRelicPartMap))
const commonHolyRelicPartMapBySift = !config.enableAttributeHolyRelic ? [] : parseHolyRelicToMap(config.commonSiftAttributeHolyRelic)
const holyRelicPartMapBySift = !config.enableAttributeHolyRelic ? [] : (!config.coverSiftAttributeHolyRelic ? parseHolyRelicToMap(config.inputSiftAttributeHolyRelic) : takeDifferentHolyRelicToMap(parseHolyRelicToMap(config.inputSiftAttributeHolyRelic), commonHolyRelicPartMapBySift))
/**
* 属性值替换函数
* @param value
@@ -1258,7 +1264,7 @@ async function ocrAttributeHolyRelic() {
let sub = {
x: Math.floor(genshinJson.width * 1195 / 1920),
y: Math.floor(genshinJson.height * 304 / 1080),
width: Math.floor(genshinJson.width * 171 / 1920),
width: Math.floor(genshinJson.width * 253 / 1920),
height: Math.floor(genshinJson.height * 209 / 1080)
}
// await wait(ms)
@@ -1288,6 +1294,10 @@ async function ocrAttributeHolyRelic() {
}
let subName = subList[index] + "";
let subValue = subVRes.text + "";
let key = '(待激活)'
if (subName.includes(key)) {
subName = key + subName.split(key)[0].trim()
}
if (AttributeHolyRelickeys.includes(subName) && subValue.includes('%')) {
subName = subName + '百分比'
}
@@ -2215,22 +2225,54 @@ async function UpClickLv1(operate, source = 'UpClickLv1', log_off = config.log_o
for (let i = 0; i < count; i++) {
let one = await ocrAttributeHolyRelic()
if (holyRelicPartMap.get(name) && holyRelicPartMap.get(name).main.length > 0 && !holyRelicPartMap.get(name).main.includes(one.main)) {
//未命中主属性跳过
reJson.start = false
reJson.missed = true
reJson.missedMsg = `未命中主属性${JSON.stringify(holyRelicPartMap.get(name).main.join(','))}跳过`
await warn(reJson.missedMsg)
return reJson
}
if (holyRelicPartMap.get(name) && holyRelicPartMap.get(name).sub.length > 0 && !one.sub.find((item => holyRelicPartMap.get(name).sub.includes(item.name)))) {
//未命中子属性跳过
reJson.start = false
reJson.missed = true
reJson.missedMsg = `未命中子属性${JSON.stringify(holyRelicPartMap.get(name).sub.join(','))}跳过`
await warn(reJson.missedMsg)
return reJson
if (i < 1) {
if (holyRelicPartMap.get(name) && holyRelicPartMap.get(name).main.length > 0 && !holyRelicPartMap.get(name).main.includes(one.main)) {
//未命中主属性跳过
reJson.start = false
reJson.missed = true
reJson.missedMsg = `未命中主属性${JSON.stringify(holyRelicPartMap.get(name).main.join(','))}跳过`
await warn(reJson.missedMsg)
return reJson
}
if (config.meetAllSiftAttributeHolyRelic) {
//&&操作
let meetCount = 0
one.sub.forEach((item) => {
if (holyRelicPartMapBySift.get(name).sub.includes(item.name)) {
meetCount++
}
})
if (meetCount !== one.sub.length) {
//未命中全部子属性跳过
reJson.start = false
reJson.missed = true
reJson.missedMsg = `未命中全部子属性${JSON.stringify(holyRelicPartMapBySift.get(name).sub.join(','))}跳过`
await warn(reJson.missedMsg)
return reJson
}
} else {
if (holyRelicPartMapBySift.get(name) && holyRelicPartMapBySift.get(name).sub.length > 0 && !one.sub.find((item => holyRelicPartMapBySift.get(name).sub.includes(item.name)))) {
//未命中子属性跳过
reJson.start = false
reJson.missed = true
reJson.missedMsg = `未命中子属性${JSON.stringify(holyRelicPartMapBySift.get(name).sub.join(','))}跳过`
await warn(reJson.missedMsg)
return reJson
}
}
} else {
if (holyRelicPartMap.get(name) && holyRelicPartMap.get(name).sub.length > 0 && !one.sub.find((item => holyRelicPartMap.get(name).sub.includes(item.name)))) {
//未命中子属性跳过
reJson.start = false
reJson.missed = true
reJson.missedMsg = `未命中子属性${JSON.stringify(holyRelicPartMap.get(name).sub.join(','))}跳过`
await warn(reJson.missedMsg)
return reJson
}
}
await wait(ms) // 等待500毫秒确保界面响应
operate = await operateDispose(operate, false, log_off)

View File

@@ -1,6 +1,6 @@
{
"name": "圣遗物批量强化",
"version": "1.1.2",
"version": "1.1.3",
"description": "一个批量强化圣遗物的脚本",
"settings_ui": "settings.json",
"main": "main.js",

View File

@@ -83,6 +83,30 @@
"label": "自定义命中属性\n(编写语法请查看文档)-实验功能",
"default": ""
},
{
"name": "coverSiftAttributeHolyRelic",
"type": "checkbox",
"label": "启用筛选圣遗物自定义命中属性覆盖筛选圣遗物通用命中属性\n(默认开启,以部件为单位,不启用则使用自定义属性)-实验功能",
"default": true
},
{
"name": "meetAllSiftAttributeHolyRelic",
"type": "checkbox",
"label": "启用筛选圣遗物满足所有指定的子属性命中条件\n(默认关闭)-实验功能",
"default": false
},
{
"name": "commonSiftAttributeHolyRelic",
"type": "input-text",
"label": "筛选圣遗物通用命中属性\n(编写语法请查看文档)-实验功能",
"default": "@花*爆率*爆伤|@羽*爆率*爆伤|@沙*爆率*爆伤|@冠#爆率#爆伤&*爆率*爆伤|@杯#物伤#风伤#水伤#火伤#雷伤#岩伤#冰伤#草伤&*爆率*爆伤"
},
{
"name": "inputSiftAttributeHolyRelic",
"type": "input-text",
"label": "筛选圣遗物自定义命中属性\n(编写语法请查看文档)-实验功能",
"default": ""
},
{
"name": "toSort",
"type": "checkbox",