4.8 KiB
4.8 KiB
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. 目录结构
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 固定步长推进:- 玩家输入指令队列消费(移动、普通攻击、技能施放、拾取/穿戴/药水、NPC 交互)。
- 状态持续时间衰减(中毒、冰冻、诅咒、战吼、神殿 Buff)与生命/法力自然回复。
- 光环扫描器 (
aura-scanner.ts) 周期性范围索敌与属性挂载。 - 投射物引擎 (
missile-engine.ts) 步进碰撞检测与子投射物分裂。 - 怪物与召唤物 (
summon-manager.ts) AI 决策与动作帧推进。 - 状态总线 (
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. 常用验证命令
# 单独对 src/server 进行类型检查(验证零 DOM / 零 Node 依赖)
npx tsc -p tsconfig.server.json --noEmit
# 运行服务端战斗、技能、掉落与存档单元测试
npx vitest run tests/server/ tests/skills/ tests/items/