X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fintermission.qc;h=b2652f7d8d9b27cc0da41d128d31bccf88383603;hb=dea5ffacf8adb7465b875479aaeabd5ee52f305b;hp=81850d8df33ce041796423d6ed377c31e28241e8;hpb=654bbb9eaa7ff1653c64f833e0920867764cf045;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/intermission.qc b/qcsrc/server/intermission.qc index 81850d8df..b2652f7d8 100644 --- a/qcsrc/server/intermission.qc +++ b/qcsrc/server/intermission.qc @@ -54,7 +54,7 @@ bool MapHasRightSize(string map) { int minplayers = max(0, floor(autocvar_minplayers)); if (teamplay) - minplayers = max(0, floor(autocvar_minplayers_per_team) * AvailableTeams()); + minplayers = max(0, floor(autocvar_minplayers_per_team) * AVAILABLE_TEAMS); if (autocvar_g_maplist_check_waypoints && (currentbots || autocvar_bot_number || player_count < minplayers)) { @@ -71,32 +71,32 @@ bool MapHasRightSize(string map) return true; // open map size restriction file - string opensize_msg = strcat("opensize ", map); - float fh = fopen(strcat("maps/", map, ".sizes"), FILE_READ); + if(!MapReadSizes(map)) + return true; // map has no size restrictions + + string checksize_msg = strcat("MapHasRightSize ", map); int player_limit = ((autocvar_g_maplist_sizes_count_maxplayers) ? GetPlayerLimit() : 0); int pcount = ((player_limit > 0) ? min(player_count, player_limit) : player_count); // bind it to the player limit so that forced spectators don't influence the limits + if(!autocvar_g_maplist_sizes_count_bots) pcount -= currentbots; - if(fh >= 0) + pcount -= rint(cvar("g_maplist_sizes_specparty") * pcount); + + // ensure small maps can be selected when pcount is low + if(map_minplayers <= (_MapInfo_GetTeamPlayBool(MapInfo_CurrentGametype()) ? 4 : 2)) + map_minplayers = 0; + + if(pcount < map_minplayers) { - opensize_msg = strcat(opensize_msg, ": ok, "); - int mapmin = stoi(fgets(fh)); - int mapmax = stoi(fgets(fh)); - fclose(fh); - if(pcount < mapmin) - { - LOG_TRACE(opensize_msg, "not enough"); - return false; - } - if(mapmax && pcount > mapmax) - { - LOG_TRACE(opensize_msg, "too many"); - return false; - } - LOG_TRACE(opensize_msg, "right size"); - return true; + LOG_TRACE(checksize_msg, ": not enough"); + return false; + } + if(map_maxplayers && pcount > map_maxplayers) + { + LOG_TRACE(checksize_msg, ": too many"); + return false; } - LOG_TRACE(opensize_msg, ": not found"); + LOG_TRACE(checksize_msg, ": right size"); return true; } @@ -399,7 +399,8 @@ string GotoMap(string m) if(!MapInfo_CheckMap(m)) return "The map you suggested does not support the current game mode."; cvar_set("nextmap", m); - cvar_set("timelimit", "-1"); + if (!intermission_running) + cvar_set("_endmatch", "1"); if(mapvote_initialized || alreadychangedlevel) { if(DoNextMapOverride(0))