else if (this.wants_join)
{
// Get queued player's attention
- if (game_starttime <= time) // No countdown in progress
+ if (game_starttime <= time && !warmup_stage) // No countdown in progress and not returning to warmup with ReadyRestart
Send_Notification(NOTIF_ONE_ONLY, this, MSG_ANNCE, ANNCE_BEGIN);
Send_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, APP_TEAM_NUM(this.team, CENTER_JOIN_PLAY_TEAM));
}
restart_timer.nextthink = game_starttime;
}
+ // If we're returning to warmup join/switch all queued players for consistency:
+ // there's no queueing in warmup and imbalances are handled by sv_teamnagger blocking end of warmup.
+ if (warmup_stage)
+ {
+ // First pass: join player(s) queued for specific team(s)
+ FOREACH_CLIENT(it.wants_join > 0, Join(it, false));
+ // Second pass: join player(s) queued for team autoselection
+ FOREACH_CLIENT(it.wants_join < 0, Join(it, false));
+ }
+
// after a restart every players number of allowed timeouts gets reset, too
if (autocvar_sv_timeout)
{