]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/gamecommand.qc
movetoteam: undo the team forcing in this too (so movetoteam can be done to override...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / gamecommand.qc
index b5c68ca79bcbb84f2ce8aa11bb8627d26e9106ec..8e63beecc33793b7c3611434f609953b76988a98 100644 (file)
@@ -1,5 +1,5 @@
 string GotoMap(string m);
-void race_DeleteTime(float pos);
+void race_deleteTime(string map, float pos);
 
 float FullTraceFraction(vector a, vector mi, vector ma, vector b)
 {
@@ -651,6 +651,7 @@ void GameCommand(string command)
                print("  radarmap [--force] [--quit | --loop] [sharpness]\n");
                print("  bbox\n");
                print("  cvar_changes\n");
+               print("  cvar_purechanges\n");
                print("  find classname\n");
                GameCommand_Vote("help", world);
                GameCommand_Ban("help");
@@ -800,16 +801,15 @@ 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 || argc == 4) {
-//     sv_cmd movetoteam  player_id  team_colour
-//     sv_cmd movetoteam  player_id  team_colour  type_of_move
+       if(argv(0) == "movetoteam") if(argc == 3 || argc == 4) {
+               //      sv_cmd movetoteam  player_id  team_colour
+               //      sv_cmd movetoteam  player_id  team_colour  type_of_move
 
-//     type of move
-//     0 (00) automove centerprint, admin message
-//     1 (01) automove centerprint, no admin message
-//     2 (10) no centerprint, admin message
-//     3 (11) no centerprint, no admin message
+               //      type of move
+               //      0 (00) automove centerprint, admin message
+               //      1 (01) automove centerprint, no admin message
+               //      2 (10) no centerprint, admin message
+               //      3 (11) no centerprint, no admin message
 
                if(!teams_matter) {  // death match
                        print("Currently not playing a team game\n");
@@ -824,7 +824,7 @@ void GameCommand(string command)
                        return;
                }
 
-                       client = edict_num(entno);
+               client = edict_num(entno);
 
                // player entity is not a client
                if not(client.flags & FL_CLIENT) {
@@ -834,43 +834,52 @@ void GameCommand(string command)
 
                // find the team to move the player to
                float team_colour;
+               float save;
+
+               save = client.team_forced;
+               client.team_forced = 0;
 
                team_colour = ColourToNumber(argv(2));
 
                if(team_colour == client.team) {  // player already on the team
                        print("Player ", argv(1), " (", client.netname, ") is already on the ", ColoredTeamName(client.team), "\n");
+                       // keep the forcing undone
                        return;
                } else if(team_colour == 0)  // auto team
                        team_colour = NumberToTeamNumber(FindSmallestTeam(client, FALSE));
+               else
+                       CheckAllowedTeams(client);
+
+               client.team_forced = save;
 
                switch(team_colour) {
                        case COLOR_TEAM1:
                                if(c1 == -1) {
                                        print("Sorry, there isn't a red team\n");
                                        return;
-               }
-                       break;
+                               }
+                               break;
 
                        case COLOR_TEAM2:
                                if(c2 == -1) {
                                        print("Sorry, there isn't a blue team\n");
-               return;
-       }
-                       break;
+                                       return;
+                               }
+                               break;
 
                        case COLOR_TEAM3:
                                if(c3 == -1) {
                                        print("Sorry, there isn't a yellow team\n");
                                        return;
                                }
-                       break;
+                               break;
 
                        case COLOR_TEAM4:
                                if(c4 == -1) {
                                        print("Sorry, there isn't a pink team\n");
                                        return;
                                }
-                       break;
+                               break;
 
                        default:
                                print("Sorry, team ", argv(2), " doesn't exist\n");
@@ -878,6 +887,7 @@ void GameCommand(string command)
                }
                print("Player ", argv(1), " (", client.netname, ") has been moved to the ", ColoredTeamName(team_colour), "\n");
 
+               client.team_forced = 0;
                MoveToTeam(client, team_colour, 6, stof(argv(3)));
 
                return;
@@ -912,6 +922,11 @@ void GameCommand(string command)
                print(cvar_changes);
                return;
        }
+       if (argv(0) == "cvar_purechanges")
+       {
+               print(cvar_purechanges);
+               return;
+       }
        if (argv(0) == "find") if(argc == 2)
        {
                for(client = world; (client = find(client, classname, argv(1))); )
@@ -924,6 +939,11 @@ void GameCommand(string command)
                        print(records_reply[i]);
                return;
        }
+       if (argv(0) == "ladder")
+       {
+               print(ladder_reply);
+               return;
+       }
        if (argv(0) == "rankings")
        {
                strunzone(rankings_reply);
@@ -1340,7 +1360,11 @@ void GameCommand(string command)
        }
        if(argv(0) == "delrec")
        {
-               race_DeleteTime(stof(argv(1)));
+               if(argv(2) != "")
+                       race_deleteTime(argv(2), stof(argv(1)));
+               else
+                       race_deleteTime(GetMapname(), stof(argv(1)));
+
                return;
        }