[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