Skip to content
Open
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
863a134
feat: 式舆防卫战自动配队
kawayiYokami Jul 30, 2026
69b77be
feat(devtools): 添加配队选择
kawayiYokami Jul 30, 2026
bef1d0b
fix: 让按住滑动更加稳定
kawayiYokami Jul 30, 2026
f656e39
fix: 使用拖动翻页预备编队
kawayiYokami Jul 30, 2026
6000420
chore: 增强预备编队扫描日志
kawayiYokami Jul 30, 2026
02244b6
fix: 跳过被禁用的预备编队
kawayiYokami Jul 30, 2026
083fe9d
fix: 取消预选的预备编队
kawayiYokami Jul 30, 2026
039948c
docs: 补充预备编队选择说明
kawayiYokami Jul 30, 2026
a0d2b23
fix: 限制预备编队选中确认重试
kawayiYokami Jul 30, 2026
fc75a0f
fix: 限制扫描预备编队代理人数
kawayiYokami Jul 30, 2026
682f4fb
docs: 说明预备编队邦布处理
kawayiYokami Jul 30, 2026
a72b307
Merge remote-tracking branch 'origin/main' into feat/shiyu-defense-au…
DoctorReid Jul 31, 2026
49b1f9d
docs(combat): 补战斗系统机制与配队评分注释
DoctorReid Jul 31, 2026
7bd1652
fix(shiyu_defense): 选队改用核心技X/3判满员并容错OCR误读
DoctorReid Aug 1, 2026
b81ab37
fix: 统一预备编队名称空白
kawayiYokami Aug 1, 2026
e1f60bd
fix: 按预备编队序号定位选卡
kawayiYokami Aug 1, 2026
437fd6a
docs: 说明预备编队名称同步与序号选卡
kawayiYokami Aug 1, 2026
bd68007
fix: 延长前台拖动按住时间
kawayiYokami Aug 1, 2026
bf86701
feat: 新增预备编队坐标区域
kawayiYokami Aug 1, 2026
c6bc4c8
fix: 改进预备编队禁用识别
kawayiYokami Aug 1, 2026
39cb37c
fix: 修正预备编队禁用与选队定位
kawayiYokami Aug 1, 2026
fb2cd68
feat: 配队选择改为独立插件
kawayiYokami Aug 1, 2026
55bbe70
chore: 优化预备编队选择日志
kawayiYokami Aug 1, 2026
d02acc9
fix: 拖动前停顿改为类常量并计入拖动时长
kawayiYokami Aug 3, 2026
c96a41c
chore: 删除配队选择测试应用
kawayiYokami Aug 3, 2026
97305fd
fix: 预备编队槽位改为从0开始计数
kawayiYokami Aug 7, 2026
81eedc5
chore: 清理已删除配队选择应用的 STANDALONE 残留
kawayiYokami Aug 12, 2026
bef3370
style
ShadowLemoon Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions assets/game_data/screen_info/_od_merged.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10265,3 +10265,119 @@
template_match_threshold: 0.7
color_range: null
goto_list: []
- screen_id: team_select
screen_name: 编队选择
pc_alt: false
area_list:
- area_name: 编队槽位0
id_mark: false
pc_rect:
- 160
- 132
- 933
- 381
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位1
id_mark: false
pc_rect:
- 976
- 128
- 1755
- 385
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位2
id_mark: false
pc_rect:
- 162
- 414
- 944
- 672
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位3
id_mark: false
pc_rect:
- 983
- 416
- 1750
- 666
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位4
id_mark: false
pc_rect:
- 163
- 694
- 943
- 949
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位5
id_mark: false
pc_rect:
- 976
- 694
- 1757
- 949
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 选择标记左
id_mark: false
pc_rect:
- 774
- 183
- 940
- 941
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 选择标记右
id_mark: false
pc_rect:
- 1598
- 180
- 1757
- 940
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
116 changes: 116 additions & 0 deletions assets/game_data/screen_info/team_select.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
screen_id: team_select
screen_name: 编队选择
pc_alt: false
area_list:
- area_name: 编队槽位0
id_mark: false
pc_rect:
- 160
- 132
- 933
- 381
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位1
id_mark: false
pc_rect:
- 976
- 128
- 1755
- 385
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位2
id_mark: false
pc_rect:
- 162
- 414
- 944
- 672
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位3
id_mark: false
pc_rect:
- 983
- 416
- 1750
- 666
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位4
id_mark: false
pc_rect:
- 163
- 694
- 943
- 949
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 编队槽位5
id_mark: false
pc_rect:
- 976
- 694
- 1757
- 949
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 选择标记左
id_mark: false
pc_rect:
- 774
- 183
- 940
- 941
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
- area_name: 选择标记右
id_mark: false
pc_rect:
- 1598
- 180
- 1757
- 940
text: ''
lcs_percent: 0.5
template_sub_dir: ''
template_id: ''
template_match_threshold: 0.7
color_range: null
goto_list: []
17 changes: 11 additions & 6 deletions docs/develop/guides/application_plugin_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ src/zzz_od/application/my_app/ # 内置应用

