XFEWarframe
使用 XFEExtension.NetCore.ServerInteractive 4.0.1 承载 HTTP/TLS 的原生 C# 控制台服务器,以及分别运行的 WinUI 3 管理员端与玩家端。C# 安装器与 NativeAOT 兼容组件负责客户端安装、修复、恢复和启动。服务端不提供网页管理页面,不运行、启动或代理 Node.js/TypeScript 服务。
上游清单内 332 条非网页 HTTP 路由均已接入原生 C# 处理逻辑,包括世界状态、任务结算、任务奖励、氏族/联盟/道场、交易、商人、MOD、专精、伙伴及每周玩法。服务器已内置 C# IRC 聊天服务,支持频道、私聊和社交通知。此处路由统计的是 API 实现覆盖;完整游戏客户端联调与所有历史版本兼容性尚未验证,NRS/UDP Hub 实时服务仍需另外提供。
当前范围
上游锁定为 spaceninjaserver/SpaceNinjaServer 提交 aafde8476edd91275de0f30bffe4cf79f4cfc81c。清单涵盖 309 条普通 GET/POST 路由和 23 条正则路由;/cdn/、/:id/dynamic/ 别名另行解析。
| 分类 | 数量 | 含义 |
|---|---|---|
| ported | 17 | 较小的控制器逻辑已移植,仍需客户端联调 |
| partial | 315 | 已有原生业务实现,完整上游分支与客户端版本兼容性待核验 |
| pending | 0 | 清单内没有等待接入的 HTTP 处理器 |
这些是路由计数,不是功能完成度。网页路由按需求排除。模块范围、已知限制与验证方法见 MIGRATION.md、API.md 和 完整接口清单。入口遍历测试会逐条执行 332 条路由,检查是否落入未实现分派或未处理异常;业务测试另行验证扣款、奖励、权限、持久化和重复请求。
两个 WinUI 应用均按已确认的 XFEApplication (WinUI3) 模板实现 AppShellPage、MVVM、WinUIHelper 服务与 XFEProfile 配置,支持深色、浅色和系统主题。架构说明见 DESKTOP-ARCHITECTURE.md。管理员端提供总览、玩家管理、库存、结构化存档/装备/氏族编辑、紫卡工坊、细分编辑权限、账号和世界设置、邮件与新闻发布。玩家端按权限显示本人编辑操作,物品名称支持 15 种语言。使用原生 XAML 控件、WinUI TitleBar 与 Mica 背景,无 WebView。应用声明 Per-Monitor V2 DPI 感知,标题栏的最小化、最大化、关闭与拖动由 Windows 管理。
OpenWF 两套前端的 全部功能盘点 与 当前实现进度 分开维护。尚未完成所有功能。 C# 运行时目前提供本机状态、日志和两个配置开关;脚本、自由镜头、传送、元数据和热修复尚未实现。现有自动测试不能替代游戏登录和完整游玩验收。
编译与运行
物品添加与存档编辑统一在「仓库与编辑」中,使用左侧分类子项;没有编辑权限的玩家仍可只读查看。原生界面语言可在偏好设置中选择,重启后生效。Git 忽略与换行规则见 Git 约定。
玩家需要编辑战甲时,在管理端「玩家编辑权限」开启「允许用户编辑物品」并保存;只开放添加物品不会授权修改已有装备。卡片显示装备权限的开启数量,部分授权可一键补全。玩家端使用与管理员相同的 SelectorBar 详情编辑页,权限变化自动更新入口。操作说明见 战甲与装备编辑。
战甲详情的「多技能实验」支持每槽三个候选,共十二个技能;游戏 HUD 为各槽显示独立的 Xaku 式轮盘,短按循环切换,长按施放并显示进度。切换保留持续技能与实例,施放使用原生音效路径,单槽的两/三个候选同样显示轮盘。两端共用 SelectorBar、SettingsExpander 和 AutoSuggest 编辑页面,玩家沿用「移植技能」权限。新增独立 MOD「感染之王」,装备后让 Nidus 的突变适性常驻上限,阻止大招和不朽扣减层数。需要 1.4.2 或更新的 C# 兼容组件及匹配游戏版本。使用步骤、存档兼容和验证边界见 多技能实验。
游戏标识直接显示在游戏原生登录 UI 中,离开登录界面后隐藏;游戏窗口标题使用目标服务器名称。
开发环境:Windows x64、.NET SDK 10.0.401 或兼容的 10.0 SDK、PowerShell 7;WinUI 工程使用 Windows SDK BuildTools NuGet 包。构建 NativeAOT 兼容组件还需 Visual Studio 的“使用 C++ 的桌面开发”工作负载(仅提供原生链接工具,工程代码仍为 C#)。服务器核心不依赖 WinUI。首次构建需要恢复 NuGet 依赖。数据 JSON 已包含在工程中,正常构建不需要下载上游源码或安装 Node.js。
在项目根目录打开 PowerShell:
./scripts/Build.ps1
./scripts/Test.ps1
./scripts/Smoke-Test.ps1
./scripts/Smoke-Desktop.ps1
./scripts/Check-Git.ps1
./scripts/Start-Desktop.ps1
./scripts/Start-Player.ps1
在桌面端点击“启动本地服务”,或单独运行控制台:
./scripts/Start-Server.ps1
桌面 API 默认监听 http://127.0.0.1:8444,游戏 HTTPS 默认监听 https://127.0.0.1:8443,首次启动生成 Server/runtime/server.json。只有管理员端读取其中的随机管理令牌。玩家端提供账号注册、登录、仓库分类搜索与白金 / 星币 / 内融核心添加,默认开启“记住账号”,登录信息由 Windows 按当前用户加密保存;可在登录窗口或偏好设置中关闭,退出账号会清除保存记录。玩家端不引用管理端、服务端或游戏核心程序集,通过独立的玩家 API 操作本人存档。控制台可以 Ctrl+C 正常退出,管理员端也可以停止服务;关闭桌面窗口不会自动关闭服务。使用方法见 玩家账号与仓库。账号入口位于导航底部,显示游戏头像;注册与登录使用独立弹窗。货币和物品各有独立权限,未获授权的控件隐藏。管理员邮件和游戏内新闻见 发布说明。
在 Visual Studio 中打开 XFEWarframe.slnx,选择 Debug | x64。玩家端的启动项目为 XFEWarframe.Player,调试配置为 XFEWarframe.Player (Unpackaged);管理员端对应 XFEWarframe.Admin (Unpackaged),服务器为 XFEWarframe.Server。XFEWarframe.Client 是安装服务类库,不能作为启动项目。更新配置后请重新加载解决方案;若仍保留旧启动项,右击对应可执行项目,选择“设为启动项目”。完整步骤见 Visual Studio 调试说明。
只构建服务端可运行 ./scripts/Build.ps1 -NoDesktop。控制台支持 --root=<运行目录>、--port=<临时覆盖端口> 和 --routes。--port 不会修改配置文件。
独立运行包
./scripts/Export-Coverage.ps1
./scripts/Publish.ps1
需要生成独立验证包并保留现有启动快捷入口时,使用 ./scripts/Publish.ps1 -SkipLaunchers。
脚本在 artifacts/package-<时间>/ 生成 Windows x64 自包含包:
Server/:控制台服务器,使用Server/Start.cmd启动,数据保存于Server/runtime/。Client/:玩家 WinUI,使用Client/Start.cmd启动;CLI 安装器在Client/Installer/,兼容组件在Client/Bridge/。Admin/:管理员 WinUI,使用Admin/Start.cmd启动,连接本机或远程服务器。XFEWarframe-Server-win-x64.zip、XFEWarframe-Client-win-x64.zip、XFEWarframe-Admin-win-x64.zip:三个独立发行包。source/、docs/、licenses/、validation/:对应源码、文档、许可证和发布验证报告。
源码也按上述三个角色分目录;根解决方案及三个角色的独立解决方案均已更新。旧根目录 runtime/ 的数据保留原位,可通过启动脚本的 -Root ./runtime 继续使用。
客户端安装
打开玩家端 →“安装与维护”→ 选择游戏副本 → 填写 API 地址 →“检测版本”→“安装 / 修复”。返回首页启动游戏。游戏更新后会重新检查 EXE 哈希和函数签名,拒绝使用旧地址启动;未知签名会报告具体不匹配项,不会强行修改。备份恢复、命令行示例和确切验证范围见 INSTALLER.md。
以复制到 D:\Warframe 的 2026.08.19.11.06 客户端为目标,201 个复制文件逐一 SHA-256 校验一致;11 项关键签名、原生组件自检、安装/卸载恢复/重装通过。2026-09-25 实测修复了挂起进程模块枚举错误,真实游戏已加载兼容组件并进入登录界面,原 Steam 目录保持不变。游戏登录与完整游玩流程仍待确认,不能据此宣称所有新版本完全兼容。见 实机验证记录。
配置和存档
server.json 的主要字段:
| 字段 | 作用 |
|---|---|
ListenUrls |
ServerInteractive 监听地址,例如 ["http://127.0.0.1:8444/"] |
PublicUrl |
桌面 API 的公开源地址 |
GameListenUrl / GamePublicUrl |
游戏 HTTPS 监听 / 公开地址,默认 8443;远程部署须改为客户端可访问的主机 |
ServerName |
默认服务器名称;管理端「连接与设置」可在线修改,覆盖值保存到存档 |
AdminToken |
至少 32 字符;首次启动随机生成,不写入应用包 |
AutoCreateAccount |
是否允许首次游戏登录自动创建账户 |
AllowPlayerRegistration |
是否允许玩家桌面端注册账号,默认开启;管理员端可修改 |
AllowPlayerCurrencyGrant |
是否允许玩家为本人添加白金、星币和内融核心,默认开启;管理员端可修改 |
FallbackBuildLabel |
请求不携带 buildLabel 时采用的版本标签 |
TlsPfxPath |
可选 TLS PFX 文件,相对运行目录解析 |
TlsPasswordEnvironmentVariable |
保存证书密码的环境变量名称 |
IrcAddresses |
显式聊天地址;留空时自动公布内置 IRC 的游戏服务器主机地址,支持 %THIS_MACHINE% |
Irc |
内置聊天配置,默认开启;监听 127.0.0.1,TCP 6665–6669、TLS 6695–6699,随服务端启动和停止 |
NrsAddresses |
外部 NRS 地址;本工程尚未实现 NRS 实时服务 |
HubServers |
外部 UDP Hub 列表,例如 [{"Address":"127.0.0.1:6952","Regions":["0"],"DtlsUnsupported":false}];HTTP Arbiter 据此分配大厅 |
NoHubDiscrimination / Dtls |
大厅共享与 DTLS 协商配置 |
GoogleClientIds |
Android 登录接受的 Google OAuth 客户端 ID;没有配置时返回 503 |
GameAssetRoot |
游戏纹理/缓存根目录;默认运行目录中的 assets,不附带游戏二进制资源 |
编辑监听/TLS 配置后需重启服务。远程管理可在 WinUI 中输入服务地址和令牌;远程令牌仅保存在当前进程内存中。
游戏内通讯无需单独运行 IRC 程序。更新服务端并重新登录游戏后生效;已有配置缺少 Irc 字段时也默认开启。当前 2026.08.19.11.06 原生客户端支持服务端握手校验,无需修改客户端;同时接受 nonce 和 OpenWF IRC token。监听配置、旧版兼容边界及验证记录见 游戏内通讯。
存档位于 Server/runtime/data/state.json,使用写入临时文件、刷盘、替换原文件的方式提交,并保留上一版 state.json.bak。单个运行目录有独占进程锁;账户、货币、物品变更在同一个事务中提交。恢复备份时先停止服务,再把备份复制为 state.json。发现损坏存档会拒绝启动,不会覆盖它。
当前使用单进程 JSON 快照存储,不是上游 MongoDB 的直接替代。库存导入是部分字段合并工具,不等于迁移上游全部账户、公会、会话和消息数据库。大型存档和多实例共享数据库仍需进一步实现与测试。
API
健康检查 GET /health。桌面管理 API 位于 /control/v1/,使用 Authorization: Bearer <AdminToken>;游戏 API 保留上游路径和 accountId / nonce 鉴权。/、/webui/* 返回 JSON 404。
$config = Get-Content ./Server/runtime/server.json -Raw | ConvertFrom-Json
$headers = @{ Authorization = 'Bearer ' + $config.AdminToken }
Invoke-RestMethod http://127.0.0.1:8444/control/v1/snapshot -Headers $headers
接口说明:API.md。管理密码按游戏的 Whirlpool 协议生成摘要,再用带盐 PBKDF2 存储验证值。请求日志仅记录方法、路径、状态、耗时,不记录查询参数、请求正文或鉴权头。
验证范围
- 290 项后端 .NET 测试:包括路由入口、存档事务、制作/交易/赠礼、任务/遗物/Nemesis、氏族/道场、Helminth、轮换奖励、玩家权限、库存分页和编辑保存;普通玩家的 18 项战甲操作逐项提交并回读,与管理端字段及候选项保持一致;另覆盖同一配置的多技能候选及数据保留。
- 84 项客户端库测试:路径边界、备份回滚、取消、中断恢复、外部文件保护、Steam 路径、URL 重定向、AES 请求解码、真实挂起进程的模块定位、技能候选短按/长按、轮盘资源覆盖与进度,以及游戏测试接口的参数校验、鉴权与超时。原生 DLL 另有真实 x64 回调与 RIP 相对指令重定位自检。
- 34 项真实 ServerInteractive HTTP/HTTPS 检查:压缩/原始请求、鉴权、无网页、世界轮换、每周奖励、重复解锁、缓存二进制、日志脱敏、正常退出。脚本默认独立编译最新源码,使用临时端口与临时存档;可通过
-ServerPath检查发布包。 - WinUI 集成检查包括页面导航、ViewModel 加载、不同宽度布局和只读权限场景;
-VerifyDialogs进一步执行真实原生控件的搜索、按钮保存、对话框开关、编辑权限变化和 API 回读,管理员 32 项、玩家 38 项。此范围不代替完整游戏流程验证。
测试产物位于 artifacts/test-results/、artifacts/http-smoke-*/ 和 artifacts/desktop-smoke-*/。测试存档与个人配置不打包为正式运行数据。
多技能实验已在 2026.08.19.11.06 游戏副本中完成自动原生登录与幻影装置验证。Nidus 的 28 项游戏检查覆盖十二候选切换、长按施放、零层数的移植四技能,以及 Jade 荣耀武器、飞行动画控制器与退出恢复。另有轮盘检查覆盖四槽图标、选中动画、长按进度、两个候选与 Helminth 图标、配装重建及原版 Xaku HUD 回调保留。测试直接调用游戏内部接口,无需人工登录或桌面输入;具体组合和验证边界见 多技能实验。
更新上游数据
正常运行完全不使用 upstream/。需要重新生成对照清单或数据时:
git clone https://github.com/spaceninjaserver/SpaceNinjaServer upstream/SpaceNinjaServer
git -C upstream/SpaceNinjaServer checkout aafde8476edd91275de0f30bffe4cf79f4cfc81c
./scripts/Import-UpstreamMetadata.ps1
./scripts/Import-ExportData.ps1
./scripts/Import-WorldData.ps1
PublicExport 来自上游锁定的 warframe-public-export-plus 0.6.8,导入时按 package-lock 校验 SHA512,只复制 JSON。世界轮换、商人、掉落、活动、Nemesis、旧版配方等数据从上游静态字面量提取;导入脚本不会执行 JavaScript。运行时只加载程序集内嵌 JSON。更换上游提交后必须重新评审协议、覆盖清单与测试。
保留上游完整许可证(AGPL 文本及 Commons Clause 条件),详见 LICENSE 与 第三方来源。
2026-09-26 修复与验证:新版服务版本检测、玩家登录、游戏 HTTPS、服务器命名、游戏右上角标识,以及后台加载与分页库存预览,见 修复记录。