102 lines
2.0 KiB
Markdown
102 lines
2.0 KiB
Markdown
# 贡献指南
|
|
|
|
## 贡献方式
|
|
|
|
### 提交游戏插件 (`.tsp`)
|
|
|
|
创建一个包含 `manifest.json` 和 `parser.py` 的文件夹,压缩为 zip 改后缀:
|
|
|
|
```
|
|
my_game/
|
|
├── manifest.json
|
|
└── parser.py
|
|
```
|
|
|
|
#### manifest.json
|
|
|
|
```json
|
|
{
|
|
"id": "unique_game_id",
|
|
"name": "游戏名称",
|
|
"parser_type": "forza",
|
|
"description": "简短描述",
|
|
"author": "你的名字",
|
|
"version": "1.0.0",
|
|
"default_port": 20777
|
|
}
|
|
```
|
|
|
|
#### parser.py 规范
|
|
|
|
必须实现 `get_parser()` 函数,返回对象包含:
|
|
|
|
```python
|
|
import time
|
|
from server.telemetry.data import TelemetryData
|
|
|
|
|
|
def get_parser():
|
|
return MyParser()
|
|
|
|
|
|
class MyParser:
|
|
def game_id(self) -> str:
|
|
return "unique_game_id"
|
|
|
|
def parse(self, data: bytes, addr: tuple) -> TelemetryData:
|
|
td = TelemetryData(game_id="unique_game_id", timestamp=time.time())
|
|
td.raw = {"raw_hex": data.hex(), "length": len(data)}
|
|
# 填充遥测字段...
|
|
return td
|
|
```
|
|
|
|
安装方式:在 TurboSu 设置页面 → 游戏插件管理 → 导入 `.tsp`
|
|
|
|
### 提交仪表盘主题 (`.tsd`)
|
|
|
|
创建独立文件夹:
|
|
|
|
```
|
|
my_dashboard/
|
|
├── manifest.json # 元信息 (参考下方格式)
|
|
└── index.html # 完整独立页面
|
|
```
|
|
|
|
`index.html` 需包含:
|
|
- WebSocket 连接:`ws://<host>/ws`
|
|
- 接收 `telemetry` 消息类型的数据
|
|
- 用 `data-bind="字段名"` 属性绑定数据
|
|
- 比例约束渲染逻辑
|
|
|
|
安装方式:在 TurboSu 仪表盘页面 → 导入 `.tsd`,或右键卡片导出。
|
|
|
|
### 报告 Bug
|
|
|
|
请在 Issue 中包含:
|
|
- 系统信息 (OS, Python 版本)
|
|
- 错误日志 (`logs/turbosu.log`)
|
|
- 复现步骤
|
|
|
|
### 功能建议
|
|
|
|
欢迎提交 Issue 讨论。
|
|
|
|
## 开发环境
|
|
|
|
```bash
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
pip install -r requirements.txt
|
|
python app.py
|
|
```
|
|
|
|
## 代码规范
|
|
|
|
- Python: PEP 8
|
|
- 日志使用 `utils.logger`,不用 `print`
|
|
- 前端 JS 模块化,文件放对应目录
|
|
|
|
## 许可证
|
|
|
|
贡献即表示同意代码在 Apache 2.0 许可下发布。
|