X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fcommand%2Fgeneric.qc;h=8f3449b3e16cfaef91bcc8b0b0bd47171deb8523;hp=0c8f85816f124f2668255db78a3872a8bb81b033;hb=a73f79e356dd25b6ea678379e7884ee45cc1977b;hpb=737346fcfbe5912ff5de24c2f22c0dbd894429a6 diff --git a/qcsrc/common/command/generic.qc b/qcsrc/common/command/generic.qc index 0c8f85816..8f3449b3e 100644 --- a/qcsrc/common/command/generic.qc +++ b/qcsrc/common/command/generic.qc @@ -1,5 +1,4 @@ -#include "command.qh" -#include "generic.qh" +#include "all.qh" #include "markup.qh" #include "rpn.qh" @@ -7,20 +6,20 @@ #include "../mapinfo.qh" #ifndef MENUQC - #include "../notifications.qh" + #include "../notifications/all.qh" #endif #ifdef CSQC - #include "../../client/command/cl_cmd.qh" + #include #endif #ifdef SVQC - #include "../../server/command/banning.qh" - #include "../../server/command/cmd.qh" - #include "../../server/command/common.qh" - #include "../../server/command/sv_cmd.qh" - #include "../../common/turrets/config.qh" - #include "../../common/weapons/config.qh" + #include + #include + #include + #include + #include + #include #endif // ========================================================= @@ -28,19 +27,6 @@ // Last updated: February 19th, 2012 // ========================================================= -// used by generic commands for better help/usage information -string GetProgramCommandPrefix(void) -{ - #ifdef SVQC - return "sv_cmd"; - #endif - #ifdef CSQC - return "cl_cmd"; - #endif - #ifdef MENUQC - return "menu_cmd"; - #endif -} // used by curl command void Curl_URI_Get_Callback(int id, float status, string data) @@ -50,7 +36,7 @@ void Curl_URI_Get_Callback(int id, float status, string data) string do_cvar = curl_uri_get_cvar[i]; if(status != 0) { - LOG_TRACEF("error: status is %d\n", status); + LOG_TRACEF("error: status is %d", status); if(do_cvar) strunzone(do_cvar); return; @@ -185,7 +171,7 @@ void GenericCommand_qc_curl(float request, float argc) } } -void GenericCommand_dumpcommands(float request) +GENERIC_COMMAND(dumpcommands, "Dump all commands on the program to *_cmd_dump.txt") { switch(request) { @@ -240,181 +226,6 @@ void GenericCommand_dumpcommands(float request) } } -void GenericCommand_dumpitems(float request) -{ - switch(request) - { - case CMD_REQUEST_COMMAND: - { - Dump_Items(); - return; - } - - default: - case CMD_REQUEST_USAGE: - { - LOG_INFOF("\nUsage:^3 %s dumpitems", GetProgramCommandPrefix()); - return; - } - } -} - -void GenericCommand_dumpnotifs(float request) -{ - switch(request) - { - case CMD_REQUEST_COMMAND: - { - #ifndef MENUQC - float fh, alsoprint = false; - string filename = argv(1); - - if(filename == "") - { - filename = "notifications_dump.cfg"; - alsoprint = false; - } - else if(filename == "-") - { - filename = "notifications_dump.cfg"; - alsoprint = true; - } - fh = fopen(filename, FILE_WRITE); - - if(fh >= 0) - { - Dump_Notifications(fh, alsoprint); - LOG_INFOF("Dumping notifications... File located in ^2data/data/%s^7.\n", filename); - fclose(fh); - } - else - { - LOG_INFOF("^1Error: ^7Could not open file '%s'!\n", filename); - } - #else - LOG_INFO(_("Notification dump command only works with cl_cmd and sv_cmd.\n")); - #endif - return; - } - - default: - case CMD_REQUEST_USAGE: - { - LOG_INFO(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpnotifs [filename]")); - LOG_INFO(" Where 'filename' is the file to write (default is notifications_dump.cfg),\n"); - LOG_INFO(" if supplied with '-' output to console as well as default,\n"); - LOG_INFO(" 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(); - LOG_INFO(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 - { - LOG_INFO(sprintf("^1Error: ^7Could not open file '%s'!\n", filename)); - } - #else - LOG_INFO(_("Weapons dump command only works with sv_cmd.\n")); - #endif - return; - } - - default: - case CMD_REQUEST_USAGE: - { - LOG_INFO(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpweapons [filename]")); - LOG_INFO(" Where 'filename' is the file to write (default is weapons_dump.cfg),\n"); - LOG_INFO(" if supplied with '-' output to console as well as default,\n"); - LOG_INFO(" if left blank, it will only write to default.\n"); - return; - } - } -} - -void GenericCommand_dumpturrets(float request) -{ - switch(request) - { - case CMD_REQUEST_COMMAND: - { - #ifdef SVQC - tur_config_file = -1; - tur_config_alsoprint = -1; - string filename = argv(1); - - if(filename == "") - { - filename = "turrets_dump.cfg"; - tur_config_alsoprint = FALSE; - } - else if(filename == "-") - { - filename = "turrets_dump.cfg"; - tur_config_alsoprint = TRUE; - } - tur_config_file = fopen(filename, FILE_WRITE); - - if(tur_config_file >= 0) - { - Dump_Turret_Settings(); - LOG_INFO(sprintf("Dumping turrets... File located in ^2data/data/%s^7.\n", filename)); - fclose(tur_config_file); - tur_config_file = -1; - tur_config_alsoprint = -1; - } - else - { - LOG_INFO(sprintf("^1Error: ^7Could not open file '%s'!\n", filename)); - } - #else - LOG_INFO(_("Turrets dump command only works with sv_cmd.\n")); - #endif - return; - } - - default: - case CMD_REQUEST_USAGE: - { - LOG_INFO(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpturrets [filename]")); - LOG_INFO(" Where 'filename' is the file to write (default is turrets_dump.cfg),\n"); - LOG_INFO(" if supplied with '-' output to console as well as default,\n"); - LOG_INFO(" if left blank, it will only write to default.\n"); - return; - } - } -} - void GenericCommand_maplist(float request, float argc) { switch(request) @@ -450,16 +261,9 @@ void GenericCommand_maplist(float request, float argc) { 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); - + string filtered = ""; + FOREACH_WORD(cvar_string("g_maplist"), MapInfo_CheckMap(it), filtered = cons(filtered, it)); + cvar_set("g_maplist", filtered); return; } @@ -571,6 +375,11 @@ void GenericCommand_restartnotifs(float request) case CMD_REQUEST_COMMAND: { #ifndef MENUQC + int NOTIF_ANNCE_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_ANNCE, { ++NOTIF_ANNCE_COUNT; }); + int NOTIF_INFO_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_INFO, { ++NOTIF_INFO_COUNT; }); + int NOTIF_CENTER_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_CENTER, { ++NOTIF_CENTER_COUNT; }); + int NOTIF_MULTI_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_MULTI, { ++NOTIF_MULTI_COUNT; }); + int NOTIF_CHOICE_COUNT = 0; FOREACH(Notifications, it.nent_type == MSG_CHOICE, { ++NOTIF_CHOICE_COUNT; }); LOG_INFOF( strcat( "Restart_Notifications(): Restarting %d notifications... ", @@ -617,9 +426,9 @@ void GenericCommand_settemp(float request, float argc) { float f = cvar_settemp(argv(1), argv(2)); if(f == 1) - LOG_TRACE("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily.\n"); + LOG_TRACE("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily."); else if(f == -1) - LOG_TRACE("Already had a tracker for ", argv(1), ", updating it to \"", argv(2), "\".\n"); + LOG_TRACE("Already had a tracker for ", argv(1), ", updating it to \"", argv(2), "\"."); // else cvar_settemp itself errors out return; @@ -647,9 +456,9 @@ void GenericCommand_settemp_restore(float request, float argc) float i = cvar_settemp_restore(); if(i) - LOG_TRACE("Restored ", ftos(i), " temporary cvar settings to their original values.\n"); + LOG_TRACE("Restored ", ftos(i), " temporary cvar settings to their original values."); else - LOG_TRACE("Nothing to restore.\n"); + LOG_TRACE("Nothing to restore."); return; } @@ -678,7 +487,7 @@ void GenericCommand_runtest(float request, float argc) TEST_Run(argv(i)); } else - TEST_RunAll(); + RUN_ALL_TESTS(); return; } @@ -714,71 +523,46 @@ void GenericCommand_(float request) } */ -// ================================== -// Macro system for server commands -// ================================== - // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;) -#define GENERIC_COMMANDS(request,arguments,command) \ - 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("dumpitems", GenericCommand_dumpitems(request), "Dump all items to the console") \ - GENERIC_COMMAND("dumpnotifs", GenericCommand_dumpnotifs(request), "Dump all notifications into notifications_dump.txt") \ - GENERIC_COMMAND("dumpturrets", GenericCommand_dumpturrets(request), "Dump all turrets into turrets_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") \ - GENERIC_COMMAND("removefromlist", GenericCommand_removefromlist(request, arguments), "Remove a string from a cvar") \ - GENERIC_COMMAND("restartnotifs", GenericCommand_restartnotifs(request), "Re-initialize all notifications") \ - GENERIC_COMMAND("rpn", GenericCommand_rpn(request, arguments, command), "RPN calculator") \ - GENERIC_COMMAND("settemp", GenericCommand_settemp(request, arguments), "Temporarily set a value to a cvar which is restored later") \ - GENERIC_COMMAND("settemp_restore", GenericCommand_settemp_restore(request, arguments), "Restore all cvars set by settemp command") \ - GENERIC_COMMAND("runtest", GenericCommand_runtest(request, arguments), "Run unit tests") \ - /* nothing */ +GENERIC_COMMAND(addtolist, "Add a string to a cvar") { GenericCommand_addtolist(request, arguments); } +GENERIC_COMMAND(maplist, "Automatic control of maplist") { GenericCommand_maplist(request, arguments); } +GENERIC_COMMAND(nextframe, "Execute the given command next frame of this VM") { GenericCommand_nextframe(request, arguments, command); } +GENERIC_COMMAND(qc_curl, "Queries a URL") { GenericCommand_qc_curl(request, arguments); } +GENERIC_COMMAND(removefromlist, "Remove a string from a cvar") { GenericCommand_removefromlist(request, arguments); } +GENERIC_COMMAND(restartnotifs, "Re-initialize all notifications") { GenericCommand_restartnotifs(request); } +GENERIC_COMMAND(rpn, "RPN calculator") { GenericCommand_rpn(request, arguments, command); } +GENERIC_COMMAND(settemp, "Temporarily set a value to a cvar which is restored later") { GenericCommand_settemp(request, arguments); } +GENERIC_COMMAND(settemp_restore, "Restore all cvars set by settemp command") { GenericCommand_settemp_restore(request, arguments); } +GENERIC_COMMAND(runtest, "Run unit tests") { GenericCommand_runtest(request, arguments); } void GenericCommand_macro_help() { - #define GENERIC_COMMAND(name,function,description) \ - { LOG_INFO(" ^2", name, "^7: ", description, "\n"); } - - GENERIC_COMMANDS(0, 0, ""); - #undef GENERIC_COMMAND - - return; + FOREACH(GENERIC_COMMANDS, true, LOG_INFOF(" ^2%s^7: %s\n", it.m_name, it.m_description)); } 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 - + string c = strtolower(argv(0)); + FOREACH(GENERIC_COMMANDS, it.m_name == c, { + it.m_invokecmd(it, CMD_REQUEST_COMMAND, NULL, argc, command); + return true; + }); 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, ""); - #undef GENERIC_COMMAND - + string c = strtolower(argv(1)); + FOREACH(GENERIC_COMMANDS, it.m_name == c, { + it.m_invokecmd(it, CMD_REQUEST_USAGE, NULL, argc, ""); + return true; + }); 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, ""); - #undef GENERIC_COMMAND - - return; + FOREACH(GENERIC_COMMANDS, true, CMD_Write_Alias("qc_cmd_svmenu", it.m_name, it.m_description)); }