Skip to content

Commit 102b3ce

Browse files
authored
Merge pull request #212 from sparkoo/159-invisible-last-round
fix last round visible with valid winner
2 parents 475c636 + f0a6b39 commit 102b3ce

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

parser/pkg/parser/parser.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ func parseMatch(parser dem.Parser, handler func(msg *message.Message, state dem.
7777
})
7878

7979
parser.RegisterEventHandler(func(e events.Kill) {
80-
// log.Printf("r: '%d', '%+v'", parser.GameState().TotalRoundsPlayed(), e)
8180
frag := &message.Frag{
8281
Weapon: convertWeapon(e.Weapon.Type),
8382
IsHeadshot: e.IsHeadshot,
@@ -97,12 +96,8 @@ func parseMatch(parser dem.Parser, handler func(msg *message.Message, state dem.
9796
Frag: frag,
9897
})
9998
})
100-
parser.RegisterEventHandler(func(e events.RoundEnd) {
101-
//log.Printf("round end '%+v' tick '%v' time '%v'", e, parser.CurrentFrame(), parser.CurrentTime())
102-
roundMessage.Winner = team(e.Winner)
103-
})
99+
104100
parser.RegisterEventHandler(func(e events.RoundEndOfficial) {
105-
//log.Printf("round end offic '%+v' tick '%v' time '%v'", e, parser.CurrentFrame(), parser.CurrentTime())
106101
roundMessage.RoundTookSeconds = int32((parser.CurrentTime() - currentRoundTimer.lastRoundStart).Seconds())
107102
roundMessage.RoundNo = int32(parser.GameState().TotalRoundsPlayed())
108103
roundMessage.EndTick = int32(parser.CurrentFrame())
@@ -111,33 +106,43 @@ func parseMatch(parser dem.Parser, handler func(msg *message.Message, state dem.
111106
Tick: int32(parser.CurrentFrame()),
112107
Round: roundMessage,
113108
}
114-
//log.Printf("sending round, messages '%v', roundNo '%v' T [%v : %v] CT", len(msg.Round.Ticks), msg.Round.RoundNo, msg.Round.TeamState.TScore, msg.Round.TeamState.CTScore)
115109
handler(msg, parser.GameState())
116110
})
111+
117112
parser.RegisterEventHandler(func(e events.GamePhaseChanged) {
113+
// because last round does not end with RoundEndOfficial event, we're catching it like this.
114+
// after that, RoundEnd should be called, which will send the last round message
115+
// this is because RoundEndOfficial happens after a little time players can still run around, collect stuff etc.
116+
// this does not happen in the last round as everybody just freezes in the last frame.
117+
// That's why we don't get proper RoundEndOfficial event
118118
if e.NewGamePhase == common.GamePhaseGameEnded {
119-
//log.Printf("sending last round ? tick '%v' time '%v', winner '%v'", parser.CurrentFrame(), parser.CurrentTime(), roundMessage.Winner)
120119
roundMessage.RoundTookSeconds = int32((parser.CurrentTime() - currentRoundTimer.lastRoundStart).Seconds())
121120
roundMessage.RoundNo = int32(parser.GameState().TotalRoundsPlayed() + 1)
122121
roundMessage.EndTick = int32(parser.CurrentFrame())
122+
}
123+
})
124+
125+
parser.RegisterEventHandler(func(e events.RoundEnd) {
126+
roundMessage.Winner = team(e.Winner)
127+
128+
// send round message if this is the last round (EndTick set by GamePhaseChanged handler)
129+
if roundMessage.EndTick > 0 && parser.CurrentFrame() == int(roundMessage.EndTick) {
123130
msg := &message.Message{
124131
MsgType: message.Message_RoundType,
125132
Tick: int32(parser.CurrentFrame()),
126133
Round: roundMessage,
127134
}
128-
//log.Printf("sending round, messages '%v', roundNo '%v' T [%v : %v] CT", len(msg.Round.Ticks), msg.Round.RoundNo, msg.Round.TeamState.TScore, msg.Round.TeamState.CTScore)
129135
handler(msg, parser.GameState())
130136
}
131137
})
138+
132139
parser.RegisterEventHandler(func(e events.RoundStart) {
133140
readyForNewRound = true
134141
})
135142

136143
bombH.registerEvents()
137144

138145
parser.RegisterEventHandler(func(e events.RoundFreezetimeEnd) {
139-
//log.Printf("freezetime end '%+v' tick '%v' time '%v'", e, parser.CurrentFrame(), parser.CurrentTime())
140-
141146
if readyForNewRound {
142147
readyForNewRound = false
143148
roundMessage = message.NewRound(parser.CurrentFrame())

0 commit comments

Comments
 (0)