markus-wa / demoinfocs-golang

A Counter-Strike 2 & CS:GO demo parser for Go (demoinfo)
https://pkg.go.dev/github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs?tab=doc
MIT License
707 stars 95 forks source link

How to get crc-map code? #483

Open NintyS opened 11 months ago

NintyS commented 11 months ago

How to get CRC code of map in CS2 version of the library? The msgs2.CSVCMsg_ServerInfo don't have a GetMapCrc() function as I see

dankotov commented 10 months ago

@NintyS were you ever able to figure out?

NintyS commented 10 months ago

Nah, probably you can't. But I get from CS:GO the CRC codes and they works so for now I'm good.

var (
    Mirage   uint32 = 1936772555
    Anubis   uint32 = 3934213780
    Nuke     uint32 = 4081488007
    Inferno  uint32 = 3201302029
    Ancient  uint32 = 4262714479
    Overpass uint32 = 2863184063
    Vertigo  uint32 = 970160341
)
dankotov commented 10 months ago

Understood! Thanks for the list. However, how do you get the map name from the demo to get the corresponding crc? header.MapName returning nil for me.

NintyS commented 10 months ago

Sorry for delay, I didn't get notification until I open mail. AFAIK header is deprecated / returns nothing because new header is different than old one.

This is my code: ` var mapName string var mapMetaData ex.Map

p.RegisterNetMessageHandler(func(msg *msgs2.CSVCMsg_ServerInfo) {

    var mapCode uint32 = 0

    if strings.Contains(msg.GetMapName(), "mirage") {
        mapCode = Mirage
    }

    if strings.Contains(msg.GetMapName(), "overpass") {
        mapCode = Overpass
    }

    if strings.Contains(msg.GetMapName(), "inferno") {
        mapCode = Inferno
    }

    if strings.Contains(msg.GetMapName(), "vertigo") {
        mapCode = Vertigo
    }

    if strings.Contains(msg.GetMapName(), "anubis") {
        mapCode = Anubis
    }

    if strings.Contains(msg.GetMapName(), "nuke") {
        mapCode = Nuke
    }

    if strings.Contains(msg.GetMapName(), "ancient") {
        mapCode = Ancient
    }

    mapMetaData = ex.GetMapMetadata(msg.GetMapName(), mapCode)

    fmt.Println(mapMetaData)

    mapName = msg.GetMapName()
})`
NintyS commented 10 months ago

It's shit but for now this is only thing I can do I guess. Maybe I will post my repo with code as a example for people.

dankotov commented 10 months ago

Understood! Thanks for sharing

dankotov commented 10 months ago

Out of curiosity, is there any reason you dont do it like this?

var mapCodes = map[string]uint32{
    "de_mirage":   1936772555,
    "de_anubis":   3934213780,
    "de_nuke":     4081488007,
    "de_inferno":  3201302029,
    "de_ancient":  4262714479,
    "de_overpass": 2863184063,
    "de_vertigo":  970160341,
}

var mapMetadata ex.Map

p.RegisterNetMessageHandler(func(msg *msgs2.CSVCMsg_ServerInfo) {
    mapName := msg.GetMapName() // change if you want mapName to be available somewhere else as well
    mapMetadata = ex.GetMapMetadata(mapName, mapCodes[mapName])
})
NintyS commented 10 months ago

Yes, because I forgot that Key-Value dictionaries exists XD