r3364 - in trunk/data: . models/sprites qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Feb 13 04:53:31 EST 2008


Author: div0
Date: 2008-02-13 04:53:23 -0500 (Wed, 13 Feb 2008)
New Revision: 3364

Added:
   trunk/data/models/sprites/0.spr32
   trunk/data/models/sprites/1.spr32
   trunk/data/models/sprites/10.spr32
   trunk/data/models/sprites/2.spr32
   trunk/data/models/sprites/3.spr32
   trunk/data/models/sprites/4.spr32
   trunk/data/models/sprites/5.spr32
   trunk/data/models/sprites/6.spr32
   trunk/data/models/sprites/7.spr32
   trunk/data/models/sprites/8.spr32
   trunk/data/models/sprites/9.spr32
Modified:
   trunk/data/default.cfg
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_player.qc
   trunk/data/qcsrc/server/clientcommands.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/keyhunt.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/teamplay.qc
Log:
g_balance_kill_delay to prevent abuse of "kill"


Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/default.cfg	2008-02-13 09:53:23 UTC (rev 3364)
@@ -929,3 +929,6 @@
 // ticrate
 // engine default is too CPU intensive on 16p servers, so let's go back
 sys_ticrate 0.05
+
+// delay for "kill" to prevent abuse
+set g_balance_kill_delay 5

Added: trunk/data/models/sprites/0.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/0.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/1.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/1.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/10.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/10.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/2.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/2.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/3.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/3.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/4.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/4.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/5.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/5.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/6.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/6.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/7.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/7.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/8.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/8.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/models/sprites/9.spr32
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/sprites/9.spr32
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/cl_client.qc	2008-02-13 09:53:23 UTC (rev 3364)
@@ -686,11 +686,117 @@
 Called when a client types 'kill' in the console
 =============
 */
+
+void ClientKill_Now_TeamChange()
+{
+	if(self.killindicator_teamchange == -1)
+	{
+		self.team = -1;
+		JoinBestTeam( self, 0 );
+	}
+	else
+	{
+		SV_ChangeTeam(self.killindicator_teamchange - 1);
+	}
+}
+
+void ClientKill_Now()
+{
+	if(self.killindicator_teamchange)
+		ClientKill_Now_TeamChange();
+	else
+		Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
+}
+void KillIndicator_Think()
+{
+	if (!self.owner.modelindex)
+	{
+		self.owner.killindicator = world;
+		remove(self);
+		return;
+	}
+
+	if(self.cnt <= 0)
+	{
+		self = self.owner;
+		ClientKill_Now(); // no oldself needed
+		return;
+	}
+	else
+	{
+		if(self.cnt <= 10)
+		{
+			setmodel(self, strcat("models/sprites/", ftos(self.cnt), ".spr32"));
+			play2(self.owner, strcat("sound/announce/robotoic/", ftos(self.cnt), ".ogg"));
+		}
+		if(self.owner.killindicator_teamchange)
+		{
+			if(self.owner.killindicator_teamchange == -1)
+				centerprint(self.owner, strcat("Changing team in ", ftos(self.cnt), " seconds"));
+			else
+				centerprint(self.owner, strcat("Changing to ", ColoredTeamName(self.owner.killindicator_teamchange), " in ", ftos(self.cnt), " seconds"));
+		}
+		else
+			centerprint(self.owner, strcat("^1Suicide in ", ftos(self.cnt), " seconds"));
+		play2(self.owner, strcat("announcer/robotoc/", ftos(self.cnt), ".ogg"));
+		self.nextthink = time + 1;
+		self.cnt -= 1;
+	}
+}
+
+void ClientKill_TeamChange (float targetteam) // 0 = don't change, -1 = auto
+{
+	float killtime;
+	killtime = cvar("g_balance_kill_delay");
+
+	self.killindicator_teamchange = targetteam;
+
+	if(!self.killindicator)
+	{
+		if(killtime <= 0 || !self.modelindex || self.deadflag != DEAD_NO)
+		{
+			ClientKill_Now();
+		}
+		else
+		{
+			self.killindicator = spawn();
+			self.killindicator.owner = self;
+			self.killindicator.scale = 0.5;
+			setattachment(self.killindicator, self, "");
+			setorigin(self.killindicator, '0 0 52');
+			self.killindicator.think = KillIndicator_Think;
+			self.killindicator.nextthink = time;
+			self.killindicator.cnt = ceil(killtime);
+			sprint(self, strcat("^1You'll be dead in ", ftos(self.killindicator.cnt), " seconds\n"));
+		}
+	}
+	if(self.killindicator)
+	{
+		if(targetteam)
+			self.killindicator.colormod = TeamColor(targetteam);
+		else
+			self.killindicator.colormod = '0 0 0';
+	}
+}
+
 void ClientKill (void)
 {
-	Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
+	ClientKill_TeamChange(0);
 }
 
