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

de_grind: BombEvent.Site not set for bombsite B

Open markus-wa opened this issue 4 years ago • 0 comments
trafficstars

Describe the bug Due to #280, BombEvent.Site may not be set for some bomb sites. Currently the only known case is Bombsite B on de_grind.

To Reproduce two sample demos are here: https://drive.google.com/drive/folders/1KptOTNbFlfQVdaz-i78Z0J7DnXhBs7GE?usp=sharing

Code:

package main

import (
	"fmt"
	"os"

	"bufio"
	"bytes"
	"compress/bzip2"
	"compress/gzip"
	"io"
	"io/ioutil"
	"path/filepath"

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

func main() {
	demoFile, err := os.Open("/home/mark/Downloads/003480011012659216461_0088537034.dem.bz2")
	if err != nil {
		panic(err)
	}
	defer demoFile.Close()

	var demoUnzippedReader io.Reader
	switch filepath.Ext(demoFile.Name()) {
	case ".bz2":
		demoUnzippedReader = bzip2.NewReader(bufio.NewReader(demoFile))
	case ".gz":
		demoZippedReader, err := gzip.NewReader(demoFile)
		if err != nil {
			panic(err)
		}

		t, err := ioutil.ReadAll(demoZippedReader)
		if err != nil {
			panic(err)
		}
		demoUnzippedReader = bytes.NewReader(t)
	case ".dem":
		demoUnzippedReader = bufio.NewReader(demoFile)
	default:
		panic(err)
	}

	demoUnzippedBytes, err := ioutil.ReadAll(demoUnzippedReader)
	if err != nil {
		panic(err)
	}

	r := bytes.NewReader(demoUnzippedBytes)
	p := demoinfocs.NewParser(r)
	defer p.Close()

	p.RegisterEventHandler(func(planted events.BombPlanted) {
		if planted.Site != events.BombsiteA && planted.Site != events.BombsiteB {
			fmt.Println("oh no! unknown bomb site")
		}

		// handle event as usual
	})

	demoHerader, err := p.ParseHeader()
	if err != nil {
		panic(err)
	}
	fmt.Println(demoHerader.MapName)

	err = p.ParseToEnd()
	if err != nil {
		panic(err)
	}
}

Expected behavior It never prints oh no! unknown bomb site for any bomb event

Actual behaviour For de_grind games, it prints oh no! unknown bomb site

Workaround The following code works around the issue as it seems like the only case of this happening is bomb site B on de_grind.

if planted.Site != events.BombsiteA && planted.Site != events.BombsiteB && p.Header().MapName == "de_grind" {
	planted.Site = events.BombsiteB
}

Library version v2.7.1

Additional context

markus-wa avatar May 14 '21 11:05 markus-wa