From: Rudolf Polzer Date: Tue, 20 Aug 2013 09:21:35 +0000 (+0200) Subject: mapinfo: new flag "noautomaplist" for e.g. space-slap X-Git-Tag: xonotic-v0.8.0~323^2~1 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=7d48e976c8a9b3f80350b2ad41d9feec2797cf76;p=xonotic%2Fxonotic-data.pk3dir.git mapinfo: new flag "noautomaplist" for e.g. space-slap --- diff --git a/qcsrc/common/mapinfo.qc b/qcsrc/common/mapinfo.qc index 7570393f4..1b1dc1547 100644 --- a/qcsrc/common/mapinfo.qc +++ b/qcsrc/common/mapinfo.qc @@ -991,6 +991,10 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, flo { MapInfo_Map_flags |= MAPINFO_FLAG_FRUSTRATING; } + else if(t == "noautomaplist") + { + MapInfo_Map_flags |= MAPINFO_FLAG_NOAUTOMAPLIST; + } else if(t == "type") { t = car(s); s = cdr(s); diff --git a/qcsrc/common/mapinfo.qh b/qcsrc/common/mapinfo.qh index 10a35ee47..9f39eafc2 100644 --- a/qcsrc/common/mapinfo.qh +++ b/qcsrc/common/mapinfo.qh @@ -85,6 +85,7 @@ float MAPINFO_FEATURE_TURRETS = 4; float MAPINFO_FLAG_HIDDEN = 1; // not in lsmaps/menu/vcall/etc., can just be changed to manually float MAPINFO_FLAG_FORBIDDEN = 2; // don't even allow the map by a cvar setting that allows hidden maps float MAPINFO_FLAG_FRUSTRATING = 4; // this map is near impossible to play, enable at your own risk +float MAPINFO_FLAG_NOAUTOMAPLIST = 8; // do not include when automatically building maplist (counts as hidden for maplist building purposes) float MapInfo_count; diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index e8b345098..547436747 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -1093,6 +1093,8 @@ float() MaplistMethod_Iterate = // usual method { float pass, i; + dprint("Trying MaplistMethod_Iterate\n"); + for(pass = 1; pass <= 2; ++pass) { for(i = 1; i < Map_Count; ++i) @@ -1108,6 +1110,8 @@ float() MaplistMethod_Iterate = // usual method float() MaplistMethod_Repeat = // fallback method { + dprint("Trying MaplistMethod_Repeat\n"); + if(Map_Check(Map_Current, 2)) return Map_Current; return -2; @@ -1117,6 +1121,8 @@ float() MaplistMethod_Random = // random map selection { float i, imax; + dprint("Trying MaplistMethod_Random\n"); + imax = 42; for(i = 0; i <= imax; ++i) @@ -1135,6 +1141,8 @@ float(float exponent) MaplistMethod_Shuffle = // more clever shuffling { float i, j, imax, insertpos; + dprint("Trying MaplistMethod_Shuffle\n"); + imax = 42; for(i = 0; i <= imax; ++i) @@ -1169,10 +1177,15 @@ float(float exponent) MaplistMethod_Shuffle = // more clever shuffling void Maplist_Init() { Map_Count = tokenizebyseparator(autocvar_g_maplist, " "); - if(Map_Count == 0) + float working = 0; + float i; + for (i = 0; i < Map_Count; ++i) + if (Map_Check(i, 2)) + break; + if (i == Map_Count) { - bprint( "Maplist is empty! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); + bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" ); + cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags() | MAPINFO_FLAG_NOAUTOMAPLIST)); if(autocvar_g_maplist_shuffle) ShuffleMaplist(); localcmd("\nmenu_cmd sync\n"); @@ -1275,31 +1288,12 @@ void GotoNextMap(float reinit) return; alreadychangedlevel = TRUE; - { - string nextMap; - float allowReset; + string nextMap; + float allowReset; - for(allowReset = 1; allowReset >= 0; --allowReset) - { - nextMap = GetNextMap(); - if(nextMap != "") - break; - - if(allowReset) - { - bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" ); - cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags())); - if(autocvar_g_maplist_shuffle) - ShuffleMaplist(); - localcmd("\nmenu_cmd sync\n"); - } - else - { - error("Everything is broken - not even the default map list works. Please report this to the developers."); - } - } - Map_Goto(reinit); - } + nextMap = GetNextMap(); + if(nextMap == "") + error("Everything is broken - cannot find a next map. Please report this to the developers."); }