From 3334ac830201d4e9e110234efcba1dad50ba0bd0 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 4 Apr 2006 19:41:46 +0000 Subject: [PATCH] g_maplist fixed (was only set to the first map before); "spam logging" improved (now can also log to separate files, see Docs/spamlog.txt); git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1223 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- Docs/spamlog.txt | 11 ++++-- data/default.cfg | 9 +++-- data/qcsrc/server/gamec/cl_client.c | 10 +++--- data/qcsrc/server/gamec/ctf.c | 4 +-- data/qcsrc/server/gamec/domination.c | 4 +-- data/qcsrc/server/gamec/g_damage.c | 4 +-- data/qcsrc/server/gamec/g_world.c | 25 ++++++++------ data/qcsrc/server/gamec/miscfunctions.c | 46 +++++++++++++++++++++++++ data/qcsrc/server/gamec/teamplay.c | 4 +-- 9 files changed, 88 insertions(+), 29 deletions(-) diff --git a/Docs/spamlog.txt b/Docs/spamlog.txt index eccaeb3b1..5ba0cd4b8 100644 --- a/Docs/spamlog.txt +++ b/Docs/spamlog.txt @@ -1,9 +1,14 @@ cvars: ______________ - sv_logspam_console print frags, scores and captures to serverconsole during the match (default: 0, set to 1 to enable) - sv_logscores_bots choose whether bot are included in stats or not (default: 0) - log_file where the console log shall go (if unset, standard output is still used) + sv_logspam master switch (default: 0) + sv_logspam_files print frags, scores and captures for separate files each match (default: 0) + sv_logspam_console print frags, scores and captures to serverconsole during the match (default: 1) + sv_logscores_bots choose whether bot are included in stats or not (default: 0) + + sv_logspam_files_counter number of matches logged until now + sv_logspam_files_nameprefix file name prefix to be used (default: nexuiz) + sv_logspam_files_namesuffix file name extension to be used (default: .log) log format: ______________ diff --git a/data/default.cfg b/data/default.cfg index 762f09f64..59103dbf0 100644 --- a/data/default.cfg +++ b/data/default.cfg @@ -160,7 +160,7 @@ set g_fullbrightplayers 0 set g_fullbrightitems 0 set g_casings 0 set g_norecoil 0 -set g_maplist_defaultlist "dm_nexdm01 dm_nexdm02 dm_nexdm03 dm_nexdm04 dm_nexdm05 dm_nexdm06 dm_nexdm07 dm_nexdm08 dm_nexdm09 dm_nexdm10 dm_nexdm11 dm_nexdm12 dm_nexdm13 dm_nexdm14 dm_nexdm15 dm_nexdm16 dm_nexdm17 dm_nexdm18 dm_nexdm18_1on1remix dm_nexdmextra1 dm_nexdmextra2 dom_nexdm01 dom_nexdm02 dom_nexdm03 dom_nexdm04 dom_nexdm05 dom_nexdm06 dom_nexdm07 dom_nexdm08 dom_nexdm09 dom_nexdm10 dom_nexdm11 dom_nexdm12 dom_nexdm13 dom_nexdm14 dom_nexdm15 dom_nexdm16 dom_nexdm17 dom_nexdm18 dom_nexdm18_1on1remix dom_nexdmextra1 dom_nexdmextra2 rune_nexdm01 rune_nexdm02 rune_nexdm03 rune_nexdm04 rune_nexdm05 rune_nexdm06 rune_nexdm07 rune_nexdm08 rune_nexdm09 rune_nexdm10 rune_nexdm11 rune_nexdm12 rune_nexdm13 rune_nexdm14 rune_nexdm15 rune_nexdm16 rune_nexdm17 rune_nexdm18 rune_nexdm18_1on1remix rune_nexdmextra1 rune_nexdmextra2 tdm_nexdm01 tdm_nexdm02 tdm_nexdm03 tdm_nexdm04 tdm_nexdm05 tdm_nexdm06 tdm_nexdm07 tdm_nexdm08 tdm_nexdm09 tdm_nexdm10 tdm_nexdm11 tdm_nexdm12 tdm_nexdm13 tdm_nexdm14 tdm_nexdm15 tdm_nexdm16 tdm_nexdm17 tdm_nexdm18 tdm_nexdm18_1on1remix tdm_nexdmextra1 tdm_nexdmextra2 ctf_nexctf01 ctf_nexctf02 ctf_nexdm13 lms_nexdm01 lms_nexdm02 lms_nexdm03 lms_nexdm04 lms_nexdm05 lms_nexdm06 lms_nexdm07 lms_nexdm08 lms_nexdm10 lms_nexdm11 lms_nexdm12 lms_nexdm13 lms_nexdm14 lms_nexdm18_1on1remix lms_nexdm18 lms_nexdmextra2" +set g_maplist_defaultlist "'dm_nexdm01''dm_nexdm02''dm_nexdm03''dm_nexdm04''dm_nexdm05''dm_nexdm06''dm_nexdm07''dm_nexdm08''dm_nexdm09''dm_nexdm10''dm_nexdm11''dm_nexdm12''dm_nexdm13''dm_nexdm14''dm_nexdm15''dm_nexdm16''dm_nexdm17''dm_nexdm18''dm_nexdm18_1on1remix''dm_nexdmextra1''dm_nexdmextra2''dom_nexdm01''dom_nexdm02''dom_nexdm03''dom_nexdm04''dom_nexdm05''dom_nexdm06''dom_nexdm07''dom_nexdm08''dom_nexdm09''dom_nexdm10''dom_nexdm11''dom_nexdm12''dom_nexdm13''dom_nexdm14''dom_nexdm15''dom_nexdm16''dom_nexdm17''dom_nexdm18''dom_nexdm18_1on1remix''dom_nexdmextra1''dom_nexdmextra2''rune_nexdm01''rune_nexdm02''rune_nexdm03''rune_nexdm04''rune_nexdm05''rune_nexdm06''rune_nexdm07''rune_nexdm08''rune_nexdm09''rune_nexdm10''rune_nexdm11''rune_nexdm12''rune_nexdm13''rune_nexdm14''rune_nexdm15''rune_nexdm16''rune_nexdm17''rune_nexdm18''rune_nexdm18_1on1remix''rune_nexdmextra1''rune_nexdmextra2''tdm_nexdm01''tdm_nexdm02''tdm_nexdm03''tdm_nexdm04''tdm_nexdm05''tdm_nexdm06''tdm_nexdm07''tdm_nexdm08''tdm_nexdm09''tdm_nexdm10''tdm_nexdm11''tdm_nexdm12''tdm_nexdm13''tdm_nexdm14''tdm_nexdm15''tdm_nexdm16''tdm_nexdm17''tdm_nexdm18''tdm_nexdm18_1on1remix''tdm_nexdmextra1''tdm_nexdmextra2''ctf_nexctf01''ctf_nexctf02''ctf_nexdm13''lms_nexdm01''lms_nexdm02''lms_nexdm03''lms_nexdm04''lms_nexdm05''lms_nexdm06''lms_nexdm07''lms_nexdm08''lms_nexdm10''lms_nexdm11''lms_nexdm12''lms_nexdm13''lms_nexdm14''lms_nexdm18_1on1remix''lms_nexdm18''lms_nexdmextra2'" seta g_maplist $g_maplist_defaultlist seta g_maplist_index 0 // this is used internally for saving position in maplist cycle // timeout for kill credit when your damage knocks someone into a death trap @@ -635,6 +635,11 @@ set sv_logscores_filename "scores.log" // filename set sv_logscores_bots 0 // exclude bots by default // spam (frag/capture) log -set sv_logspam_console 0 +set sv_logspam 0 // the master switch for efficiency reasons +set sv_logspam_console 1 +set sv_logspam_files 0 +set sv_logspam_files_counter 0 +set sv_logspam_files_nameprefix "nexuiz" +set sv_logspam_files_namesuffix ".log" set nextmap "" // override the maplist when switching to the next map diff --git a/data/qcsrc/server/gamec/cl_client.c b/data/qcsrc/server/gamec/cl_client.c index 8b331adb1..465bd6c25 100644 --- a/data/qcsrc/server/gamec/cl_client.c +++ b/data/qcsrc/server/gamec/cl_client.c @@ -532,13 +532,13 @@ void ClientConnect (void) } self.playerid = (playerid_last = playerid_last + 1); - if(cvar("sv_logspam_console")) + if(cvar("sv_logspam")) { string s; - ServerConsoleEcho(strcat(":join:", ftos(self.playerid), ":", self.netname), TRUE); + GameLogEcho(strcat(":join:", ftos(self.playerid), ":", self.netname), TRUE); s = strcat(":team:", ftos(self.playerid), ":"); s = strcat(s, ftos(self.team)); - ServerConsoleEcho(s, FALSE); + GameLogEcho(s, FALSE); } //stuffcmd(self, "set tmpviewsize $viewsize \n"); @@ -617,8 +617,8 @@ void(entity e) DropFlag; .entity teambubbleentity; void ClientDisconnect (void) { - if(cvar("sv_logspam_console")) - ServerConsoleEcho(strcat(":part:", ftos(self.playerid)), FALSE); + if(cvar("sv_logspam")) + GameLogEcho(strcat(":part:", ftos(self.playerid)), FALSE); bprint ("^4",self.netname); bprint ("^4 disconnected\n"); diff --git a/data/qcsrc/server/gamec/ctf.c b/data/qcsrc/server/gamec/ctf.c index 06146e572..aff5b55ba 100644 --- a/data/qcsrc/server/gamec/ctf.c +++ b/data/qcsrc/server/gamec/ctf.c @@ -46,13 +46,13 @@ void() place_flag = void LogCTF(string mode, float flagteam, entity actor) { string s; - if(!cvar("sv_logspam_console")) + if(!cvar("sv_logspam")) return; s = strcat(":ctf:", mode); s = strcat(s, ":", ftos(flagteam)); if(actor != world) s = strcat(s, ":", ftos(actor.playerid)); - ServerConsoleEcho(s, FALSE); + GameLogEcho(s, FALSE); } void(entity e) RegenFlag = diff --git a/data/qcsrc/server/gamec/domination.c b/data/qcsrc/server/gamec/domination.c index a5fde69df..c18635f28 100644 --- a/data/qcsrc/server/gamec/domination.c +++ b/data/qcsrc/server/gamec/domination.c @@ -19,12 +19,12 @@ Note: The only teams who can use dom control points are identified by dom_team e void LogDom(string mode, float team_before, entity actor) { string s; - if(!cvar("sv_logspam_console")) + if(!cvar("sv_logspam")) return; s = strcat(":dom:", mode); s = strcat(s, ":", ftos(team_before)); s = strcat(s, ":", ftos(actor.playerid)); - ServerConsoleEcho(s, FALSE); + GameLogEcho(s, FALSE); } void() dom_spawnteams; diff --git a/data/qcsrc/server/gamec/g_damage.c b/data/qcsrc/server/gamec/g_damage.c index 0cbff07f1..9fb6adbb3 100644 --- a/data/qcsrc/server/gamec/g_damage.c +++ b/data/qcsrc/server/gamec/g_damage.c @@ -31,7 +31,7 @@ void LogDeath(string mode, float deathtype, entity killer, entity killed) { string s; float w; - if(!cvar("sv_logspam_console")) + if(!cvar("sv_logspam")) return; s = strcat(":kill:", mode); s = strcat(s, ":", ftos(killer.playerid)); @@ -62,7 +62,7 @@ void LogDeath(string mode, float deathtype, entity killer, entity killed) if(killed.flagcarried != world) s = strcat(s, "F"); } - ServerConsoleEcho(s, FALSE); + GameLogEcho(s, FALSE); } void Obituary (entity attacker, entity targ, float deathtype) diff --git a/data/qcsrc/server/gamec/g_world.c b/data/qcsrc/server/gamec/g_world.c index fde9f7a8c..e181544e1 100644 --- a/data/qcsrc/server/gamec/g_world.c +++ b/data/qcsrc/server/gamec/g_world.c @@ -277,8 +277,9 @@ void worldspawn (void) head = nextent(head); } - if(cvar("sv_logspam_console")) - ServerConsoleEcho(strcat(":gamestart:", GetMapname()), FALSE); + GameLogInit(); // prepare everything + if(cvar("sv_logspam")) + GameLogEcho(strcat(":gamestart:", GetMapname()), FALSE); cvar_set("nextmap", ""); } @@ -602,8 +603,8 @@ void() DumpStats = s = strcat(s, GetMapname(), ":", ftos(rint(time))); - if(cvar("sv_logscores_console") || cvar("sv_logspam_console")) - ServerConsoleEcho(s, FALSE); + if(cvar("sv_logscores_console") || cvar("sv_logspam")) + GameLogEcho(s, FALSE); if(cvar("sv_logscores_file")) { file = fopen(cvar_string("sv_logscores_filename"), FILE_APPEND); @@ -622,16 +623,16 @@ void() DumpStats = if(cvar("sv_logscores_file")) fputs(file, strcat(s, other.netname, "\n")); - if(cvar("sv_logspam_console")) - ServerConsoleEcho(strcat(s, ftos(other.playerid), ":", other.netname), TRUE); + if(cvar("sv_logspam")) + GameLogEcho(strcat(s, ftos(other.playerid), ":", other.netname), TRUE); else if(cvar("sv_logscores_console")) - ServerConsoleEcho(strcat(s, other.netname), TRUE); + GameLogEcho(strcat(s, other.netname), TRUE); } other = other.chain; } - if(cvar("sv_logscores_console") || cvar("sv_logspam_console")) - ServerConsoleEcho(":end", FALSE); + if(cvar("sv_logscores_console") || cvar("sv_logspam")) + GameLogEcho(":end", FALSE); if(cvar("sv_logscores_file")) { fputs(file, ":end\n"); @@ -663,8 +664,10 @@ void() NextLevel = DumpStats(); - if(cvar("sv_logspam_console")) - ServerConsoleEcho(":gameover", FALSE); + if(cvar("sv_logspam")) + GameLogEcho(":gameover", FALSE); + + GameLogClose(); other = findchainflags(flags, FL_CLIENT); while (other != world) diff --git a/data/qcsrc/server/gamec/miscfunctions.c b/data/qcsrc/server/gamec/miscfunctions.c index 7b03cf459..5cdae2480 100644 --- a/data/qcsrc/server/gamec/miscfunctions.c +++ b/data/qcsrc/server/gamec/miscfunctions.c @@ -1,6 +1,9 @@ string W_Name(float weaponid); float(float index) weapon_translateindextoflag; +float logfile_open; +float logfile; + void(string s, float check_dangerous) ServerConsoleEcho = { local string ch; @@ -22,6 +25,49 @@ void(string s, float check_dangerous) ServerConsoleEcho = localcmd("\"\n"); } +void(string s, float check_dangerous) GameLogEcho = +{ + string fn; + float matches; + + if(cvar("sv_logspam_console")) + { + ServerConsoleEcho(s, check_dangerous); + } + if(cvar("sv_logspam_files")) + { + if(!logfile_open) + { + logfile_open = TRUE; + matches = cvar("sv_logspam_files_counter") + 1; + cvar_set("sv_logspam_files_counter", ftos(matches)); + fn = ftos(matches); + if(strlen(fn) < 8) + fn = strcat(substring("00000000", 0, 8 - strlen(fn)), fn); + fn = strcat(cvar_string("sv_logspam_files_nameprefix"), fn, cvar_string("sv_logspam_files_namesuffix")); + logfile = fopen(fn, FILE_APPEND); + dprint(strcat("\n\n\n\n**********\nlogfile id: ", ftos(logfile), "\n\n\n")); + } + if(logfile >= 0) + fputs(logfile, strcat(s, "\n")); + } +} + +void(string s, float check_dangerous) GameLogInit = +{ + logfile_open = 0; + // will be opened later +} + +void(string s, float check_dangerous) GameLogClose = +{ + if(logfile_open && logfile >= 0) + { + fclose(logfile); + logfile = -1; + } +} + float math_mod(float a, float b) { return a - (floor(a / b) * b); diff --git a/data/qcsrc/server/gamec/teamplay.c b/data/qcsrc/server/gamec/teamplay.c index f61e6e6bb..3456c30f2 100644 --- a/data/qcsrc/server/gamec/teamplay.c +++ b/data/qcsrc/server/gamec/teamplay.c @@ -70,13 +70,13 @@ void tdm_init(); void(entity pl) LogTeamchange = { string str; - if(!cvar("sv_logspam_console")) + if(!cvar("sv_logspam")) return; if(pl.playerid < 1) return; str = strcat(":team:", ftos(pl.playerid), ":"); str = strcat(str, ftos(pl.team)); - ServerConsoleEcho(str, FALSE); + GameLogEcho(str, FALSE); } void ResetGameCvars() -- 2.39.2