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
695 stars 93 forks source link

Bot doesn't leave connected player list after PlayerDisconnected event (it was working on v4.0.1) #514

Closed cooltg66 closed 7 months ago

cooltg66 commented 7 months ago

Describe the bug Bot doesn't leave connected player list after PlayerDisconnected event (on master (v4.0.4-0.20240221103532-4b53a6146f8c), it was working on v4.0.1)

To Reproduce Download link to an affected demo: https://pub-de8f82f716174101a8e11da069a07907.r2.dev/demo_with_bots.dem (https://www.faceit.com/en/cs2/room/1-d3fea1aa-a28c-4c70-8732-9d1f493f4b53)

Code:

package main

import (
    "fmt"
    "log"
    "os"

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

func main() {
    f, err := os.Open("C:\\demo_to_parse\\demo_with_bots.dem")
    if err != nil {
        log.Panic("failed to open demo file: ", err)
    }
    defer f.Close()

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

    p.RegisterEventHandler(func(e events.PlayerDisconnected) {
        fmt.Printf("PlayerDisconnected %d %d %s %d\n", p.GameState().IngameTick(), e.Player.SteamID64, e.Player.Name, e.Player.Team)
        fmt.Println("PARTICIPANTS:")
        for _, player := range p.GameState().Participants().Connected() {
            fmt.Printf("Player %d %d %s %d\n", p.GameState().IngameTick(), player.SteamID64, player.Name, player.Team)
        }
        fmt.Println("")
    })

    p.RegisterEventHandler(func(e events.BotConnect) {

        fmt.Printf("BotConnect %d %d %s %d\n", p.GameState().IngameTick(), e.Player.SteamID64, e.Player.Name, e.Player.Team)
        fmt.Println("PARTICIPANTS:")
        for _, player := range p.GameState().Participants().Connected() {
            fmt.Printf("Player %d %d %s %d\n", p.GameState().IngameTick(), player.SteamID64, player.Name, player.Team)
        }
        fmt.Println("")
    })

    p.RegisterEventHandler(func(e events.PlayerConnect) {

        fmt.Printf("PlayerConnect %d %d %s %d\n", p.GameState().IngameTick(), e.Player.SteamID64, e.Player.Name, e.Player.Team)
        fmt.Println("PARTICIPANTS:")
        for _, player := range p.GameState().Participants().Connected() {
            fmt.Printf("Player %d %d %s %d\n", p.GameState().IngameTick(), player.SteamID64, player.Name, player.Team)
        }
        fmt.Println("")
    })

    // Parse to end
    err = p.ParseToEnd()
    if err != nil {
        log.Panic("failed to parse demo: ", err)
    }
}

Expected behavior On v4.0.1 sample code prints:

BotConnect 3853 0 Crew 2
PARTICIPANTS:
Player 3853 76561199051685373 ArT_VeetoO 3
Player 3853 76561198837009234 skidib 2
Player 3853 76561198114251326 Fenr1z 3
Player 3853 76561198164447960 wilcobijlen 2
Player 3853 76561198101608281 wAkexD 2
Player 3853 76561199087147553 MrBlueee 3
Player 3853 0 Crew 2
Player 3853 76561199006865240 sem1_____ 3
Player 3853 76561198168492708 bRE4My 3
Player 3853 76561198343710146 JiujiG_ 2

PlayerDisconnected 5655 0 Crew 2
PARTICIPANTS:
Player 5655 76561198101608281 wAkexD 2
Player 5655 76561198114251326 Fenr1z 3
Player 5655 76561198164447960 wilcobijlen 2
Player 5655 76561199087147553 MrBlueee 3
Player 5655 76561199006865240 sem1_____ 3
Player 5655 76561198168492708 bRE4My 3
Player 5655 0 Crew 2
Player 5655 76561199051685373 ArT_VeetoO 3
Player 5655 76561198837009234 skidib 2
Player 5655 76561198343710146 JiujiG_ 2

PlayerConnect 5655 76561198171298202 Deth77 2
PARTICIPANTS:
Player 5655 76561198837009234 skidib 2
Player 5655 76561198114251326 Fenr1z 3
Player 5655 76561198164447960 wilcobijlen 2
Player 5655 76561199006865240 sem1_____ 3
Player 5655 76561199051685373 ArT_VeetoO 3
Player 5655 76561198343710146 JiujiG_ 2
Player 5655 76561198171298202 Deth77 2
Player 5655 76561198101608281 wAkexD 2
Player 5655 76561199087147553 MrBlueee 3
Player 5655 76561198168492708 bRE4My 3

On master (v4.0.4-0.20240221103532-4b53a6146f8c) sample code prints:

BotConnect 3853 0 Crew 0
PARTICIPANTS:
Player 3853 76561198837009234 skidib 2
Player 3853 76561199006865240 sem1_____ 3
Player 3853 76561198164447960 wilcobijlen 2
Player 3853 0 SourceTV 0
Player 3853 76561199051685373 ArT_VeetoO 3
Player 3853 76561198343710146 JiujiG_ 2
Player 3853 76561199087147553 MrBlueee 3
Player 3853 76561198114251326 Fenr1z 3
Player 3853 76561198101608281 wAkexD 2
Player 3853 76561198168492708 bRE4My 3
Player 3853 0 Crew 0

PlayerDisconnected 5655 0 Crew 2
PARTICIPANTS:
Player 5655 76561199051685373 ArT_VeetoO 3
Player 5655 76561199087147553 MrBlueee 3
Player 5655 76561198168492708 bRE4My 3
Player 5655 0 Crew 2
Player 5655 76561198837009234 skidib 2
Player 5655 76561199006865240 sem1_____ 3
Player 5655 76561198164447960 wilcobijlen 2
Player 5655 0 SourceTV 0
Player 5655 76561198101608281 wAkexD 2
Player 5655 76561198343710146 JiujiG_ 2
Player 5655 76561198114251326 Fenr1z 3

PlayerConnect 5655 76561198171298202 Deth77 2
PARTICIPANTS:
Player 5655 76561199087147553 MrBlueee 3
Player 5655 76561198837009234 skidib 2
Player 5655 76561199006865240 sem1_____ 3
Player 5655 76561198164447960 wilcobijlen 2
Player 5655 0 Crew 2
Player 5655 0 SourceTV 0
Player 5655 76561198101608281 wAkexD 2
Player 5655 76561198343710146 JiujiG_ 2
Player 5655 76561198168492708 bRE4My 3
Player 5655 76561198114251326 Fenr1z 3
Player 5655 76561199051685373 ArT_VeetoO 3
Player 5655 76561198171298202 Deth77 2

Library version master (v4.0.4-0.20240221103532-4b53a6146f8c)

Additional context This is probably linked to #511

Many thanks :)

markus-wa commented 7 months ago

Fixed in v4.0.4 - go get github.com/markus-wa/demoinfocs-golang/v4@v4.0.4 to receive