Krilliac/smellslikenapalm

GitHub: Krilliac/smellslikenapalm

一个基于 C++17 的《风起云涌 2:越南》自定义专用服务器模拟器,通过逆向 UE3 协议实现模块化、可扩展的游戏服务端架构。

Stars: 1 | Forks: 0

# RS2V 自定义服务器 ⚠️ 注意:此代码库正在积极开发中。 - 公共 API、文件布局和命名约定尚未最终确定,可能随时更改,恕不另行通知。 - 某些子系统目前仍为占位符或概念验证。 - 主服务器目标目前可以在 MSVC 和 MinGW 上构建,但实时网络代码仍在开发中(请参阅下文的当前状态)——原版客户端尚无法完全连接。 我们欢迎提交 issue 和 pull-request,但请经常同步代码,并在开始主要工作之前查看 TODO.md 一个模块化、可扩展的专用服务器*模拟器*,专为《风起云涌 2:越南》(Rising Storm 2: Vietnam)编写,使用 C++17。代码库围绕生产级架构(遥测、安全和网络子系统)进行组织,但这些子系统中的许多仍在开发中——在依赖其中任何一个之前,请先参阅下文的**当前状态**。 ## 📌 当前状态(截至当前分支) **项目性质:** 一个从头开始、净室设计的专用**服务器模拟器**,专为*《风起云涌 2:越南》*(一款基于 Unreal Engine 3 (`EngineVersion 7258`) 构建的游戏)打造。它**不是**官方服务器,也不隶属于 Tripwire Interactive 或 Epic Games。 **目前进展:** - ✅ **构建顺利** 在 MSVC (`build/`) 和 MinGW (`build-mingw/`) 上。主服务器目标可成功编译。 - 🚧 **UE3 控制通道握手正在实现中。** Hello / Challenge / Login / Welcome 消息序数已从零售客户端中完成逆向工程并正在接入(参见 `src/Network/ControlChannel.*`、`NetMessages.h` 和 `src/Protocol/ReverseEngineering/`)。**原版零售客户端尚无法完全连接。** - 🚧 **实时网络代码仍有部分为占位符。** 套接字、数据包和复制管道的底层支持已存在,但端到端的游戏玩法流量尚未完全可用。 - ⛔ **C# (.NET) 脚本目前处于禁用状态。** 脚本宿主依赖于已弃用的 .NET COM 托管 API (`ICorRuntimeHost`),该 API 无法构建;`ENABLE_SCRIPTING` 默认为 `OFF`,引擎需要重构以迁移至受支持的托管 API。参见 `src/Scripting/`。 - 🚧 **遥测和安全系统部分为存根实现。** 接口和报告器已存在,并且 EAC 层是一个独立的*模拟*(非真实的 EAC),但覆盖范围尚不完整。 本 README 的其余部分介绍了预期的架构和功能集。请将下文的功能描述视为**设计目标 / 研发中**,而非已完成且经过实际测试的功能。有关当前路线图,请参阅 [TODO.md](TODO.md)。 ## 🌟 核心功能(设计目标) ### 🌐 网络 - **TCP/UDP 协议栈**:自定义套接字层,带有数据包/复制管道 - **兼容 UE3 的协议**:针对 RS2:V 的 "bunch" / 控制通道协议(握手正在开发中——请参阅当前状态) - **网络质量管理**:带宽核算与连接质量监控 - **压缩**:可配置的数据包压缩(zlib,带有内置的备用存根) ### 🎮 游戏系统 - **物理**:刚体、碰撞和载具模拟基础框架 - **玩家管理**:玩家生命周期、团队平衡和统计跟踪 - **比赛管理**:回合系统、目标跟踪和可配置的游戏模式 - **地图系统**:地图加载、轮换管理和出生点处理 ### 🔒 安全(模拟,部分功能) - **反作弊模拟**:独立的 EAC *模拟*层,辅以行为/统计检查(非真实的 Easy Anti-Cheat) - **身份验证框架**:Steam 风格的身份验证和会话管理 - **输入验证**:数据包验证与移动验证 - **审计日志**:操作和安全事件日志记录 ### 📊 遥测 - **指标收集**:系统指标(CPU、内存、网络)和应用程序指标 - **多种导出格式**:JSON 文件、Prometheus 端点、CSV 导出和内存缓冲区 - **性能分析**:计时与瓶颈检测 - **告警**:带有可配置通知的基于阈值的监控 ### 🔧 可扩展性与脚本(脚本功能目前禁用) - **插件系统**:可加载的本地处理程序库 - **脚本钩子架构**:事件/数据包钩子(C# 脚本宿主已**禁用**,等待重构——请参阅当前状态) - **配置管理**:实时重新加载、分层配置和特定环境的设置 ## 📋 目录 - [快速开始](#-quick-start) - [架构概览](#-architecture-overview) - [安装说明](#-installation) - [配置](#-configuration) - [使用说明](#-usage) - [开发指南](#-development) - [官方文档](#-documentation) - [贡献指南](#-contributing) - [开源许可](#-license) ## 🚀 快速开始 ### 前置条件 - **兼容 C++17 的编译器**(GCC 8+、Clang 7+、MSVC 2019+) - **CMake 3.15+** - **OpenSSL 1.1.0+** - **Steam SDK**(用于身份验证) - **nlohmann/json**(用于配置) ### 构建与运行 ``` # 克隆和构建 git clone https://github.com/Krilliac/smellslikenapalm.git cd smellslikenapalm mkdir build && cd build # 配置 cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_TELEMETRY=ON # 构建 cmake --build . --config Release --parallel # 使用默认配置运行 ./rs2v_server --config ../configs/server.ini --port 7777 ``` ### Docker 快速开始 ``` # 构建 container docker build -t rs2v-server . # 使用持久化配置运行 docker run -d \ --name rs2v-server \ -p 7777:7777/udp \ -p 9100:9100/tcp \ -v $(pwd)/configs:/app/configs \ -v $(pwd)/logs:/app/logs \ rs2v-server ``` ## 🏗 架构概览 RS2V 服务器建立在模块化、事件驱动的架构之上,旨在实现可扩展性和可维护性: ``` ┌─────────────────┬─────────────────┬─────────────────┐ │ Game Logic │ Security │ Telemetry │ ├─────────────────┼─────────────────┼─────────────────┤ │ • GameServer │ • EAC Proxy │ • Metrics │ │ • PlayerManager │ • Anti-Cheat │ • Prometheus │ │ • TeamManager │ • AuthManager │ • File Reporter │ │ • MapManager │ • BanManager │ • Alerting │ └─────────────────┴─────────────────┴─────────────────┘ ┌─────────────────┬─────────────────┬─────────────────┐ │ Networking │ Physics │ Utilities │ ├─────────────────┼─────────────────┼─────────────────┤ │ • TCP/UDP Stack │ • Rigid Bodies │ • ThreadPool │ │ • Protocol │ • Collisions │ • MemoryPool │ │ • Replication │ • Vehicles │ • Config Mgmt │ │ • Compression │ • Projectiles │ • File I/O │ └─────────────────┴─────────────────┴─────────────────┘ ``` ### 核心子系统 | 子系统 | 描述 | 关键组件 | |-----------|-------------|----------------| | **Network** | 具有协议处理功能的高性能网络 | `NetworkManager`, `PacketSerializer`, `CompressionHandler` | | **Game Logic** | 完整的游戏状态管理和规则 | `GameServer`, `GameMode`, `PlayerManager`, `TeamManager` | | **Physics** | 实时物理模拟和碰撞 | `PhysicsEngine`, `CollisionDetection`, `VehicleManager` | | **Security** | 多层反作弊和身份验证 | `EACProxy`, `AuthManager`, `MovementValidator` | | **Telemetry** | 生产环境监控与分析 | `TelemetryManager`, `MetricsReporter`, `PrometheusReporter` | | **Scripting** | 动态插件和修改支持 | `HandlerLibraryManager`, `ScriptEngine` | ## 📦 安装说明 ### 系统要求 | 组件 | 最低配置 | 推荐配置 | |-----------|---------|-------------| | **CPU** | 2 核心,2.5GHz | 4+ 核心,3.0GHz+ | | **内存** | 4GB RAM | 8GB+ RAM | | **存储** | 10GB 可用空间 | 50GB+ SSD | | **网络** | 100Mbps | 1Gbps+ | | **操作系统** | Windows 10, Ubuntu 18.04, CentOS 7 | Windows 11, Ubuntu 22.04, Rocky Linux 8 | ### 安装依赖项 #### Ubuntu/Debian ``` sudo apt update sudo apt install -y build-essential cmake libssl-dev libjsoncpp-dev \ libsteam-api-dev libgtest-dev zlib1g-dev ``` #### CentOS/RHEL ``` sudo yum groupinstall "Development Tools" sudo yum install cmake3 openssl-devel jsoncpp-devel steam-sdk-devel \ gtest-devel zlib-devel ``` #### Windows (vcpkg) ``` vcpkg install openssl nlohmann-json gtest zlib ``` ### 构建配置选项 | 选项 | 默认值 | 描述 | |--------|---------|-------------| | `ENABLE_TELEMETRY` | `ON` | 构建遥测系统 | | `ENABLE_SCRIPTING` | `OFF` | 启用 C# 脚本宿主(目前无法构建——请参阅当前状态) | | `ENABLE_COMPRESSION` | `ON` | 构建数据包压缩支持(如果可用则使用 zlib,否则使用内置存根) | | `BUILD_TESTS` | `OFF` | 构建 Google Test 测试套件 | ## ⚙️ 配置 服务器使用支持实时重载的分层配置系统。 ### 主配置文件 (`configs/server.ini`) ``` [Server] Name=RS2V Production Server Port=7777 MaxPlayers=64 TickRate=60 LogLevel=INFO AdminPassword=your_secure_password [Network] MaxBandwidthMbps=100.0 CompressionEnabled=true HeartbeatInterval=1000 PacketTimeout=5000 [Game] GameMode=Conquest FriendlyFire=false RespawnTime=10 MaxScore=500 TimeLimit=1800 [Security] EnableEAC=true EACServerKey=your_eac_key MaxLoginAttempts=3 BanDurationMinutes=30 [Telemetry] Enabled=true SamplingInterval=1000 PrometheusPort=9100 MetricsDirectory=logs/telemetry ``` ### 配置文件结构 ``` configs/ ├── server.ini # Main server configuration ├── network.ini # Network-specific settings ├── security.ini # Security and anti-cheat ├── game.ini # Game rules and mechanics ├── maps.ini # Map rotation and settings ├── telemetry.ini # Monitoring configuration └── environments/ ├── development.ini # Dev environment overrides ├── staging.ini # Staging environment └── production.ini # Production environment ``` ## 🎯 使用说明 ### 基本服务器操作 #### 启动服务器 ``` # 标准操作 ./rs2v_server --config configs/server.ini --port 7777 # 带详细日志的开发模式 ./rs2v_server --config configs/development.ini --log-level DEBUG --no-eac # 带 telemetry 的生产模式 ./rs2v_server --config configs/production.ini --enable-telemetry --prometheus-port 9100 ``` #### 命令行选项 | 选项 | 描述 | 示例 | |--------|-------------|---------| | `--config ` | 主配置文件 | `--config server.ini` | | `--port ` | 覆盖服务器端口 | `--port 7777` | | `--log-level ` | 设置日志级别 | `--log-level DEBUG` | | `--no-eac` | 禁用 Easy Anti-Cheat | `--no-eac` | | `--enable-telemetry` | 强制启用遥测 | `--enable-telemetry` | | `--prometheus-port ` | Prometheus 指标端口 | `--prometheus-port 9100` | ### 管理命令 #### 游戏内管理员命令 ``` !kick [reason] # Kick a player !ban [reason] # Ban a player !unban # Unban a player !changemap # Change current map !setnextmap # Set next map in rotation !balance # Force team balance !restart # Restart current round ``` #### RCON 命令 ``` # 通过 RCON 连接 rcon_connect localhost:7778 your_rcon_password # Server 管理 rcon_exec "status" # Show server status rcon_exec "players" # List connected players rcon_exec "maps" # Show available maps rcon_exec "config reload" # Reload configuration rcon_exec "telemetry status" # Show telemetry status ``` ### 监控与遥测 #### Prometheus 指标端点 ``` # 在浏览器中查看指标 http://localhost:9100/metrics # 关键指标示例 curl -s http://localhost:9100/metrics | grep rs2v_server_active_connections curl -s http://localhost:9100/metrics | grep rs2v_server_cpu_usage_percent ``` #### 日志文件 ``` logs/ ├── server.log # Main server logs ├── security.log # Security events and violations ├── performance.log # Performance metrics and warnings ├── telemetry/ │ ├── metrics_*.json # Telemetry snapshots │ └── alerts.log # Threshold alerts └── admin/ ├── commands.log # Admin command audit └── bans.log # Ban/unban history ``` ## 🔧 开发指南 ### 开发环境构建 ``` # 包含所有特性的开发构建 cmake .. -DCMAKE_BUILD_TYPE=Debug \ -DBUILD_TESTS=ON \ -DBUILD_BENCHMARKS=ON \ -DENABLE_ASAN=ON # 运行测试 make test # 运行特定测试套件 ./tests/NetworkTests ./tests/TelemetryTests ``` ### 代码风格与规范 我们遵循现代 C++ 的最佳实践: - **C++17 标准**:现代语言特性和 STL - **RAII**:资源管理与异常安全 - **线程安全**:除非另有说明,所有公共 API 均为线程安全的 - **性能**:尽可能使用零拷贝,在关键热路径中尽量减少内存分配 - **测试**:全面的单元测试和集成测试覆盖 ### 测试框架 本项目包含全面的测试覆盖: ``` # 运行所有测试 ctest --verbose # 运行特定测试类别 ctest -R "Network.*" --verbose # Network tests ctest -R "Security.*" --verbose # Security tests ctest -R "Telemetry.*" --verbose # Telemetry tests ``` ## 📚 官方文档 ### 可用文档 | 文档 | 描述 | 状态 | |----------|-------------|--------| | **[文档主页](docs/Home.md)** | 中央 Wiki 索引和导航中心 | ✅ 已完成 | | **[配置参考](docs/CONFIGURATION.md)** | 所有配置文件和设置的完整参考 | ✅ 已完成 | | **[管理员命令](docs/ADMIN_COMMANDS.md)** | 带有示例的全部 18 个管理员/RCON 命令 | ✅ 已完成 | | **[游戏模式指南](docs/GAME_MODES.md)** | 包含机制和策略的全部 5 种游戏模式 | ✅ 已完成 | | **[地图指南](docs/MAPS.md)** | 全部 8 张地图、轮换、自定义地图及创意工坊 | ✅ 已完成 | | **[常见问题](docs/FAQ.md)** | 常见问题解答 | ✅ 已完成 | | **[API 参考](docs/API.md)** | 完整的 API 参考文档 | ✅ 已完成 | | **[系统架构](docs/ARCHITECTURE.md)** | 详细的系统架构 | ✅ 已完成 | | **[安全性](docs/SECURITY.md)** | 安全架构与最佳实践 | ✅ 已完成 | | **[遥测系统](docs/TELEMETRY.md)** | 遥测系统指南 | ✅ 已完成 | | **[脚本开发](docs/SCRIPTING.md)** | 插件开发指南 | ✅ 已完成 | | **[部署指南](docs/DEPLOYMENT.md)** | 生产环境部署指南 | ✅ 已完成 | | **[开发指南](docs/DEVELOPMENT.md)** | 构建、调试、测试与贡献 | ✅ 已完成 | | **[故障排除](docs/TROUBLESHOOTING.md)** | 常见问题与解决方案 | ✅ 已完成 | | **[贡献指南](CONTRIBUTING.md)** | 贡献指南与规范 | ✅ 已完成 | | **[更新日志](CHANGELOG.md)** | 版本历史与发布说明 | ✅ 已完成 | | **[待办事项](TODO.md)** | 开发路线图与任务跟踪 | ✅ 已完成 | ### 在线资源 - **项目 Wiki**:[GitHub Wiki](https://github.com/Krilliac/smellslikenapalm/wiki) - **API 文档**:[生成的文档](https://krilliac.github.io/smellslikenapalm/) - **问题跟踪器**:[GitHub Issues](https://github.com/Krilliac/smellslikenapalm/issues) - **讨论区**:[GitHub Discussions](https://github.com/Krilliac/smellslikenapalm/discussions) ## 🏆 性能与基准测试 ### 性能目标 | 指标 | 目标 | |--------|--------| | **玩家容量** | 64+ 并发 | | **Tick Rate** | 60 Hz | | **延迟开销** | 低,小于一帧 | | **内存** | 有界,预分配内存池 | ## 📄 开源许可 本项目采用 **RS2V Server Non-Commercial Open Source License** 授权(参考了 TrinityCore 和 MaNGOS 等模拟器项目)——详情请参阅 [LICENSE](LICENSE) 文件。严禁商业用途和闭源分发。 ## 🙏 致谢 - **Tripwire Interactive** - 感谢其打造了《风起云涌 2:越南》 - **Epic Games** - 感谢其提供的 Unreal Engine 3 网络架构灵感 - **社区** - 感谢大家的测试、反馈和代码贡献 **用 ❤️ 献给《风起云涌 2:越南》社区** *如需获取支持、提出问题或功能请求,请访问我们的 [GitHub Discussions](https://github.com/Krilliac/smellslikenapalm/discussions) 或加入我们的 [Discord 服务器](https://discord.gg/sd8HaMc8rh)。* [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/Krilliac/smellslikenapalm)
标签:Bash脚本, C++17, HTTP头分析, Unreal Engine, 云资产清单, 内核驱动, 多人游戏, 安全测试工具, 游戏服务器, 网络协议, 自定义请求头, 请求拦截, 逆向工程