Skip to content

Commit 6991c4f

Browse files
committed
Fix player mixups after reconnect
Reconnects weren't handled properly. Afterwards some players had wrong user-ids etc. This means that, for example, PlayerKilledEvent contained the wrong players.
1 parent 2ea60f3 commit 6991c4f

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

game_events.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
208208
p.eventDispatcher.Dispatch(events.FireNadeEndEvent{NadeEvent: buildNadeEvent(common.EqIncendiary, thrower, position)})
209209
}
210210

211-
case "player_connect": // Bot connected, players come in via string tables & data tables
211+
case "player_connect": // Bot connected or player reconnected, players normally come in via string tables & data tables
212212
data = mapGameEventData(d, ge)
213213

214214
pl := &playerInfo{
@@ -219,16 +219,16 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
219219

220220
pl.xuid = getCommunityID(pl.guid)
221221

222-
p.rawPlayers[int(data["index"].GetValShort())] = pl
222+
p.rawPlayers[int(data["index"].GetValByte())] = pl
223223

224-
case "player_disconnect": // Bot disconnected, players come in via string tables & data tables
224+
case "player_disconnect": // Player disconnected (kicked, quit, timed out etc.)
225225
data = mapGameEventData(d, ge)
226226

227227
uid := int(data["userid"].GetValShort())
228228

229-
for i := range p.rawPlayers {
230-
if p.rawPlayers[i].userID == uid {
231-
delete(p.rawPlayers, i)
229+
for k, v := range p.rawPlayers {
230+
if v.userID == uid {
231+
delete(p.rawPlayers, k)
232232
}
233233
}
234234

@@ -241,6 +241,11 @@ func (p *Parser) handleGameEvent(ge *msg.CSVCMsg_GameEvent) {
241241
}
242242

243243
delete(p.gameState.players, uid)
244+
for k, v := range p.entityIDToPlayers {
245+
if v == pl {
246+
delete(p.entityIDToPlayers, k)
247+
}
248+
}
244249

245250
case "player_team": // Player changed team
246251
data = mapGameEventData(d, ge)

0 commit comments

Comments
 (0)