X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcampaign.qc;h=110704f2bbd9b2d80cfba1f6325faa321b53f378;hp=ec8990de25602905b11a12e5e5458523cc4bf8ee;hb=50b224ef8be4902d6e4ba77b71ebbb2ff187e950;hpb=7e474d576080259e21690de30778b17029b5c0f2 diff --git a/qcsrc/server/campaign.qc b/qcsrc/server/campaign.qc index ec8990de25..110704f2bb 100644 --- a/qcsrc/server/campaign.qc +++ b/qcsrc/server/campaign.qc @@ -21,16 +21,19 @@ 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, "\n"); + LOG_INFO("^4campaign initialization failed: ", s); if(autocvar__campaign_testrun) error("CAMPAIGN FAIL AHAHAHAHAHAHAHAHAH))"); return 1; } +#if 0 string cvar_campaignwrapper_list; // string of format ; var value; var value; var value; string cvar_string_campaignwrapper(string theCvar) { @@ -52,12 +55,12 @@ void cvar_set_campaignwrapper(string theCvar, string theValue) { if(cvar_string_campaignwrapper(theCvar) == theValue) return; - string s; - s = cvar_campaignwrapper_list; + string s = cvar_campaignwrapper_list; cvar_campaignwrapper_list = strzone(strcat("; ", theCvar, " ", theValue, s)); strunzone(s); //print(cvar_campaignwrapper_list, "\n"); } +#endif float Campaign_Invalid() { @@ -72,10 +75,19 @@ float Campaign_Invalid() return 0; } +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")); @@ -95,24 +107,42 @@ void CampaignPreInit() 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) + { + for(int j = 0; j < argc; ++j) + { + string arg = argv(j); + if(arg == "") continue; + _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 @@ -121,11 +151,6 @@ void CampaignPreInit() 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() @@ -136,16 +161,28 @@ 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("leadlimit", "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)); + cvar_set_normal("fraglimit", argv(0)); + } + if(argv(1) != "default") { + cvar_set("leadlimit", argv(1)); + cvar_set_normal("leadlimit", argv(1)); + } + if(campaign_timelimit[0] != "default") { + cvar_set("timelimit", campaign_timelimit[0]); + cvar_set_normal("timelimit", campaign_timelimit[0]); + } } } @@ -207,6 +244,11 @@ void CampaignPreIntermission() campaign_won = 1; bprint("Campaign test run, advancing level.\n"); } + else if(campaign_forcewin) + { + campaign_won = 1; + bprint("The current level has been WON.\n"); + } else if(won == 1 && lost == 0 && checkrules_equality == 0) { if(autocvar_timelimit != 0 && autocvar_fraglimit != 0 && time > autocvar_timelimit * 60) // checks if the timelimit has expired. @@ -271,7 +313,6 @@ void CampaignPostIntermission() CampaignSetup(campaign_won); CampaignFile_Unload(); - strunzone(campaign_message); strunzone(campaign_index_var); strunzone(campaign_name); campaign_name = "";