r1743 - in branches/nexuiz-2.0/data: . qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Jul 9 11:27:03 EDT 2006
Author: div0
Date: 2006-07-09 11:27:03 -0400 (Sun, 09 Jul 2006)
New Revision: 1743
Modified:
branches/nexuiz-2.0/data/default.cfg
branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
branches/nexuiz-2.0/data/qcsrc/server/defs.qh
branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
Log:
teamchange frag transfer to team mates; say_team
Modified: branches/nexuiz-2.0/data/default.cfg
===================================================================
--- branches/nexuiz-2.0/data/default.cfg 2006-07-09 15:25:38 UTC (rev 1742)
+++ branches/nexuiz-2.0/data/default.cfg 2006-07-09 15:27:03 UTC (rev 1743)
@@ -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: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2006-07-09 15:25:38 UTC (rev 1742)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2006-07-09 15:27:03 UTC (rev 1743)
@@ -290,6 +290,8 @@
if (cvar("g_runematch"))
DropAllRunes(self);
+ DistributeFragsAmongTeam(self, self.team, 1);
+
if(self.frags <= 0 && self.frags > -666 && cvar("g_lms") && self.killcount != -666)
bprint (strcat("^4", self.netname, "^4 has no more lives left\n"));
else if(self.killcount != -666)
@@ -811,6 +813,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: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc 2006-07-09 15:25:38 UTC (rev 1742)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc 2006-07-09 15:27:03 UTC (rev 1743)
@@ -1,6 +1,72 @@
void ReadyCount();
float ValidateMap(string vote);
+void Say(entity source, float teamsay, string msgin)
+{
+ string msgstr, colorstr;
+ entity head;
+
+ msgin = formatmessage(msgin);
+
+ if(source.team == COLOR_TEAM1)
+ colorstr = "^1";
+ else if(source.team == COLOR_TEAM2)
+ colorstr = "^4";
+ else if(source.team == COLOR_TEAM3)
+ colorstr = "^6";
+ else if(source.team == COLOR_TEAM4)
+ colorstr = "^3";
+ else
+ colorstr = "^7";
+
+ if(!teams_matter)
+ teamsay = FALSE;
+
+ if(source.classname != "player") // observers can't
+ teamsay = FALSE;
+
+ // how can we prevent the message from appearing in a listen server?
+ // for now, just give "say" back and only handle say_team
+ if(!teamsay)
+ {
+ clientcommand(self, strcat("say ", msgin));
+ return;
+ }
+
+ if(teamsay)
+ msgstr = strcat(colorstr, "(^3", source.netname, colorstr, ") ^7", msgin, "\n");
+ else
+ msgstr = strcat("^3", source.netname, "^7: ", msgin, "\n");
+
+ head = find(world, classname, "player");
+ while(head)
+ {
+ if(clienttype(head) == CLIENTTYPE_REAL)
+ if(!teamsay || (head.team == source.team))
+ sprint(head, msgstr);
+ head = find(head, classname, "player");
+ }
+
+ if(!teamsay)
+ {
+ head = find(world, classname, "observer");
+ while(head)
+ {
+ if(clienttype(head) == CLIENTTYPE_REAL)
+ sprint(head, msgstr);
+ head = find(head, classname, "observer");
+ }
+ head = find(world, classname, "spectator");
+ while(head)
+ {
+ if(clienttype(head) == CLIENTTYPE_REAL)
+ sprint(head, msgstr);
+ head = find(head, classname, "spectator");
+ }
+ ServerConsoleEcho(substring(msgstr, 0, strlen(msgstr) - 1), TRUE);
+ }
+}
+
void SV_ParseClientCommand(string s) {
local float index;
@@ -258,9 +324,11 @@
ReadyCount();
}
} else if(argv(0) == "say") {
- clientcommand(self, formatmessage(s));
+ Say(self, FALSE, substring(s, 4, strlen(s) - 4));
+ //clientcommand(self, formatmessage(s));
} else if(argv(0) == "say_team") {
- clientcommand(self, formatmessage(s));
+ Say(self, TRUE, substring(s, 9, strlen(s) - 9));
+ //clientcommand(self, formatmessage(s));
} else {
clientcommand(self,s);
}
Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2006-07-09 15:25:38 UTC (rev 1742)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2006-07-09 15:27:03 UTC (rev 1743)
@@ -266,3 +266,6 @@
#define NUM_JUMPPADSUSED 3
.float jumppadcount;
.entity jumppadsused[NUM_JUMPPADSUSED];
+
+string gamemode_name;
+float teams_matter;
Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2006-07-09 15:25:38 UTC (rev 1742)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2006-07-09 15:27:03 UTC (rev 1743)
@@ -421,3 +421,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: branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc 2006-07-09 15:25:38 UTC (rev 1742)
+++ branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc 2006-07-09 15:27:03 UTC (rev 1743)
@@ -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