cs2-demo解析

你知唔知我系靓仔

cs2-demo解析


cs2 Demo 解析器

用于解析 CS2 demo 文件的程序,支持处理 .dem.gz 文件,提取并保存游戏中的各种事件数据,包括回合信息、特殊击杀记录和投掷物信息。

目录结构

  • main.go:程序主文件,包含所有逻辑实现。

功能

  • 解析 CS2 Demo 文件:支持 .dem.gz 格式。
  • 输出 JSON 文件:将解析结果保存为 JSON 格式的文件。
  • 记录特殊事件:如 4 杀、5 杀等特殊击杀记录。
  • 投掷物信息:记录投掷物的投掷位置和爆炸位置。

安装

  1. 确保你已经安装了 Go 编程语言。你可以从 Go 官方网站 下载并安装 Go。
  2. 克隆或下载项目:
    git clone https://github.com/stakxu/demo-parser.git
    cd demo-parser
  3. 安装所需的 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

示例

  1. 处理 .dem 文件并输出 JSON 文件:

    go run main.go -demo example.dem -O result.json
  2. 处理 .gz 文件并输出 JSON 文件:

    go run main.go -demo example.gz -O result.json
  3. 显示投掷物信息:

    go run main.go -demo example.dem -O result.json -s
  4. 显示帮助信息:

    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 许可证 开源。