From 8c2224fc3618bd5b0235f44653a466c2d954de0e Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 28 Nov 2006 19:36:33 +0000 Subject: [PATCH] campaign settings now stored in data/campaign.cfg so they get preserved git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1946 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/campaign.qc | 59 ++++++++++++++++++++++++++++------- data/qcsrc/server/g_world.qc | 24 ++++++++------ data/quake.rc | 1 + 3 files changed, 64 insertions(+), 20 deletions(-) diff --git a/data/qcsrc/server/campaign.qc b/data/qcsrc/server/campaign.qc index 0ce8648f3..3698ce8c4 100644 --- a/data/qcsrc/server/campaign.qc +++ b/data/qcsrc/server/campaign.qc @@ -7,6 +7,7 @@ float campaign_level; float campaign_won; string campaign_index_var; +float checkrules_equality; void(string s) CampaignBailout = { @@ -56,11 +57,53 @@ void() CampaignPostInit = cvar_set("timelimit", "0"); } +void CampaignSaveCvar(string cvarname, float value) +{ + float fh; + float len; + string contents; + string l; + + cvar_set(cvarname, ftos(value)); + // note: cvarname must be remembered + + fh = fopen("campaign.cfg", FILE_READ); + contents = ""; + if(fh >= 0) + { + while((l = fgets(fh))) + { + cvarname = strcat(cvarname); + contents = strcat(contents); + len = tokenize(l); + if(len != 3) + continue; + if(argv(0) != "set") + continue; + if(argv(1) == cvarname) + continue; + contents = strcat(contents, "set ", argv(1), " ", argv(2), "\n"); + } + fclose(fh); + } + contents = strcat(contents, "set ", cvarname, " ", ftos(value), "\n"); + fh = fopen("campaign.cfg", FILE_WRITE); + if(fh >= 0) + { + fputs(fh, contents); + } + else + { + error("Cannot write to campaign file"); + } +} + void() CampaignPreIntermission = { entity head; float won; float lost; + local string savevar; won = 0; @@ -77,7 +120,7 @@ void() CampaignPreIntermission = head = head.chain; } - if(won == 1 && lost == 0) + if(won == 1 && lost == 0 && checkrules_equality == 0) { campaign_won = 1; bprint("The current level has been WON.\n"); @@ -94,20 +137,14 @@ void() CampaignPreIntermission = { if(campaign_entries < 2) { - //localcmd("set g_campaign_index 0\n"); - // don't reset... - localcmd("seta g_campaign"); - localcmd(campaign_name); - localcmd("_won 1\n"); + // I have won + savevar = strcat("g_campaign", campaign_name, "_won"); + CampaignSaveCvar(savevar, 1); } else if(campaign_level == cvar(campaign_index_var)) { // advance level - localcmd("seta "); - localcmd(campaign_index_var); - localcmd(" "); - localcmd(ftos(campaign_level + 1)); - localcmd("\n"); + CampaignSaveCvar(campaign_index_var, campaign_level + 1); } } } diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index 42e7e5873..6c3be34de 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -1063,7 +1063,10 @@ float(float fraglimit) WinningCondition_MaxIndividualScore = head = head.chain; } - SetWinners(frags, checkrules_leaderfrags); + if(checkrules_leaderfrags > 0) + SetWinners(frags, checkrules_leaderfrags); + else + ClearWinners(); if (!cvar("g_runematch")) if (checkrules_leaderfrags != checkrules_oldleaderfrags) @@ -1096,14 +1099,17 @@ float(float fraglimit) WinningConditionBase_Teamplay = >= 2)); ClearWinners(); - if(team1_score == tdm_max_score) - AddWinners(team, COLOR_TEAM1); - if(team2_score == tdm_max_score) - AddWinners(team, COLOR_TEAM2); - if(team3_score == tdm_max_score) - AddWinners(team, COLOR_TEAM3); - if(team4_score == tdm_max_score) - AddWinners(team, COLOR_TEAM4); + if(tdm_max_score > 0) + { + if(team1_score == tdm_max_score) + AddWinners(team, COLOR_TEAM1); + if(team2_score == tdm_max_score) + AddWinners(team, COLOR_TEAM2); + if(team3_score == tdm_max_score) + AddWinners(team, COLOR_TEAM3); + if(team4_score == tdm_max_score) + AddWinners(team, COLOR_TEAM4); + } if(!cvar("g_runematch") && !cvar("g_domination")) if(tdm_max_score != tdm_old_score) diff --git a/data/quake.rc b/data/quake.rc index d797f59d5..0deae2774 100644 --- a/data/quake.rc +++ b/data/quake.rc @@ -1,5 +1,6 @@ exec default.cfg exec config.cfg +exec data/campaign.cfg exec autoexec.cfg stuffcmds //startdemos demos/demo1 demos/demo2 demos/demo3 -- 2.39.2