@@ -37,7 +37,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
3737 debugGameEvent (d , ge )
3838
3939 // Ignore events before players are connected to speed things up
40- if len (p .gameState .players ) == 0 && d .Name != "player_connect" {
40+ if len (p .gameState .playersByUserID ) == 0 && d .Name != "player_connect" {
4141 return
4242 }
4343
@@ -86,14 +86,14 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
8686 data = mapGameEventData (d , ge )
8787
8888 p .eventDispatcher .Dispatch (events.RoundMVPEvent {
89- Player : p .gameState .players [int (data ["userid" ].GetValShort ())],
89+ Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())],
9090 Reason : events .RoundMVPReason (data ["reason" ].GetValShort ()),
9191 })
9292
9393 case "bot_takeover" : // Bot got taken over
9494 data = mapGameEventData (d , ge )
9595
96- p .eventDispatcher .Dispatch (events.BotTakenOverEvent {Taker : p .gameState .players [int (data ["userid" ].GetValShort ())]})
96+ p .eventDispatcher .Dispatch (events.BotTakenOverEvent {Taker : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]})
9797
9898 case "begin_new_match" : // Match started
9999 p .eventDispatcher .Dispatch (events.MatchStartedEvent {})
@@ -105,17 +105,17 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
105105 data = mapGameEventData (d , ge )
106106
107107 p .eventDispatcher .Dispatch (events.PlayerFootstepEvent {
108- Player : p .gameState .players [int (data ["userid" ].GetValShort ())],
108+ Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())],
109109 })
110110
111111 case "player_jump" : // Player jumped
112112 data = mapGameEventData (d , ge )
113- p .eventDispatcher .Dispatch (events.PlayerJumpEvent {Player : p .gameState .players [int (data ["userid" ].GetValShort ())]})
113+ p .eventDispatcher .Dispatch (events.PlayerJumpEvent {Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]})
114114
115115 case "weapon_fire" : // Weapon was fired
116116 data = mapGameEventData (d , ge )
117117
118- shooter := p .gameState .players [int (data ["userid" ].GetValShort ())]
118+ shooter := p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]
119119 wep := common .NewEquipment (data ["weapon" ].GetValString ())
120120
121121 p .eventDispatcher .Dispatch (events.WeaponFiredEvent {
@@ -126,13 +126,13 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
126126 case "player_death" : // Player died
127127 data = mapGameEventData (d , ge )
128128
129- killer := p .gameState .players [int (data ["attacker" ].GetValShort ())]
129+ killer := p .gameState .playersByUserID [int (data ["attacker" ].GetValShort ())]
130130 wep := common .NewSkinEquipment (data ["weapon" ].GetValString (), data ["weapon_itemid" ].GetValString ())
131131
132132 p .eventDispatcher .Dispatch (events.PlayerKilledEvent {
133- Victim : p .gameState .players [int (data ["userid" ].GetValShort ())],
133+ Victim : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())],
134134 Killer : killer ,
135- Assister : p .gameState .players [int (data ["assister" ].GetValShort ())],
135+ Assister : p .gameState .playersByUserID [int (data ["assister" ].GetValShort ())],
136136 IsHeadshot : data ["headshot" ].GetValBool (),
137137 PenetratedObjects : int (data ["penetrated" ].GetValShort ()),
138138 Weapon : getAttackingWeapon (& wep , killer ),
@@ -141,11 +141,11 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
141141 case "player_hurt" : // Player got hurt
142142 data = mapGameEventData (d , ge )
143143
144- attacker := p .gameState .players [int (data ["attacker" ].GetValShort ())]
144+ attacker := p .gameState .playersByUserID [int (data ["attacker" ].GetValShort ())]
145145 wep := common .NewEquipment (data ["weapon" ].GetValString ())
146146
147147 p .eventDispatcher .Dispatch (events.PlayerHurtEvent {
148- Player : p .gameState .players [int (data ["userid" ].GetValShort ())],
148+ Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())],
149149 Attacker : attacker ,
150150 Health : int (data ["health" ].GetValByte ()),
151151 Armor : int (data ["armor" ].GetValByte ()),
@@ -157,7 +157,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
157157
158158 case "player_blind" : // Player got blinded by a flash
159159 data = mapGameEventData (d , ge )
160- p .eventDispatcher .Dispatch (events.PlayerFlashedEvent {Player : p .gameState .players [int (data ["userid" ].GetValShort ())]})
160+ p .eventDispatcher .Dispatch (events.PlayerFlashedEvent {Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]})
161161
162162 case "flashbang_detonate" : // Flash exploded
163163 fallthrough
@@ -175,7 +175,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
175175 fallthrough
176176 case "inferno_expire" : // Incendiary expired
177177 data = mapGameEventData (d , ge )
178- thrower := p .gameState .players [int (data ["userid" ].GetValShort ())]
178+ thrower := p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]
179179 position := r3.Vector {
180180 X : float64 (data ["x" ].ValFloat ),
181181 Y : float64 (data ["y" ].ValFloat ),
@@ -233,25 +233,20 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
233233 }
234234 }
235235
236- pl := p .gameState .players [uid ]
236+ pl := p .gameState .playersByUserID [uid ]
237237 if pl != nil {
238238 e := events.PlayerDisconnectEvent {
239239 Player : pl ,
240240 }
241241 p .eventDispatcher .Dispatch (e )
242242 }
243243
244- delete (p .gameState .players , uid )
245- for k , v := range p .entityIDToPlayers {
246- if v == pl {
247- delete (p .entityIDToPlayers , k )
248- }
249- }
244+ delete (p .gameState .playersByUserID , uid )
250245
251246 case "player_team" : // Player changed team
252247 data = mapGameEventData (d , ge )
253248
254- player := p .gameState .players [int (data ["userid" ].GetValShort ())]
249+ player := p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]
255250 newTeam := common .Team (data ["team" ].GetValByte ())
256251
257252 if player != nil {
@@ -285,7 +280,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
285280 case "bomb_exploded" : // Bomb exploded
286281 data = mapGameEventData (d , ge )
287282
288- e := events.BombEvent {Player : p .gameState .players [int (data ["userid" ].GetValShort ())]}
283+ e := events.BombEvent {Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]}
289284
290285 site := int (data ["site" ].GetValShort ())
291286
@@ -327,7 +322,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
327322 data = mapGameEventData (d , ge )
328323
329324 p .eventDispatcher .Dispatch (events.BombBeginDefuseEvent {
330- Player : p .gameState .players [int (data ["userid" ].GetValShort ())],
325+ Player : p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())],
331326 HasKit : data ["haskit" ].GetValBool (),
332327 })
333328
@@ -337,7 +332,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
337332 fallthrough
338333 case "item_remove" : // Dropped?
339334 data = mapGameEventData (d , ge )
340- player := p .gameState .players [int (data ["userid" ].GetValShort ())]
335+ player := p .gameState .playersByUserID [int (data ["userid" ].GetValShort ())]
341336 weapon := common .NewSkinEquipment (data ["item" ].GetValString (), "" )
342337
343338 switch d .Name {
@@ -505,7 +500,7 @@ func (p *Parser) handleUserMessage(um *msg.CSVCMsg_UserMessage) {
505500 p .eventDispatcher .Dispatch (events.ParserWarnEvent {Message : fmt .Sprintf ("Failed to decode SayText2 message: %s" , err .Error ())})
506501 }
507502
508- sender := p .gameState .players [int (st .EntIdx )]
503+ sender := p .gameState .playersByUserID [int (st .EntIdx )]
509504 p .eventDispatcher .Dispatch (events.SayText2Event {
510505 Sender : sender ,
511506 IsChat : st .Chat ,
0 commit comments