You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Long-standing bug (I'm able to see similar code in the disassembly going as far back as when the game was first converted to SteamPipe; don't have any older binaries).
When multiple players join a team at the same time, some players may be stuck in unassigned.
My guess on why this happens (since reproducing this is tricky) is that the general command handler rejects jointeam commands on a cooldown of 2 seconds as spam prevention but does not redisplay the team selection panel (which is handled by CTFPlayer::HandleCommand_JoinTeam()). So what happens is:
Player connects to the server and attempts to join team, dispatching the jointeam command.
Spam prevention (in CTFPlayer::ClientCommand) sets the next allowed team change command to 2 seconds in the future.
The jointeam-specific handler rejects the team change because the team is now at capacity, and tells the client to redisplay the team selection panel.
Player selects a team from the panel, dispatching a new jointeam command within the 2 second cooldown interval.
Spam prevention swallows the command without doing anything; the jointeam-specific handler isn't called.
As the player is restricted from opening the team menu while unassigned (the callback for changeteam in client code), the player is effectively softlocked unless they reconnect or are aware that spectate allows them to open the panel.
Uh oh!
There was an error while loading. Please reload this page.
Long-standing bug (I'm able to see similar code in the disassembly going as far back as when the game was first converted to SteamPipe; don't have any older binaries).
When multiple players join a team at the same time, some players may be stuck in unassigned.
My guess on why this happens (since reproducing this is tricky) is that the general command handler rejects
jointeam
commands on a cooldown of 2 seconds as spam prevention but does not redisplay the team selection panel (which is handled byCTFPlayer::HandleCommand_JoinTeam()
). So what happens is:jointeam
command.CTFPlayer::ClientCommand
) sets the next allowed team change command to 2 seconds in the future.jointeam
-specific handler rejects the team change because the team is now at capacity, and tells the client to redisplay the team selection panel.jointeam
command within the 2 second cooldown interval.jointeam
-specific handler isn't called.As the player is restricted from opening the team menu while unassigned (the callback for
changeteam
in client code), the player is effectively softlocked unless they reconnect or are aware thatspectate
allows them to open the panel.I've written up a targeted fix for this particular case here.
The text was updated successfully, but these errors were encountered: