55 "strconv"
66
77 "github.com/golang/geo/r3"
8+ "github.com/markus-wa/go-unassert"
89
910 "github.com/markus-wa/demoinfocs-golang/common"
1011 "github.com/markus-wa/demoinfocs-golang/events"
@@ -20,7 +21,8 @@ func (p *Parser) handleGameEventList(gel *msg.CSVCMsg_GameEventList) {
2021
2122func (p * Parser ) handleGameEvent (ge * msg.CSVCMsg_GameEvent ) {
2223 if p .gameEventDescs == nil {
23- p .eventDispatcher .Dispatch (events.ParserWarn {Message : "Received GameEvent but event descriptors are missing" })
24+ p .eventDispatcher .Dispatch (events.ParserWarn {Message : "received GameEvent but event descriptors are missing" })
25+ unassert .Error ("received GameEvent but event descriptors are missing" )
2426 return
2527 }
2628
@@ -37,7 +39,8 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
3739 handler (data )
3840 }
3941 } else {
40- p .eventDispatcher .Dispatch (events.ParserWarn {Message : fmt .Sprintf ("Unknown event %q" , desc .Name )})
42+ p .eventDispatcher .Dispatch (events.ParserWarn {Message : fmt .Sprintf ("unknown event %q" , desc .Name )})
43+ unassert .Error ("unknown event %q" , desc .Name )
4144 }
4245
4346 p .eventDispatcher .Dispatch (events.GenericGameEvent {
@@ -126,6 +129,7 @@ func newGameEventHandler(parser *Parser) gameEventHandler {
126129 "hegrenade_detonate" : geh .heGrenadeDetonate , // HE exploded
127130 "hltv_chase" : nil , // Don't care
128131 "hltv_fixed" : nil , // Dunno
132+ "hltv_message" : nil , // No clue
129133 "hltv_status" : nil , // Don't know
130134 "inferno_expire" : geh .infernoExpire , // Incendiary expired
131135 "inferno_startburn" : delay (geh .infernoStartBurn ), // Incendiary exploded/started. Delayed because inferno entity is not yet created
@@ -325,10 +329,18 @@ func (geh gameEventHandler) playerHurt(data map[string]*msg.CSVCMsg_GameEventKey
325329
326330func (geh gameEventHandler ) playerBlind (data map [string ]* msg.CSVCMsg_GameEventKeyT ) {
327331 attacker := geh .gameState ().lastFlash .player
332+ projectile := geh .gameState ().lastFlash .projectileByPlayer [attacker ]
333+ unassert .NotNilf (projectile , "PlayerFlashed.Projectile should never be nil" )
334+
335+ if projectile != nil {
336+ unassert .Samef (attacker , projectile .Thrower , "PlayerFlashed.Attacker != PlayerFlashed.Projectile.Thrower" )
337+ unassert .Samef (projectile .Weapon , common .EqFlash , "PlayerFlashed.Projectile.Weapon != EqFlash" )
338+ }
339+
328340 geh .dispatch (events.PlayerFlashed {
329341 Player : geh .playerByUserID32 (data ["userid" ].GetValShort ()),
330342 Attacker : attacker ,
331- Projectile : geh . gameState (). lastFlash . projectileByPlayer [ attacker ] ,
343+ Projectile : projectile ,
332344 })
333345}
334346
@@ -435,6 +447,7 @@ func (geh gameEventHandler) playerTeam(data map[string]*msg.CSVCMsg_GameEventKey
435447 OldTeamState : geh .gameState ().Team (oldTeam ),
436448 })
437449 } else {
450+ // TODO: figure out why this happens and whether it's a bug or not
438451 geh .dispatch (events.ParserWarn {
439452 Message : "Player team swap game-event occurred but player is nil" ,
440453 })
0 commit comments