# `src/server` — 1.13c 权威游戏模拟引擎 (`D2Game.dll`) `src/server` 是 **Diablo II: Lord of Destruction (v1.13c)** 的确定性服务端权威逻辑实现,1:1 复刻原版 `D2Game.dll` 的 25fps (40ms/tick) 帧循环、战斗管线、221 个技能、怪物 AI、掉落表(TreasureClass)与存档系统。 ## 1. 模块职责与架构边界 - **对应原版 DLL**:`D2Game.dll`。 - **TypeScript 工程约束(`tsconfig.server.json`)**: - `lib: ["ES2022", "WebWorker"]`, `types: []` —— **严禁使用任何浏览器 DOM API 或 Node.js API**。 - **纯确定性模拟(Deterministic Simulation)**:模块内严禁调用 `Math.random`、`Date.now` 或 `performance.now`;所有随机性必须由种子的 `D2Rng` 驱动,所有时间推进必须由 25fps 离散帧号(`tickCount`)驱动。 - 仅允许依赖 `src/common` 与 `src/netproto`(门面入口),严禁导入 `src/client` 或 `src/baker`。 --- ## 2. 目录结构 ```text src/server/ ├── engine/ # 25fps 核心模拟引擎 (GameEngine, combat-pipeline, missile-engine, aura-scanner, summon-manager, stat-list) ├── ai/ # 怪物 AI 决策树、仇恨/索敌、视野碰撞与动态房间流式加载 (room-streamer) ├── skills/ # 七大职业共 221 个技能与通用技能服务端执行器 (Amazon, Sorceress, Necromancer, Paladin, Barbarian, Druid, Assassin) ├── items/ # 1.13c 掉落管线 (TC NoDrop/Quality/Affix)、符文之语、宝石镶嵌、赫拉迪克方块合成与 NPC 商店服务 ├── world/ # 场景交互物体 (神殿/宝箱/传送门/小站)、任务状态机 (Quests)、NPC 对话与治疗/赌博交易 ├── save/ # 原版 1.13c .d2s 二进制角色存档读写器 (Checksum, Attributes, Skills, QuestData, Waypoints, ItemList) ├── scene/ # 服务端关卡实例生命周期与跨幕切换管理 └── adapter/ # LocalLoopbackAdapter:将 GameEngine 封装为标准 GameServerAdapter 契约接口 ``` --- ## 3. 核心子系统详解 ### 3.1 25fps 核心引擎与战斗管线 (`engine/`) - **`GameEngine` (`engine/game-engine.ts`)**:维护权威世界状态,按 40ms 固定步长推进: 1. 玩家输入指令队列消费(移动、普通攻击、技能施放、拾取/穿戴/药水、NPC 交互)。 2. 状态持续时间衰减(中毒、冰冻、诅咒、战吼、神殿 Buff)与生命/法力自然回复。 3. 光环扫描器 (`aura-scanner.ts`) 周期性范围索敌与属性挂载。 4. 投射物引擎 (`missile-engine.ts`) 步进碰撞检测与子投射物分裂。 5. 怪物与召唤物 (`summon-manager.ts`) AI 决策与动作帧推进。 6. 状态总线 (`state-bus.ts`) 收集本帧脏状态并生成增量事件。 - **战斗伤害管线 (`combat-pipeline.ts`)**:严格遵循 1.13c 命中率公式(AR vs DR + 等级差修正)、盾牌格挡判定、物理/魔法/元素(火/电/冰/毒)六系伤害结算、抗性穿透/上限、碾压性打击 (Crushing Blow)、致命一击 (Deadly Strike / Critical Strike) 与撕开伤口 (Open Wounds)。 ### 3.2 全职业技能系统 (`skills/`) - **`skill-table.ts` & 各职业模块**:基于 `Skills.txt` 的 `srvdofunc` / `srvstfunc` 分发机制,完整实现亚马逊、法师、死灵法师、圣骑士、野蛮人、德鲁伊、刺客七大职业共 **221 个技能**(含协同加成公式、施法延迟 Cooldown、法力消耗、多段投射物生成与尸体交互)。 ### 3.3 怪物 AI 与房间流式激活 (`ai/`) - **`monster-ai.ts`**:基于 `MonStats.txt` 的 AI 参数(`aidel`, `aip1..aip8`)驱动沉沦魔复活、巫师远程风筝、冥河娃娃自爆、精英怪暗金词缀(闪电强化、特别快速、狂热灵气、免疫计算)及 Act Boss 专属 AI。 - **`room-streamer.ts`**:围绕玩家所在子格坐标按九宫格动态激活/休眠 DRLG 房间并按 `MonDen` 与 `SuperUniques.txt` 刷怪。 ### 3.4 1.13c 物品掉落与存档系统 (`items/`, `save/`) - **掉落管线 (`items/drop-pipeline.ts`)**:完整复刻 `TreasureClassEx.txt` 递归寻路、多人难度 `NoDrop` 指数衰减、MF (Magic Find) 边际递减有效值转换(Unique / Set / Rare / Magic 四级判定)以及 `MagicPrefix.txt` / `MagicSuffix.txt` 词缀池权重抽样。 - **`.d2s` 存档兼容 (`save/d2s-reader.ts`, `save/d2s-writer.ts`)**:支持直接导入或导出与原版 Diablo II v1.13c 二进制逐字节兼容的 `.d2s` 角色存档(含 `0xAA55AA55` 文件头、循环移位累加校验和、`gf` 属性比特流、`if` 技能表与 `JM` 物品列表)。 --- ## 4. 常用验证命令 ```bash # 单独对 src/server 进行类型检查(验证零 DOM / 零 Node 依赖) npx tsc -p tsconfig.server.json --noEmit # 运行服务端战斗、技能、掉落与存档单元测试 npx vitest run tests/server/ tests/skills/ tests/items/ ```