APP_ID = "my_app"
APP_NAME = "我的应用"
DEFAULT_GROUP = True # True → 出现在一条龙列表; False → 独立工具
DEFAULT_GROUP = True # True → 出现在一条龙列表; False → 不自动加入一条龙
NEED_NOTIFY = True # 是否需要通知
# 非默认组应用如需在“应用运行”中手动添加,显式声明:
# STANDALONE = True
```

### 步骤 2: 创建工厂类
Expand Down Expand Up @@ -77,6 +79,8 @@ APP_ID = "my_plugin"
APP_NAME = "我的插件"
DEFAULT_GROUP = True
NEED_NOTIFY = True
# DEFAULT_GROUP = False 时,声明后可在“应用运行”中手动添加:
# STANDALONE = True

# 可选元数据(用于 GUI 显示)
PLUGIN_AUTHOR = "作者名"
Expand Down Expand Up @@ -149,10 +153,11 @@ ctx.refresh_application_registration()

## 应用分组

| 分组 | `DEFAULT_GROUP` | 场景 |
|------|:---------------:|------|
| 默认组 | `True` | 默认出现在一条龙列表,用于日常任务(体力刷本、咖啡店、邮件等) |
| 非默认组 | `False` | 默认不出现在一条龙列表;若实例配置中已有该应用且处于启用状态,则继续显示,禁用后永久移除 |
| 分组 | `DEFAULT_GROUP` | `STANDALONE` | 场景 |
|------|:---------------:|:------------:|------|
| 默认组 | `True` | 不需要声明 | 默认出现在一条龙列表,也可在“应用运行”中手动添加 |
| 非默认组 | `False` | `True` | 不自动加入一条龙,可在“应用运行”中手动添加 |
| 非默认组 | `False` | 未声明或 `False` | 仅保留给内部工具或已有配置,不会显示在“应用运行”的添加列表 |

---

Expand Down Expand Up @@ -182,7 +187,7 @@ class MyContext(OneDragonContext):

1. **APP_ID 全局唯一**:重复的 APP_ID 会被拒绝,先注册者胜
2. **一模块一工厂**:每个 `_factory.py` 中只定义一个 `ApplicationFactory` 子类
3. **const 必需字段**:`APP_ID`、`APP_NAME`、`DEFAULT_GROUP`、`NEED_NOTIFY`
3. **const 必需字段**:`APP_ID`、`APP_NAME`、`DEFAULT_GROUP`、`NEED_NOTIFY`;非默认组应用需在“应用运行”手动添加时,额外声明 `STANDALONE = True`
4. **同目录冲突**:同目录下多个 `_factory.py` 或 `_const.py` 时整个目录被跳过
5. **第三方插件备份**:`plugins/` 被 gitignore,用户需自行备份
6. **设置界面**:如需为应用添加设置界面,请参考 [application_setting_guide.md](application_setting_guide.md)
95 changes: 87 additions & 8 deletions docs/game/gameplay/combat.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,94 @@
---
gameplay_name: 战斗系统
involves_screens: []
involves_screens: [战斗画面]
last_updated: 2026-07-31
---

# 战斗系统
# 战斗系统(玩法)

## 机制
(自由描述:战斗核心机制、角色切换、属性克制等。)
绝区零的核心战斗机制。本页只讲**通用共性机制**(所有战斗玩法共用),作为理解自动配队 / 自动战斗的依据。个别角色的专属机制(如某某角色的独有架势 / 染色 / 能量条)不展开——那是角色百科内容,查 [米游社 WIKI](https://baike.mihoyo.com/zzz/wiki/channel/map/66/68) 或 [萌娘百科](https://zh.moegirl.org.cn);只在**代码用到时**在本页点到。

## 流程与决策点
(自由描述:进入战斗 → 编队 → 开打 → 结算 的画面流转;关键决策点。)
战斗画面识别见 [战斗画面.md](../screens/战斗画面.md)。

## 备注
(自由记录。)
## 这是什么

战斗是绝区零绝大多数玩法(式舆防卫战 / 恶名狩猎 / 迷失之地 / 各类副本)的核心:3 人小队实时切人打怪,靠 **属性克制 + 异常积蓄 + 失衡击破** 三条机制链路输出伤害。配队围绕这三条链路 + 角色职业搭配展开。

## 三条输出链路

### 1. 属性克制(直伤队核心)

- **7 种属性**:电、以太、物理、火、冰、风(3.0 引入)、流明(对应代码 `DmgTypeEnum`)。
- **克制(弱点)**:敌人对该属性抗性 **-20%**,直伤更高(伤害数字白色)。
- **抗性**:敌人对该属性抗性 **+20%**,直伤更低(伤害数字变灰)。
- 非克制非抗性:抗性 0,正常伤害。

> **配队依据**:尽量用敌人**弱点属性**的输出角色,避开**抗性属性**。脚本据此给候选队评分(见末尾「自动配队评分」)。

来源:[NGA · 绝区零数据机制导论](https://bbs.nga.cn/read.php?tid=40893992)。

### 2. 异常积蓄 + 紊乱(异常队核心)

- **异常积蓄**:用同属性攻击持续打敌人,积累「异常值」(怪物血条右侧进度条);攒满触发该属性的**异常效果**(各属性效果不同,分持续伤害类 / 单次伤害类 / 控制类,具体查 WIKI)。
- **紊乱(Disorder)**:对已处于某异常状态的敌人,再施加**另一种属性**的异常 → 覆盖原状态,触发**紊乱**,额外结算一次伤害。
- 异常队靠快速挂多种异常反复触发紊乱打伤害(混伤,以异常为主、直伤为辅)。
- 异常伤害受「异常精通 + 攻击力 + 异常掌控」影响,**不受暴击影响**(培养方向与直伤角不同)。

> 注意游戏内正式术语是「**紊乱**」(Disorder);风属性版的紊乱叫「**乱流**」(风专属别名,见下「染色」),"紊流"则是误写。

来源:[游民星空 · 全属性异常效果一览](https://www.gamersky.com/handbook/202407/1784391.shtml)、[TapTap · 紊乱机制解读](https://www.taptap.cn/moment/591659398095440330)。

### 3. 失衡 + 连携技(击破队核心)

- 攻击积累敌人**失衡值**(血条下方进度),满后敌人进入「失衡状态」,期间受到的伤害大幅提升。
- 失衡期间触发**连携技**(角色大招演出),是爆发输出窗口。
- **击破**职业负责快速打失衡,把队伍"抬"进连携爆发期。

## 染色(风 / 流明异常的特殊机制)

风、流明是较新的特殊异常属性,有专属异常交互(代表角色:风=维琳娜、流明=蕾米埃尔,角色技能详见 WIKI),是当前版本异常队核心。

- **风属性**:异常体系为**风化**(持续伤害)→ **浸染 / 染色**(接触其他属性时提升风 + 该属性伤害)→ **乱流**(风化与其他属性异常共存时触发爆炸,风版紊乱)。乱流靠**队友的异色异常**触发。
- **流明属性**:**可变属性**——流明异常会随队友属性变化(与风属性队友 → 算风伤,与物理 → 物伤,与以太 → 以太伤)。

**风 + 流明同队**:流明因风属性队友而变风伤 → 双方都打风,**没有异色异常可触发风乱流**。配队评分据此对两者做不对称处理:

- 风异常的乱流染色源**不能是流明队友**(流明会变风,非异色)→ 评分时 `WIND` 排除 `LUMIFLUX` 队友。
- 流明可变,能吃任何队友属性(含风)→ 评分时 `LUMIFLUX` 不排除队友。

见 `shiyu_defense_team_utils.py:_calc_team_score` 染色分支。

来源:[游侠 · 维琳娜技能介绍](https://m.ali213.net/news/gl2606/1783305.html)、[4399 · 蕾米埃尔全面解析](https://www.4399.com/pcgame/topic/53681368.html)、[NGA · 蕾米埃尔绑定维琳娜讨论](https://bbs.nga.cn/read.php?tid=47024817)。

## 职业系统

每个代理人有**职业**(`AgentTypeEnum`),决定战斗定位:

| 职业 | 定位 | 配队评分角色 |
|---|---|---|
| 强攻(ATTACK) | 直伤输出主力 | 输出(按属性克制评分) |
| 命破(RUPTURE) | 直伤输出(另一套体系) | 输出 |
| 异常(ANOMALY) | 靠异常积蓄 / 紊乱打伤害 | 输出(异常倍率;风/流明走染色分支) |
| 击破(STUN) | 打失衡触发连携 | 辅助(对齐最强输出计分) |
| 支援(SUPPORT) | 增伤 / 治疗 / buff | 辅助 |
| 防护(DEFENSE) | 护盾 / 生存 | 辅助 |

## 虚狩

**虚狩**是新艾利都调查员的**最高荣誉称号**(由市长授予,表彰镇压空洞的极大贡献),**不是职业也不是属性**,而是剧情设定上的头衔。当前虚狩级代理人(对应代码 `VOID_HUNTER_AGENT_ID_LIST`):仪玄(`yixuan`)、星见雅(`hoshimi_miyabi`)、叶瞬光(`yeshunguang`)、蕾米埃尔(`remielle`)。

> 代码里 `VOID_HUNTER_*` 命名是"虚狩"的直译(早期被误称为"虚无猎人")。虚狩角色通常机制 / 数值更强,脚本配队给虚狩角色 **1.2 倍评分加权**。该列表**硬编码**,游戏新增虚狩角色时需手动补(后续可考虑下沉到 `Agent` 数据字段派生)。

来源:[萌娘百科 · 虚狩](https://zh.moegirl.org.cn/zh-cn/%E8%99%9A%E7%8B%A9)。

## 关联:自动配队评分(代码)

式舆防卫战自动配队(`shiyu_defense_team_utils.py:DefenseTeamSearcher` / `select_teams`)用上述机制给候选预备编队打分,选**总分最高且两阶段代理人不重复**的组合:

- **输出角色(强攻 / 命破 / 异常)**:按属性对弱点 / 抗性的契合度评分。代码用 `1.3 / 0.7`(异常 `1.69 / 0.49`)——**这是评分权重,不是真实 ±20% 伤害倍率**;放大克制 / 抗性的分差以便排序。
- **辅助角色(击破 / 支援 / 防护)**:按「对齐队内最强输出」计入,每个辅助贡献 = 最强输出分(`sum(output) + max(output) × 辅助数`)。
- **虚狩角色**:1.2 倍加权。
- **风 / 流明异常**:走染色分支(看队友异常属性)。
- 普通节点 2 个半场 / 多间模式全部未完成房间的队,代理人 ID 不能重复。

配队的完整玩法流程见 [式舆防卫战.md](式舆防卫战.md);扫描 / 点击选队的自动化实现见相关 application / operation 代码。
Loading
Loading