Skip to content

目录与版本边界 ​

仓库目录 ​

text
C:\D2113server
├─ d2109/                     Diablo II 1.09 独立项目
│  ├─ admin-ui/               109 管理后台与 Node 网关
│  ├─ crates/                 d2109-api、存档和文本库
│  ├─ pvpgn-server/           109 BNetD、D2CS、D2DBS、PvPGN
│  ├─ d2gs/                   109 D2GS
│  ├─ data/                   109 静态数据
│  ├─ dependencies/           109 构建依赖
│  └─ third_party/            109 第三方源码
├─ d2113/                     Diablo II 1.13c 独立项目
│  ├─ admin-ui/               113 管理后台与 Node 网关
│  ├─ crates/                 d2113-api、存档和文本库
│  ├─ pvpgn-server/           113 BNetD、D2CS、D2DBS、PvPGN
│  ├─ d2gs/                   113 D2GS
│  ├─ data/                   113 静态数据
│  ├─ dependencies/           113 构建依赖
│  └─ third_party/            113 第三方源码
├─ forum/                     论坛与论坛服务前端独立项目
│  ├─ phpwind/                PHPWind 论坛和 d2109/d2113 业务入口
│  ├─ bridges/                QQ、微信等消息桥接
│  └─ tools/                  论坛修复与运营工具
├─ deploy/                    跨主机部署清单和平台模板
│  ├─ realms/                主机、端口、实例和环境覆盖清单
│  ├─ windows/               Windows 服务、IIS 和安装模板
│  ├─ docker/                Linux 容器镜像构建文件
│  ├─ d2wine/                Wine32 游戏服务启动入口
│  ├─ phpwind/               论坛容器与运行模板
│  ├─ pvpgn-lua/             PvPGN Lua 扩展部署文件
│  └─ host/                  宿主机初始化和权限脚本
├─ scripts/                   构建、发布、切换、审计和测试入口
├─ dist/                      本机构建与发布包;可重新生成,不是源码
├─ runtime/                   本机可变运行数据,不属于任何源码项目
├─ docs/                      开发与历史专题文档
└─ docs-site/                 在线运维文档

d2109 和 d2113 是两个可单独构建、测试和发布的项目。禁止从一个项目的源码目录导入另一项目的 API、管理后台、PvPGN、D2GS、静态数据或构建依赖。根目录的 deploy/ 与 scripts/ 只负责编排,不承载版本业务实现。

两个版本目录中的常见子目录含义相同但内容不能共用:admin-ui 是 Vue/Node 后台;crates 是 Rust 工作区;pvpgn-server 是 BNetD、D2CS、D2DBS 源码;d2gs 是对应版本 D2GS;data 是规则和文本数据;dependencies、third_party、vendor 是可复现构建依赖;tools 是本版本专用转换和验证工具;deploy 是本版本非敏感运行配置。113 独有的 d2slib、d2gs-reference 只服务 113 开发,不得被 109 构建引用。

.git 是版本历史,不能手工删除;.gitignore 指定不提交的运行数据;.gitattributes 管理文本换行;AGENTS.md 是工作区维护约束;docker-compose.admin-ui.example.yml 是示例,不是当前正式部署入口。

正式 Web 目录 ​

text
C:\D2109server                109 API、数据、日志与 VIP Agent
D:\GM109.DIABLO2.COM.CN
├─ admin\                     109 后台程序
├─ runtime\node\             109 Node 运行时
├─ logs\                      109 后台日志
├─ backups\                   109 后台发布备份
├─ secrets\                   109 后台私密配置
├─ run-admin.cmd              109 后台启动入口
└─ web.config                 109 IIS 根站点配置

C:\D2113server                113 API、数据与日志
D:\GM113.DIABLO2.COM.CN
├─ admin\                     113 后台程序
├─ runtime\node\             113 Node 运行时
├─ logs\                      113 后台日志
├─ backups\                   113 后台发布备份
├─ secrets\                   113 后台私密配置
├─ run-admin.cmd              113 后台启动入口
└─ web.config                 113 IIS 根站点配置

