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