X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fbanning.qc;h=9091ae0b783b65953aa4abef156b4e3203ce8040;hp=ab58a4aee39dd12316f935087da74945e8886c6c;hb=77f03e6ce033bef39ac19e0e7cb6e606ffcb26db;hpb=2d2a167c9d4f4ffd8f4234309c936d99e842869b diff --git a/qcsrc/server/command/banning.qc b/qcsrc/server/command/banning.qc index ab58a4aee3..9091ae0b78 100644 --- a/qcsrc/server/command/banning.qc +++ b/qcsrc/server/command/banning.qc @@ -1,3 +1,14 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../../dpdefs/dpextensions.qh" + #include "../../common/util.qh" + #include "../../common/command/shared_defs.qh" + #include "../autocvars.qh" + #include "common.qh" + #include "banning.qh" + #include "../ipban.qh" +#endif // ===================================================== // Banning and kicking command code, written by Samual // Last updated: December 29th, 2011 @@ -14,9 +25,9 @@ void BanCommand_ban(float request, float argc, string command) string ip = argv(1); float reason_arg, bantime; string reason; - - reason_arg = 2; - + + reason_arg = 2; + GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime); GET_BAN_REASON(reason, "No reason provided"); @@ -24,7 +35,7 @@ void BanCommand_ban(float request, float argc, string command) return; } } - + default: print("Incorrect parameters for ^2ban^7\n"); case CMD_REQUEST_USAGE: @@ -48,7 +59,7 @@ void BanCommand_banlist(float request) Ban_View(); return; } - + default: case CMD_REQUEST_USAGE: { @@ -69,29 +80,29 @@ void BanCommand_kickban(float request, float argc, string command) if(argc >= 2) { entity client = GetIndexedEntity(argc, 1); - float accepted = VerifyClientEntity(client, TRUE, FALSE); + float accepted = VerifyKickableEntity(client); float reason_arg, bantime, masksize; string reason; - - if(accepted > 0) + + if(accepted > 0) { - reason_arg = next_token; + reason_arg = next_token; GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime); GET_BAN_ARG(masksize, autocvar_g_ban_default_masksize); GET_BAN_REASON(reason, "No reason provided"); Ban_KickBanClient(client, bantime, masksize, reason); - + return; } else { - print("kickban: ", GetClientErrorString(accepted, argv(1)), ".\n"); + print("kickban: ", GetClientErrorString(accepted, argv(1)), ".\n"); } } } - + default: print("Incorrect parameters for ^2kickban^7\n"); case CMD_REQUEST_USAGE: @@ -107,6 +118,41 @@ void BanCommand_kickban(float request, float argc, string command) } } +void BanCommand_mute(float request, float argc, string command) // TODO: Add a sort of mute-"ban" which allows players to be muted based on IP/cryptokey +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + if(argc >= 2) + { + entity client = GetFilteredEntity(argv(1)); + float accepted = VerifyClientEntity(client, true, false); + + if(accepted > 0) + { + client.muted = true; + return; + } + else + { + print("mute: ", GetClientErrorString(accepted, argv(1)), ".\n"); + } + } + } + + default: + print("Incorrect parameters for ^2mute^7\n"); + case CMD_REQUEST_USAGE: + { + print("\nUsage:^3 sv_cmd mute client\n"); + print(" 'client' is the entity number or name of the player to mute.\n"); + print("See also: ^2unmute^7\n"); + return; + } + } +} + void BanCommand_unban(float request, float argc) { switch(request) @@ -115,11 +161,40 @@ void BanCommand_unban(float request, float argc) { if(argv(1)) { - Ban_Delete(stof(argv(1))); - return; + float tmp_number = -1; + string tmp_string; + + if(substring(argv(1), 0, 1) == "#") + { + tmp_string = substring(argv(1), 1, -1); + + if(tmp_string != "") // is it all one token? like #1 + { + tmp_number = stof(tmp_string); + } + else if(argc > 2) // no, it's two tokens? # 1 + { + tmp_number = stof(argv(2)); + } + else + tmp_number = -1; + } + else // maybe it's ONLY a number? + { + tmp_number = stof(argv(1)); + + if((tmp_number == 0) && (argv(1) != "0")) + { tmp_number = -1; } + } + + if(tmp_number >= 0) + { + Ban_Delete(tmp_number); + return; + } } } - + default: case CMD_REQUEST_USAGE: { @@ -131,6 +206,41 @@ void BanCommand_unban(float request, float argc) } } +void BanCommand_unmute(float request, float argc) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + if(argc >= 2) + { + entity client = GetFilteredEntity(argv(1)); + float accepted = VerifyClientEntity(client, true, false); + + if(accepted > 0) + { + client.muted = false; + return; + } + else + { + print("unmute: ", GetClientErrorString(accepted, argv(1)), ".\n"); + } + } + } + + default: + print("Incorrect parameters for ^2mute^7\n"); + case CMD_REQUEST_USAGE: + { + print("\nUsage:^3 sv_cmd unmute client\n"); + print(" 'client' is the entity number or name of the player to unmute.\n"); + print("See also: ^2mute^7\n"); + return; + } + } +} + /* use this when creating a new command, making sure to place it in alphabetical order... also, ** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION! void BanCommand_(float request) @@ -139,10 +249,10 @@ void BanCommand_(float request) { case CMD_REQUEST_COMMAND: { - + return; } - + default: case CMD_REQUEST_USAGE: { @@ -160,72 +270,72 @@ void BanCommand_(float request) // ================================== // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;) -// but for 0.5 compat, we need "bans" here as it was replaced... REMOVE IT AFTER 0.6 RELEASE!!!! #define BAN_COMMANDS(request,arguments,command) \ BAN_COMMAND("ban", BanCommand_ban(request, arguments, command), "Ban an IP address or a range of addresses (like 1.2.3)") \ BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \ - BAN_COMMAND("bans", BanCommand_banlist(request), "") \ BAN_COMMAND("kickban", BanCommand_kickban(request, arguments, command), "Disconnect a client and ban it at the same time") \ + BAN_COMMAND("mute", BanCommand_mute(request, arguments, command), "Disallow a client from talking by muting them") \ BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \ + BAN_COMMAND("unmute", BanCommand_unmute(request, arguments), "Unmute a client") \ /* nothing */ void BanCommand_macro_help() { #define BAN_COMMAND(name,function,description) \ { if(strtolower(description) != "") { print(" ^2", name, "^7: ", description, "\n"); } } - - BAN_COMMANDS(0, 0, "") + + BAN_COMMANDS(0, 0, ""); #undef BAN_COMMAND - + return; } float BanCommand_macro_command(float argc, string command) { #define BAN_COMMAND(name,function,description) \ - { if(name == strtolower(argv(0))) { function; return TRUE; } } - - BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command) + { if(name == strtolower(argv(0))) { function; return true; } } + + BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command); #undef BAN_COMMAND - - return FALSE; + + return false; } float BanCommand_macro_usage(float argc) { #define BAN_COMMAND(name,function,description) \ - { if(name == strtolower(argv(1))) { function; return TRUE; } } - - BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "") + { if(name == strtolower(argv(1))) { function; return true; } } + + BAN_COMMANDS(CMD_REQUEST_USAGE, argc, ""); #undef BAN_COMMAND - - return FALSE; + + return false; } void BanCommand_macro_write_aliases(float fh) { #define BAN_COMMAND(name,function,description) \ { if(strtolower(description) != "") { CMD_Write_Alias("qc_cmd_sv", name, description); } } - - BAN_COMMANDS(0, 0, "") + + BAN_COMMANDS(0, 0, ""); #undef BAN_COMMAND - + return; } float BanCommand(string command) { float argc = tokenize_console(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(BanCommand_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 } - - return FALSE; -} \ No newline at end of file + + return false; +}