你知唔知我系靓仔
cs2-demo解析
cs2 Demo 解析器
用于解析 CS2 demo 文件的程序,支持处理 .dem
和 .gz
文件,提取并保存游戏中的各种事件数据,包括回合信息、特殊击杀记录和投掷物信息。
目录结构
main.go
:程序主文件,包含所有逻辑实现。
功能
- 解析 CS2 Demo 文件:支持
.dem
和.gz
格式。 - 输出 JSON 文件:将解析结果保存为 JSON 格式的文件。
- 记录特殊事件:如 4 杀、5 杀等特殊击杀记录。
- 投掷物信息:记录投掷物的投掷位置和爆炸位置。
安装
- 确保你已经安装了 Go 编程语言。你可以从 Go 官方网站 下载并安装 Go。
- 克隆或下载项目:
git clone https://github.com/stakxu/demo-parser.git cd demo-parser
- 安装所需的 Go 依赖包:
go mod tidy
使用说明
命令行参数
-demo <demo-file>
:指定输入的 demo 文件名(.dem
或.gz
格式)。-O <output-file>
:指定输出 JSON 文件名。-s
:显示投掷物信息(可选)。-h
:显示帮助信息(可选)。
运行程序
运行程序并指定 demo 文件名及输出文件名:
go run main.go -demo yourfile.gz -O output.json
示例:
-
处理
.dem
文件并输出 JSON 文件:go run main.go -demo example.dem -O result.json
-
处理
.gz
文件并输出 JSON 文件:go run main.go -demo example.gz -O result.json
-
显示投掷物信息:
go run main.go -demo example.dem -O result.json -s
-
显示帮助信息:
go run main.go -h
输出格式
输出的 JSON 文件包含以下内容:
- mapName:地图名称。
- fileHash:文件的 SHA-256 哈希值。
- version:程序版本号。
- parseTime:解析时间。
- parseDuration:解析所需的时间(秒)。
- players:玩家列表,包含玩家的 Steam ID、姓名、团队等信息。
- allRoundsLog:所有回合的日志信息,包括回合开始和结束事件。
- specialKillsLog:特殊击杀记录,包含 4 杀和 5 杀的详细信息。
示例输出:
{
"mapName": "de_dust2",
"fileHash": "a3b6d4e58f09b4c65b33b07fc7a75bfbf9d6a0561d18c235cdf70f6348a1d742",
"version": "1.0.0",
"parseTime": "2024-07-19T15:00:00Z",
"parseDuration": 120.5,
"players": [
{
"steamID": 12345678901234567,
"name": "PlayerOne",
"team": "Terrorists"
},
{
"steamID": 76543210987654321,
"name": "PlayerTwo",
"team": "Counter-Terrorists"
}
],
"allRoundsLog": [
{
"round": 1,
"events": [
{
"type": "RoundFreezetimeEnd",
"time": "[0:00]",
"scoreT": 0,
"scoreCT": 0
},
{
"type": "RoundEnd",
"time": "[1:30]",
"scoreT": 1,
"scoreCT": 0
}
]
}
],
"specialKillsLog": [
{
"type": "SpecialKill",
"time": "[5:00]",
"player": "PlayerOne",
"killCount": 4,
"details": [
{
"type": "Kill",
"time": "[5:00]",
"killer": "PlayerOne",
"victim": "PlayerTwo",
"weapon": "AK-47",
"killerPos": "(100, 200, 50)",
"victimPos": "(150, 250, 50)",
"headshot": true,
"wallbang": false
}
],
"wallbang": false
}
]
}
注意事项
- 确保输入的 demo 文件名正确,并且文件路径有效。
- 如果程序无法处理
.gz
文件,请确保文件是有效的 gzip 格式。
贡献
欢迎提出问题和贡献代码!你可以通过 GitHub Issues 提交问题或建议。
许可证
本项目采用 MIT 许可证 开源。