From 0087dc94aab682c9bfe0144dc9f14008cd0fa55f Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 20 Jun 2008 13:40:09 +0000 Subject: [PATCH] server admin commands: movetoteam_* git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3714 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 6 ++++++ data/qcsrc/server/cl_client.qc | 36 ++++++++++++++++++++++++++++++++ data/qcsrc/server/gamecommand.qc | 25 ++++++++++++++++++++-- data/qcsrc/server/teamplay.qc | 2 +- 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 966d7c960..59bef0bd9 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -61,6 +61,12 @@ alias team_yellow "cmd selectteam yellow; cmd join" alias team_auto "cmd selectteam auto; cmd join" bind f6 team_auto +alias movetoteam_red "sv_cmd movetoteam $1 red" +alias movetoteam_blue "sv_cmd movetoteam $1 blue" +alias movetoteam_pink "sv_cmd movetoteam $1 pink" +alias movetoteam_yellow "sv_cmd movetoteam $1 yellow" +alias movetoteam_auto "sv_cmd movetoteam $1 auto" + // merge lightmaps up to 1024x1024 textures // the default of 2048x2048 is too heavy for my rig (SavageX) mod_q3bsp_lightmapmergepower 3 diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index f71191ee4..73d410602 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -815,12 +815,48 @@ void ClientKill (void) void DoTeamChange(float destteam) { + float t, c0; if(!cvar("teamplay")) { if(destteam >= 0) SetPlayerColors(self, destteam); return; } + if(self.classname == "player") + if(destteam == -1) + { + CheckAllowedTeams(self); + t = FindSmallestTeam(self, TRUE); + switch(self.team) + { + case COLOR_TEAM1: c0 = c1; break; + case COLOR_TEAM2: c0 = c2; break; + case COLOR_TEAM3: c0 = c3; break; + case COLOR_TEAM4: c0 = c4; break; + default: c0 = 99; + } + switch(t) + { + case 1: + if(c0 > c1) + destteam = COLOR_TEAM1; + break; + case 2: + if(c0 > c2) + destteam = COLOR_TEAM2; + break; + case 3: + if(c0 > c3) + destteam = COLOR_TEAM3; + break; + case 4: + if(c0 > c4) + destteam = COLOR_TEAM4; + break; + } + if(destteam == -1) + return; + } if(destteam == self.team && !self.killindicator) return; ClientKill_TeamChange(destteam); diff --git a/data/qcsrc/server/gamecommand.qc b/data/qcsrc/server/gamecommand.qc index c9bc5442f..4665af703 100644 --- a/data/qcsrc/server/gamecommand.qc +++ b/data/qcsrc/server/gamecommand.qc @@ -18,6 +18,8 @@ void make_mapinfo_Think() void GameCommand(string command) { float argc; + entity client; + float entno; argc = tokenize(command); if(argv(0) == "help" || argc == 0) @@ -112,8 +114,6 @@ void GameCommand(string command) if(argv(0) == "adminmsg") if(argc == 3) { - entity client; - float entno; entno = stof(argv(1)); client = world; if(entno <= maxclients) @@ -187,6 +187,27 @@ void GameCommand(string command) bprint("That command can only be used in a team-based gamemode.\n"); return; } + if (argv(0) == "movetoteam") if(argc == 3) + { + entno = stof(argv(1)); + client = world; + if(entno <= maxclients) + client = edict_num(entno); + if(client.flags & FL_CLIENT) + { + float lt; + lt = lockteams; + lockteams = 0; + + self = client; + SV_ParseClientCommand(strcat("selectteam ", argv(2))); + + lockteams = lt; + } + else + print("Client not found\n"); + return; + } print("Invalid command. For a list of supported commands, try sv_cmd help.\n"); } diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index 89377b6fc..7a168a15b 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -759,7 +759,6 @@ float FindSmallestTeam(entity pl, float ignore_pl) error("Too few teams available for team deathmatch\n"); } - // count how many players are in each team if(ignore_pl) GetTeamCounts(pl); @@ -858,6 +857,7 @@ float JoinBestTeam(entity pl, float only_return_best, float forcebestteam) if(g_domination) { + // WHY? TODO if(cvar("g_domination_default_teams") < 3) c3 = 999999999; if(cvar("g_domination_default_teams") < 4) -- 2.39.2