-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy pathprint_events.go
89 lines (74 loc) · 2.27 KB
/
print_events.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package main
import (
"fmt"
"os"
ex "github.com/markus-wa/demoinfocs-golang/v4/examples"
demoinfocs "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs"
common "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/common"
events "github.com/markus-wa/demoinfocs-golang/v4/pkg/demoinfocs/events"
)
// Run like this: go run print_events.go -demo /path/to/demo.dem
func main() {
f, err := os.Open(ex.DemoPathFromArgs())
checkError(err)
defer f.Close()
p := demoinfocs.NewParser(f)
defer p.Close()
// Parse header
header, err := p.ParseHeader()
checkError(err)
fmt.Println("Map:", header.MapName)
// Register handler on kill events
p.RegisterEventHandler(func(e events.Kill) {
var hs string
if e.IsHeadshot {
hs = " (HS)"
}
var wallBang string
if e.PenetratedObjects > 0 {
wallBang = " (WB)"
}
fmt.Printf("%s <%v%s%s> %s\n", formatPlayer(e.Killer), e.Weapon, hs, wallBang, formatPlayer(e.Victim))
})
// Register handler on round end to figure out who won
p.RegisterEventHandler(func(e events.RoundEnd) {
gs := p.GameState()
switch e.Winner {
case common.TeamTerrorists:
// Winner's score + 1 because it hasn't actually been updated yet
fmt.Printf("Round finished: winnerSide=T ; score=%d:%d\n", gs.TeamTerrorists().Score(), gs.TeamCounterTerrorists().Score())
case common.TeamCounterTerrorists:
fmt.Printf("Round finished: winnerSide=CT ; score=%d:%d\n", gs.TeamCounterTerrorists().Score(), gs.TeamTerrorists().Score())
default:
// Probably match medic or something similar
fmt.Println("Round finished: No winner (tie)")
}
})
// Register handler for chat messages to print them
p.RegisterEventHandler(func(e events.ChatMessage) {
fmt.Printf("Chat - %s says: %s\n", formatPlayer(e.Sender), e.Text)
})
p.RegisterEventHandler(func(e events.RankUpdate) {
fmt.Printf("Rank Update: %d went from rank %d to rank %d, change: %f\n", e.SteamID32, e.RankOld, e.RankNew, e.RankChange)
})
// Parse to end
err = p.ParseToEnd()
checkError(err)
}
func formatPlayer(p *common.Player) string {
if p == nil {
return "?"
}
switch p.Team {
case common.TeamTerrorists:
return "[T]" + p.Name
case common.TeamCounterTerrorists:
return "[CT]" + p.Name
}
return p.Name
}
func checkError(err error) {
if err != nil {
panic(err)
}
}