]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/command/generic.qc
Clean up MENUQC #includes
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / command / generic.qc
index d119bd25be1d10eebe07350b5cf7170a94afcafd..931e2f679fa1c32ea77d824333507c2a4772995c 100644 (file)
@@ -1,3 +1,6 @@
+#include "generic.qh"
+#include "shared_defs.qh"
+
 // =========================================================
 //  Generic program common command code, written by Samual
 //  Last updated: February 19th, 2012
@@ -18,17 +21,14 @@ string GetProgramCommandPrefix(void)
 }
 
 // used by curl command
-void Curl_URI_Get_Callback(float id, float status, string data)
+void Curl_URI_Get_Callback(int id, float status, string data)
 {
-       float i;
-       float do_exec;
-       string do_cvar;
-       i = id - URI_GET_CURL;
-       do_exec = curl_uri_get_exec[i];
-       do_cvar = curl_uri_get_cvar[i];
+       int i = id - URI_GET_CURL;
+       float do_exec = curl_uri_get_exec[i];
+       string do_cvar = curl_uri_get_cvar[i];
        if(status != 0)
        {
-               print(sprintf(_("error: status is %d\n"), status));
+               dprintf("error: status is %d\n", status);
                if(do_cvar)
                        strunzone(do_cvar);
                return;
@@ -56,13 +56,11 @@ void GenericCommand_addtolist(float request, float argc)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       float i;
-                       
                        if(argc >= 2)
                        {
                                string original_cvar = argv(1);
                                string tmp_string = argv(2);
-                               
+
                                if(cvar_string(original_cvar) == "") // cvar was empty
                                {
                                        cvar_set(original_cvar, tmp_string);
@@ -70,17 +68,17 @@ void GenericCommand_addtolist(float request, float argc)
                                else // add it to the end of the list if the list doesn't already have it
                                {
                                        argc = tokenizebyseparator(cvar_string(original_cvar), " ");
-                                       
+                                       int i;
                                        for(i = 0; i < argc; ++i)
                                                if(argv(i) == tmp_string)
                                                        return; // already in list
-                                                       
+
                                        cvar_set(original_cvar, strcat(tmp_string, " ", cvar_string(original_cvar)));
                                }
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2addtolist^7\n");
                case CMD_REQUEST_USAGE:
@@ -99,18 +97,10 @@ void GenericCommand_qc_curl(float request, float argc)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       float do_exec;
-                       string do_cvar;
-                       float key;
-                       float i, j;
-                       string url;
-                       float buf;
-                       float r;
-
-                       do_exec = FALSE;
-                       do_cvar = string_null;
-                       key = -1;
-
+                       bool do_exec = false;
+                       string do_cvar = string_null;
+                       float key = -1;
+                       int i;
                        for(i = 1; i+1 < argc; ++i)
                        {
                                if(argv(i) == "--cvar" && i+2 < argc)
@@ -121,7 +111,7 @@ void GenericCommand_qc_curl(float request, float argc)
                                }
                                if(argv(i) == "--exec")
                                {
-                                       do_exec = TRUE;
+                                       do_exec = true;
                                        continue;
                                }
                                if(argv(i) == "--key" && i+2 < argc)
@@ -135,15 +125,16 @@ void GenericCommand_qc_curl(float request, float argc)
 
                        // now, argv(i) is the URL
                        // following args may be POST parameters
-                       url = argv(i);
+                       string url = argv(i);
                        ++i;
-                       buf = buf_create();
-                       j = 0;
-                       for(; i+1 < argc; i += 2)
+                       float buf = buf_create();
+                       int j;
+                       for(j = 0; i+1 < argc; i += 2)
                                bufstr_set(buf, ++j, sprintf("%s=%s", uri_escape(argv(i)), uri_escape(argv(i+1))));
                        if(i < argc)
                                bufstr_set(buf, ++j, sprintf("submit=%s", uri_escape(argv(i))));
 
+                       float r;
                        if(j == 0) // no args: GET
                                r = crypto_uri_postbuf(url, URI_GET_CURL + curl_uri_get_pos, string_null, string_null, -1, key);
                        else // with args: POST
@@ -153,7 +144,7 @@ void GenericCommand_qc_curl(float request, float argc)
                        {
                                curl_uri_get_exec[curl_uri_get_pos] = do_exec;
                                curl_uri_get_cvar[curl_uri_get_pos] = do_cvar;
-                               curl_uri_get_pos = mod(curl_uri_get_pos + 1, URI_GET_CURL_END - URI_GET_CURL + 1);
+                               curl_uri_get_pos = (curl_uri_get_pos + 1) % (URI_GET_CURL_END - URI_GET_CURL + 1);
                        }
                        else
                                print(_("error creating curl handle\n"));
@@ -162,7 +153,7 @@ void GenericCommand_qc_curl(float request, float argc)
 
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -181,33 +172,33 @@ void GenericCommand_dumpcommands(float request)
                        float fh;
                        string filename = strcat(GetProgramCommandPrefix(), "_dump.txt");
                        fh = fopen(filename, FILE_WRITE);
-                       
+
                        if(fh >= 0)
                        {
                                #ifdef SVQC
                                        CMD_Write("dump of server console commands:\n");
                                        GameCommand_macro_write_aliases(fh);
-                                       
+
                                        CMD_Write("\ndump of networked client only commands:\n");
                                        ClientCommand_macro_write_aliases(fh);
-                                       
+
                                        CMD_Write("\ndump of common commands:\n");
                                        CommonCommand_macro_write_aliases(fh);
 
                                        CMD_Write("\ndump of ban commands:\n");
                                        BanCommand_macro_write_aliases(fh);
                                #endif
-                                                               
+
                                #ifdef CSQC
                                        CMD_Write("dump of client commands:\n");
                                        LocalCommand_macro_write_aliases(fh);
                                #endif
-                               
+
                                CMD_Write("\ndump of generic commands:\n");
                                GenericCommand_macro_write_aliases(fh);
-                               
+
                                print("Completed dump of aliases in ^2data/data/", GetProgramCommandPrefix(), "_dump.txt^7.\n");
-                               
+
                                fclose(fh);
                        }
                        else
@@ -216,7 +207,7 @@ void GenericCommand_dumpcommands(float request)
                        }
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -234,42 +225,95 @@ void GenericCommand_dumpnotifs(float request)
                case CMD_REQUEST_COMMAND:
                {
                        #ifndef MENUQC
-                       float fh, alsoprint = FALSE;
+                       float fh, alsoprint = false;
                        string filename = argv(1);
-                       
+
                        if(filename == "")
                        {
-                               filename = "notifications.cfg";
-                               alsoprint = FALSE;
+                               filename = "notifications_dump.cfg";
+                               alsoprint = false;
                        }
                        else if(filename == "-")
                        {
-                               filename = "notifications.cfg";
-                               alsoprint = TRUE;
+                               filename = "notifications_dump.cfg";
+                               alsoprint = true;
                        }
                        fh = fopen(filename, FILE_WRITE);
-                       
+
                        if(fh >= 0)
                        {
                                Dump_Notifications(fh, alsoprint);
-                               print(sprintf("Dumping notifications... File located in ^2data/data/%s^7.\n", filename));
+                               printf("Dumping notifications... File located in ^2data/data/%s^7.\n", filename);
                                fclose(fh);
                        }
                        else
                        {
-                               print(sprintf("^1Error: ^7Could not open file '%s'!\n", filename));
+                               printf("^1Error: ^7Could not open file '%s'!\n", filename);
                        }
                        #else
                        print(_("Notification dump command only works with cl_cmd and sv_cmd.\n"));
                        #endif
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
                        print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpnotifs [filename]"));
-                       print("  Where 'filename' is the file to write (default is notifications.cfg),\n");
+                       print("  Where 'filename' is the file to write (default is notifications_dump.cfg),\n");
+                       print("  if supplied with '-' output to console as well as default,\n");
+                       print("  if left blank, it will only write to default.\n");
+                       return;
+               }
+       }
+}
+
+void GenericCommand_dumpweapons(float request) // WEAPONTODO: make this work with other progs than just server
+{
+       switch(request)
+       {
+               case CMD_REQUEST_COMMAND:
+               {
+                       #ifdef SVQC
+                       wep_config_file = -1;
+                       wep_config_alsoprint = -1;
+                       string filename = argv(1);
+                       
+                       if(filename == "")
+                       {
+                               filename = "weapons_dump.cfg";
+                               wep_config_alsoprint = false;
+                       }
+                       else if(filename == "-")
+                       {
+                               filename = "weapons_dump.cfg";
+                               wep_config_alsoprint = true;
+                       }
+                       wep_config_file = fopen(filename, FILE_WRITE);
+                       
+                       if(wep_config_file >= 0)
+                       {
+                               Dump_Weapon_Settings();
+                               print(sprintf("Dumping weapons... File located in ^2data/data/%s^7.\n", filename));
+                               fclose(wep_config_file);
+                               wep_config_file = -1;
+                               wep_config_alsoprint = -1;
+                       }
+                       else
+                       {
+                               print(sprintf("^1Error: ^7Could not open file '%s'!\n", filename));
+                       }
+                       #else
+                       print(_("Weapons dump command only works with sv_cmd.\n"));
+                       #endif
+                       return;
+               }
+                       
+               default:
+               case CMD_REQUEST_USAGE:
+               {
+                       print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpweapons [filename]"));
+                       print("  Where 'filename' is the file to write (default is weapons_dump.cfg),\n");
                        print("  if supplied with '-' output to console as well as default,\n");
                        print("  if left blank, it will only write to default.\n");
                        return;
@@ -285,7 +329,7 @@ void GenericCommand_maplist(float request, float argc)
                {
                        string tmp_string;
                        float i;
-                       
+
                        switch(argv(1))
                        {
                                case "add": // appends new maps to the maplist
@@ -297,63 +341,63 @@ void GenericCommand_maplist(float request, float argc)
                                                        print("maplist: ERROR: ", argv(2), " does not exist!\n");
                                                        break;
                                                }
-                                               
+
                                                if(cvar_string("g_maplist") == "")
                                                        cvar_set("g_maplist", argv(2));
                                                else
                                                        cvar_set("g_maplist", strcat(argv(2), " ", cvar_string("g_maplist")));
-                                                       
+
                                                return;
                                        }
                                        break; // go to usage
                                }
-                               
+
                                case "cleanup": // scans maplist and only adds back the ones which are really usable
                                {
                                        MapInfo_Enumerate();
                                        MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
                                        argc = tokenizebyseparator(cvar_string("g_maplist"), " ");
-                                       
+
                                        tmp_string = "";
                                        for(i = 0; i < argc; ++i)
                                                if(MapInfo_CheckMap(argv(i)))
                                                        tmp_string = strcat(tmp_string, " ", argv(i));
-                                                       
+
                                        tmp_string = substring(tmp_string, 1, strlen(tmp_string) - 1);
                                        cvar_set("g_maplist", tmp_string);
-                                       
+
                                        return;
                                }
-                               
+
                                case "remove": // scans maplist and only adds back whatever maps were not provided in argv(2)
                                {
                                        if(argc == 3)
                                        {
                                                argc = tokenizebyseparator(cvar_string("g_maplist"), " ");
-                                               
+
                                                tmp_string = "";
                                                for(i = 0; i < argc; ++i)
                                                        if(argv(i) != argv(2))
                                                                tmp_string = strcat(tmp_string, " ", argv(i));
-                                                               
+
                                                tmp_string = substring(tmp_string, 1, strlen(tmp_string) - 1);
                                                cvar_set("g_maplist", tmp_string);
-                                               
+
                                                return;
                                        }
                                        break; // go to usage
                                }
-                               
+
                                case "shuffle": // randomly shuffle the maplist
                                {
                                        cvar_set("g_maplist", shufflewords(cvar_string("g_maplist")));
                                        return;
                                }
-                                       
+
                                default: break;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2maplist^7\n");
                case CMD_REQUEST_USAGE:
@@ -376,7 +420,7 @@ void GenericCommand_nextframe(float request, float arguments, string command)
                        queue_to_execute_next_frame(substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)));
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -399,21 +443,21 @@ void GenericCommand_removefromlist(float request, float argc)
                                string original_cvar = argv(1);
                                string removal = argv(2);
                                string tmp_string;
-                               
+
                                argc = tokenizebyseparator(cvar_string(original_cvar), " ");
-                               
+
                                tmp_string = "";
                                for(i = 0; i < argc; ++i)
                                        if(argv(i) != removal)
                                                tmp_string = strcat(tmp_string, " ", argv(i));
-                                               
+
                                tmp_string = substring(tmp_string, 1, strlen(tmp_string) - 1);
                                cvar_set(original_cvar, tmp_string);
-                               
+
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2removefromlist^7\n");
                case CMD_REQUEST_USAGE:
@@ -433,7 +477,7 @@ void GenericCommand_restartnotifs(float request)
                case CMD_REQUEST_COMMAND:
                {
                        #ifndef MENUQC
-                       print(sprintf(
+                       printf(
                                strcat(
                                        "Restart_Notifications(): Restarting %d notifications... ",
                                        "Counts: MSG_ANNCE = %d, MSG_INFO = %d, MSG_CENTER = %d, MSG_MULTI = %d, MSG_CHOICE = %d\n"
@@ -450,7 +494,7 @@ void GenericCommand_restartnotifs(float request)
                                NOTIF_CENTER_COUNT,
                                NOTIF_MULTI_COUNT,
                                NOTIF_CHOICE_COUNT
-                       ));     
+                       );
                        Destroy_All_Notifications();
                        CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
                        #else
@@ -458,7 +502,7 @@ void GenericCommand_restartnotifs(float request)
                        #endif
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -479,7 +523,7 @@ void GenericCommand_settemp(float request, float argc)
                        {
                                float f = cvar_settemp(argv(1), argv(2));
                                if(f == 1)
-                                       dprint("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily.\n"); 
+                                       dprint("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily.\n");
                                else if(f == -1)
                                        dprint("Already had a tracker for ", argv(1), ", updating it to \"", argv(2), "\".\n");
                                // else cvar_settemp itself errors out
@@ -507,15 +551,15 @@ void GenericCommand_settemp_restore(float request, float argc)
                case CMD_REQUEST_COMMAND:
                {
                        float i = cvar_settemp_restore();
-                       
+
                        if(i)
                                dprint("Restored ", ftos(i), " temporary cvar settings to their original values.\n");
                        else
                                dprint("Nothing to restore.\n");
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -543,7 +587,7 @@ void GenericCommand_runtest(float request, float argc)
                                TEST_RunAll();
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -561,10 +605,10 @@ void GenericCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -585,6 +629,7 @@ void GenericCommand_(float request)
        GENERIC_COMMAND("addtolist", GenericCommand_addtolist(request, arguments), "Add a string to a cvar") \
        GENERIC_COMMAND("dumpcommands", GenericCommand_dumpcommands(request), "Dump all commands on the program to *_cmd_dump.txt") \
        GENERIC_COMMAND("dumpnotifs", GenericCommand_dumpnotifs(request), "Dump all notifications into notifications_dump.txt") \
+       GENERIC_COMMAND("dumpweapons", GenericCommand_dumpweapons(request), "Dump all weapons into weapons_dump.txt") \
        GENERIC_COMMAND("maplist", GenericCommand_maplist(request, arguments), "Automatic control of maplist") \
        GENERIC_COMMAND("nextframe", GenericCommand_nextframe(request, arguments, command), "Execute the given command next frame of this VM") \
        GENERIC_COMMAND("qc_curl", GenericCommand_qc_curl(request, arguments), "Queries a URL") \
@@ -600,51 +645,51 @@ void GenericCommand_macro_help()
 {
        #define GENERIC_COMMAND(name,function,description) \
                { print("  ^2", name, "^7: ", description, "\n"); }
-               
-       GENERIC_COMMANDS(0, 0, "")
+
+       GENERIC_COMMANDS(0, 0, "");
        #undef GENERIC_COMMAND
-       
+
        return;
 }
 
 float GenericCommand_macro_command(float argc, string command)
 {
        #define GENERIC_COMMAND(name,function,description) \
-               { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
-       GENERIC_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
+               { if(name == strtolower(argv(0))) { function; return true; } }
+
+       GENERIC_COMMANDS(CMD_REQUEST_COMMAND, argc, command);
        #undef GENERIC_COMMAND
-       
-       return FALSE;
+
+       return false;
 }
 
 float GenericCommand_macro_usage(float argc)
 {
        #define GENERIC_COMMAND(name,function,description) \
-               { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
-       GENERIC_COMMANDS(CMD_REQUEST_USAGE, argc, "")
+               { if(name == strtolower(argv(1))) { function; return true; } }
+
+       GENERIC_COMMANDS(CMD_REQUEST_USAGE, argc, "");
        #undef GENERIC_COMMAND
-       
-       return FALSE;
+
+       return false;
 }
 
 void GenericCommand_macro_write_aliases(float fh)
 {
        #define GENERIC_COMMAND(name,function,description) \
                { CMD_Write_Alias("qc_cmd_svmenu", name, description); }
-       
-       GENERIC_COMMANDS(0, 0, "")
+
+       GENERIC_COMMANDS(0, 0, "");
        #undef GENERIC_COMMAND
-       
+
        return;
 }
-       
+
 
 // ===========================================
 //  Main Common Function For Generic Commands
 // ===========================================
-// Commands spread out among all programs (menu, client, and server) 
+// Commands spread out among all programs (menu, client, and server)
 
 float GenericCommand(string command)
 {
@@ -655,18 +700,18 @@ float GenericCommand(string command)
 
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
-       
+
        if(GenericCommand_macro_command(argc, command)) // continue as usual and scan for normal commands
        {
-               return TRUE; // handled by one of the above GenericCommand_* functions
+               return true; // handled by one of the above GenericCommand_* functions
        }
        else if(argc >= 3 && argv(0) == "red")
        {
                s = substring(command, argv_start_index(2), argv_end_index(-1) - argv_start_index(2));
                localcmd(strcat(argv(1), " ", GenericCommand_markup(s)));
-               return TRUE;
+               return true;
        }
        else if(argc >= 3 && crc16(0, argv(0)) == 38566 && crc16(0, strcat(argv(0), argv(0), argv(0))) == 59830)
        {
@@ -706,14 +751,14 @@ float GenericCommand(string command)
 
                localcmd(strcat(argv(1), " ", s));
 
-               return TRUE;
+               return true;
        }
        else if(argc >= 3 && crc16(0, argv(0)) == 3826 && crc16(0, strcat(argv(0), argv(0), argv(0))) == 55790)
        {
                // test case for terencehill's color codes
                s = strdecolorize(substring(command, argv_start_index(2), argv_end_index(-1) - argv_start_index(2)));
                s2 = "";
-               
+
                n = strlen(s);
                j = ((6 * max(1, floor(strlen(s)/32 + random() * 2 - 1))) / n) * (1 - 2 * (random() > 0.5));
                f = random() * 6;
@@ -741,8 +786,8 @@ float GenericCommand(string command)
 
                localcmd(strcat(argv(1), " ", s2));
 
-               return TRUE;
+               return true;
        }
 
-       return FALSE;
+       return false;
 }