From ae6549b7f2936c4d3d4af4e64cc375f64b129c1d Mon Sep 17 00:00:00 2001 From: kadaverjack Date: Wed, 22 Mar 2006 19:52:58 +0000 Subject: [PATCH] maplist index is now determined dynamically, g_maplist_index is only used as fallback, when current map is not in list. chmap and mapvote now no longer mess up the map cycle. git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1178 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/gamec/cl_client.c | 1 + data/qcsrc/server/gamec/clientcommands.c | 2 +- data/qcsrc/server/gamec/g_world.c | 77 ++++++++++++++++------ data/qcsrc/server/gamec/w_rocketlauncher.c | 7 +- 4 files changed, 66 insertions(+), 21 deletions(-) diff --git a/data/qcsrc/server/gamec/cl_client.c b/data/qcsrc/server/gamec/cl_client.c index 2d3b2aae6..3e1f620bc 100644 --- a/data/qcsrc/server/gamec/cl_client.c +++ b/data/qcsrc/server/gamec/cl_client.c @@ -195,6 +195,7 @@ void PutObserverInServer (void) self.dead_time = 0; self.dead_frame = 0; self.die_frame = 0; + self.deaths = 0; self.alpha = 0; self.scale = 0; self.fade_time = 0; diff --git a/data/qcsrc/server/gamec/clientcommands.c b/data/qcsrc/server/gamec/clientcommands.c index d2e3e8598..56729962c 100644 --- a/data/qcsrc/server/gamec/clientcommands.c +++ b/data/qcsrc/server/gamec/clientcommands.c @@ -248,7 +248,7 @@ float ValidateMap(string vote) string ext; tokenize(vote); - if(argv(0) == "map") + if(argv(0) == "map" || argv(0) == "changelevel") ext = ".bsp"; else if(argv(0) == "chmap") ext = ".mapcfg"; diff --git a/data/qcsrc/server/gamec/g_world.c b/data/qcsrc/server/gamec/g_world.c index a05885c3f..ecc32a5c8 100644 --- a/data/qcsrc/server/gamec/g_world.c +++ b/data/qcsrc/server/gamec/g_world.c @@ -297,6 +297,50 @@ float( string pFilename ) TryFile = } }; +string GetMapname() +{ + if (game == GAME_DEATHMATCH) + return strcat("dm_", mapname); + else if (game == GAME_TEAM_DEATHMATCH) + return strcat("tdm_", mapname); + else if (game == GAME_DOMINATION) + return strcat("dom_", mapname); + else if (game == GAME_CTF) + return strcat("ctf_", mapname); + else if (game == GAME_RUNEMATCH) + return strcat("rune_", mapname); + else if (game == GAME_LMS) + return strcat("lms_", mapname); + return strcat("dm_", mapname); +} + +float GetMaplistPosition() +{ + float pos, f; + string map, s; + + map = strzone(GetMapname()); + pos = 0; + f = tokenize(cvar_string("g_maplist")); + + while(pos < f) + { + s = strzone(argv(pos)); + if(s == map) + { + strunzone(s); + strunzone(map); + return pos; + } + strunzone(s); + pos++; + } + + strunzone(map); + // resume normal maplist rotation if current map is not in g_maplist + return cvar("g_maplist_index"); +} + void() GotoNextMap = { //local string nextmap; @@ -349,9 +393,16 @@ void() GotoNextMap = pass = pass + 1; local string temp; temp = cvar_string( "g_maplist" ); + if(temp == "") + { + bprint( "Maplist is empty! Resetting it to default map list.\n" ); + cvar_set("g_maplist", cvar_string("g_maplist_defaultlist")); + temp = cvar_string( "g_maplist" ); + } + temp = strzone(temp); dprint("g_maplist is ", temp, "\n"); + lCurrent = max(0, GetMaplistPosition()); lSize = tokenize( temp ); - lCurrent = cvar( "g_maplist_index" ); lOldCurrent = lCurrent; dprint(ftos(lOldCurrent), " / ", ftos(lSize), " (start)\n"); while( 1 ) { @@ -372,7 +423,7 @@ void() GotoNextMap = } else { - bprint( "Both g_maplist and g_maplist_defaultlist are messed up! complain to developers!\n" ); + bprint( "Both g_maplist and g_maplist_defaultlist are messed up! Complain to developers!\n" ); localcmd( "disconnect\n" ); } break; @@ -390,6 +441,7 @@ void() GotoNextMap = } //changelevel( argv( lCurrent ) ); } + strunzone(temp); } /* @@ -531,33 +583,20 @@ RULES void() DumpStats = { - local float file, now; - local string gametype, s; + local float file; + local string s; if(cvar("_printstats")) cvar_set("_printstats", "0"); else if(!gameover) return; - now = time; - - if (cvar("g_tdm")) - gametype = "tdm"; - else if (cvar("g_ctf")) - gametype = "ctf"; - else if (cvar("g_domination")) - gametype = "dom"; - else if (cvar("g_runematch")) - gametype = "rune"; - else - gametype = "dm"; - if(gameover) s = ":scores:"; else s = ":status:"; - s = strcat(s, gametype, "_", mapname, ":", ftos(rint(now))); + s = strcat(s, GetMapname(), ":", ftos(rint(time))); if(cvar("sv_logscores_console")) localcmd(strcat("echo \"", s, "\"\n")); @@ -574,7 +613,7 @@ void() DumpStats = { s = strcat(":player:", ftos(other.frags), ":"); s = strcat(s, ftos(other.deaths), ":"); - s = strcat(s, ftos(rint(now - other.jointime)), ":"); + s = strcat(s, ftos(rint(time - other.jointime)), ":"); s = strcat(s, ftos(other.team), ":"); if(cvar("sv_logscores_file")) diff --git a/data/qcsrc/server/gamec/w_rocketlauncher.c b/data/qcsrc/server/gamec/w_rocketlauncher.c index 6f82075b4..b523e659e 100644 --- a/data/qcsrc/server/gamec/w_rocketlauncher.c +++ b/data/qcsrc/server/gamec/w_rocketlauncher.c @@ -2,6 +2,7 @@ void() rlauncher_ready_01; void() rlauncher_fire1_01; void() rlauncher_deselect_01; void() rlauncher_select_01; +.float rl_sound; float() rlauncher_check = { @@ -19,7 +20,11 @@ void(float req) w_rlauncher = weapon_prepareattack(rlauncher_check, rlauncher_check, rlauncher_fire1_01, cvar("g_balance_rocketlauncher_refire")); else if (req == WR_FIRE2) { - sound (self, CHAN_BODY, "weapons/rocket_det.ogg", 0.5, ATTN_NORM); + if(time > self.rl_sound) + { + self.rl_sound = time + 1; + sound (self, CHAN_BODY, "weapons/rocket_det.ogg", 0.5, ATTN_NORM); + } if(cvar("g_laserguided_missile")) if(self.exteriorweaponentity.attack_finished < time) { -- 2.39.2