-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;