r1737 - in trunk/data: . qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Jul 9 03:20:09 EDT 2006


Author: div0
Date: 2006-07-09 03:19:55 -0400 (Sun, 09 Jul 2006)
New Revision: 1737

Modified:
   trunk/data/default.cfg
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/teamplay.qc
Log:
when changing teams or leaving, your scores are now distributed to the other team members


Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg	2006-07-08 22:39:13 UTC (rev 1736)
+++ trunk/data/default.cfg	2006-07-09 07:19:55 UTC (rev 1737)
@@ -240,7 +240,7 @@
 seta g_balance_teams_prevent_imbalance	0	// prevent players from changing to larger teams
 seta g_tdm_teams			2	// how many teams are in team deathmatch
 set g_changeteam_banned			0	// not allowed to change team
-set g_changeteam_fragtransfer		80	// % of frags you get to keep when you change teams (rounded down)
+set g_changeteam_fragtransfer		0	// % of frags you get to keep when you change teams (rounded down)
 
 // ctf
 set g_ctf				0

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2006-07-08 22:39:13 UTC (rev 1736)
+++ trunk/data/qcsrc/server/cl_client.qc	2006-07-09 07:19:55 UTC (rev 1737)
@@ -827,6 +827,8 @@
 	if(self.flagcarried)
 		DropFlag(self.flagcarried);
 
+	DistributeFragsAmongTeam(self, self.team, 1);
+
 	save = self.flags;
 	self.flags = self.flags - (self.flags & FL_CLIENT);
 	bot_relinkplayerlist();

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2006-07-08 22:39:13 UTC (rev 1736)
+++ trunk/data/qcsrc/server/defs.qh	2006-07-09 07:19:55 UTC (rev 1737)
@@ -267,3 +267,6 @@
 #define NUM_JUMPPADSUSED 3
 .float jumppadcount;
 .entity jumppadsused[NUM_JUMPPADSUSED];
+
+string gamemode_name;
+float teams_matter;

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2006-07-08 22:39:13 UTC (rev 1736)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2006-07-09 07:19:55 UTC (rev 1737)
@@ -422,3 +422,59 @@
 	dprint("\n--- CUT UNTIL HERE ---\n");
 	cvar_set("developer", ftos(dev));
 }
+
+void DistributeFragsAmongTeam(entity p, float targetteam, float factor)
+{
+	float f;
+	float d;
+	float nTeam;
+	entity head;
+
+	if(!teams_matter)
+		return;
+
+	//if(p.frags < 0)
+	//{
+	//	p.frags = 0; // do not harm the new team!
+	//	return; // won't distribute negative scores
+	//}
+
+	if(p.frags == -666)
+		return;
+	
+	f = ceil(factor * p.frags);
+	p.frags = p.frags - f;
+
+	nTeam = 0;
+	head = find(world, classname, "player");
+	while(head)
+	{
+		if(head != p)
+			if(head.team == targetteam)
+				nTeam = nTeam + 1;
+		head = find(head, classname, "player");
+	}
+
+	if(nTeam == 0)
+		return;
+
+	head = find(world, classname, "player");
+	while(head)
+	{
+		if(head != p)
+			if(head.team == targetteam)
+			{
+				d = floor(f / nTeam);
+				head.frags = head.frags + d;
+				f = f - d;
+				nTeam = nTeam - 1;
+			}
+		head = find(head, classname, "player");
+	}
+
+	if(nTeam != 0)
+		error("nPlayers in team changed!");
+	if(f != 0)
+		error(strcat("There were ", ftos(f), " frags left. BAD!"));
+}
+

Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc	2006-07-08 22:39:13 UTC (rev 1736)
+++ trunk/data/qcsrc/server/teamplay.qc	2006-07-09 07:19:55 UTC (rev 1737)
@@ -22,6 +22,14 @@
 
 float audit_teams_time;
 
+void TeamchangeFrags(entity e)
+{
+	if(e.classname == "player")
+	{
+		// reduce frags during a team change
+		DistributeFragsAmongTeam(e, (e.clientcolors & 0x0F) + 1, 1 - cvar("g_changeteam_fragtransfer") / 100);
+	}
+}
 
 string TeamName(float t)
 {
@@ -105,9 +113,6 @@
 		cvar_set("teamplay", "3");
 }
 
-string gamemode_name;
-float teams_matter;
-
 void InitGameplayMode()
 {
 	float fraglimit_override, timelimit_override;
@@ -734,6 +739,7 @@
 
 	if(!only_return_best)
 	{
+		TeamchangeFrags(self);
 		if(smallest == 1)
 		{
 			SetPlayerColors(pl, COLOR_TEAM1 - 1);
@@ -896,18 +902,22 @@
 
 //	bprint(strcat("allow change teams from ", ftos(steam), " to ", ftos(dteam), "\n"));
 
+	if(cvar("teamplay") && self.classname == "player" && steam != dteam)
+	{
+		// reduce frags during a team change
+		TeamchangeFrags(self);
+	}
+
 	SetPlayerTeam(self, dteam, steam, FALSE);
+
 	if(cvar("teamplay") && self.classname == "player" && steam != dteam)
 	{
 		// kill player when changing teams
 		if(self.deadflag == DEAD_NO)
 			Damage(self, self, self, 100000, DEATH_TEAMCHANGE, self.origin, '0 0 0');
-			// reduce frags during a team change
-			self.frags = floor(self.frags * (cvar("g_changeteam_fragtransfer") / 100));
 	}
 }
 
-
 void ShufflePlayerOutOfTeam (float source_team)
 {
 	float smallestteam, smallestteam_count, steam;




More information about the nexuiz-commits mailing list