r6030 - in branches/nexuiz-2.0: . data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Mar 1 06:31:09 EST 2009
Author: div0
Date: 2009-03-01 06:31:09 -0500 (Sun, 01 Mar 2009)
New Revision: 6030
Modified:
branches/nexuiz-2.0/.patchsets
branches/nexuiz-2.0/data/qcsrc/server/bots.qc
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/domination.qc
branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc
branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc
branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
Log:
r6012 | div0 | 2009-02-27 19:30:19 +0100 (Fri, 27 Feb 2009) | 2 lines
lots of teamplay cleanups, should fix "color 3 3; cmd join" server crash exploit
r6013 | div0 | 2009-02-27 19:32:06 +0100 (Fri, 27 Feb 2009) | 2 lines
slightly better behaviour on "color 14 14; connect ..."
r6014 | div0 | 2009-02-27 19:41:17 +0100 (Fri, 27 Feb 2009) | 2 lines
more teamplay fixes
Please try this patchset on your servers! It might cause crashes or bad team balance! PLEASE TEST.
Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/.patchsets 2009-03-01 11:31:09 UTC (rev 6030)
@@ -1,2 +1,2 @@
master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6008,6010-6011,6026-6026
+revisions_applied = 1-6014,6026-6026
Modified: branches/nexuiz-2.0/data/qcsrc/server/bots.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/bots.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/bots.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -1627,11 +1627,11 @@
{
if (e == self)
return FALSE;
- if (teamplay)
+ if (teams_matter)
if (e.team != 0)
return FALSE;
}
- if(!teamplay)
+ if(!teams_matter)
if(bot_ignore_bots)
if(clienttype(e) == CLIENTTYPE_BOT)
return FALSE;
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -722,6 +722,7 @@
self.campingrifle_bulletcounter = 0;
self.classname = "player";
+ self.wasplayer = TRUE;
self.iscreature = TRUE;
self.movetype = MOVETYPE_WALK;
self.solid = SOLID_SLIDEBOX;
@@ -1091,7 +1092,7 @@
void DoTeamChange(float destteam)
{
float t, c0;
- if(!cvar("teamplay"))
+ if(!teams_matter)
{
if(destteam >= 0)
SetPlayerColors(self, destteam);
@@ -1174,6 +1175,7 @@
void ClientConnect (void)
{
local string s;
+ float t;
if(self.flags & FL_CLIENT)
{
@@ -1207,16 +1209,17 @@
//if(g_domination)
// dom_player_join_team(self);
+ JoinBestTeam(self, FALSE, FALSE); // if the team number is valid, keep it
+
if((cvar("sv_spectate") == 1 && !g_lms) || cvar("g_campaign")) {
self.classname = "observer";
} else {
- if(cvar("teamplay"))
+ if(teams_matter)
{
if(cvar("g_balance_teams") || cvar("g_balance_teams_force"))
{
self.classname = "player";
campaign_bots_may_start = 1;
- JoinBestTeam(self, FALSE, TRUE);
}
else
{
@@ -1280,18 +1283,10 @@
GetCvars(0);
// set cvar for team scoreboard
- if (teams_matter)
- {
- local float t;
- t = cvar("teamplay");
- // we have to stuff the correct teamplay value because if this is a listen server, this changes the teamplay mode of the server itself, which is bad
- stuffcmd(self, strcat("set teamplay ", ftos(t), "\n"));
- }
- else
- stuffcmd(self, "set teamplay 0\n");
+ stuffcmd(self, strcat("set teamplay ", ftos(teamplay), "\n"));
// notify about available teams
- if(teamplay)
+ if(teams_matter)
{
CheckAllowedTeams(self);
t = 0; if(c1 >= 0) t |= 1; if(c2 >= 0) t |= 2; if(c3 >= 0) t |= 4; if(c4 >= 0) t |= 8;
@@ -1491,10 +1486,10 @@
void UpdateTeamBubble()
{
- if (!self.modelindex || !cvar("teamplay"))
+ if (!self.modelindex || !teams_matter)
return;
// spawn a teambubble entity if needed
- if (!self.teambubbleentity && cvar("teamplay"))
+ if (!self.teambubbleentity && teams_matter)
{
self.teambubbleentity = spawn();
self.teambubbleentity.owner = self;
@@ -1519,7 +1514,7 @@
local float c;
c = self.clientcolors & 15;
// LordHavoc: only bothering to support white, green, red, yellow, blue
- if (teamplay == 0) self.colormod = '0 0 0';
+ if (!teams_matter) self.colormod = '0 0 0';
else if (c == 0) self.colormod = '1.00 1.00 1.00';
else if (c == 3) self.colormod = '0.10 1.73 0.10';
else if (c == 4) self.colormod = '1.73 0.10 0.10';
@@ -1919,7 +1914,7 @@
void LeaveSpectatorMode()
{
if(isJoinAllowed()) {
- if(!cvar("teamplay") || cvar("g_campaign") || cvar("g_balance_teams")) {
+ if(!teams_matter || cvar("g_campaign") || cvar("g_balance_teams") || (self.wasplayer && cvar("g_changeteam_banned"))) {
self.classname = "player";
if(cvar("g_campaign") || cvar("g_balance_teams") || cvar("g_balance_teams_force"))
JoinBestTeam(self, FALSE, TRUE);
Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -138,7 +138,7 @@
PutClientInServer();
} else if(cvar("g_campaign") || cvar("g_balance_teams") || cvar("g_balance_teams_force")) {
//JoinBestTeam(self, FALSE, TRUE);
- } else if(cvar("teamplay") && !cvar("sv_spectate")) {
+ } else if(teams_matter && !cvar("sv_spectate")) {
self.classname = "observer";
stuffcmd(self,"menu_showteamselect\n");
}
@@ -205,7 +205,7 @@
} else if( argv(0) == "selectteam" ) {
if not(self.flags & FL_CLIENT)
return;
- if( !cvar("teamplay") ) {
+ if( !teams_matter ) {
sprint( self, "selecteam can only be used in teamgames\n");
} else if(cvar("g_campaign")) {
//JoinBestTeam(self, 0);
Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2009-03-01 11:31:09 UTC (rev 6030)
@@ -541,3 +541,5 @@
// the QC VM sucks
#define BITXOR(v,b) ((v) + (b) - 2 * ((v) & (b)))
#define BITXOR_ASSIGN(v,b) ((v) += ((b) - 2 * ((v) & (b))))
+
+.float wasplayer;
Modified: branches/nexuiz-2.0/data/qcsrc/server/domination.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/domination.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/domination.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -605,7 +605,7 @@
InitializeEntity(world, dom_delayedinit, INITPRIO_GAMETYPE);
// teamplay is always on in domination, defaults to hurt self but not teammates
- //if(!cvar("teamplay"))
+ //if(!teams_matter)
// cvar_set("teamplay", "3");
};
Modified: branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -296,7 +296,7 @@
}
else if (attacker.classname == "player" || attacker.classname == "gib")
{
- if(teamplay && attacker.team == targ.team)
+ if(teams_matter && attacker.team == targ.team)
{
if(sv_gentle) {
centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "^1Moron! You went against a team mate!"));
Modified: branches/nexuiz-2.0/data/qcsrc/server/g_world.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_world.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_world.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -196,6 +196,7 @@
BADPREFIX("userbind");
BADPREFIX("v_");
BADPREFIX("vid_");
+ BADPREFIX("crosshair");
BADCVAR("mod_q3bsp_lightmapmergepower");
BADCVAR("mod_q3bsp_nolightmaps");
@@ -1166,7 +1167,7 @@
}
}
- if(teamplay)
+ if(teams_matter)
{
s = strcat(":labels:teamscores:", GetTeamScoreString(0, 0));
if(to_console)
Modified: branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -725,7 +725,7 @@
}
if (argv(0) == "lockteams")
{
- if(teamplay)
+ if(teams_matter)
{
lockteams = 1;
bprint("^1The teams are now locked.\n");
@@ -736,7 +736,7 @@
}
if (argv(0) == "unlockteams")
{
- if(teamplay)
+ if(teams_matter)
{
lockteams = 0;
bprint("^1The teams are now unlocked.\n");
Modified: branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/havocbot_roles.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -128,7 +128,7 @@
}
}
- if(teamplay)
+ if(teams_matter)
{
discard = FALSE;
@@ -246,7 +246,7 @@
{
local entity head;
local float t, noteam;
- noteam = ((self.team == 0) || (teamplay == 0)); // fteqcc sucks
+ noteam = ((self.team == 0) || !teams_matter); // fteqcc sucks
FOR_EACH_PLAYER(head)
{
Modified: branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -154,6 +154,12 @@
sv_stopspeed = cvar ("sv_stopspeed");
teamplay = cvar ("teamplay");
+
+ if(teams_matter && !teamplay)
+ teamplay = 3;
+ if(!teams_matter && teamplay)
+ teamplay = 0;
+
skill = cvar("skill");
Spawnqueue_Check();
@@ -195,7 +201,7 @@
void SV_OnEntityPreSpawnFunction()
{
if(self.gametypefilter != "")
- if not(isGametypeInFilter(game, teamplay, self.gametypefilter))
+ if not(isGametypeInFilter(game, teams_matter, self.gametypefilter))
{
remove(self);
return;
Modified: branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/teamplay.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -12,7 +12,7 @@
{
if(intermission_running)
return 0; // no rebalancing whatsoever please
- if(!cvar("teamplay"))
+ if(!teams_matter)
return 0;
if(cvar("g_campaign"))
return 0;
@@ -486,7 +486,7 @@
shirt = _color & 0xF0;
- if(teamplay) {
+ if(teams_matter) {
setcolor(pl, 16*pants + pants);
} else {
setcolor(pl, shirt + pants);
@@ -824,7 +824,7 @@
float smallest, selectedteam;
// don't join a team if we're not playing a team game
- if(!cvar("teamplay") && !g_domination && !g_ctf && !g_keyhunt)
+ if(!teams_matter)
return 0;
// find out what teams are available
@@ -905,7 +905,7 @@
float scolor, dcolor, steam, dteam, dbotcount, scount, dcount;
// in normal deathmatch we can just apply the color and we're done
- if(!cvar("teamplay")) {
+ if(!teams_matter) {
SetPlayerColors(self, _color);
return;
}
@@ -945,76 +945,79 @@
return;
}
- if(cvar("teamplay"))
+ if(cvar("g_campaign"))
{
- if(cvar("g_campaign") || cvar("g_changeteam_banned"))
+ sprint(self, "Team changes not allowed\n");
+ return; // changing teams is not allowed
+ }
+
+ if(cvar("g_changeteam_banned") && self.wasplayer)
+ {
+ sprint(self, "Team changes not allowed\n");
+ return;
+ }
+
+ if(cvar("g_balance_teams_prevent_imbalance"))
+ {
+ // only allow changing to a smaller or equal size team
+
+ // find out what teams are available
+ //CheckAllowedTeams();
+ // count how many players on each team
+ GetTeamCounts(world);
+
+ // get desired team
+ if(dteam == 1 && c1 >= 0)//dcolor == COLOR_TEAM1 - 1)
{
- sprint(self, "Team changes not allowed\n");
- return; // changing teams is not allowed
+ dcount = c1;
+ dbotcount = cb1;
}
-
- if(!cvar("g_campaign") && cvar("g_balance_teams_prevent_imbalance"))
+ else if(dteam == 2 && c2 >= 0)//dcolor == COLOR_TEAM2 - 1)
{
- // only allow changing to a smaller or equal size team
+ dcount = c2;
+ dbotcount = cb2;
+ }
+ else if(dteam == 3 && c3 >= 0)//dcolor == COLOR_TEAM3 - 1)
+ {
+ dcount = c3;
+ dbotcount = cb3;
+ }
+ else if(dteam == 4 && c4 >= 0)//dcolor == COLOR_TEAM4 - 1)
+ {
+ dcount = c4;
+ dbotcount = cb4;
+ }
+ else
+ {
+ sprint(self, "Cannot change to an invalid team\n");
- // find out what teams are available
- //CheckAllowedTeams();
- // count how many players on each team
- GetTeamCounts(world);
+ return;
+ }
- // get desired team
- if(dteam == 1 && c1 >= 0)//dcolor == COLOR_TEAM1 - 1)
- {
- dcount = c1;
- dbotcount = cb1;
- }
- else if(dteam == 2 && c2 >= 0)//dcolor == COLOR_TEAM2 - 1)
- {
- dcount = c2;
- dbotcount = cb2;
- }
- else if(dteam == 3 && c3 >= 0)//dcolor == COLOR_TEAM3 - 1)
- {
- dcount = c3;
- dbotcount = cb3;
- }
- else if(dteam == 4 && c4 >= 0)//dcolor == COLOR_TEAM4 - 1)
- {
- dcount = c4;
- dbotcount = cb4;
- }
- else
- {
- sprint(self, "Cannot change to an invalid team\n");
+ // get starting team
+ if(steam == 1)//scolor == COLOR_TEAM1 - 1)
+ scount = c1;
+ else if(steam == 2)//scolor == COLOR_TEAM2 - 1)
+ scount = c2;
+ else if(steam == 3)//scolor == COLOR_TEAM3 - 1)
+ scount = c3;
+ else if(steam == 4)//scolor == COLOR_TEAM4 - 1)
+ scount = c4;
- return;
- }
-
- // get starting team
- if(steam == 1)//scolor == COLOR_TEAM1 - 1)
- scount = c1;
- else if(steam == 2)//scolor == COLOR_TEAM2 - 1)
- scount = c2;
- else if(steam == 3)//scolor == COLOR_TEAM3 - 1)
- scount = c3;
- else if(steam == 4)//scolor == COLOR_TEAM4 - 1)
- scount = c4;
-
- if(scount) // started at a valid, nonempty team
+ if(scount) // started at a valid, nonempty team
+ {
+ // check if we're trying to change to a larger team that doens't have bots to swap with
+ if(dcount >= scount && dbotcount <= 0)
{
- // check if we're trying to change to a larger team that doens't have bots to swap with
- if(dcount >= scount && dbotcount <= 0)
- {
- sprint(self, "Cannot change to a larger team\n");
- return; // can't change to a larger team
- }
+ sprint(self, "Cannot change to a larger team\n");
+ return; // can't change to a larger team
}
}
}
// bprint("allow change teams from ", ftos(steam), " to ", ftos(dteam), "\n");
- if(cvar("teamplay") && self.classname == "player" && steam != dteam)
+ if(self.classname == "player" && steam != dteam)
{
// reduce frags during a team change
TeamchangeFrags(self);
@@ -1022,7 +1025,7 @@
SetPlayerTeam(self, dteam, steam, FALSE);
- if(cvar("teamplay") && self.classname == "player" && steam != dteam)
+ if(self.classname == "player" && steam != dteam)
{
// kill player when changing teams
if(self.deadflag == DEAD_NO)
Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc 2009-03-01 11:28:08 UTC (rev 6029)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc 2009-03-01 11:31:09 UTC (rev 6030)
@@ -303,7 +303,7 @@
// count potential damage according to type of target
if (targ == self)
selfdamage = selfdamage + d;
- else if (targ.team == self.team && teamplay)
+ else if (targ.team == self.team && teams_matter)
teamdamage = teamdamage + d;
else if (bot_shouldattack(targ))
enemydamage = enemydamage + d;
@@ -315,7 +315,7 @@
desirabledamage = enemydamage;
if (teamplay != 1 && time > self.invincible_finished && time > self.spawnshieldtime)
desirabledamage = desirabledamage - selfdamage * cvar("g_balance_selfdamagepercent");
- if (self.team && teamplay == 2)
+ if (self.team && teamplay != 1)
desirabledamage = desirabledamage - teamdamage;
missile = find(world, classname, "rocket");
More information about the nexuiz-commits
mailing list