diff --git a/docs/advanced/ii/adding-enemy-attribute.md b/docs/advanced/ii/adding-enemy-attribute.md index f5b3573..6d760e3 100644 --- a/docs/advanced/ii/adding-enemy-attribute.md +++ b/docs/advanced/ii/adding-enemy-attribute.md @@ -393,3 +393,5 @@ function verifyEnemyAttribute( - **护甲要夹在有效区间**:大于 `100` 会让怪物无法被击败,负数会放大伤害;在计算器入口统一夹一次。 - **攻速改动会影响回合数**:凡是依赖 `turn` 的逻辑(支援、先攻、状态持续时间)都要跟着复核,不能只改伤害数字。 - **编辑器与图鉴尚未接入**:在对应端实现之前,不要假设属性会自动出现在界面上。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/adding-hero-attribute.md b/docs/advanced/ii/adding-hero-attribute.md index 1c31bb4..6431cf0 100644 --- a/docs/advanced/ii/adding-hero-attribute.md +++ b/docs/advanced/ii/adding-hero-attribute.md @@ -302,3 +302,5 @@ function verifyHeroAttribute( - **编辑器与状态栏尚未接入**:在对应端实现之前,不要假设属性会自动出现在界面上。 渲染端如何展示这两个属性不在本篇范围内。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/custom-range.md b/docs/advanced/ii/custom-range.md index df09097..1759606 100644 --- a/docs/advanced/ii/custom-range.md +++ b/docs/advanced/ii/custom-range.md @@ -213,3 +213,5 @@ for (const [hit] of hits) { - **负半径按绝对值处理**:这是本篇示例的约定;如果你希望负半径表示「无效」,要在 `inRange` 与 `iterateLoc` 里同时改,不能只改一处。 - **绑定后的范围实例不要跨地图共用**:`bindHost` 是可变状态,同一个实例先后绑定不同尺寸的宿主时,后一次会覆盖前一次。需要并行处理多张地图时,每张地图各用一个实例,或在每次使用前重新绑定。 - **`radius: 0` 是中心单点**:环形范围在半径为 0 时没有「边框」可枚举,按距离恰好为 0 处理,只命中中心。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/custom-replay-command.md b/docs/advanced/ii/custom-replay-command.md index ba52af8..a40a3ca 100644 --- a/docs/advanced/ii/custom-replay-command.md +++ b/docs/advanced/ii/custom-replay-command.md @@ -371,3 +371,5 @@ async function verifyUseSkill( - **播放期间必须禁用录制**:否则回放执行的行为会写回同一条录像,并让读取流过期。用 `disable()` 与 `revert()` 包住播放,且保证配对。 - **不要在播放期间修改 `route`**:追加、插入或删除都会让读取流过期,播放随即停止。 - **`finalize` 需要跨步状态**:它没有参数,连续步骤的信息只能保存在指令对象的成员里;指令对象在注册时创建一次,之后复用。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/enemy-context-and-combat.md b/docs/advanced/ii/enemy-context-and-combat.md index e0e77f3..62d71ba 100644 --- a/docs/advanced/ii/enemy-context-and-combat.md +++ b/docs/advanced/ii/enemy-context-and-combat.md @@ -290,3 +290,5 @@ function verifyBuildup(state: ICoreState, view: IEnemyView): void { - **查询效果不是内置内容**:`initializeEnemy` 只注册光环转换器、最终效果、战斗脚本与钩子,没有注册任何查询。查询需要自己注册后才会参与构建。 - **开发环境的优先级告警不是致命错误**:它会跳过不合法的增删,但通常说明阶段依赖设计有问题,应该调整优先级而不是忽略告警。 - **`clear()` 与 `destroy()` 的时机不同**:`clear()` 清空怪物与运行状态,保留注册项;`destroy()` 会连伤害系统、地图伤害与所有注册项一起清掉。销毁后不应继续使用该上下文。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/equipment-system.md b/docs/advanced/ii/equipment-system.md index 9afaa2f..c6a3537 100644 --- a/docs/advanced/ii/equipment-system.md +++ b/docs/advanced/ii/equipment-system.md @@ -334,3 +334,5 @@ function verifyEquipment(state: ICoreState): void { - **`getModifiers()` 会触发构建**:首次调用有副作用(构建修饰器并触发一次 `onChangeModifier`),不要把它当纯查询频繁调用。 编辑器与状态栏的展示不在本篇范围内。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/pathfinding.md b/docs/advanced/ii/pathfinding.md index 994f503..8a82ec3 100644 --- a/docs/advanced/ii/pathfinding.md +++ b/docs/advanced/ii/pathfinding.md @@ -298,3 +298,5 @@ async function verifyPathfinding( - **`interrupt()` 会等待底层移动停止**:它返回 `Promise`,需要确保停止后再开始新的移动。 渲染端如何表现寻路移动不在本篇范围内。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/ii/static-vs-dynamic-tiles.md b/docs/advanced/ii/static-vs-dynamic-tiles.md index 258f0e7..d75ac61 100644 --- a/docs/advanced/ii/static-vs-dynamic-tiles.md +++ b/docs/advanced/ii/static-vs-dynamic-tiles.md @@ -296,3 +296,5 @@ async function verifyTileConversion( - **同一格多个动态图块的顺序不保证**:`getDynamicTilesAt` 返回的是集合语义的迭代器;依赖先后顺序时,请先取出数组并自行排序。 - **`syncTileEvent` 会覆盖目标**:它先清空目标再复制,目标原有的图块事件不会保留。只想追加一条事件时,用 `tileEvent().set(priority, eventId)`,不要用 `syncTileEvent`。 - **点事件与图块事件共用优先级概念但不是同一张表**:同一格可以同时有优先级 `5` 的点事件与优先级 `5` 的图块事件,两者互不冲突;冲突只发生在同一个事件视图内部。 + +返回[高级 II 导览](./index.md)。 diff --git a/docs/advanced/index.md b/docs/advanced/index.md index 3eea730..93b1d0b 100644 --- a/docs/advanced/index.md +++ b/docs/advanced/index.md @@ -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`;必须动内置包时,尽量把差异收敛在一个方法或一条分支上,方便升级时对照。 ## 本层不覆盖什么 - 渲染端内容:渲染端尚未完工,高级教程当前只收录数据端内容,渲染端专题待完工后补上。 -- 高级 II 的系统级实现:战斗上下文、光环 / 查询 / 优先级、伤害与地图伤害、渲染层与布局、加载与插件生命周期、自定义录像行为。 +- 高级 II 的深入定制内容:范围、图块、装备、录像指令、寻路、勇士与怪物属性、战斗上下文,见[高级 II 导览](./ii/)。 - 高级 III 的原理与架构:双端分离约束、数据端 L0–L3、编辑器识别协议、录像深层原理、性能与调试。 - API 参考:接口签名与类型清单不属于教程正文。