X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcampaign.qc;h=6bd853d1b4af51d053ff9048f5712d184ca60986;hb=480de525d9378ac5baa42568c212dc6b13363879;hp=76e2cdeb8480069230118925719d77d9e105ae5b;hpb=37b3d02a3583ada75dd373d067a8ab6a0ce109a1;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/campaign.qc b/qcsrc/server/campaign.qc index 76e2cdeb8..6bd853d1b 100644 --- a/qcsrc/server/campaign.qc +++ b/qcsrc/server/campaign.qc @@ -1,12 +1,12 @@ #include "campaign.qh" -#include "defs.qh" - -#include "cheats.qh" -#include "miscfunctions.qh" -#include "g_world.qh" - -#include "../common/campaign_common.qh" +#include +#include +#include +#include +#include +#include +#include // campaign cvars: // _campaign_index: index of CURRENT map @@ -21,11 +21,6 @@ string campaign_index_var; float CampaignBailout(string s) { -#if 0 - cvar = cvar_normal; - cvar_string = cvar_string_normal; - cvar_set = cvar_set_normal; -#endif cvar_set("g_campaign", "0"); LOG_INFO("^4campaign initialization failed: ", s); if(autocvar__campaign_testrun) @@ -33,41 +28,12 @@ float CampaignBailout(string s) return 1; } -#if 0 -string cvar_campaignwrapper_list; // string of format ; var value; var value; var value; -string cvar_string_campaignwrapper(string theCvar) -{ - float p, q; - p = strstrofs(cvar_campaignwrapper_list, strcat("; ", theCvar, " "), 0); - if(p < 0) - return cvar_defstring(theCvar); - p += strlen(theCvar) + 3; - q = strstrofs(cvar_campaignwrapper_list, ";", p); - if(q < 0) - return cvar_defstring(theCvar); - return substring(cvar_campaignwrapper_list, p, q - p); -} -float cvar_campaignwrapper(string theCvar) -{ - return stof(cvar_string_campaignwrapper(theCvar)); -} -void cvar_set_campaignwrapper(string theCvar, string theValue) -{ - if(cvar_string_campaignwrapper(theCvar) == theValue) - return; - string s = cvar_campaignwrapper_list; - cvar_campaignwrapper_list = strzone(strcat("; ", theCvar, " ", theValue, s)); - strunzone(s); - //print(cvar_campaignwrapper_list, "\n"); -} -#endif - float Campaign_Invalid() { string thismapname, wantedmapname; thismapname = GetMapname(); wantedmapname = campaign_gametype[0]; - if(MapInfo_CurrentGametype() != MapInfo_Type_FromString(wantedmapname)) + if(MapInfo_CurrentGametype() != MapInfo_Type_FromString(wantedmapname, false)) return CampaignBailout("wrong game type!"); wantedmapname = campaign_mapname[0]; if(wantedmapname != thismapname) @@ -75,10 +41,24 @@ float Campaign_Invalid() return 0; } +string Campaign_GetTitle() +{ + return campaign_title; +} + +int Campaign_GetLevelNum() +{ + return campaign_level + 1; +} + +string Campaign_GetMessage() +{ + return strcat(campaign_shortdesc[0], "\n^3\n", campaign_longdesc[0]); +} + void CampaignPreInit() { float baseskill; - string title; campaign_level = autocvar__campaign_index; campaign_name = strzone(autocvar__campaign_name); campaign_index_var = strzone(strcat("g_campaign", campaign_name, "_index")); @@ -92,25 +72,18 @@ void CampaignPreInit() if(autocvar_sv_cheats) { - MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0])); + MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0], false)); CampaignFile_Unload(); CampaignBailout("JOLLY CHEATS AHAHAHAHAHAHAH))"); return; } - baseskill = autocvar_g_campaign_skill; - baseskill = baseskill + campaign_botskill[0]; - if(baseskill < 0) - baseskill = 0; - + baseskill = max(0, autocvar_g_campaign_skill + campaign_botskill[0]); campaign_forcewin = false; cvar_set("sv_public", "0"); cvar_set("pausable", "1"); -#if 0 - cvar_campaignwrapper_list = strzone(strcat("; ", campaign_mutators[0], "; ")); -#else string cvar_campaignwrapper_list = strcat("; ", campaign_mutators[0], "; "); int argc = tokenizebyseparator(cvar_campaignwrapper_list, "; "); if(argc > 0) @@ -119,38 +92,19 @@ void CampaignPreInit() { string arg = argv(j); if(arg == "") continue; - _MapInfo_Parse_Settemp(mapname, MAPINFO_SETTEMP_ACL_USER, 0, arg, 0); // no recursion! + _MapInfo_Parse_Settemp(mapname, MAPINFO_SETTEMP_ACL_USER, 0, arg, 1); } } -#endif - -#if 0 - cvar = cvar_campaignwrapper; - cvar_string = cvar_string_campaignwrapper; - cvar_set = cvar_set_campaignwrapper; - cvar_set("g_campaign", "1"); - cvar_set("g_dm", "0"); - cvar_set("skill", ftos(baseskill)); - cvar_set("bot_number", ftos(campaign_bots[0])); -#else + cvar_settemp("g_campaign", "1"); cvar_settemp("g_dm", "0"); cvar_settemp("skill", ftos(baseskill)); cvar_settemp("bot_number", ftos(campaign_bots[0])); -#endif - MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0])); - // copy sv_gravity cvar, as the engine needs it too (sorry, this will mess - // with the menu a little still...) - cvar_set_normal("sv_gravity", ftos(autocvar_sv_gravity)); + MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0], false)); if(Campaign_Invalid()) return; - - title = campaign_shortdesc[0]; - title = strzone(strcat("Level ", ftos(campaign_level + 1), ": ", title)); - campaign_message = strzone(strcat(title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game")); - strunzone(title); } void CampaignPostInit() @@ -161,16 +115,22 @@ void CampaignPostInit() if(autocvar__campaign_testrun) { cvar_set("fraglimit", "0"); + cvar_set("leadlimit", "0"); cvar_set("timelimit", "0.01"); - cvar_set_normal("fraglimit", "0"); - cvar_set_normal("timelimit", "0.01"); } else { - cvar_set("fraglimit", ftos(campaign_fraglimit[0])); - cvar_set("timelimit", ftos(campaign_timelimit[0])); - cvar_set_normal("fraglimit", ftos(campaign_fraglimit[0])); - cvar_set_normal("timelimit", ftos(campaign_timelimit[0])); + // "default" uses implicit values, "" or "0" means no limit + tokenizebyseparator(campaign_fraglimit[0], "+"); + if(argv(0) != "default") { + cvar_set("fraglimit", argv(0)); + } + if(argv(1) != "default") { + cvar_set("leadlimit", argv(1)); + } + if(campaign_timelimit[0] != "default") { + cvar_set("timelimit", campaign_timelimit[0]); + } } } @@ -182,7 +142,7 @@ void CampaignSaveCvar(string cvarname, float value) string l; registercvar(cvarname, ftos(value)); - cvar_set_normal(cvarname, ftos(value)); + cvar_set(cvarname, ftos(value)); // note: cvarname must be remembered fh = fopen("campaign.cfg", FILE_READ); @@ -267,7 +227,7 @@ void CampaignPreIntermission() if(campaign_won && cheatcount_total == 0 && !autocvar__campaign_testrun) { - if(campaign_level == cvar_normal(campaign_index_var)) + if(campaign_level == cvar(campaign_index_var)) { if(campaign_entries < 2) { @@ -301,7 +261,6 @@ void CampaignPostIntermission() CampaignSetup(campaign_won); CampaignFile_Unload(); - strunzone(campaign_message); strunzone(campaign_index_var); strunzone(campaign_name); campaign_name = "";