+void DoTeamChange(float destteam)
+{
+	if(!cvar("teamplay"))
+	{
+		if(destteam >= 0)
+			SetPlayerColors(self, destteam);
+		return;
+	}
+	if(destteam == self.team)
+		return;
+	ClientKill_TeamChange(destteam);
+}
+
 void FixClientCvars(entity e)
 {
 	float t;
@@ -883,6 +989,12 @@
 		self.teambubbleentity = world;
 	}
 
+	if (self.killindicator)
+	{
+		remove (self.killindicator);
+		self.killindicator = world;
+	}
+
 	WaypointSprite_PlayerGone();
 
 	DropAllRunes(self);
@@ -961,7 +1073,7 @@
 		return;
 	}
 //	setorigin(self, self.owner.origin + '0 0 15' + self.owner.maxs_z * '0 0 1');  // bandwidth hog. setattachment does this now
-	if (self.owner.buttonchat || self.owner.deadflag)
+	if (self.owner.buttonchat || self.owner.deadflag || self.owner.killindicator)
 		self.model = "";
 	else
 		self.model = self.mdl;
@@ -1313,7 +1425,7 @@
 		{
 			self.respawn_countdown = number - 1;
 			if(ceil(self.death_time - (time + 0.5)) == number) // only say it if it is the same number even in 0.5s; to prevent overlapping sounds
-				play2(self, strcat("announcer/robotic/", ftos(number), "announcer/.ogg"));
+				play2(self, strcat("announcer/robotic/", ftos(number), ".ogg"));
 		}
 	}
 }

Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/cl_player.qc	2008-02-13 09:53:23 UTC (rev 3364)
@@ -339,6 +339,8 @@
 	}
 }
 
+void ClientKill_Now_TeamChange();
+
 void PlayerDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
 	local float take, save, waves, sdelay;
@@ -427,6 +429,15 @@
 	{
 		self.deaths += 1;
 
+		// get rid of kill indicator
+		if(self.killindicator)
+		{
+			remove(self.killindicator);
+			self.killindicator = world;
+			if(self.killindicator_teamchange)
+				ClientKill_Now_TeamChange();
+		}
+
 		// become fully visible
 		self.alpha = 1;
 		// clear selected player display

Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/clientcommands.qc	2008-02-13 09:53:23 UTC (rev 3364)
@@ -456,19 +456,16 @@
 			sprint( self, "selecteam can only be used in teamgames\n");
 		} else if(cvar("g_campaign")) {
 			//JoinBestTeam(self, 0);
-		} else if( argv(1) == "none" ) {
-			SV_ChangeTeam( 0 );
 		} else if( argv(1) == "red" ) {
-			SV_ChangeTeam( COLOR_TEAM1 - 1 );
+			DoTeamChange(COLOR_TEAM1);
 		} else if( argv(1) == "blue" ) {
-			SV_ChangeTeam( COLOR_TEAM2 - 1 );
+			DoTeamChange(COLOR_TEAM2);
 		} else if( argv(1) == "yellow" ) {
-			SV_ChangeTeam( COLOR_TEAM3 - 1 );
+			DoTeamChange(COLOR_TEAM3);
 		} else if( argv(1) == "pink" ) {
-			SV_ChangeTeam( COLOR_TEAM4 - 1 );
+			DoTeamChange(COLOR_TEAM4);
 		} else if( argv(1) == "auto" ) {
-			self.team = -1;
-			JoinBestTeam( self, 0 );
+			DoTeamChange(-1);
 		} else {
 			sprint( self, strcat( "selectteam none/red/blue/yellow/pink/auto - \"", argv(1), "\" not recognised\n" ) );
 		}

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/defs.qh	2008-02-13 09:53:23 UTC (rev 3364)
@@ -390,3 +390,7 @@
 
 float some_spawn_has_been_used;
 float have_team_spawns;
