JohnPitter/openrakion

GitHub: JohnPitter/openrakion

用 .NET 9 从零重写的 Rakion 游戏开源私服服务端,提供完整的登录、大厅、商店、背包及对战功能,无需依赖原厂专有二进制文件即可跨平台运行。

Stars: 1 | Forks: 2

# OpenRakion **Rakion**(SoftNyx,*XfsVer258* 版本)的**开源**私服 —— 包含一个**从零开始用 .NET 重写的服务器**:broker、world(大厅/房间/对战)和 buddy,以及认证后端。你可以登录、进入大厅、打开背包/仓库、在商店中**买卖**并加入对战 —— **无需依赖 SoftNyx 的专有服务端可执行文件**。原生运行于 **Windows、Linux 和 Mac**(.NET 9,无需 Wine)。 ## 改变了什么 Rakion 的私服已经存在了十多年,但一直依赖于 **SoftNyx 的服务端二进制文件**(在 Wine 下运行),并且几乎总是卡在**“登录界面卡死”**。OpenRakion 现在远超于此: - 🟢 **100% 自主开发的 .NET 服务器**(不使用 SoftNyx 的可执行文件)。服务包括: - **Broker** (`RakionServer.Broker`) — 服务器/频道列表,广播 world(广播 IP)并处理登录桥接。 - **World** (`RakionServer.World`) — 完整登录、大厅、频道/房间列表、角色选择、**持久化的背包 + 仓库(box)**、**带有实时余额的商店(购买和出售)**、**Power User**(购买 + 可配置的 XP/金币奖励)、聊天、**UDP 游戏**握手以及对战引擎。 - **Buddy** (`RakionServer.Buddy`) — 好友列表/信使。 - **LauncherWeb** (`RakionServer.LauncherWeb`) — 启动器的 Web 认证(登录 + 自动更新 `fetch`),基于 ASP.NET;重新实现了 [CarlosX 的 RakionLauncher](https://github.com/CarlosX/RakionLauncher) 的 PHP 认证/`fetch` 后端(见 [CREDITS.md](CREDITS.md);此处不重新分发原始 PHP)。 - **Admin** (`RakionServer.Admin`) — Web 面板(Blazor),用于管理**账号、金币/点券、背包物品**(游戏风格的视觉界面,带有名称)、**Power User 配置**(价格/奖励/倍率/促销)以及**发布**启动器更新。 - 🟢 **解决登录问题** — 曾经阻碍社区的绊脚石。现在账号可以登录,world 接受连接,数据库加载角色和物品。 ## 实事求是的状态(什么能用 / 什么不能用) | 功能区域 | 状态 | |---|---| | 完整登录(broker → world → DB) | ✅ 正常 | | 大厅、频道、房间列表 | ✅ | | 角色选择、背包、**跨会话的仓库(box)** | ✅ | | **商店:购买和出售**,带有实时的金币/点券余额 | ✅ | | UDP 握手 + 进入战场 + 对战引擎 | ✅ | | **Power User**(购买 + 可配置的 XP/金币奖励 + bonus points) | ✅ | | **管理面板**(账号、金币/点券、物品、PU 配置、更新) | ✅ | | **Stack 原生运行于 Windows/Linux/Mac**(.NET 9,无 Wine/P-Invoke) | ✅ | | 完整的 PvP/deathmatch 模式 | 🟡 已实现服务端的回合引擎(计时器、根据比分结束回合、持久化 win/lose/draw);尚需使用 2 个客户端进行验证 | | 原版 **GameGuard** | ❌ 已失效(nProtect 服务器自约 2007 年起离线) — 需要无 GG 的客户端 | | 背包/商店 ↔ 房间列表导航(**Previous** 按钮) | ✅ | ## 仓库结构 ``` openrakion/ ├── server/ │ ├── RakionServer/ Servidor .NET — código-fonte │ │ ├── src/ .Broker, .World, .Buddy, .Common, .LauncherWeb (auth :80), .Admin (painel :8080) │ │ ├── tools/ OracleDiff (diff de blobs de login) │ │ ├── deploy/ worldserver.ini (template) │ │ ├── start-stack.ps1 Sobe os 4 serviços .NET de uma vez │ │ ├── Dockerfile Container (Linux + .NET) │ │ └── TUTORIAL.md Setup passo a passo │ ├── config/ Templates (Settings.ini, GameServers.ini, worldserver.ini) │ └── README.md ├── tools/ xfs_read/repack (XFS2), worldprobe/listprobe (sondas), difftest (teste diferencial) ├── database/ Schema do banco (MariaDB) ├── docs/ Guias (setup, GameGuard, config.xfs) + protocolo (world/buddy) + auditoria (CODE_AUDIT.md) ├── CREDITS.md └── NOTICE.md ``` ## .NET 服务器 — 开始使用 前置条件:**.NET 9 SDK**,**MariaDB**(localhost)。完整详情见 [server/RakionServer/TUTORIAL.md](server/RakionServer/TUTORIAL.md)。 ``` # 1) 数据库:导入 schema(参见 database/README.md — dump 来自 CarlosX 的 RakionLauncher) mysql -uroot -p123456 rakion < rakion_all.sql # ajuste a senha; crie a conta de teste # 2) build cd server/RakionServer dotnet build -c Release RakionServer.sln # 3) configs:在 deploy/worldserver.ini 和 src/RakionServer.Broker/Settings/ 中调整 IP/凭证 # 4) 运行 — 一次性运行所有服务(Windows): cd server/RakionServer && ./start-stack.ps1 # 或者在每个进程中分别运行各个服务: # - launcher web:RakionServer.LauncherWeb (RakionLauncherWeb) 端口 80 # - broker:RakionServer.Broker (BrokenServer) 端口 40706 # - world:RakionServer.World (RakionWorldServer) TCP 40708 / UDP 40708-40709 # - admin:RakionServer.Admin (RakionAdmin) 端口 8080 # - buddy:RakionServer.Buddy (可选) ``` ### 示例凭据(开源 — 如有需要请修改) 以下内容均为**开发默认值**,为了方便本地运行而**特意公开**。使用者可自行修改 —— 尤其是在暴露给网络之前: | 位置 | 示例值 | 文件 | |---|---|---| | MariaDB | `root` / `123456` | `deploy/worldserver.ini`, `src/*/appsettings.json` | | 管理面板 | 密码 `rakion` | `src/RakionServer.Admin/appsettings.json` → `Admin:Password` | | 测试账号 | 自行创建(在管理面板或直接在 DB 中) | — | 在未修改这些密码的情况下,请勿将 **3306**(DB)和 **8080**(admin)端口公开暴露。 ### 管理面板 随 stack 一起在 **http://localhost:8080** 启动(使用密码 `Admin:Password` 登录)。在那里你可以创建/编辑**账号**、调整**金币/点券**、向背包**添加物品**(游戏风格的视觉网格,带有物品名称)、配置 **Power User**(价格、奖励、XP/金币倍率、促销)以及通过启动器的自动更新**发布**客户端更新。 ## 客户端(专有) OpenRakion **不分发**客户端。你需要一份合法的 Rakion v258 副本,并且为了连接到自建服务器: 1. 生成指向**你自己的** Web URL 的 **`config.xfs`**(否则客户端会卡在 *"Config.xfs File not found or changed"*) — 见 [docs/config-xfs.md](docs/config-xfs.md)。 2. 使用**无 GG** 的客户端(原版 GameGuard 已无法初始化 — 见下文)。 ## GameGuard(实事求是的结论) GameGuard(nProtect,2007)**已经无法初始化**:GameMon 会请求 nProtect 的更新/认证服务器,而该服务器已**离线**多年(*"Game guard error : 0"*)。**这并不是** Windows 11/驱动的问题;Win7/10 虚拟机**也无法解决**。出路:通过启动器的流程游玩(在某些版本中,`rakion.bin` 会在 GG 非致命失败的情况下连接),或者对客户端应用 *no-GG* 补丁。详见 [docs/gameguard.md](docs/gameguard.md)。 ## 工具 - **`tools/xfs_repack.py`** / **`xfs_read.py`** — SoftNyx 的 **XFS2** 格式读取器/重打包工具(纯 Python 实现)。无需 iXFS 即可编辑 `DataSetup.xfs` 内的文件(例如:重命名 `locale.ini` 中的服务器)。已验证往返读写。 - **`tools/worldprobe.py`** / **`listprobe.py`** — world 协议(登录、背包、商店)的无头探测工具 — 它们可以连接、解密 AES 并验证数据包,而无需打开游戏。 - **`tools/extract_item_names.py`** / **`finalize_item_names.py`** — 从 `items.dat` 的标签中提取每个物品的名称(DB 中的 `iteminfo` 没有名称),并为缺失的名称生成“类别+等级”的兜底方案;此输出由管理面板(`item_names.tsv`)使用。 ## 致谢 得益于社区十多年的工作成果 —— 特别是 **CarlosX**([RakionLauncher](https://github.com/CarlosX/RakionLauncher),GPL-3.0:BrokenServer,GConfig,PHP Web 认证),**SirMaster**,**jdastridge** (iXFS) 以及 **RaGEZONE** 社区。本仓库的 .NET 服务器是在对协议进行逆向工程的基础上**从零开始重写**的,但也依赖于这些知识积累。见 **[CREDITS.md](CREDITS.md)**。 ## 许可证 本仓库的原创资料(.NET 服务器、工具、文档)基于 **GPL-3.0** 许可证;第三方组件保留其原有的 GPL 许可证。见 [LICENSE](LICENSE) 和 [NOTICE.md](NOTICE.md)。
标签:Blazor, 后端开发, 游戏仿真, 游戏服务器, 私服, 请求拦截, 逆向工具