[nexuiz-commits] r6264 - in trunk/data/qcsrc: common server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Mar 24 06:06:52 EDT 2009


Author: div0
Date: 2009-03-24 06:06:51 -0400 (Tue, 24 Mar 2009)
New Revision: 6264

Modified:
   trunk/data/qcsrc/common/campaign_setup.qc
   trunk/data/qcsrc/common/mapinfo.qc
   trunk/data/qcsrc/common/mapinfo.qh
   trunk/data/qcsrc/server/bots.qc
   trunk/data/qcsrc/server/campaign.qc
   trunk/data/qcsrc/server/g_world.qc
   trunk/data/qcsrc/server/progs.src
Log:
make the campaign cheatproof by ignoring the cvars, and using ONLY the settings from the campaign file (PLEASE TEST)


Modified: trunk/data/qcsrc/common/campaign_setup.qc
===================================================================
--- trunk/data/qcsrc/common/campaign_setup.qc	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/common/campaign_setup.qc	2009-03-24 10:06:51 UTC (rev 6264)
@@ -1,6 +1,5 @@
 void CampaignSetup(float n)
 {
-	localcmd("exec mutator_reset.cfg\n");
 	localcmd("set g_campaign 1\n");
 	localcmd("set _campaign_name \"");
 		localcmd(campaign_name);
@@ -8,8 +7,5 @@
 	localcmd("set _campaign_index ");
 		localcmd(ftos(campaign_offset + n));
 		localcmd("\n");
-	localcmd(campaign_mutators[n]);
-		localcmd("\n");
-	MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[n]));
 	MapInfo_LoadMap(campaign_mapname[n]);
 }

Modified: trunk/data/qcsrc/common/mapinfo.qc
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qc	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/common/mapinfo.qc	2009-03-24 10:06:51 UTC (rev 6264)
@@ -892,6 +892,25 @@
 	return r;
 }
 
