Skip to content

Commit 6052a31

Browse files
committed
Fix players teams not being updated correctly
For some demos there were players firing weapons while being unassigned or in the spectator team.
1 parent 7bbefbf commit 6052a31

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

game_events.go

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -261,33 +261,31 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
261261
case "player_team": // Player changed team
262262
data = mapGameEventData(d, ge)
263263

264-
e := events.PlayerTeamChangeEvent{
265-
Player: p.gameState.players[int(data["userid"].GetValShort())],
266-
IsBot: data["isbot"].GetValBool(),
267-
Silent: data["silent"].GetValBool(),
268-
}
269-
270-
// FIXME: We could probably just cast team & oldteam to common.Team, should always be correct. . . Needs testing
271-
switch data["team"].GetValByte() {
272-
case int32(p.gameState.tState.id):
273-
e.NewTeam = common.TeamTerrorists
274-
case int32(p.gameState.ctState.id):
275-
e.NewTeam = common.TeamCounterTerrorists
276-
default:
277-
e.NewTeam = common.TeamSpectators
278-
}
279-
280-
switch data["oldteam"].GetValByte() {
281-
case int32(p.gameState.tState.id):
282-
e.OldTeam = common.TeamTerrorists
283-
case int32(p.gameState.ctState.id):
284-
e.OldTeam = common.TeamCounterTerrorists
285-
default:
286-
e.OldTeam = common.TeamSpectators
264+
player := p.gameState.players[int(data["userid"].GetValShort())]
265+
newTeam := common.Team(data["team"].GetValByte())
266+
267+
if player != nil {
268+
if player.Team != newTeam {
269+
player.Team = newTeam
270+
271+
p.eventDispatcher.Dispatch(events.PlayerTeamChangeEvent{
272+
Player: player,
273+
IsBot: data["isbot"].GetValBool(),
274+
Silent: data["silent"].GetValBool(),
275+
NewTeam: newTeam,
276+
OldTeam: common.Team(data["oldteam"].GetValByte()),
277+
})
278+
} else {
279+
p.eventDispatcher.Dispatch(events.ParserWarnEvent{
280+
Message: "Player team swap game-event occured but player.Team == newTeam",
281+
})
282+
}
283+
} else {
284+
p.eventDispatcher.Dispatch(events.ParserWarnEvent{
285+
Message: "Player team swap game-event occured but player is nil",
286+
})
287287
}
288288

289-
p.eventDispatcher.Dispatch(e)
290-
291289
case "bomb_beginplant": // Plant started
292290
fallthrough
293291
case "bomb_planted": // Plant finished

0 commit comments

Comments
 (0)