docs(10-25): 收口高级 II 互链与构建

This commit is contained in:
unanmed 2026-10-21 19:08:26 +08:00
parent 6b4e02f79d
commit 31f89f8b66
9 changed files with 29 additions and 13 deletions

View File

@ -393,3 +393,5 @@ function verifyEnemyAttribute(
- **护甲要夹在有效区间**:大于 `100` 会让怪物无法被击败,负数会放大伤害;在计算器入口统一夹一次。
- **攻速改动会影响回合数**:凡是依赖 `turn` 的逻辑(支援、先攻、状态持续时间)都要跟着复核,不能只改伤害数字。
- **编辑器与图鉴尚未接入**:在对应端实现之前,不要假设属性会自动出现在界面上。
返回[高级 II 导览](./index.md)。

View File

@ -302,3 +302,5 @@ function verifyHeroAttribute(
- **编辑器与状态栏尚未接入**:在对应端实现之前,不要假设属性会自动出现在界面上。
渲染端如何展示这两个属性不在本篇范围内。 <!-- TODO(renderer): 攻速与护甲的状态栏显示 -->
返回[高级 II 导览](./index.md)。

View File

@ -213,3 +213,5 @@ for (const [hit] of hits) {
- **负半径按绝对值处理**:这是本篇示例的约定;如果你希望负半径表示「无效」,要在 `inRange` 与 `iterateLoc` 里同时改,不能只改一处。
- **绑定后的范围实例不要跨地图共用**:`bindHost` 是可变状态,同一个实例先后绑定不同尺寸的宿主时,后一次会覆盖前一次。需要并行处理多张地图时,每张地图各用一个实例,或在每次使用前重新绑定。
- **`radius: 0` 是中心单点**:环形范围在半径为 0 时没有「边框」可枚举,按距离恰好为 0 处理,只命中中心。
返回[高级 II 导览](./index.md)。

View File

@ -371,3 +371,5 @@ async function verifyUseSkill(
- **播放期间必须禁用录制**:否则回放执行的行为会写回同一条录像,并让读取流过期。用 `disable()` 与 `revert()` 包住播放,且保证配对。
- **不要在播放期间修改 `route`**:追加、插入或删除都会让读取流过期,播放随即停止。
- **`finalize` 需要跨步状态**:它没有参数,连续步骤的信息只能保存在指令对象的成员里;指令对象在注册时创建一次,之后复用。
返回[高级 II 导览](./index.md)。

View File

@ -290,3 +290,5 @@ function verifyBuildup(state: ICoreState, view: IEnemyView<IEnemyAttr>): void {
- **查询效果不是内置内容**:`initializeEnemy` 只注册光环转换器、最终效果、战斗脚本与钩子,没有注册任何查询。查询需要自己注册后才会参与构建。
- **开发环境的优先级告警不是致命错误**:它会跳过不合法的增删,但通常说明阶段依赖设计有问题,应该调整优先级而不是忽略告警。
- **`clear()` 与 `destroy()` 的时机不同**:`clear()` 清空怪物与运行状态,保留注册项;`destroy()` 会连伤害系统、地图伤害与所有注册项一起清掉。销毁后不应继续使用该上下文。
返回[高级 II 导览](./index.md)。

View File

@ -334,3 +334,5 @@ function verifyEquipment(state: ICoreState): void {
- **`getModifiers()` 会触发构建**:首次调用有副作用(构建修饰器并触发一次 `onChangeModifier`),不要把它当纯查询频繁调用。
编辑器与状态栏的展示不在本篇范围内。 <!-- TODO(editor): 装备栏与状态栏展示 -->
返回[高级 II 导览](./index.md)。

View File

@ -298,3 +298,5 @@ async function verifyPathfinding(
- **`interrupt()` 会等待底层移动停止**:它返回 `Promise`,需要确保停止后再开始新的移动。
渲染端如何表现寻路移动不在本篇范围内。 <!-- TODO(renderer): 寻路移动动画与瞬移表现 -->
返回[高级 II 导览](./index.md)。

View File

@ -296,3 +296,5 @@ async function verifyTileConversion(
- **同一格多个动态图块的顺序不保证**:`getDynamicTilesAt` 返回的是集合语义的迭代器;依赖先后顺序时,请先取出数组并自行排序。
- **`syncTileEvent` 会覆盖目标**:它先清空目标再复制,目标原有的图块事件不会保留。只想追加一条事件时,用 `tileEvent().set(priority, eventId)`,不要用 `syncTileEvent`。
- **点事件与图块事件共用优先级概念但不是同一张表**:同一格可以同时有优先级 `5` 的点事件与优先级 `5` 的图块事件,两者互不冲突;冲突只发生在同一个事件视图内部。
返回[高级 II 导览](./index.md)。

View File

@ -18,13 +18,13 @@
高级教程按难度与主题分成三层。层与顶层的中级教程不是同一套划分:中级讲「怎么用」,高级讲「怎么扩展」。
| 层级 | 定位 | 主要主题 |
| --------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------- |
| 高级 I · 扩展基础 | 以插件系统为核心,后续内容都是它的拓展 | 声明式接口、插件系统、可存档内容、录像一致性、data-common 的 Store、钩子深入 |
| 高级 II · 系统实现 | 系统级实现 | 战斗上下文、光环 / 查询 / 优先级、伤害与地图伤害、渲染层与布局、加载与插件生命周期、自定义录像行为 |
| 高级 III · 原理与架构 | 原理与架构 | 双端分离约束、数据端 L0–L3、编辑器识别协议、录像深层原理、性能与调试 |
| 层级 | 定位 | 主要主题 |
| --------------------------- | -------------------------------------- | ---------------------------------------------------------------------------- |
| 高级 I · 扩展基础 | 以插件系统为核心,后续内容都是它的拓展 | 声明式接口、插件系统、可存档内容、录像一致性、data-common 的 Store、钩子深入 |
| [高级 II · 深入定制](./ii/) | 深入定制 | 范围、图块、装备、录像指令、寻路、勇士与怪物属性、战斗上下文 |
| 高级 III · 原理与架构 | 原理与架构 | 双端分离约束、数据端 L0–L3、编辑器识别协议、录像深层原理、性能与调试 |
当前站点的「高级教程」只收录高级 I 的内容。高级 II 与高级 III 的专题在正文里用 `高级 II · <专题>`、`高级 III · <专题>` 这样的占位标记指出归属,不提供页面入口。
高级 II 已经可阅读,入口见[高级 II 导览](./ii/);本层收录范围、图块、装备、录像指令、寻路、属性与战斗上下文。高级 III 仍用 `高级 III · <专题>` 这样的占位标记指出归属,暂不提供页面入口。
## 高级 I 包含什么
@ -59,19 +59,19 @@
新增系统优先通过插件系统实现;只有不得不修改内置系统时,才去改内部。理由很现实:版本迁移时 `src` 基本不会改,而内置包(`packages` / `packages-user`)有可能会改。直接改内置,升级时就要跟着差异走,维护成本更高;把改动留在自己的 `src` 里,升级时要对照的地方少得多。
| 需求类型 | 优先做法 | 什么情况下才改内置 |
| -------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------- |
| 新增一套有自己状态、生命周期与存档内容的系统 | 写成插件,在插件里装配对象 | 现有插件已覆盖大部分能力,只差一个接口或默认值时 |
| 给已有系统补一点行为 | 改内置类的方法体,或加一条分支 | 需要替换整套策略、或改动会破坏内置行为时,才独立成类 |
| 读取内容定义(图块、道具、地图、怪物、事件) | 通过 `state.*Store` 的接口读,不新建 Store | 现有 Store 装不下,且确实需要新的系统级数据表时 |
| 给会改状态的方法补录像标记 | 在内置方法上加一行装饰器 | 需要新的录像入口或自定义录像行为时(属于 `高级 II · 自定义录像行为`) |
| 需求类型 | 优先做法 | 什么情况下才改内置 |
| -------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------------------- |
| 新增一套有自己状态、生命周期与存档内容的系统 | 写成插件,在插件里装配对象 | 现有插件已覆盖大部分能力,只差一个接口或默认值时 |
| 给已有系统补一点行为 | 改内置类的方法体,或加一条分支 | 需要替换整套策略、或改动会破坏内置行为时,才独立成类 |
| 读取内容定义(图块、道具、地图、怪物、事件) | 通过 `state.*Store` 的接口读,不新建 Store | 现有 Store 装不下,且确实需要新的系统级数据表时 |
| 给会改状态的方法补录像标记 | 在内置方法上加一行装饰器 | 需要新的录像入口或自定义录像行为时(见[自定义录像指令](./ii/custom-replay-command.md)) |
判断标准不是改动多少行,而是改动落在谁的代码里:能由插件或内容定义完成的,就留在 `src`;必须动内置包时,尽量把差异收敛在一个方法或一条分支上,方便升级时对照。
## 本层不覆盖什么
- <strong>渲染端内容</strong>:渲染端尚未完工,高级教程当前只收录数据端内容,渲染端专题待完工后补上。
- <strong>高级 II 的系统级实现</strong>:战斗上下文、光环 / 查询 / 优先级、伤害与地图伤害、渲染层与布局、加载与插件生命周期、自定义录像行为。
- <strong>高级 II 的深入定制内容</strong>:范围、图块、装备、录像指令、寻路、勇士与怪物属性、战斗上下文,见[高级 II 导览](./ii/)。
- <strong>高级 III 的原理与架构</strong>:双端分离约束、数据端 L0–L3、编辑器识别协议、录像深层原理、性能与调试。
- <strong>API 参考</strong>:接口签名与类型清单不属于教程正文。