#include "campaign.qh"
+
+#include "defs.qh"
+
#include "cheats.qh"
#include "miscfunctions.qh"
#include "g_world.qh"
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)
{
{
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()
{
{
float baseskill;
string title;
- if(autocvar_sv_cheats)
- {
- CampaignBailout("JOLLY CHEATS AHAHAHAHAHAHAH))");
- return;
- }
campaign_level = autocvar__campaign_index;
campaign_name = strzone(autocvar__campaign_name);
campaign_index_var = strzone(strcat("g_campaign", campaign_name, "_index"));
CampaignFile_Load(campaign_level, 2);
+
if(campaign_entries < 1)
{
CampaignBailout("unknown map");
return;
}
- baseskill = autocvar_g_campaign_skill;
- baseskill = baseskill + campaign_botskill[0];
- if(baseskill < 0)
- baseskill = 0;
+ if(autocvar_sv_cheats)
+ {
+ MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0]));
+ CampaignFile_Unload();
+ CampaignBailout("JOLLY CHEATS AHAHAHAHAHAHAH))");
+ return;
+ }
+
+ 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, 0); // no recursion!
+ }
+ }
+#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
+ // since g_campaign is already set to 1 by the menu when starting a campaign level, we first need
+ // to set it back to 0 before settemping it to 1 so it'll be correctly restored to 0 on disconnection
+ cvar_set("g_campaign", "0");
+ 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
void CampaignPreIntermission()
{
- entity head;
- float won;
- float lost;
+ int won = 0;
+ int lost = 0;
string savevar;
- won = lost = 0;
-
- head = findchain(classname, "player");
- while(head)
- {
- if(IS_REAL_CLIENT(head))
- {
- if(head.winning)
- won = won + 1;
- else
- lost = lost + 1;
- }
- head = head.chain;
- }
+ FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it), {
+ if(it.winning)
+ won += 1;
+ else
+ lost += 1;
+ });
if(autocvar__campaign_testrun)
{
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.
if(campaign_won && campaign_entries < 2)
{
// last map won!
- LOG_INFO("^2test run: campaign looks GOOD\n");
+ LOG_DEBUG("^2test run: campaign looks GOOD");
localcmd("togglemenu 1\n");
CampaignFile_Unload();
return;