From 6eca06d01fa731c931ef052a48fe8d081650a884 Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 21 Sep 2008 15:25:00 +0000 Subject: [PATCH] fix fog handling a bit git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4478 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/common/mapinfo.qc | 25 ++++++++----------------- data/qcsrc/common/mapinfo.qh | 1 + data/qcsrc/common/util.qc | 17 +++++++++++++++++ data/qcsrc/common/util.qh | 2 ++ data/qcsrc/server/cl_client.qc | 17 +++++++++++++++++ data/qcsrc/server/defs.qh | 2 ++ data/qcsrc/server/g_world.qc | 11 ----------- data/qcsrc/server/teamplay.qc | 10 ++++++++++ 8 files changed, 57 insertions(+), 28 deletions(-) diff --git a/data/qcsrc/common/mapinfo.qc b/data/qcsrc/common/mapinfo.qc index 287d69217..154f0876d 100644 --- a/data/qcsrc/common/mapinfo.qc +++ b/data/qcsrc/common/mapinfo.qc @@ -475,6 +475,7 @@ void _MapInfo_Map_Reset() MapInfo_Map_supportedGametypes = 0; MapInfo_Map_supportedFeatures = 0; MapInfo_Map_clientstuff = ""; + MapInfo_Map_fog = ""; } void _MapInfo_Map_ApplyGametype(string s, float pWantedType, float pThisType) @@ -538,23 +539,6 @@ float MapInfo_Type_FromString(string t) else return 0; } -float cvar_value_issafe(string s) -{ - if(strstrofs(s, "\"", 0) >= 0) - return 0; - if(strstrofs(s, "\\", 0) >= 0) - return 0; - if(strstrofs(s, ";", 0) >= 0) - return 0; - if(strstrofs(s, "$", 0) >= 0) - return 0; - if(strstrofs(s, "\r", 0) >= 0) - return 0; - if(strstrofs(s, "\n", 0) >= 0) - return 0; - return 1; -} - // load info about a map by name into the MapInfo_Map_* globals float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametypeToSet) { @@ -704,6 +688,13 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype dprint("Map ", pFilename, " has a client setting for unknown game type ", t, ", ignored\n"); } } + else if(t == "fog") + { + if not(cvar_value_issafe(t)) + print("Map ", pFilename, " contains a potentially harmful fog setting, ignored\n"); + else + MapInfo_Map_fog = s; + } else if(t == "cdtrack") { if(pGametypeToSet) diff --git a/data/qcsrc/common/mapinfo.qh b/data/qcsrc/common/mapinfo.qh index 7f4aca609..e4f274652 100644 --- a/data/qcsrc/common/mapinfo.qh +++ b/data/qcsrc/common/mapinfo.qh @@ -21,6 +21,7 @@ string MapInfo_Map_title; string MapInfo_Map_description; string MapInfo_Map_author; string MapInfo_Map_clientstuff; +string MapInfo_Map_fog; float MapInfo_Map_supportedGametypes; float MapInfo_Map_supportedFeatures; diff --git a/data/qcsrc/common/util.qc b/data/qcsrc/common/util.qc index 6f06c956e..d0cc637bf 100644 --- a/data/qcsrc/common/util.qc +++ b/data/qcsrc/common/util.qc @@ -694,3 +694,20 @@ string swapInPriorityList(string order, float i, float j) return order; } + +float cvar_value_issafe(string s) +{ + if(strstrofs(s, "\"", 0) >= 0) + return 0; + if(strstrofs(s, "\\", 0) >= 0) + return 0; + if(strstrofs(s, ";", 0) >= 0) + return 0; + if(strstrofs(s, "$", 0) >= 0) + return 0; + if(strstrofs(s, "\r", 0) >= 0) + return 0; + if(strstrofs(s, "\n", 0) >= 0) + return 0; + return 1; +} diff --git a/data/qcsrc/common/util.qh b/data/qcsrc/common/util.qh index fbfc49029..dd4164c9f 100644 --- a/data/qcsrc/common/util.qh +++ b/data/qcsrc/common/util.qh @@ -76,3 +76,5 @@ void fixedmakevectors(vector a); string fixPriorityList(string pl, float from, float to, float complete); string swapInPriorityList(string order, float i, float j); + +float cvar_value_issafe(string s); diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 31fcb367f..6945c83fe 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -1047,6 +1047,17 @@ void FixClientCvars(entity e) */ } +.float fogtime; +void SendFog() +{ + if(world.fog) // NOT string_null! + if(!self.fogtime || (sv_foginterval && time > self.fogtime)) + { + stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n")); + self.fogtime = time + sv_foginterval; + } +} + /* ============= ClientConnect @@ -1227,6 +1238,8 @@ void ClientConnect (void) self.frags = -666; // FIXME do we still need this? } } + + SendFog(); } /* @@ -2028,8 +2041,12 @@ void PlayerPreThink (void) } if(frametime) + { antilag_record(self); + SendFog(); + } + if(self.classname == "player") { // if(self.netname == "Wazat") // bprint(self.classname, "\n"); diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index c08ef50b0..ff607eeff 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -491,3 +491,5 @@ string clientstuff; .float weapons; .float porto_forbidden; + +.string fog; diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index 89a407279..8a76fe084 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -8,8 +8,6 @@ void GotoNextMap(); void ShuffleMaplist() float() DoNextMapOverride; -.string fog; - void SetDefaultAlpha() { if(cvar("g_running_guns")) @@ -1078,7 +1076,6 @@ CheckRules_Player Exit deathmatch games upon conditions ============ */ -.float fogtime; void CheckRules_Player() { if (gameover) // someone else quit the game already @@ -1087,14 +1084,6 @@ void CheckRules_Player() if(self.deadflag == DEAD_NO) self.play_time += frametime; - if(sv_foginterval) - if(world.fog) - if(time > self.fogtime) - { - stuffcmd(self, strcat("\nfog ", world.fog, "\nr_fog_exp2 0\nr_drawfog 1\n")); - self.fogtime = time + sv_foginterval; - } - // fixme: don't check players; instead check spawnfunc_dom_team and spawnfunc_ctf_team entities // (div0: and that in CheckRules_World please) }; diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index e8852b6be..9510b19bc 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -173,6 +173,16 @@ void InitGameplayMode() WriteGameCvars(); MapInfo_LoadMapSettings(mapname); + if not(cvar_value_issafe(world.fog)) + { + print("The current map contains a potentially harmful fog setting, ignored\n"); + world.fog = string_null; + } + if(MapInfo_Map_fog != "") + if(MapInfo_Map_fog == "none") + world.fog = string_null; + else + world.fog = strzone(MapInfo_Map_fog); clientstuff = strzone(MapInfo_Map_clientstuff); MapInfo_ClearTemps(); -- 2.39.2