X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fcommand%2Fgeneric.qc;h=743793bad02db23bbfc88e5bbf211fdedc9a7b50;hb=7415ded9c665a49be49f4100555dfee6e0bf01b2;hp=4ca8b3780c3d4950c4644be777260836d8da4c01;hpb=b3602d50e99c7a8cdd931fab0d075da21d75120b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/command/generic.qc b/qcsrc/common/command/generic.qc index 4ca8b3780..743793bad 100644 --- a/qcsrc/common/command/generic.qc +++ b/qcsrc/common/command/generic.qc @@ -28,7 +28,7 @@ void Curl_URI_Get_Callback(float id, float status, string data) 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; @@ -41,7 +41,7 @@ void Curl_URI_Get_Callback(float id, float status, string data) strunzone(do_cvar); } if(!do_exec) - if not(do_cvar) + if (!do_cvar) print(data); } @@ -57,12 +57,12 @@ 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 +70,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), " "); - + 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: @@ -153,7 +153,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 +162,7 @@ void GenericCommand_qc_curl(float request, float argc) return; } - + default: case CMD_REQUEST_USAGE: { @@ -181,33 +181,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 +216,7 @@ void GenericCommand_dumpcommands(float request) } return; } - + default: case CMD_REQUEST_USAGE: { @@ -236,40 +236,93 @@ void GenericCommand_dumpnotifs(float request) #ifndef MENUQC float fh, alsoprint = FALSE; string filename = argv(1); - + if(filename == "") { - filename = "notifications.cfg"; + filename = "notifications_dump.cfg"; alsoprint = FALSE; } else if(filename == "-") { - filename = "notifications.cfg"; + 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 +338,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 +350,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 +429,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 +452,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 +486,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 +503,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 +511,7 @@ void GenericCommand_restartnotifs(float request) #endif return; } - + default: case CMD_REQUEST_USAGE: { @@ -479,7 +532,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 +560,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 +596,7 @@ void GenericCommand_runtest(float request, float argc) TEST_RunAll(); return; } - + default: case CMD_REQUEST_USAGE: { @@ -561,10 +614,10 @@ void GenericCommand_(float request) { case CMD_REQUEST_COMMAND: { - + return; } - + default: case CMD_REQUEST_USAGE: { @@ -585,6 +638,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,10 +654,10 @@ void GenericCommand_macro_help() { #define GENERIC_COMMAND(name,function,description) \ { print(" ^2", name, "^7: ", description, "\n"); } - + GENERIC_COMMANDS(0, 0, "") #undef GENERIC_COMMAND - + return; } @@ -611,10 +665,10 @@ 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) #undef GENERIC_COMMAND - + return FALSE; } @@ -622,10 +676,10 @@ 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, "") #undef GENERIC_COMMAND - + return FALSE; } @@ -633,18 +687,18 @@ 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, "") #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,9 +709,9 @@ 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 @@ -713,7 +767,7 @@ float GenericCommand(string command) // 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;