+
+// set when showing a kill countdown
+.entity killindicator;
+.float killindicator_teamchange;

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/keyhunt.qc	2008-02-13 09:53:23 UTC (rev 3364)
@@ -281,23 +281,6 @@
 			self.team = attacker.team;
 }
 
-vector kh_TeamColor(float teem)
-{
-	switch(teem)
-	{
-		case COLOR_TEAM1:
-			return '1 0.0625 0.0625';
-		case COLOR_TEAM2:
-			return '0.0625 0.0625 1';
-		case COLOR_TEAM3:
-			return '1 1 0.0625';
-		case COLOR_TEAM4:
-			return '1 0.0625 1';
-		default:
-			return '1 1 1';
-	}
-}
-
 void kh_Key_Spawn(entity initial_owner, float angle)
 {
 	entity key;
@@ -316,7 +299,7 @@
 	key.kh_dropperteam = 0;
 	key.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
 	setsize(key, KH_KEY_MIN, KH_KEY_MAX);
-	key.colormod = kh_TeamColor(initial_owner.team) * KH_KEY_BRIGHTNESS;
+	key.colormod = TeamColor(initial_owner.team) * KH_KEY_BRIGHTNESS;
 
 	switch(initial_owner.team)
 	{
@@ -563,7 +546,7 @@
 		te_lightning2(world, lastorigin, firstorigin);
 	}
 	midpoint = midpoint * (1 / kh_teams);
-	te_customflash(midpoint, 1000, 1, kh_TeamColor(teem) * 0.5 + '0.5 0.5 0.5'); // make the color >=0.5 in each component
+	te_customflash(midpoint, 1000, 1, TeamColor(teem) * 0.5 + '0.5 0.5 0.5'); // make the color >=0.5 in each component
 
 	sound(world, CHAN_AUTO, kh_sound_capture, 1, ATTN_NONE);
 	kh_FinishRound();

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2008-02-13 09:53:23 UTC (rev 3364)
@@ -1031,18 +1031,29 @@
 	{
 		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");
 	}
 
+	precache_model ("models/sprites/1.spr32");
+	precache_model ("models/sprites/2.spr32");
+	precache_model ("models/sprites/3.spr32");
+	precache_model ("models/sprites/4.spr32");
+	precache_model ("models/sprites/5.spr32");
+	precache_model ("models/sprites/6.spr32");
+	precache_model ("models/sprites/7.spr32");
+	precache_model ("models/sprites/8.spr32");
+	precache_model ("models/sprites/9.spr32");
+	precache_model ("models/sprites/10.spr32");
+	precache_sound ("announcer/robotic/1.ogg");
+	precache_sound ("announcer/robotic/2.ogg");
+	precache_sound ("announcer/robotic/3.ogg");
+	precache_sound ("announcer/robotic/4.ogg");
+	precache_sound ("announcer/robotic/5.ogg");
+	precache_sound ("announcer/robotic/6.ogg");
+	precache_sound ("announcer/robotic/7.ogg");
+	precache_sound ("announcer/robotic/8.ogg");
+	precache_sound ("announcer/robotic/9.ogg");
+	precache_sound ("announcer/robotic/10.ogg");
+
 	// common weapon precaches
 	precache_sound ("weapons/weapon_switch.wav");
 	precache_sound ("weapons/weaponpickup.wav");

Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc	2008-02-13 08:56:39 UTC (rev 3363)
+++ trunk/data/qcsrc/server/teamplay.qc	2008-02-13 09:53:23 UTC (rev 3364)
@@ -37,6 +37,23 @@
 	}
 }
 
+vector TeamColor(float teem)
+{
+	switch(teem)
+	{
+		case COLOR_TEAM1:
+			return '1 0.0625 0.0625';
+		case COLOR_TEAM2:
+			return '0.0625 0.0625 1';
+		case COLOR_TEAM3:
+			return '1 1 0.0625';
+		case COLOR_TEAM4:
+			return '1 0.0625 1';
+		default:
+			return '1 1 1';
+	}
+}
+
 string TeamName(float t)
 {
 	return strcat(Team_ColorName(t), " Team");




More information about the nexuiz-commits mailing list