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