]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/command/sv_cmd.qc
Merge branch 'master' into z411/bai-server
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / command / sv_cmd.qc
index f05edfcb5a670225986eb18ae6f679645d540c9b..c06ed0a6cce37c4815c6444555fd2f9fa7049296 100644 (file)
@@ -161,6 +161,61 @@ void GameCommand_adminmsg(int request, int argc)
        }
 }
 
+void GameCommand_teamname(int request, int argc)
+{
+       switch (request)
+       {
+               case CMD_REQUEST_COMMAND:
+               {
+                       if (argv(1) == "")
+                       {
+                               return;
+                       }
+                       if (!teamplay)
+                       {
+                               LOG_INFO("selectteam can only be used in teamgames");
+                               return;
+                       }
+                       
+                       switch (argv(1))
+                       {
+                               case "red":
+                               case "blue":
+                               case "yellow":
+                               case "pink":
+                               {
+                                       int tm = Team_ColorToTeam(argv(1));
+                                       if(argv(2) != "") {
+                                               cvar_set(strcat("g_teamnames_", argv(1)), argv(2));
+                                               bprintf("\{1}%s%s^7 team is now known as %s^7\n", Team_ColorCode(tm), Team_ColorName(tm), argv(2));
+                                       } else {
+                                               cvar_set(strcat("g_teamnames_", argv(1)), "");
+                                               bprintf("\{1}%s%s^7 team now doesn't have a team name\n", Team_ColorCode(tm), Team_ColorName(tm), argv(2));
+                                       }
+                                       
+                                       break;
+                               }
+                               default:
+                               {
+                                       return;
+                               }
+                       }
+                       
+                       send_TeamNames(MSG_BROADCAST, NULL);
+                       return;
+               }
+
+               default:
+                       LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
+               case CMD_REQUEST_USAGE:
+               {
+                       LOG_HELP("Usage:^3 sv_cmd sendteams");
+                       LOG_HELP("  No arguments required.");
+                       return;
+               }
+       }
+}
+
 void GameCommand_allready(int request)
 {
        switch (request)
@@ -968,6 +1023,46 @@ void GameCommand_gotomap(int request, int argc)
        }
 }
 
+void GameCommand_ircmsg(int request, int argc, string command)
+{
+       /* IRCSay from the SMB Modpack */
+       switch (request)
+       {
+               case CMD_REQUEST_COMMAND:
+               {
+                       string msgstr = substring(command, strlen(argv(0))+1, strlen(command));
+                       
+                       if(msgstr == "")
+                               return;
+                       
+                       string prefix;
+                       if(substring(msgstr, 0, 3) == "^4*") // actions
+                                       prefix = "\{3}";
+                       else
+                                       prefix = "\{1}";
+
+                       msgstr = strcat(prefix, strreplace("\n", " ", msgstr), "\n"); // newlines only are good for centerprint
+
+                       FOREACH_CLIENTSLOT(true,
+                       {
+                                       if(!intermission_running)
+                                       if((autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(warmup_stage || game_stopped)))
+                                       if(IS_PLAYER(it))
+                                               continue;
+                                       if(IS_REAL_CLIENT(it))
+                                               sprint(it, msgstr);
+                       });
+               }
+               
+               default:
+               case CMD_REQUEST_USAGE:
+               {
+                       LOG_HELP("Usage:^3 sv_cmd ircmsg message");
+                       return;
+               }
+       }
+}
+
 void GameCommand_lockteams(int request)
 {
        switch (request)
@@ -982,7 +1077,7 @@ void GameCommand_lockteams(int request)
                        if (teamplay)
                        {
                                lockteams = 1;
-                               bprint("^1The teams are now locked.\n");
+                               bprint("\{1}^1The teams are now locked.\n");
                        }
                        else
                        {
@@ -1028,6 +1123,72 @@ void GameCommand_make_mapinfo(int request)
        }
 }
 
+void GameCommand_setflag(int request, int argc)
+{
+       switch (request)
+       {
+               case CMD_REQUEST_COMMAND:
+               {
+                       entity client;
+                       float accepted;
+                       
+                       client = GetFilteredEntity(argv(1));
+                       accepted = VerifyClientEntity(client, false, false);
+
+                       if (accepted <= 0)
+                       {
+                               LOG_INFO("^1ERROR^7: Couldn't set country flag");
+                               LOG_HELP("Usage:^3 sv_cmd setflag #client_id countrycode[0-249]");
+                               return;
+                       }
+                       
+                       client.countrycode = stof(argv(2));
+                       LOG_INFO("^2SUCCESS^7: Country flag set!");
+                       return;
+               }
+               default:
+                       LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
+               case CMD_REQUEST_USAGE:
+               {
+                       LOG_HELP("Usage:^3 sv_cmd setflag #client_id countrycode[0-249]");
+                       return;
+               }
+       }
+}
+
+void GameCommand_setrank(int request, int argc)
+{
+       switch (request)
+       {
+               case CMD_REQUEST_COMMAND:
+               {
+                       entity client;
+                       float accepted;
+                       
+                       client = GetFilteredEntity(argv(1));
+                       accepted = VerifyClientEntity(client, false, false);
+
+                       if (accepted <= 0)
+                       {
+                               LOG_INFO("^1ERROR^7: Couldn't set player rank");
+                               LOG_HELP("Usage:^3 sv_cmd setrank #client_id rank");
+                               return;
+                       }
+                       
+                       client.rank = strzone(argv(2));
+                       LOG_INFO("^2SUCCESS^7: Player rank set!");
+                       return;
+               }
+               default:
+                       LOG_INFOF("Incorrect parameters for ^2%s^7", argv(0));
+               case CMD_REQUEST_USAGE:
+               {
+                       LOG_HELP("Usage:^3 sv_cmd setrank #client_id #rank");
+                       return;
+               }
+       }
+}
+
 void GameCommand_moveplayer(int request, int argc)
 {
        switch (request)
@@ -1210,6 +1371,38 @@ void GameCommand_nospectators(int request)
        }
 }
 