+string MapInfo_GetGameTypeCvar(float t)
+{
+	switch(t)
+	{
+		case MAPINFO_TYPE_DEATHMATCH: return "g_dm";
+		case MAPINFO_TYPE_TEAM_DEATHMATCH: return "g_tdm";
+		case MAPINFO_TYPE_DOMINATION: return "g_domination";
+		case MAPINFO_TYPE_CTF: return "g_ctf";
+		case MAPINFO_TYPE_RUNEMATCH: return "g_runematch";
+		case MAPINFO_TYPE_LMS: return "g_lms";
+		case MAPINFO_TYPE_ARENA: return "g_arena";
+		case MAPINFO_TYPE_KEYHUNT: return "g_kh";
+		case MAPINFO_TYPE_ASSAULT: return "g_assault";
+		case MAPINFO_TYPE_ONSLAUGHT: return "g_onslaught";
+		case MAPINFO_TYPE_RACE: return "g_race";
+		default: return "";
+	}
+}
+
 void MapInfo_SwitchGameType(float t)
 {
 	cvar_set("gamecfg",      "0");

Modified: trunk/data/qcsrc/common/mapinfo.qh
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qh	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/common/mapinfo.qh	2009-03-24 10:06:51 UTC (rev 6264)
@@ -62,6 +62,7 @@
 
 // gets a gametype from a string
 float MapInfo_Type_FromString(string t);
+string MapInfo_GetGameTypeCvar(float t);
 void MapInfo_SwitchGameType(float t);
 
 // to be called from worldspawn to set up cvars

Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/server/bots.qc	2009-03-24 10:06:51 UTC (rev 6264)
@@ -2317,9 +2317,8 @@
 	{
 		float a;
 		a = cvar("skill_auto");
-		if(!cvar("g_campaign"))
-			if(a)
-				autoskill(a);
+		if(a)
+			autoskill(a);
 		autoskill_nextthink = time + 5;
 	}
 

Modified: trunk/data/qcsrc/server/campaign.qc
===================================================================
--- trunk/data/qcsrc/server/campaign.qc	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/server/campaign.qc	2009-03-24 10:06:51 UTC (rev 6264)
@@ -12,10 +12,41 @@
 void CampaignBailout(string s)
 {
 	cvar_set("g_campaign", "0");
+	cvar = cvar_builtin;
+	cvar_string = cvar_string_builtin;
+	cvar_set = cvar_set_builtin;
 	print("campaign initialization failed: ", s, "\n");
 	return;
 }
 
+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;
+	s = cvar_campaignwrapper_list;
+	cvar_campaignwrapper_list = strzone(strcat("; ", theCvar, " ", theValue, s));
+	strunzone(s);
+	//print(cvar_campaignwrapper_list, "\n");
+}
+
 void CampaignPreInit()
 {
 	float baseskill;
@@ -26,17 +57,27 @@
 	CampaignFile_Load(campaign_level, 2);
 	if(campaign_entries < 1)
 		return CampaignBailout("unknown map");
-	cvar_set("bot_number", ftos(campaign_bots[0]));
 
 	baseskill = cvar("g_campaign_skill");
 	baseskill = baseskill + campaign_botskill[0];
 	if(baseskill < 0)
 		baseskill = 0;
-	cvar_set("skill", ftos(baseskill));
 
 	cvar_set("sv_public", "0");
 	cvar_set("pausable", "1");
 
+	cvar_campaignwrapper_list = strzone(strcat("; ", campaign_mutators[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]));
+	MapInfo_SwitchGameType(MapInfo_Type_FromString(campaign_gametype[0]));
+
 	title = campaign_shortdesc[0];
 	title = strzone(strcat("Level ", ftos(campaign_level + 1), ": ", title));
 	campaign_message = strzone(strcat("\n\n\n\n\n\n\n\n\n\n^1\n", title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game"));
@@ -67,7 +108,7 @@
 	string l;
 
 	registercvar(cvarname, ftos(value));
-	cvar_set(cvarname, ftos(value));
+	cvar_set_builtin(cvarname, ftos(value));
 	// note: cvarname must be remembered
 
 	fh = fopen("campaign.cfg", FILE_READ);
@@ -144,7 +185,7 @@
 			// advance level (for menu to show it right)
 			CampaignSaveCvar(campaign_index_var, campaign_level + 1);
 		}
-		else if(campaign_level == cvar(campaign_index_var))
+		else if(campaign_level == cvar_builtin(campaign_index_var))
 		{
 			// advance level
 			CampaignSaveCvar(campaign_index_var, campaign_level + 1);

Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/server/g_world.qc	2009-03-24 10:06:51 UTC (rev 6264)
@@ -341,8 +341,12 @@
 {
 	// handler for _init/_init map (only for dedicated server initialization)
 
+	world_initialized = -1; // don't complain
+	cvar = cvar_builtin;
+	cvar_string = cvar_string_builtin;
+	cvar_set = cvar_set_builtin;
 	dprint_load(); // load dprint status from cvar
-	world_initialized = -1; // don't complain
+
 	remove = remove_unsafely;
 
 	entity e;
@@ -370,6 +374,9 @@
 	float fd, l, i, j, n;
 	string s, col;
 
+	cvar = cvar_builtin;
+	cvar_string = cvar_string_builtin;
+	cvar_set = cvar_set_builtin;
 	dprint_load(); // load dprint status from cvar
 
 	if(world_already_spawned)

Modified: trunk/data/qcsrc/server/progs.src
===================================================================
--- trunk/data/qcsrc/server/progs.src	2009-03-24 09:09:40 UTC (rev 6263)
+++ trunk/data/qcsrc/server/progs.src	2009-03-24 10:06:51 UTC (rev 6264)
@@ -2,8 +2,10 @@
 
 ../common/util-pre.qh
 sys.qh
+pre-builtins.qh
 builtins.qh
 extensions.qh
+post-builtins.qh
 constants.qh
 ../common/constants.qh
 ../common/util.qh



More information about the nexuiz-commits mailing list