r3020 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Dec 12 13:46:03 EST 2007


Author: kadaverjack
Date: 2007-12-12 13:46:02 -0500 (Wed, 12 Dec 2007)
New Revision: 3020

Modified:
   trunk/data/qcsrc/server/arena.qc
   trunk/data/qcsrc/server/bots.qc
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_physics.qc
   trunk/data/qcsrc/server/cl_weapons.qc
   trunk/data/qcsrc/server/cl_weaponsystem.qc
   trunk/data/qcsrc/server/clientcommands.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/domination.qc
   trunk/data/qcsrc/server/g_damage.qc
   trunk/data/qcsrc/server/g_hook.qc
   trunk/data/qcsrc/server/g_world.qc
   trunk/data/qcsrc/server/havocbot_roles.qc
   trunk/data/qcsrc/server/keyhunt.qc
   trunk/data/qcsrc/server/keyhunt.qh
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/runematch.qc
   trunk/data/qcsrc/server/teamplay.qc
Log:
- changed sv_ready_restart to use a qc based restart function as suggested by nifrek (still experimental, please test! assault, arena & onslaught are still using the "restart" command atm)
- added missing variable for g_runematch cvar
- moved precaching to a new function which is called after all cvars are read (InitGameplayMode() is now the only place where gamemode cvars are read)


Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/arena.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -15,21 +15,72 @@
 void(entity e) DropFlag;
 void(entity e) ReturnFlag;
 void(entity e) removedecor;
