From: Samual Date: Thu, 29 Dec 2011 03:29:20 +0000 (-0500) Subject: Re-write ban command system X-Git-Tag: xonotic-v0.6.0~188^2~28^2~33 X-Git-Url: http://de.git.xonotic.org/?a=commitdiff_plain;h=469a6a3550983579a99eb3915d943aa64885366c;p=xonotic%2Fxonotic-data.pk3dir.git Re-write ban command system --- diff --git a/qcsrc/common/command/generic.qc b/qcsrc/common/command/generic.qc index 2fa166e97..5d6398c68 100644 --- a/qcsrc/common/command/generic.qc +++ b/qcsrc/common/command/generic.qc @@ -17,6 +17,11 @@ string GetProgramCommandPrefix(void) #endif } + +// ======================= +// Command Sub-Functions +// ======================= + void GenericCommand_addtolist(float request, float argc) { switch(request) @@ -72,7 +77,6 @@ void GenericCommand_dumpcommands(float request) if(fh >= 0) { #ifdef SVQC - CMD_Write("dump of server console commands:\n"); GameCommand_macro_write_aliases(fh); @@ -83,15 +87,12 @@ void GenericCommand_dumpcommands(float request) CommonCommand_macro_write_aliases(fh); CMD_Write("\ndump of ban commands:\n"); - // todo - + 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"); diff --git a/qcsrc/server/command/ipban.qc b/qcsrc/server/command/ipban.qc index 45b7f2197..1d142bff8 100644 --- a/qcsrc/server/command/ipban.qc +++ b/qcsrc/server/command/ipban.qc @@ -1,4 +1,174 @@ -float GameCommand_Ban(string command) +// ===================================================== +// Banning and kicking command code, written by Samual +// Last updated: December 29th, 2011 +// ===================================================== + + +// ======================= +// Command Sub-Functions +// ======================= + +void BanCommand_ban(float request, float argc) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + + return; + } + + default: + case CMD_REQUEST_USAGE: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " ")); + print(" No arguments required.\n"); + return; + } + } +} + +void BanCommand_banlist(float request) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + + return; + } + + default: + case CMD_REQUEST_USAGE: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " ")); + print(" No arguments required.\n"); + return; + } + } +} + +void BanCommand_kickban(float request, float argc) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + + return; + } + + default: + case CMD_REQUEST_USAGE: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " ")); + print(" No arguments required.\n"); + return; + } + } +} + +void BanCommand_unban(float request, float argc) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + + return; + } + + default: + case CMD_REQUEST_USAGE: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " ")); + print(" No arguments required.\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) +{ + switch(request) + { + case CMD_REQUEST_COMMAND: + { + + return; + } + + default: + case CMD_REQUEST_USAGE: + { + print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " ")); + print(" No arguments required.\n"); + return; + } + } +} +*/ + + +// ================================== +// 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 BAN_COMMANDS(request,arguments,command) \ + BAN_COMMAND("ban", BanCommand_ban(request, arguments), "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("kickban", BanCommand_kickban(request, arguments), "Disconnect a client and ban it at the same time") \ + BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \ + /* nothing */ + +void BanCommand_macro_help() +{ + #define BAN_COMMAND(name,function,description) \ + { print(" ^2", name, "^7: ", description, "\n"); } + + 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) + #undef BAN_COMMAND + + 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, "") + #undef BAN_COMMAND + + return FALSE; +} + +void BanCommand_macro_write_aliases(float fh) +{ + #define BAN_COMMAND(name,function,description) \ + { CMD_Write_Alias("qc_cmd_sv", name, description); } + + BAN_COMMANDS(0, 0, "") + #undef BAN_COMMAND + + return; +} + +float BanCommand(string command) { float argc; float bantime; diff --git a/qcsrc/server/command/ipban.qh b/qcsrc/server/command/ipban.qh index 056d5ca6d..30b009944 100644 --- a/qcsrc/server/command/ipban.qh +++ b/qcsrc/server/command/ipban.qh @@ -6,4 +6,7 @@ void Ban_KickBanClient(entity client, float bantime, float masksize, string reason); void Ban_View(); float Ban_Insert(string ip, float bantime, string reason, float dosync); -float Ban_Delete(float i); \ No newline at end of file +float Ban_Delete(float i); + +// used by common/command/generic.qc:GenericCommand_dumpcommands to list all commands into a .txt file +void BanCommand_macro_write_aliases(float fh) \ No newline at end of file diff --git a/qcsrc/server/command/sv_cmd.qc b/qcsrc/server/command/sv_cmd.qc index 6385a78cc..36bea4342 100644 --- a/qcsrc/server/command/sv_cmd.qc +++ b/qcsrc/server/command/sv_cmd.qc @@ -1746,7 +1746,7 @@ void GameCommand(string command) GameCommand_macro_help(); print("\nBanning commands:\n"); - GameCommand_Ban("help"); + BanCommand("help"); print("\nCommon networked commands:\n"); CommonCommand_macro_help(world); @@ -1772,7 +1772,7 @@ void GameCommand(string command) return; } } - else if(GameCommand_Ban(command)) + else if(BanCommand(command)) { return; // handled by server/command/ipban.qc } diff --git a/qcsrc/server/ipban.qh b/qcsrc/server/ipban.qh index 961ca05a8..15939464e 100644 --- a/qcsrc/server/ipban.qh +++ b/qcsrc/server/ipban.qh @@ -1,6 +1,6 @@ void Ban_SaveBans(); void Ban_LoadBans(); float Ban_MaybeEnforceBan(entity client); -float GameCommand_Ban(string command); +float BanCommand(string command); void OnlineBanList_URI_Get_Callback(float id, float status, string data);