round_handler_Reset(game_starttime);
}
+ if (shuffleteams_on_reset_map)
+ {
+ shuffleteams();
+ shuffleteams_on_reset_map = false;
+ }
MUTATOR_CALLHOOK(reset_map_global);
FOREACH_ENTITY_FLOAT_ORDERED(pure_data, false,
if (it.reset2) it.reset2(it);
});
- FOREACH_CLIENT(IS_PLAYER(it) && STAT(FROZEN, it), { Unfreeze(it); });
+ FOREACH_CLIENT(IS_PLAYER(it) && STAT(FROZEN, it), { Unfreeze(it, false); });
// Moving the player reset code here since the player-reset depends
// on spawnpoint entities which have to be reset first --blub
restart_mapalreadyrestarted = false; // reset this var, needed when cvar sv_ready_restart_repeatable is in use
// disable the warmup global for the server
+ if(warmup_stage)
+ localcmd("\nsv_hook_warmupend\n");
warmup_stage = 0; // once the game is restarted the game is in match stage
// reset the .ready status of all players (also spectators)
break;
}
- case "nextmap": // TODO: replicate the old behaviour of being able to vote for maps from different modes on multimode servers (possibly support it in gotomap too), maybe fallback instead of aborting if map name is invalid?
+ // TODO: replicate the old behaviour of being able to vote for maps from different modes on multimode servers (possibly support it in gotomap too)
+ // maybe fallback instead of aborting if map name is invalid?
+ case "nextmap":
{
vote_command = ValidateMap(argv(startpos + 1), caller);
if (!vote_command) return -1;
break;
}
+ case "timelimit": // include restrictions on the maximum votable time limit
+ {
+ float timelimit_vote = stof(argv(startpos + 1));
+ if(timelimit_vote > autocvar_timelimit_max || timelimit_vote < autocvar_timelimit_min)
+ {
+ print_to(caller, strcat("Invalid timelimit vote, accepted values are between ", ftos(autocvar_timelimit_min), " and ", ftos(autocvar_timelimit_max), "."));
+ return -1;
+ }
+ timelimit_vote = bound(autocvar_timelimit_min, timelimit_vote, autocvar_timelimit_max);
+ vote_parsed_command = strcat("timelimit ", ftos(timelimit_vote));
+ vote_parsed_display = strzone(strcat("^1", vote_parsed_command));
+
+ break;
+ }
+
+ case "restart":
+ {
+ // add a delay so that vote result can be seen and announcer can be heard
+ // if the vote is accepted
+ vote_parsed_command = strcat("defer 1 ", vote_command);
+ vote_parsed_display = strzone(strcat("^1", vote_command));
+
+ break;
+ }
+
default:
{
vote_parsed_command = vote_command;
}
FOREACH_CLIENT(IS_REAL_CLIENT(it), { ++tmp_playercount; });
- if (tmp_playercount > 1)
- Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_CALL);
bprint("\{1}^2* ^3", OriginalCallerName(), "^2 calls a vote for ", vote_called_display, "\n");
if (autocvar_sv_eventlog)
GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display));
Nagger_VoteChanged();
VoteCount(true); // needed if you are the only one
+
+ if (tmp_playercount > 1 && vote_called != VOTE_NULL)
+ Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_CALL);
}
return;