D:\AH.DIABLO2.COM.CN
├─ d2109\                     109 论坛业务入口和通知配置
├─ d2113\                     113 论坛业务入口和通知配置
├─ docs\                      运维文档站
├─ forum-services\d2109\     109 独立 PHP 运行时和 runner
├─ forum-services\d2113\     113 独立 PHP 运行时和 runner
├─ compat\                    旧地址的受控兼容入口
├─ backups\                   论坛和文档部署备份
├─ attachment\、data\等       PHPWind 论坛持久文件
└─ web.config                 论坛 IIS 根站点配置

两个后台使用不同服务、端口、Cookie、会话密钥、API 凭据、国度注册表和自动部署包:

项目公网入口Windows 服务回环端口源码
1.09https://GM109.ZHIYESHI.CN/D2Admin1094139d2109/admin-ui
1.13https://GM113.ZHIYESHI.CN/D2Admin1134143d2113/admin-ui

任一后台收到另一版本的 profile 都应拒绝请求,不允许通过隐藏参数重新启用跨版本控制。

后台的客户端路径、方块尺寸、版本标签和部署 profile 由各项目的 project.ts / project-profile.js 固定,不再运行时判断另一版本。每个 GameAgent 也只接受与自身 profile 相同的 system-topology.json 项;错误版本的服务或配置项会被忽略并写入错误日志。新机器安装后分别创建 D2109Agent 或 D2113Agent 计划任务。

不存在公共或共享 /api/。两台公网入口的 /api 与 /api/* 固定返回 404;浏览器只能通过各版本后台的认证代理访问本版本 API。

同一版本的免费/VIP GS 可以分布在不同主机。此时后台仍只管理一个游戏版本,但可连接多个同版本 Agent。当前 109 使用核心 D2109Api 和系统专用 D2109VipAgent;后者只承载 VIP GS 运维接口,不是 113 API,也不代表 113 游戏服务已启用。

运行数据 ​

text
runtime/
├─ pvpgn-109b/                109 账号、配置、角色、锁和备份
├─ d2gs-109b/                 109 D2GS 运行文件
├─ pvpgn-113c/                113 账号、配置、角色、锁和备份
├─ d2gs-113c/                 113 D2GS 运行文件
└─ formal-deployment-state.json

运行数据虽然集中在根目录便于本机测试,但路径必须按版本隔离。var/users、var/charsave、D2DBS 锁、角色备份、API 索引、交易托管和审计目录均不得跨版本共享。

配置清单 ​

deploy/realms/catalog.json 只保存主机拓扑和正式放置关系;109/113 非敏感运行配置分别位于 d2109/deploy/runtime.json 与 d2113/deploy/runtime.json。密码、令牌和签名密钥仅保存在各项目受 ACL 保护的正式机 runner 中。

profile存档版本API论坛入口后台入口
109b92d2109-api-x86.exed2109/d2109.phpGM109.ZHIYESHI.CN
113c96d2113-api-x86.exed2113/d2113.phpGM113.ZHIYESHI.CN

1.09b 与 1.09d 共用 v92 存档规则,不按补丁字母分叉存档解析。

历史协议兼容边界 ​

代码隔离不等于立即重命名现网协议和数据库。pw_d2113_* 是已有论坛业务表前缀,X-D2113-* 是已部署的内部签名请求头,部分 D2113_* 是 GameAgent 的历史通用环境变量。这些名称在完成带回滚方案的数据/API 迁移前继续保留,但不得用于选择游戏版本、存档目录、论坛入口、后台 Cookie、Agent 注册表或系统拓扑。真正的项目选择只能来自 109/113 各自的固定 profile 和部署清单。

仅供 CNBN D2 服务管理与开发人员使用