+void GameCommand_printplayer(int request, int argc)
+{
+       switch (request)
+        {
+                       case CMD_REQUEST_COMMAND:
+                       {
+                       entity player = GetIndexedEntity(argc, 1);
+                                               if (player.playerid)
+                                               {
+                                                       GameLogEcho(strcat(
+                                                                                       strcat(
+                                                                                                       ":playerinfo:", ftos(player.playerid),
+                                                                                                       ":", ftos(etof(player)),
+                                                                                                       ":", ftos(CS_CVAR(player).cvar_cl_allow_uidtracking),
+                                                                                                       ":", ftos(CS_CVAR(player).cvar_cl_allow_uid2name)),
+                                                                                       strcat(
+                                                                                                       ":", ftos(CS_CVAR(player).cvar_cl_allow_uidranking),
+                                                                                                       ":", ((IS_REAL_CLIENT(player)) ? GameLog_ProcessIP(player.netaddress) : "bot"),
+                                                                                                       ":", player.crypto_idfp,
+                                                                                                       ":", playername(player.netname, player.team, false))));
+                                               }
+                                       return;
+                               }
+                       default:
+                               case CMD_REQUEST_USAGE:
+                               {
+                                       LOG_HELP("Usage:^3 sv_cmd printplayer <player_entity_id>");
+                                               return;
+                               }
+               }
+}
+
 void GameCommand_printstats(int request)
 {
        switch (request)
@@ -1655,7 +1848,7 @@ void GameCommand_unlockteams(int request)
                        if (teamplay)
                        {
                                lockteams = 0;
-                               bprint("^1The teams are now unlocked.\n");
+                               bprint("\{1}^1The teams are now unlocked.\n");
                        }
                        else
                        {
@@ -1768,17 +1961,22 @@ SERVER_COMMAND(extendmatchtime, "Increase the timelimit value incrementally") {
 SERVER_COMMAND(gametype, "Simple command to change the active gametype") { GameCommand_gametype(request, arguments); }
 SERVER_COMMAND(gettaginfo, "Get specific information about a weapon model") { GameCommand_gettaginfo(request, arguments); }
 SERVER_COMMAND(gotomap, "Simple command to switch to another map") { GameCommand_gotomap(request, arguments); }
+SERVER_COMMAND(ircmsg, "Chat message to be sent by IRC bots") { GameCommand_ircmsg(request, arguments, command); }
 SERVER_COMMAND(lockteams, "Disable the ability for players to switch or enter teams") { GameCommand_lockteams(request); }
 SERVER_COMMAND(make_mapinfo, "Automatically rebuild mapinfo files") { GameCommand_make_mapinfo(request); }
 SERVER_COMMAND(moveplayer, "Change the team/status of a player") { GameCommand_moveplayer(request, arguments); }
 SERVER_COMMAND(nospectators, "Automatically remove spectators from a match") { GameCommand_nospectators(request); }
+SERVER_COMMAND(printplayer, "Print information about a player") { GameCommand_printplayer(request, arguments); }
 SERVER_COMMAND(printstats, "Dump eventlog player stats and other score information") { GameCommand_printstats(request); }
 SERVER_COMMAND(radarmap, "Generate a radar image of the map") { GameCommand_radarmap(request, arguments); }
 SERVER_COMMAND(reducematchtime, "Decrease the timelimit value incrementally") { GameCommand_reducematchtime(request); }
 SERVER_COMMAND(resetmatch, "Soft restart the game without changing teams; goes back to warmup if enabled") { GameCommand_resetmatch(request); }
 SERVER_COMMAND(setbots, "Adjust how many bots are in the match") { GameCommand_setbots(request, arguments); }
+SERVER_COMMAND(setflag, "Set client flag") { GameCommand_setflag(request, arguments); }
+SERVER_COMMAND(setrank, "Set client rank") { GameCommand_setrank(request, arguments); }
 SERVER_COMMAND(shuffleteams, "Randomly move players to different teams") { GameCommand_shuffleteams(request); }
 SERVER_COMMAND(stuffto, "Send a command to be executed on a client") { GameCommand_stuffto(request, arguments); }
+SERVER_COMMAND(teamname, "Set team name") { GameCommand_teamname(request, arguments); }
 SERVER_COMMAND(trace, "Various debugging tools with tracing") { GameCommand_trace(request, arguments); }
 SERVER_COMMAND(unlockteams, "Enable the ability for players to switch or enter teams") { GameCommand_unlockteams(request); }
 SERVER_COMMAND(warp, "Choose different level in campaign") { GameCommand_warp(request, arguments); }