+void dom_controlpoint_setup();
 
 void reset_map()
 {
+	if(g_arena)
 	if(cvar("g_arena_warmup"))
 		warmup = time + cvar("g_arena_warmup");
 	
+	lms_lowest_lives = 999;
+	lms_next_place = player_count;
+
 	self = nextent(world);
 	while(self)
 	{
-		if(self.classname == "droppedweapon"		// cleanup
+		if(self.flags & FL_CLIENT)				// reset all players
+		{
+			if(time < restart_countdown)
+			{
+				self.frags = (g_lms)?LMS_NewPlayerLives():0;
+				self.deaths = 0;
+				self.killcount = 0;
+				self.classname = "player";
+				PutClientInServer();
+			}
+			else if(g_arena)
+			{
+				if(self.spawned)
+					PutClientInServer();
+				else
+					PutObserverInServer();
+			}
+		}
+		else if(self.classname == STR_ITEM_KH_KEY)
+		{
+			kh_Key_AssignTo(self, world);
+			//if(self.owner)
+			//	kh_Key_DropAll(self.owner, TRUE);
+			kh_Key_Remove(self);
+		}
+		else if(self.classname == "droppedweapon"		// cleanup
 				|| self.classname == "gib"
 				|| self.classname == "body")
 		{
 			remove(self);
 		}
+		else if(self.items & (IT_KEY1 | IT_KEY2))
+		{
+			DropFlag(self);
+			ReturnFlag(self);
+		}
+		else if(self.classname == "rune")
+		{
+			if(self.owner)
+			if(self.owner.classname != "runematch_spawn_point")
+				DropAllRunes(self.owner);
+			rune_respawn();
+		}
+		else if(self.classname == "sprite_waypoint")
+		{
+			if(self.health | g_keyhunt)
+				WaypointSprite_Kill(self);
+		}
+		else if(self.classname == "dom_controlpoint")
+		{
+			dom_controlpoint_setup();
+		}
 		else if(self.flags & FL_ITEM)			// reset items
 		{
 			self.model = self.mdl;
@@ -48,17 +99,13 @@
 		{
 			removedecor(self);
 		}
-		else if(self.flags & FL_CLIENT)			// reset all players
-		{
-			if(self.spawned)
-				PutClientInServer();
-			else
-				PutObserverInServer();
-		}
-		
 		self = nextent(self);
 	}
 
+	if(g_keyhunt)
+		kh_Controller_SetThink(cvar("g_balance_keyhunt_delay_round")+RESTART_COUNTDOWN, "", kh_StartRound);
+
+	if(g_arena)
 	if(champion)
 		UpdateFrags(champion, +1);
 }
@@ -117,7 +164,7 @@
 	float f;
 	string msg;
 
-	if(!arena_roundbased)
+	if(!g_arena || !arena_roundbased || (time < restart_countdown))
 		return;
 
 	f = rint(warmup - time);

Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/bots.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -1783,7 +1783,7 @@
 	//self.bot_painintensity = self.bot_painintensity + self.bot_oldhealth - self.health;
 	//self.bot_painintensity = bound(0, self.bot_painintensity, 100);
 
-	if(cvar("g_campaign") && !campaign_bots_may_start)
+	if(time < restart_countdown || ((cvar("g_campaign") && !campaign_bots_may_start)))
 	{
 		self.nextthink = time + 0.5;
 		return;

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_client.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -670,7 +670,7 @@
 
 	bot_clientconnect();
 
-	//if(cvar("g_domination"))
+	//if(g_domination)
 	//	dom_player_join_team(self);
 
 	//JoinBestTeam(self, FALSE);
@@ -700,7 +700,7 @@
 	bprint ("^4",self.netname);
 	bprint ("^4 connected");
 
-	if(cvar("g_domination") || g_ctf)
+	if(g_domination || g_ctf)
 	{
 		bprint(" and joined the ");
 		bprint(ColoredTeamName(self.team));
@@ -753,16 +753,9 @@
 
 	if(g_lms)
 	{
-		self.frags = cvar("fraglimit");
-		// no fraglimit was set, so player gets 999 lives
-		if(self.frags < 1)
-			self.frags = 999;
-
 		self.frags = LMS_NewPlayerLives();
 		if(!self.frags)
-		{
 			self.frags = -666;
-		}
 	}
 	else if(g_arena)
 	{
@@ -1355,8 +1348,7 @@
 			dist_z = 0;
 			self.lms_traveled_distance += fabs(vlen(dist));
 
-			if(cvar("g_campaign"))
-			if(!campaign_bots_may_start)
+			if((cvar("g_campaign") && !campaign_bots_may_start) || (time < restart_countdown))
 			{
 				self.lms_nextcheck = time + cvar("g_lms_campcheck_interval")*2;
 				self.lms_traveled_distance = 0;
@@ -1585,16 +1577,37 @@
 		UpdateChatBubble();
 		UpdateTeamBubble();
 		if (self.impulse)
-			ImpulseCommands ();
+			ImpulseCommands();
 		if (intermission_running)
 			return;		// intermission or finale
 
 		//PrintWelcomeMessage(self);
 		//if (TetrisPostFrame()) return;
+	
+		// restart countdown
+		if(time < restart_countdown)
+		{
+			string s;
+			float sec;
+
+			sec = ceil(restart_countdown-time);
+			s = strcat(NEWLINES, "^1Game starts in ", ftos(sec), " seconds");
+			centerprint(self, s);
+			self.movetype = MOVETYPE_NONE;		
+			self.velocity = '0 0 0';
+			self.avelocity = '0 0 0';
+			self.movement = '0 0 0';
+		}
+		else if(self.movetype == MOVETYPE_NONE)
+		{
+			self.movetype = MOVETYPE_WALK;
+			centerprint(self, "\n");
+		}
 	} else if (self.classname == "observer") {
 		//do nothing
 	} else if (self.classname == "spectator") {
 		//do nothing
 	}
+
 	Arena_Warmup();
 }

Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_physics.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -49,7 +49,7 @@
 	if (!(self.flags & FL_JUMPRELEASED))
 		return;
 
-	if(cvar("g_runematch"))
+	if(g_runematch)
 	{
 		if(self.runes & RUNE_SPEED)
 		{
@@ -162,7 +162,7 @@
 
 	maxspd_mod = 1;
 
-	if(cvar("g_runematch"))
+	if(g_runematch)
 	{
 		if(self.runes & RUNE_SPEED)
 		{

Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_weapons.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -210,8 +210,7 @@
 // Bringed back weapon frame
 void() W_WeaponFrame =
 {
-	if(arena_roundbased)
-	if(time < warmup)
+	if((arena_roundbased && time < warmup) || (time < restart_countdown))
 		return;
 
 	if (!self.weaponentity || self.health < 1)

Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -392,7 +392,7 @@
 		backtrace("Tried to override initial weapon think function - should this really happen?");
 	}
 
-	if(cvar("g_runematch"))
+	if(g_runematch)
 	{
 		if(self.runes & RUNE_SPEED)
 		{

Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/clientcommands.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -427,9 +427,14 @@
 	} else if(argv(0) == "ready") {
 		if(cvar("sv_ready_restart"))
 		{
-			self.ready = TRUE;
-			bprint(self.netname, "^2 is ready\n");
-			ReadyCount();
+			if(!restart_countdown)
+			{
+				self.ready = TRUE;
+				bprint(self.netname, "^2 is ready\n");
+				ReadyCount();
+			} else {
+				sprint(self, "^1game has already been restarted\n");
+			}
 		}
 	} else if(argv(0) == "maplist") {
 		local float i, n;
@@ -691,6 +696,7 @@
 	} // else still running
 }
 
+float timelimit_orig;
 
 void ReadyCount()
 {
@@ -704,9 +710,26 @@
 			r += 1;
 	}
 
-	if(p && r == p)
+	if(!p || r < p)
+		return;
+
+	bprint("^1Server is restarting...\n");
+	
+	// no arena, assault & onslaught support yet...
+	if(g_arena | g_assault | g_onslaught | gameover | intermission_running)
+		localcmd("restart\n");
+
+	restart_countdown = time + RESTART_COUNTDOWN;
+	if(0<cvar("timelimit"))
 	{
-		bprint("^1Server is restarting...\n");
-		localcmd("restart\n");
+		// remember original timelimit on first restart
+		if(!timelimit_orig)
+			timelimit_orig = cvar("timelimit");
+		cvar_set("timelimit", ftos(timelimit_orig + ceil(restart_countdown)/60));
 	}
+
+	reset_map();
+	
+	if(cvar("sv_eventlog"))
+		GameLogEcho(":restart", FALSE);
 }

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/defs.qh	2007-12-12 18:46:02 UTC (rev 3020)
@@ -1,6 +1,6 @@
 // Globals
 
-float g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms;
+float g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch;
 float g_cloaked, g_footsteps, g_grappling_hook, g_instagib, g_laserguided_missile, g_midair, g_minstagib, g_nixnex, g_nixnex_with_laser, g_norecoil, g_rocketarena, g_vampire;
 
 float sv_cheats;
@@ -270,6 +270,8 @@
 .float nextstep;
 
 .float ready;
+#define RESTART_COUNTDOWN 10
+float restart_countdown;
 
 .float winning;
 .float deaths;

Modified: trunk/data/qcsrc/server/domination.qc
===================================================================
--- trunk/data/qcsrc/server/domination.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/domination.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -99,21 +99,9 @@
 
 	// give points
 
-	if (gameover)	// game has ended, don't keep giving points
+	if (gameover || self.delay > time || time < restart_countdown)	// game has ended, don't keep giving points
 		return;
 
-	if(self.delay > time)
-		return;
-
-/*
-	if(self.state == 1)
-	{
-		self.state = 0;
-		dompoint_captured();
-		return;
-	}
-*/
-
 	waittime = cvar("g_domination_point_rate");
 	if(!waittime)
 		waittime = self.wait;
@@ -480,7 +468,7 @@
 */
 void() dom_controlpoint =
 {
-	if(!cvar("g_domination"))
+	if(!g_domination)
 	{
 		remove(self);
 		return;

Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/g_damage.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -15,13 +15,13 @@
 		if(cvar("g_arena_roundbased"))
 			return;
 
-	if(cvar("g_domination"))
+	if(g_domination)
 	{
 		if(cvar("g_domination_disable_frags"))
 			if(f > 0)
 				return;
 	}
-	else if(cvar("g_runematch"))
+	else if(g_runematch)
 	{
 		if(f > 0)
 			f = RunematchHandleFrags(attacker, targ, f);
@@ -450,7 +450,7 @@
 			damage = damage * cvar("g_balance_powerup_invincible_takedamage");
 
 
-		if(cvar("g_runematch"))
+		if(g_runematch)
 		{
 			// apply strength rune
 			if (attacker.runes & RUNE_STRENGTH)
@@ -503,7 +503,7 @@
 		{
 			attacker.health += damage;
 		}
-		if(cvar("g_runematch"))
+		if(g_runematch)
 		{
 			if (attacker.runes & RUNE_VAMPIRE)
 			{

Modified: trunk/data/qcsrc/server/g_hook.qc
===================================================================
--- trunk/data/qcsrc/server/g_hook.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/g_hook.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -201,8 +201,7 @@
 	local entity missile;
 	local vector org;
 
-	if(arena_roundbased)
-	if(time < warmup)
+	if((arena_roundbased && time < warmup) || (time < restart_countdown))
 		return;
 
 	makevectors(self.v_angle);

Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/g_world.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -84,16 +84,12 @@
 float world_already_spawned;
 void worldspawn (void)
 {
-	float globhandle, i, n;
-
 	dprint_load(); // load dprint status from cvar
 
 	if(world_already_spawned)
 		error("world already spawned - you may have EXACTLY ONE worldspawn!");
 	world_already_spawned = TRUE;
 
-	sv_cheats = cvar("sv_cheats");
-
 	/*
 	TODO sound pack system
 	// initialize sound pack system
@@ -103,145 +99,6 @@
 	soundpack = strzone(soundpack);
 	*/
 
-	// gamemode related things
-	precache_model ("models/misc/chatbubble.spr");
-	precache_model ("models/misc/teambubble.spr");
-	if (cvar("g_runematch"))
-	{
-		precache_model ("models/runematch/curse.mdl");
-		precache_model ("models/runematch/rune.mdl");
-	}
-
-	// Precache all player models if desired
-	if (cvar("sv_precacheplayermodels"))
-	{
-		globhandle = search_begin("models/player/*.zym", TRUE, FALSE);
-		n = search_getsize(globhandle);
-		for(i = 0; i < n; ++i)
-		{
-			//print(search_getfilename(globhandle, i), "\n");
-			precache_model(search_getfilename(globhandle, i));
-		}
-		search_end(globhandle);
-		//precache_model("models/player/carni.zym");
-		//precache_model("models/player/crash.zym");
-		//precache_model("models/player/grunt.zym");
-		//precache_model("models/player/headhunter.zym");
-		//precache_model("models/player/insurrectionist.zym");
-		//precache_model("models/player/jeandarc.zym");
-		//precache_model("models/player/lurk.zym");
-		//precache_model("models/player/lycanthrope.zym");
-		//precache_model("models/player/marine.zym");
-		//precache_model("models/player/nexus.zym");
-		//precache_model("models/player/pyria.zym");
-		//precache_model("models/player/shock.zym");
-		//precache_model("models/player/skadi.zym");
-		//precache_model("models/player/specop.zym");
-		//precache_model("models/player/visitant.zym");
-	}
-
-	if (cvar("g_footsteps"))
-	{
-		precache_sound ("misc/footstep01.wav");
-		precache_sound ("misc/footstep02.wav");
-		precache_sound ("misc/footstep03.wav");
-		precache_sound ("misc/footstep04.wav");
-		precache_sound ("misc/footstep05.wav");
-		precache_sound ("misc/footstep06.wav");
-	}
-
-	// gore and miscellaneous sounds
-	//precache_sound ("misc/h2ohit.wav");
-	precache_model ("models/gibs/bloodyskull.md3");
-	precache_model ("models/gibs/chunk.mdl");
-	precache_model ("models/gibs/eye.md3");
-	precache_model ("models/gibs/gib1.md3");
-	precache_model ("models/gibs/gib1.mdl");
-	precache_model ("models/gibs/gib2.mdl");
-	precache_model ("models/gibs/gib3.mdl");
-	precache_model ("models/gibs/gib5.md3");
-	precache_model ("models/hook.md3");
-	precache_sound ("misc/armorimpact.wav");
-	precache_sound ("misc/bodyimpact1.wav");
-	precache_sound ("misc/bodyimpact2.wav");
-	precache_sound ("misc/gib.wav");
-	precache_sound ("misc/gib_splat01.wav");
-	precache_sound ("misc/gib_splat02.wav");
-	precache_sound ("misc/gib_splat03.wav");
-	precache_sound ("misc/gib_splat04.wav");
-	precache_sound ("misc/hit.wav");
-	precache_sound ("misc/hitground1.wav");
-	precache_sound ("misc/hitground2.wav");
-	precache_sound ("misc/hitground3.wav");
-	precache_sound ("misc/hitground4.wav");
-	precache_sound ("misc/null.wav");
-	precache_sound ("misc/spawn.wav");
-	precache_sound ("misc/talk.wav");
-	precache_sound ("misc/teleport.wav");
-	precache_sound ("player/lava.wav");
-	precache_sound ("player/slime.wav");
-
-	// announcer sounds - male
-	//precache_sound ("announcer/male/electrobitch.wav");
-	precache_sound ("announcer/male/03kills.wav");
-	precache_sound ("announcer/male/05kills.wav");
-	precache_sound ("announcer/male/10kills.wav");
-	precache_sound ("announcer/male/15kills.wav");
-	precache_sound ("announcer/male/20kills.wav");
-	precache_sound ("announcer/male/25kills.wav");
-	precache_sound ("announcer/male/30kills.wav");
-	precache_sound ("announcer/male/botlike.wav");
-	precache_sound ("announcer/male/yoda.wav");
-
-	// announcer sounds - robotic
-	precache_sound ("announcer/robotic/1fragleft.wav");
-	precache_sound ("announcer/robotic/1minuteremains.wav");
-	precache_sound ("announcer/robotic/2fragsleft.wav");
-	precache_sound ("announcer/robotic/3fragsleft.wav");
-	if (cvar("g_minstagib"))
-	{
-		precache_sound ("announcer/robotic/lastsecond.wav");
-		precache_sound ("announcer/robotic/narrowly.wav");
-		precache_sound ("announcer/robotic/1.wav");
-		precache_sound ("announcer/robotic/2.wav");
-		precache_sound ("announcer/robotic/3.wav");
-		precache_sound ("announcer/robotic/4.wav");
-		precache_sound ("announcer/robotic/5.wav");
-		precache_sound ("announcer/robotic/6.wav");
-		precache_sound ("announcer/robotic/7.wav");
-		precache_sound ("announcer/robotic/8.wav");
-		precache_sound ("announcer/robotic/9.wav");
-		precache_sound ("announcer/robotic/10.wav");
-	}
-
-	// common weapon precaches
-	precache_sound ("weapons/weapon_switch.wav");
-	precache_sound ("weapons/weaponpickup.wav");
-	if (cvar("g_grappling_hook"))
-	{
-		precache_sound ("weapons/hook_fire.wav"); // hook
-		precache_sound ("weapons/hook_impact.wav"); // hook
-	}
-
-	if (cvar("sv_precacheweapons") || cvar("g_nixnex"))
-	{
-		//precache weapon models/sounds
-		local float wep;
-		wep = WEP_FIRST;
-		while (wep <= WEP_LAST)
-		{
-			weapon_action(wep, WR_PRECACHE);
-			wep = wep + 1;
-		}
-	}
-
-	// plays music for the level if there is any
-	if (self.noise)
-	{
-		precache_sound (self.noise);
-		ambientsound ('0 0 0', self.noise, 1.00, ATTN_NONE);
-	}
-
 	// 0 normal
 	lightstyle(0, "m");
 
@@ -298,10 +155,12 @@
 		CampaignPreInit();
 
 	InitGameplayMode();
+	readlevelcvars();
+	precache();
 
 	WaypointSprite_Init();
 
-	//if (cvar("g_domination"))
+	//if (g_domination)
 	//	dom_init();
 
 	local entity head;
@@ -361,8 +220,6 @@
 
 	fteqcc_testbugs();
 
-	readlevelcvars();
-
 	Ban_LoadBans();
 
 #ifdef MAPINFO
@@ -1419,7 +1276,7 @@
 	else
 		ClearWinners();
 
-	if (!cvar("g_runematch"))
+	if (!g_runematch)
 		if (checkrules_leaderfrags != checkrules_oldleaderfrags)
 		{
 			if (checkrules_leaderfrags == fraglimit - 1)
@@ -1462,7 +1319,7 @@
 			AddWinners(team, COLOR_TEAM4);
 	}
 
-	if(!cvar("g_runematch") && !cvar("g_domination"))
+	if(!g_runematch && !g_domination)
 		if(tdm_max_score != tdm_old_score)
 		{
 			if(tdm_max_score == fraglimit - 1)
@@ -1739,7 +1596,7 @@
 	{
 		if(teams_matter)
 		{
-			if(g_tdm || cvar("g_runematch") || g_ctf || cvar("g_domination") || g_keyhunt)
+			if(g_tdm || g_runematch || g_ctf || g_domination || g_keyhunt)
 				status = WinningCondition_MaxTeamSum(fraglimit);
 			//else if()
 			//	status = WinningCondition_MaxTeamMax(fraglimit);

Modified: trunk/data/qcsrc/server/havocbot_roles.qc
===================================================================
--- trunk/data/qcsrc/server/havocbot_roles.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/havocbot_roles.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -711,7 +711,7 @@
 	self.bot_strategytime = -1;
 	if (g_ctf)
 		havocbot_chooserole_ctf();
-	else if (cvar("g_domination"))
+	else if (g_domination)
 		havocbot_chooserole_dom();
 	else if (g_keyhunt)
 		havocbot_chooserole_kh();

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/keyhunt.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -1,4 +1,3 @@
-string STR_ITEM_KH_KEY = "item_kh_key";
 #define FOR_EACH_KH_KEY(v) for(v = world; (v = find(v, classname, STR_ITEM_KH_KEY)); )
 
 // #define KH_PLAYER_USE_ATTACHMENT
@@ -22,8 +21,6 @@
 vector KH_KEY_MAX = '10 10 3';
 float KH_KEY_BRIGHTNESS = 2;
 
-typedef void(void) kh_Think_t;
-var kh_Think_t kh_Controller_Thinkfunc;
 string kh_Controller_Waitmsg;
 
 float kh_Team_ByID(float t)

Modified: trunk/data/qcsrc/server/keyhunt.qh
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qh	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/keyhunt.qh	2007-12-12 18:46:02 UTC (rev 3020)
@@ -24,3 +24,9 @@
 void kh_setstatus();
 float kh_HandleFrags(entity attacker, entity targ, float f);
 float kh_Key_AllOwnedByWhichTeam();
+
+#define STR_ITEM_KH_KEY "item_kh_key"
+typedef void(void) kh_Think_t;
+var kh_Think_t kh_Controller_Thinkfunc;
+void kh_Controller_SetThink(float t, string msg, kh_Think_t func)
+void kh_Key_Remove(entity key)

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -687,6 +687,7 @@
 
 void readlevelcvars(void)
 {
+	sv_cheats = cvar("sv_cheats");
 	g_cloaked = cvar("g_cloaked");
 	g_footsteps = cvar("g_footsteps");
 	g_grappling_hook = cvar("g_grappling_hook");
@@ -873,3 +874,147 @@
 			play2(head, filename);
 	}
 }
+
+void precache()
+{
+	float globhandle, i, n;
+
+	// gamemode related things
+	precache_model ("models/misc/chatbubble.spr");
+	precache_model ("models/misc/teambubble.spr");
+	if (g_runematch)
+	{
+		precache_model ("models/runematch/curse.mdl");
+		precache_model ("models/runematch/rune.mdl");
+	}
+
+	// Precache all player models if desired
+	if (cvar("sv_precacheplayermodels"))
+	{
+		globhandle = search_begin("models/player/*.zym", TRUE, FALSE);
+		n = search_getsize(globhandle);
+		for(i = 0; i < n; ++i)
+		{
+			//print(search_getfilename(globhandle, i), "\n");
+			precache_model(search_getfilename(globhandle, i));
+		}
+		search_end(globhandle);
+		//precache_model("models/player/carni.zym");
+		//precache_model("models/player/crash.zym");
+		//precache_model("models/player/grunt.zym");
+		//precache_model("models/player/headhunter.zym");
+		//precache_model("models/player/insurrectionist.zym");
+		//precache_model("models/player/jeandarc.zym");
+		//precache_model("models/player/lurk.zym");
+		//precache_model("models/player/lycanthrope.zym");
+		//precache_model("models/player/marine.zym");
+		//precache_model("models/player/nexus.zym");
+		//precache_model("models/player/pyria.zym");
+		//precache_model("models/player/shock.zym");
+		//precache_model("models/player/skadi.zym");
+		//precache_model("models/player/specop.zym");
+		//precache_model("models/player/visitant.zym");
+	}
+
+	if (g_footsteps)
+	{
+		precache_sound ("misc/footstep01.wav");
+		precache_sound ("misc/footstep02.wav");
+		precache_sound ("misc/footstep03.wav");
+		precache_sound ("misc/footstep04.wav");
+		precache_sound ("misc/footstep05.wav");
+		precache_sound ("misc/footstep06.wav");
+	}
+
+	// gore and miscellaneous sounds
+	//precache_sound ("misc/h2ohit.wav");
+	precache_model ("models/gibs/bloodyskull.md3");
+	precache_model ("models/gibs/chunk.mdl");
+	precache_model ("models/gibs/eye.md3");
+	precache_model ("models/gibs/gib1.md3");
+	precache_model ("models/gibs/gib1.mdl");
+	precache_model ("models/gibs/gib2.mdl");
+	precache_model ("models/gibs/gib3.mdl");
+	precache_model ("models/gibs/gib5.md3");
+	precache_model ("models/hook.md3");
+	precache_sound ("misc/armorimpact.wav");
+	precache_sound ("misc/bodyimpact1.wav");
+	precache_sound ("misc/bodyimpact2.wav");
+	precache_sound ("misc/gib.wav");
+	precache_sound ("misc/gib_splat01.wav");
+	precache_sound ("misc/gib_splat02.wav");
+	precache_sound ("misc/gib_splat03.wav");
+	precache_sound ("misc/gib_splat04.wav");
+	precache_sound ("misc/hit.wav");
+	precache_sound ("misc/hitground1.wav");
+	precache_sound ("misc/hitground2.wav");
+	precache_sound ("misc/hitground3.wav");
+	precache_sound ("misc/hitground4.wav");
+	precache_sound ("misc/null.wav");
+	precache_sound ("misc/spawn.wav");
+	precache_sound ("misc/talk.wav");
+	precache_sound ("misc/teleport.wav");
+	precache_sound ("player/lava.wav");
+	precache_sound ("player/slime.wav");
+
+	// announcer sounds - male
+	//precache_sound ("announcer/male/electrobitch.wav");
+	precache_sound ("announcer/male/03kills.wav");
+	precache_sound ("announcer/male/05kills.wav");
+	precache_sound ("announcer/male/10kills.wav");
+	precache_sound ("announcer/male/15kills.wav");
+	precache_sound ("announcer/male/20kills.wav");
+	precache_sound ("announcer/male/25kills.wav");
+	precache_sound ("announcer/male/30kills.wav");
+	precache_sound ("announcer/male/botlike.wav");
+	precache_sound ("announcer/male/yoda.wav");
+
+	// announcer sounds - robotic
+	precache_sound ("announcer/robotic/1fragleft.wav");
+	precache_sound ("announcer/robotic/1minuteremains.wav");
+	precache_sound ("announcer/robotic/2fragsleft.wav");
+	precache_sound ("announcer/robotic/3fragsleft.wav");
+	if (g_minstagib)
+	{
+		precache_sound ("announcer/robotic/lastsecond.wav");
+		precache_sound ("announcer/robotic/narrowly.wav");
+		precache_sound ("announcer/robotic/1.wav");
+		precache_sound ("announcer/robotic/2.wav");
+		precache_sound ("announcer/robotic/3.wav");
+		precache_sound ("announcer/robotic/4.wav");
+		precache_sound ("announcer/robotic/5.wav");
+		precache_sound ("announcer/robotic/6.wav");
+		precache_sound ("announcer/robotic/7.wav");
+		precache_sound ("announcer/robotic/8.wav");
+		precache_sound ("announcer/robotic/9.wav");
+		precache_sound ("announcer/robotic/10.wav");
+	}
+
+	// common weapon precaches
+	precache_sound ("weapons/weapon_switch.wav");
+	precache_sound ("weapons/weaponpickup.wav");
+	if (cvar("g_grappling_hook"))
+	{
+		precache_sound ("weapons/hook_fire.wav"); // hook
+		precache_sound ("weapons/hook_impact.wav"); // hook
+	}
+
+	if (cvar("sv_precacheweapons") || g_nixnex)
+	{
+		//precache weapon models/sounds
+		local float wep;
+		wep = WEP_FIRST;
+		while (wep <= WEP_LAST)
+		{
+			weapon_action(wep, WR_PRECACHE);
+			wep = wep + 1;
+		}
+	}
+
+	// plays music for the level if there is any
+	if (self.noise)
+	{
+		precache_sound (self.noise);
+		ambientsound ('0 0 0', self.noise, 1.00, ATTN_NONE);
+	}
+}

Modified: trunk/data/qcsrc/server/runematch.qc
===================================================================
--- trunk/data/qcsrc/server/runematch.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/runematch.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -33,7 +33,7 @@
 
 void runematch_spawn_point()
 {
-	if(!cvar("g_runematch"))
+	if(!g_runematch)
 	{
 		remove(self);
 		return;
@@ -151,7 +151,7 @@
 	vector ang;
 	entity rune;
 
-	if(self.owner.classname != "player")
+	if(self.owner.classname != "player" || time < restart_countdown)
 	{
 		rune_respawn();
 		return;
@@ -181,7 +181,7 @@
 
 void rune_touch()
 {
-	if(other.classname != "player" || other.health < 2)
+	if(other.classname != "player" || other.health < 1)
 		return;
 	if(self.wait > time)
 		return; // "notouch" time isn't finished
@@ -619,7 +619,7 @@
 
 void runematch_init()
 {
-	if(!cvar("g_runematch"))
+	if(!g_runematch)
 		return;
 
 	entity e;
@@ -636,7 +636,7 @@
 {
 	entity rune;
 
-	if(!cvar("g_runematch") || !cvar("g_runematch_pointamt"))
+	if(!g_runematch || !cvar("g_runematch_pointamt"))
 		return;
 
 	if(gameover)

Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc	2007-12-12 17:49:51 UTC (rev 3019)
+++ trunk/data/qcsrc/server/teamplay.qc	2007-12-12 18:46:02 UTC (rev 3020)
@@ -280,38 +280,18 @@
 		fraglimit_override = cvar("fraglimit_override");
 	}*/
 
-	// enforce the server's universal frag/time limits
-	if(!cvar("g_campaign"))
-	{
-		if(fraglimit_override >= 0)
-			cvar_set("fraglimit", ftos(fraglimit_override));
-		if(timelimit_override >= 0)
-			cvar_set("timelimit", ftos(timelimit_override));
-	}
-
-	if (game == GAME_DOMINATION)//cvar("g_domination"))
-		dom_init();
-	else if (game == GAME_CTF)//cvar("g_ctf"))
-		ctf_init();
-	else if (game == GAME_RUNEMATCH)//cvar("g_runematch"))
-		runematch_init();
-	else if (game == GAME_TEAM_DEATHMATCH)//cvar("g_runematch"))
-		tdm_init();
-	else if (game == GAME_KEYHUNT)//cvar("g_keyhunt"))
-		kh_init();
-
 	// those mutators rule each other out
-	if(g_minstagib)
+	if(cvar("g_minstagib"))
 	{
 		cvar_set("g_instagib", "0");
 		cvar_set("g_rocketarena", "0");
 	}
-	if(g_instagib)
+	if(cvar("g_instagib"))
 	{
 		cvar_set("g_minstagib", "0");
 		cvar_set("g_rocketarena", "0");
 	}
-	if(g_rocketarena)
+	if(cvar("g_rocketarena"))
 	{
 		cvar_set("g_instagib", "0");
 		cvar_set("g_minstagib", "0");
@@ -326,10 +306,31 @@
 	g_ctf = cvar("g_ctf");
 	g_lms = cvar("g_lms");
 	g_tdm = cvar("g_tdm");
+	g_runematch = cvar("g_runematch");
 	g_keyhunt = cvar("g_keyhunt");
 	g_onslaught = cvar("g_onslaught");
 	g_assault = cvar("g_assault");
 	g_arena = cvar("g_arena");
+
+	// enforce the server's universal frag/time limits
+	if(!cvar("g_campaign"))
+	{
+		if(fraglimit_override >= 0)
+			cvar_set("fraglimit", ftos(fraglimit_override));
+		if(timelimit_override >= 0)
+			cvar_set("timelimit", ftos(timelimit_override));
+	}
+
+	if (game == GAME_DOMINATION)//cvar("g_domination"))
+		dom_init();
+	else if (game == GAME_CTF)//cvar("g_ctf"))
+		ctf_init();
+	else if (game == GAME_RUNEMATCH)//cvar("g_runematch"))
+		runematch_init();
+	else if (game == GAME_TEAM_DEATHMATCH)//cvar("g_runematch"))
+		tdm_init();
+	else if (game == GAME_KEYHUNT)//cvar("g_keyhunt"))
+		kh_init();
 }
 
 string GetClientVersionMessage(float v) {
@@ -423,6 +424,9 @@
 	if(modifications != "")
 		s = strcat(s, "^8\nactive modifications: ^3", modifications, "^8\n");
 
+	if(time < restart_countdown)
+		s = strcat(s, "\n^1Game starts in ", ftos(ceil(restart_countdown-time)), " seconds^7");
+
 	if((self.classname == "observer" || self.classname == "spectator") && self.version == cvar("gameversion")) {
 		if(!g_arena)
 			s = strcat(s,"^7\n\n\npress jump to play\npress attack to spectate other players\n\n");




More information about the nexuiz-commits mailing list