X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmapinfo.qc;h=307eb2773bff0db88146af8b3372b47ba11abc97;hp=0884bc8d79054c29d6d88bacb75ad88de011e09b;hb=f785b8a76c2336cb00e78fe9e738d55512a086f5;hpb=ceea8405790b1bc1ac91b3c382884ebaeafcbcac diff --git a/qcsrc/common/mapinfo.qc b/qcsrc/common/mapinfo.qc index 0884bc8d7..307eb2773 100644 --- a/qcsrc/common/mapinfo.qc +++ b/qcsrc/common/mapinfo.qc @@ -10,6 +10,11 @@ #endif bool autocvar_g_mapinfo_ignore_warnings; +#ifdef MENUQC +#define WARN_COND (!autocvar_g_mapinfo_ignore_warnings) +#else +#define WARN_COND (!autocvar_g_mapinfo_ignore_warnings && MapInfo_Map_bspname == mi_shortname) +#endif // generic string stuff @@ -424,27 +429,7 @@ void _MapInfo_Map_Reset() string _MapInfo_GetDefault(Gametype t) { - switch(t) - { - case MAPINFO_TYPE_DEATHMATCH: return "30 20 0"; - case MAPINFO_TYPE_TEAM_DEATHMATCH: return "50 20 2 0"; - case MAPINFO_TYPE_DOMINATION: return "200 20 0"; - case MAPINFO_TYPE_CTF: return "300 20 10 0"; - case MAPINFO_TYPE_LMS: return "9 20 0"; - case MAPINFO_TYPE_CA: return "10 20 0"; - case MAPINFO_TYPE_KEYHUNT: return "1000 20 3 0"; - case MAPINFO_TYPE_ASSAULT: return "20 0"; - case MAPINFO_TYPE_RACE: return "20 5 7 15 0"; - case MAPINFO_TYPE_ONSLAUGHT: return "20 0"; - case MAPINFO_TYPE_NEXBALL: return "5 20 0"; - case MAPINFO_TYPE_CTS: return "20 0 0"; - case MAPINFO_TYPE_FREEZETAG: return "10 20 0"; - // NOTE: DO NOT ADD ANY MORE GAME TYPES HERE - // THIS IS JUST LEGACY SUPPORT FOR NEXUIZ MAPS - // ONLY ADD NEW STUFF TO _MapInfo_GetDefaultEx - // THIS FUNCTION WILL EVENTUALLY BE REMOVED - default: return ""; - } + return t.m_legacydefaults; } void _MapInfo_Map_ApplyGametype(string s, Gametype pWantedType, Gametype pThisType, int load_default) @@ -457,7 +442,7 @@ void _MapInfo_Map_ApplyGametype(string s, Gametype pWantedType, Gametype pThisTy if(load_default) _MapInfo_Map_ApplyGametype(_MapInfo_GetDefault(pThisType), pWantedType, pThisType, false); - if(pWantedType == MAPINFO_TYPE_ASSAULT || pWantedType == MAPINFO_TYPE_ONSLAUGHT || pWantedType == MAPINFO_TYPE_RACE || pWantedType == MAPINFO_TYPE_CTS) // these modes don't use fraglimit + if(!pWantedType.frags) // these modes don't use fraglimit { cvar_set("fraglimit", "0"); } @@ -485,6 +470,8 @@ void _MapInfo_Map_ApplyGametype(string s, Gametype pWantedType, Gametype pThisTy // rc = timelimit timelimit_qualification laps laps_teamplay if(pWantedType == MAPINFO_TYPE_RACE) { + cvar_set("fraglimit", "0"); // special case! + sa = car(s); if(sa == "") sa = cvar_string("timelimit"); cvar_set("g_race_qualifying_timelimit", sa); s = cdr(s); @@ -502,7 +489,7 @@ void _MapInfo_Map_ApplyGametype(string s, Gametype pWantedType, Gametype pThisTy s = cdr(s); } - if(pWantedType == MAPINFO_TYPE_ASSAULT || pWantedType == MAPINFO_TYPE_ONSLAUGHT || pWantedType == MAPINFO_TYPE_CTS) // these modes don't use fraglimit + if(!pWantedType.frags) // these modes don't use fraglimit { cvar_set("leadlimit", "0"); } @@ -546,7 +533,7 @@ void _MapInfo_Map_ApplyGametypeEx(string s, Gametype pWantedType, Gametype pThis if (sa == "") continue; int p = strstrofs(sa, "=", 0); if (p < 0) { - if(!autocvar_g_mapinfo_ignore_warnings) + if(WARN_COND) LOG_WARNF("Invalid gametype setting in mapinfo for gametype %s: %s", MapInfo_Type_ToString(pWantedType), sa); continue; } @@ -586,7 +573,7 @@ void _MapInfo_Map_ApplyGametypeEx(string s, Gametype pWantedType, Gametype pThis } } FOREACH(Gametypes, true, handled |= it.m_parse_mapinfo(k, v)); - if (!handled && !autocvar_g_mapinfo_ignore_warnings) + if (!handled && WARN_COND) LOG_WARNF("Invalid gametype setting in mapinfo for gametype %s: %s", MapInfo_Type_ToString(pWantedType), sa); } @@ -602,25 +589,25 @@ void _MapInfo_Map_ApplyGametypeEx(string s, Gametype pWantedType, Gametype pThis } } -Gametype MapInfo_Type_FromString(string t) +Gametype MapInfo_Type_FromString(string str) { -#define deprecate(from, to) MACRO_BEGIN { \ - if (t == #from) { \ - string replacement = #to; \ - if(!autocvar_g_mapinfo_ignore_warnings) \ - LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, t, replacement); \ - t = replacement; \ - } \ -} MACRO_END - deprecate(nexball, nb); - deprecate(freezetag, ft); - deprecate(keepaway, ka); - deprecate(invasion, inv); - deprecate(assault, as); - deprecate(race, rc); - FOREACH(Gametypes, it.mdl == t, return it); + string replacement = ""; + switch (str) + { + case "nexball": replacement = "nb"; break; + case "freezetag": replacement = "ft"; break; + case "keepaway": replacement = "ka"; break; + case "invasion": replacement = "inv"; break; + case "assault": replacement = "as"; break; + case "race": replacement = "rc"; break; + } + if (replacement != "" && WARN_COND) + { + LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, str, replacement); + str = replacement; + } + FOREACH(Gametypes, it.mdl == str, return it); return NULL; -#undef deprecate } string MapInfo_Type_Description(Gametype t) @@ -678,7 +665,10 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s, { fh = fopen(s, FILE_READ); if(fh < 0) - LOG_WARN("Map ", pFilename, " references not existing config file ", s); + { + if(WARN_COND) + LOG_WARN("Map ", pFilename, " references not existing config file ", s); + } else { for (;;) @@ -706,19 +696,22 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s, fclose(fh); } } - else + else if(WARN_COND) LOG_WARN("Map ", pFilename, " uses too many levels of inclusion"); } - else if(t == "") - LOG_WARN("Map ", pFilename, " contains a potentially harmful setting, ignored"); - else if (!cvar_value_issafe(t)) - LOG_WARN("Map ", pFilename, " contains a potentially harmful setting, ignored"); - else if (!cvar_value_issafe(s)) - LOG_WARN("Map ", pFilename, " contains a potentially harmful setting, ignored"); - else if(matchacl(MAPINFO_SETTEMP_ACL_SYSTEM, t) <= 0) - LOG_WARN("Map ", pFilename, " contains a potentially harmful setting, ignored"); + else if(t == "" + || !cvar_value_issafe(t) + || !cvar_value_issafe(s) + || matchacl(MAPINFO_SETTEMP_ACL_SYSTEM, t) <= 0) + { + if (WARN_COND) + LOG_WARN("Map ", pFilename, " contains a potentially harmful setting, ignored"); + } else if(matchacl(acl, t) <= 0) - LOG_WARN("Map ", pFilename, " contains a denied setting, ignored"); + { + if (WARN_COND) + LOG_WARN("Map ", pFilename, " contains a denied setting, ignored"); + } else { if(type == 0) // server set @@ -742,22 +735,19 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s, float MapInfo_isRedundant(string fn, string t) { // normalize file name - fn = strreplace("_", "-", fn); + fn = strreplace("_", "", fn); + fn = strreplace("-", "", fn); // normalize visible title - t = strreplace(": ", "-", t); - t = strreplace(":", "-", t); - t = strreplace(" ", "-", t); - t = strreplace("_", "-", t); - t = strreplace("'", "-", t); - - if(!strcasecmp(fn, t)) - return true; + t = strreplace(":", "", t); + t = strreplace(" ", "", t); + t = strreplace("_", "", t); + t = strreplace("-", "", t); + t = strreplace("'", "", t); + t = strdecolorize(t); // we allow the visible title to have punctuation the file name does // not, but not vice versa - t = strreplace("-", "", t); - if(!strcasecmp(fn, t)) return true; @@ -854,6 +844,9 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet if(fexists(strcat("scripts/", pFilename, ".arena"))) fputs(fh, "settemp_for_type all sv_q3acompat_machineshotgunswap 1\n"); + if(fexists(strcat("scripts/", pFilename, ".defi"))) + fputs(fh, "settemp_for_type all sv_vq3compat 1\n"); + fputs(fh, "// optional: fog density red green blue alpha mindist maxdist\n"); fputs(fh, "// optional: settemp_for_type (all|gametypename) cvarname value\n"); fputs(fh, "// optional: clientsettemp_for_type (all|gametypename) cvarname value\n"); @@ -868,7 +861,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet error("... but I just wrote it!"); } - if(!autocvar_g_mapinfo_ignore_warnings) + if(WARN_COND) LOG_WARN("autogenerated mapinfo file ", fn, " has been loaded; please edit that file and move it to maps/", pFilename, ".mapinfo"); } @@ -907,7 +900,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet else if(t == "vehicles") MapInfo_Map_supportedFeatures |= MAPINFO_FEATURE_VEHICLES; else if(t == "monsters") MapInfo_Map_supportedFeatures |= MAPINFO_FEATURE_MONSTERS; else if(t == "new_toys") MapInfo_Map_supportedFeatures |= MAPINFO_FEATURE_WEAPONS; - else + else if(WARN_COND) LOG_WARN("Map ", pFilename, " supports unknown feature ", t, ", ignored"); } else if(t == "hidden") @@ -935,11 +928,11 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet { t = car(s); s = cdr(s); Gametype f = MapInfo_Type_FromString(t); - //if(!autocvar_g_mapinfo_ignore_warnings) + //if(WARN_COND) //LOG_WARN("Map ", pFilename, " contains the legacy 'type' keyword which is deprecated and will be removed in the future. Please migrate the mapinfo file to 'gametype'."); if(f) _MapInfo_Map_ApplyGametype (s, pGametypeToSet, f, true); - else if(!autocvar_g_mapinfo_ignore_warnings) + else if(WARN_COND) LOG_DEBUG("Map ", pFilename, " supports unknown game type ", t, ", ignored"); } else if(t == "gametype") @@ -948,7 +941,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet Gametype f = MapInfo_Type_FromString(t); if(f) _MapInfo_Map_ApplyGametypeEx (s, pGametypeToSet, f); - else if(!autocvar_g_mapinfo_ignore_warnings) + else if(WARN_COND) LOG_DEBUG("Map ", pFilename, " supports unknown game type ", t, ", ignored"); } else if(t == "size") @@ -960,16 +953,25 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet t = car(s); s = cdr(s); d = stof(t); t = car(s); s = cdr(s); e = stof(t); if(s == "") - LOG_WARN("Map ", pFilename, " contains an incorrect size line (not enough params), syntax: size mins_x mins_y mins_z maxs_x maxs_y maxs_z"); + { + if(WARN_COND) + LOG_WARN("Map ", pFilename, " contains an incorrect size line (not enough params), syntax: size mins_x mins_y mins_z maxs_x maxs_y maxs_z"); + } else { t = car(s); s = cdr(s); f = stof(t); if(s != "") - LOG_WARN("Map ", pFilename, " contains an incorrect size line (too many params), syntax: size mins_x mins_y mins_z maxs_x maxs_y maxs_z"); + { + if(WARN_COND) + LOG_WARN("Map ", pFilename, " contains an incorrect size line (too many params), syntax: size mins_x mins_y mins_z maxs_x maxs_y maxs_z"); + } else { if(a >= d || b >= e || c >= f) - LOG_WARN("Map ", pFilename, " contains an incorrect size line, mins have to be < maxs"); + { + if(WARN_COND) + LOG_WARN("Map ", pFilename, " contains an incorrect size line, mins have to be < maxs"); + } else { MapInfo_Map_mins.x = a; @@ -1019,7 +1021,10 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet else if(t == "fog") { if (!cvar_value_issafe(s)) - LOG_WARN("Map ", pFilename, " contains a potentially harmful fog setting, ignored"); + { + if(WARN_COND) + LOG_WARN("Map ", pFilename, " contains a potentially harmful fog setting, ignored"); + } else MapInfo_Map_fog = s; } @@ -1035,14 +1040,17 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet if(pGametypeToSet) { if (!cvar_value_issafe(t)) - LOG_WARN("Map ", pFilename, " contains a potentially harmful cdtrack, ignored"); + { + if(WARN_COND) + LOG_WARN("Map ", pFilename, " contains a potentially harmful cdtrack, ignored"); + } else MapInfo_Map_clientstuff = strcat( MapInfo_Map_clientstuff, "cd loop \"", t, "\"\n" ); } } - else if(!autocvar_g_mapinfo_ignore_warnings) + else if(WARN_COND) LOG_WARN("Map ", pFilename, " provides unknown info item ", t, ", ignored"); } fclose(fh); @@ -1057,20 +1065,15 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet MapInfo_Cache_Store(); if(MapInfo_Map_supportedGametypes != 0) return r; - LOG_WARN("Map ", pFilename, " supports no game types, ignored"); + if (WARN_COND) + LOG_WARN("Map ", pFilename, " supports no game types, ignored"); return 0; } int MapInfo_Get_ByName(string pFilename, float pAllowGenerate, Gametype pGametypeToSet) { int r = MapInfo_Get_ByName_NoFallbacks(pFilename, pAllowGenerate, pGametypeToSet); - if(cvar("g_tdm_on_dm_maps")) - { - // if this is set, all DM maps support TDM too - if (!(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH.m_flags)) - if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags) - _MapInfo_Map_ApplyGametypeEx ("", pGametypeToSet, MAPINFO_TYPE_TEAM_DEATHMATCH); - } + FOREACH(Gametypes, it.m_isForcedSupported(it), _MapInfo_Map_ApplyGametypeEx("", pGametypeToSet, it)); if(pGametypeToSet) {