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)。*
[](https://deepwiki.com/Krilliac/smellslikenapalm)
标签:Bash脚本, C++17, HTTP头分析, Unreal Engine, 云资产清单, 内核驱动, 多人游戏, 安全测试工具, 游戏服务器, 网络协议, 自定义请求头, 请求拦截, 逆向工程