X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fcommand%2Fgeneric.qc;h=d0cd7a3042cd1e993522c1377ff52864bdbbeaeb;hb=97e0c02d47dbc3b979671a295f1c25a21f76cb37;hp=61977f6787f6cb2231b19b076c6bdd7d75f5260c;hpb=126cc8be2d7e6cb2a7d75b6e5a2087ee3f8af58f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/command/generic.qc b/qcsrc/common/command/generic.qc index 61977f678..d0cd7a304 100644 --- a/qcsrc/common/command/generic.qc +++ b/qcsrc/common/command/generic.qc @@ -1,5 +1,5 @@ // ========================================================= -// Generic program common command code, reworked by Samual +// Generic program common command code, written by Samual // Last updated: December 28th, 2011 // ========================================================= @@ -17,6 +17,11 @@ string GetProgramCommandPrefix(void) #endif } + +// ======================= +// Command Sub-Functions +// ======================= + void GenericCommand_addtolist(float request, float argc) { switch(request) @@ -27,30 +32,89 @@ void GenericCommand_addtolist(float request, float argc) if(argc >= 2) { - if(cvar_string(argv(1)) == "") // cvar was empty + string original_cvar = argv(1); + string tmp_string = argv(2); + + if(cvar_string(original_cvar) == "") // cvar was empty { - cvar_set(argv(1), argv(2)); + cvar_set(original_cvar, tmp_string); } else // add it to the end of the list if the list doesn't already have it { - argc = tokenizebyseparator(cvar_string(argv(1)), " "); + argc = tokenizebyseparator(cvar_string(original_cvar), " "); + for(i = 0; i < argc; ++i) - if(argv(i) == argv(2)) + if(argv(i) == tmp_string) return; // already in list - cvar_set(argv(1), strcat(argv(2), " ", cvar_string(argv(1)))); + cvar_set(original_cvar, strcat(tmp_string, " ", cvar_string(original_cvar))); } return; } } default: - // todo + print("Incorrect parameters for ^2addtolist^7\n"); case CMD_REQUEST_USAGE: { - print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " addtolist variable [value]")); - print(" Where 'variable' is what to add to the list,\n"); - print(" and 'value' is any extra optional paramaters to add with quotes."); + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " addtolist variable value")); + print(" Where 'variable' is what to add 'value' to.\n"); + print("See also: ^2removefromlist^7\n"); + return; + } + } +} + +void GenericCommand_dumpcommands(float request) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + 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 + { + print("^1Error: ^7Could not dump to file!\n"); + } + return; + } + + default: + case CMD_REQUEST_USAGE: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpcommands")); + print(" No arguments required.\n"); return; } } @@ -87,6 +151,22 @@ void GenericCommand_maplist(float request, float argc) 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"), " "); + + 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) @@ -110,32 +190,77 @@ void GenericCommand_maplist(float request, float argc) cvar_set("g_maplist", shufflewords(cvar_string("g_maplist"))); return; } - - 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"), " "); - - 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; - } default: break; } } default: + print("Incorrect parameters for ^2maplist^7\n"); case CMD_REQUEST_USAGE: { - print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " maplist command [map]")); // todo - print(" No arguments required.\n"); + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " maplist action [map]")); + print(" Where 'action' is the command to complete,\n"); + print(" and 'map' is what it acts upon (if required).\n"); + print(" Full list of commands here: \"add, cleanup, remove, shuffle.\"\n"); + return; + } + } +} + +void GenericCommand_nextframe(float request, float arguments, string command) +{ + switch(request) + { + case CMD_REQUEST_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: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " nextframe command...")); + print(" Where command will be executed next frame of this VM\n"); + return; + } + } +} + +void GenericCommand_removefromlist(float request, float argc) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + if(argc == 3) + { + float i; + string original_cvar = argv(1); + string removal = argv(2); + string tmp_string; + + argc = tokenizebyseparator(cvar_string(original_cvar), " "); + + 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: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " removefromlist variable value")); + print(" Where 'variable' is what cvar to remove 'value' from.\n"); + print("See also: ^2addtolist^7\n"); return; } } @@ -164,6 +289,7 @@ void GenericCommand_settemp(float request, float argc) { print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " settemp \"cvar\" \"arguments\"\n")); print(" Where 'cvar' is the cvar you want to temporarily set with 'arguments'.\n"); + print("See also: ^2settemp_restore^7\n"); return; } } @@ -190,6 +316,7 @@ void GenericCommand_settemp_restore(float request, float argc) { print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " settemp_restore\n")); print(" No arguments required.\n"); + print("See also: ^2settemp^7\n"); return; } } @@ -210,7 +337,7 @@ void GenericCommand_(float request) default: case CMD_REQUEST_USAGE: { - print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "))); + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " ")); print(" No arguments required.\n"); return; } @@ -224,8 +351,11 @@ void GenericCommand_(float request) // 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 at the end of a list") \ + 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("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("removefromlist", GenericCommand_removefromlist(request, arguments), "Remove a string from a cvar") \ 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") \ @@ -263,6 +393,17 @@ float GenericCommand_macro_usage(float argc) 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; +} // ===========================================