demoinfocs-golang icon indicating copy to clipboard operation
demoinfocs-golang copied to clipboard

Missing - Unknown granade model

Open taua-almeida opened this issue 1 year ago • 1 comments
trafficstars

I was just playing around with the lib just for fun. And it seems that a grande model is missing: unknown grenade model 8528019637059176743

Also for some reason the demo I'm using is not loading the map name too. Am missing something in the code? Don't think demo is corrupted, since I was able to watch normally and tested a whole bunch of others.

Game was played in 11/23/2023. So maybe a new updated change the grenade model.

Code used:

package main

import (
	"encoding/json"
	"fmt"
	"os"

	demoinfocs "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs"
	events "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/events"
)

type PlayerStatus struct {
	Name      string
	Kills     int
	Deaths    int
	Assists   int
	Headshots int
	Rank      int
}

func main() {
	if len(os.Args) < 3 {
		fmt.Println("Usage: cs2-demo-reader <demo-file> <player-name>")
	}

	demoFile := os.Args[1]
	playerName := os.Args[2]

	player := parseDemo(demoFile, playerName)

	file, _ := json.MarshalIndent(player, "", " ")

	_ = os.WriteFile("player.json", file, 0644)
}

func parseDemo(demoFilePath string, playerName string) PlayerStatus {
	f, err := os.Open(demoFilePath)
	checkError(err)

	defer f.Close()

	p := demoinfocs.NewParser(f)
	defer p.Close()

	var hs int
	var kills int
	var deaths int
	var assists int
	var rank int

	header, err := p.ParseHeader()
	checkError(err)

	fmt.Printf("Map played: %s\n", header.MapName)

	// Register handler on kill events
	p.RegisterEventHandler(func(e events.Kill) {
		if e.Killer != nil {
			if e.Killer.Name == playerName {
				kills++
				if e.IsHeadshot {
					hs++
				}
			}
		}
		// get deaths
		if e.Victim != nil {
			if e.Victim.Name == playerName {
				deaths++
			}
		}
		// get assists
		if e.Assister != nil {
			if e.Assister.Name == playerName {
				assists++
			}
		}
	})

	p.RegisterEventHandler(func(e events.RankUpdate) {
		if e.Player.Name == playerName {
			rank = e.RankNew
			fmt.Printf("Rank Update: %s (%d) went from rank %d to rank %d, change: %f\n", e.Player.Name, e.SteamID32, e.RankOld, e.RankNew, e.RankChange)
		}
	})

	// Parse to end
	err = p.ParseToEnd()
	checkError(err)

	playerStatus := PlayerStatus{
		Name:      playerName,
		Kills:     kills,
		Deaths:    deaths,
		Assists:   assists,
		Headshots: hs,
		Rank:      rank,
	}
	return playerStatus
}

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

Prints :

go run main.go .\demo.dem Calitaz
Map played: 
unknown grenade model 8528019637059176743unknown grenade model 8528019637059176743unknown grenade model 8528019637059176743unknown grenade model 8528019637059176743Rank Update: Calitaz (77971698) went from rank 8610 to rank 8968, change: 358.000000

Demo: https://drive.google.com/drive/folders/1S6b_9rwO-G4Tpbh-L5sp2NBcpVxcTyfw?usp=sharing

taua-almeida avatar Nov 24 '23 17:11 taua-almeida

Maybe for this one we can add a way to prevent the logging?

taua-almeida avatar Dec 14 '23 18:12 taua-almeida