# MS-Network **Repository Path**: PPPPLeung/ms-network ## Basic Information - **Project Name**: MS-Network - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-14 - **Last Updated**: 2026-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BeiDou MapleStory Godot Client 这是一个用 Godot 4.2 + C# 编写的 BeiDou MapleStory 客户端,用于连接 BeiDou-Server。 ## 功能特性 - ✅ TCP 网络连接 - ✅ MapleStory AES 加密/解密 - ✅ 完整的数据包编解码系统 - ✅ 账号登录功能 - ✅ 服务器列表获取 - ✅ 角色列表显示 - ✅ 角色选择 - ✅ 频道连接 ## 项目结构 ``` godot-client/ ├── Scripts/ │ ├── Network/ │ │ ├── MapleAES.cs # MapleStory AES 加密实现 │ │ ├── PacketWriter.cs # 数据包写入器 │ │ ├── PacketReader.cs # 数据包读取器 │ │ ├── Opcodes.cs # 操作码定义 │ │ ├── MapleClient.cs # TCP 客户端核心 │ │ └── LoginManager.cs # 登录流程管理 │ └── Main.cs # 主界面控制器 ├── Main.tscn # 主场景 ├── project.godot # Godot 项目配置 ├── BeiDouClient.csproj # C# 项目文件 └── README.md # 本文件 ``` ## 使用方法 ### 1. 前置要求 - Godot 4.2 或更高版本(支持 C#) - .NET 6.0 SDK 或更高版本 - 运行中的 BeiDou-Server ### 2. 打开项目 1. 启动 Godot Engine 2. 导入此项目(选择 `project.godot` 文件) 3. 等待 Godot 完成 C# 项目构建 ### 3. 运行客户端 1. 在 Godot 编辑器中按 F5 或点击"运行项目" 2. 界面将显示连接和登录选项 ### 4. 连接流程 #### 步骤 1: 连接到登录服务器 - **Host**: 输入服务器地址(默认:127.0.0.1) - **Port**: 输入登录端口(默认:8484) - 点击 **Connect** 按钮 #### 步骤 2: 登录账号 - **Username**: 输入账号名 - **Password**: 输入密码 - 点击 **Login** 按钮 #### 步骤 3: 选择服务器 - 登录成功后,服务器列表会自动显示 - 点击要进入的服务器(世界) #### 步骤 4: 选择角色 - 服务器选择后,该世界的角色列表会显示 - 双击要使用的角色 #### 步骤 5: 进入游戏 - 客户端会自动连接到频道服务器 - 连接成功后会显示"Successfully connected to game channel!" ## 网络协议说明 ### 服务器配置 - **MapleStory 版本**: 83 - **登录端口**: 8484 - **加密方式**: MapleStory AES + IV ### 主要数据包流程 1. **握手包** (Handshake) - 服务器发送版本和 IV 信息 - 格式: `[Header(2)] [Version(2)] [Patch(2)] [Patch2(1)] [RecvIV(4)] [SendIV(4)] [Locale(1)]` 2. **登录请求** (LOGIN_PASSWORD = 0x01) ``` - Username (String) - Password (String) - HWID (4 bytes) ``` 3. **登录响应** (LOGIN_STATUS = 0x00) ``` - Status (Int) - 0 表示成功 - Account ID (Int) - Gender (Byte) ``` 4. **服务器列表** (SERVERLIST = 0x0A) - 包含世界信息和频道列表 5. **角色列表** (CHARLIST = 0x0B) - 包含账号下的所有角色信息 6. **频道连接** (SERVER_IP = 0x0C) - 服务器返回频道服务器的 IP 和端口 ## 代码示例 ### 手动创建客户端连接 ```csharp // 创建客户端实例 var client = new MapleClient(); AddChild(client); // 连接到服务器 await client.ConnectAsync("127.0.0.1", 8484); // 发送登录数据包 using (var packet = new PacketWriter((short)SendOpcode.LOGIN_PASSWORD)) { packet.WriteString("username"); packet.WriteString("password"); packet.WriteZero(6); packet.WriteBytes(new byte[] { 0x12, 0x34, 0x56, 0x78 }); // HWID client.SendPacket(packet); } ``` ### 监听数据包 ```csharp client.PacketReceived += (packet) => { GD.Print($"Received opcode: 0x{packet.Opcode:X2}"); switch ((RecvOpcode)packet.Opcode) { case RecvOpcode.LOGIN_STATUS: int status = packet.ReadInt(); if (status == 0) { int accountId = packet.ReadInt(); GD.Print($"Login success! Account: {accountId}"); } break; } }; ``` ## 已实现的操作码 ### 发送操作码 (SendOpcode) - `LOGIN_PASSWORD (0x01)` - 账号密码登录 - `SERVERLIST_REQUEST (0x0B)` - 请求服务器列表 - `CHARLIST_REQUEST (0x05)` - 请求角色列表 - `CHAR_SELECT (0x13)` - 选择角色 - `PLAYER_LOGGEDIN (0x14)` - 进入频道 - `PONG (0x18)` - 心跳响应 ### 接收操作码 (RecvOpcode) - `LOGIN_STATUS (0x00)` - 登录状态 - `SERVERLIST (0x0A)` - 服务器列表 - `CHARLIST (0x0B)` - 角色列表 - `SERVER_IP (0x0C)` - 频道服务器地址 - `PING (0x11)` - 心跳检测 - `SET_FIELD (0x7D)` - 进入地图 ## 调试技巧 1. 所有网络数据包都会在控制台输出 2. 日志面板会显示连接和登录的详细信息 3. 如果连接失败,检查: - 服务器是否在运行 - 端口是否正确 - 防火墙设置 ## 常见问题 ### Q: 连接后立即断开? A: 检查 MapleStory 版本是否匹配(当前版本:83) ### Q: 登录失败? A: 确认账号密码正确,或检查服务器是否启用自动注册 ### Q: 看不到角色列表? A: 确保先选择了服务器(世界) ## 扩展开发 你可以在此基础上添加: - 游戏内移动和交互 - NPC 对话系统 - 物品栏管理 - 技能系统 - 聊天功能 - 地图渲染 参考 BeiDou-Server 的 Java 代码来实现更多数据包处理。 ## 技术栈 - **引擎**: Godot 4.2 - **语言**: C# (.NET 6.0) - **网络**: TcpClient (System.Net.Sockets) - **加密**: AES (System.Security.Cryptography) ## 许可证 本项目遵循 BeiDou-Server 的开源协议。 ## 贡献 欢迎提交 Issue 和 Pull Request!