1 // =====================================================
2 // Banning and kicking command code, written by Samual
3 // Last updated: December 29th, 2011
4 // =====================================================
7 // =======================
8 // Command Sub-Functions
9 // =======================
11 void BanCommand_ban(float request, float argc)
15 case CMD_REQUEST_COMMAND:
22 case CMD_REQUEST_USAGE:
24 print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
25 print(" No arguments required.\n");
31 void BanCommand_banlist(float request)
35 case CMD_REQUEST_COMMAND:
42 case CMD_REQUEST_USAGE:
44 print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
45 print(" No arguments required.\n");
51 void BanCommand_kickban(float request, float argc)
55 case CMD_REQUEST_COMMAND:
62 case CMD_REQUEST_USAGE:
64 print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
65 print(" No arguments required.\n");
71 void BanCommand_unban(float request, float argc)
75 case CMD_REQUEST_COMMAND:
82 case CMD_REQUEST_USAGE:
84 print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
85 print(" No arguments required.\n");
91 /* use this when creating a new command, making sure to place it in alphabetical order... also,
92 ** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION!
93 void BanCommand_(float request)
97 case CMD_REQUEST_COMMAND:
104 case CMD_REQUEST_USAGE:
106 print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " "));
107 print(" No arguments required.\n");
115 // ==================================
116 // Macro system for server commands
117 // ==================================
119 // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
120 #define BAN_COMMANDS(request,arguments,command) \
121 BAN_COMMAND("ban", BanCommand_ban(request, arguments), "Ban an IP address or a range of addresses (like 1.2.3)") \
122 BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \
123 BAN_COMMAND("kickban", BanCommand_kickban(request, arguments), "Disconnect a client and ban it at the same time") \
124 BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
127 void BanCommand_macro_help()
129 #define BAN_COMMAND(name,function,description) \
130 { print(" ^2", name, "^7: ", description, "\n"); }
132 BAN_COMMANDS(0, 0, "")
138 float BanCommand_macro_command(float argc, string command)
140 #define BAN_COMMAND(name,function,description) \
141 { if(name == strtolower(argv(0))) { function; return TRUE; } }
143 BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
149 float BanCommand_macro_usage(float argc)
151 #define BAN_COMMAND(name,function,description) \
152 { if(name == strtolower(argv(1))) { function; return TRUE; } }
154 BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "")
160 void BanCommand_macro_write_aliases(float fh)
162 #define BAN_COMMAND(name,function,description) \
163 { CMD_Write_Alias("qc_cmd_sv", name, description); }
165 BAN_COMMANDS(0, 0, "")
171 float BanCommand(string command)
181 argc = tokenize_console(command);
182 if(argv(0) == "help")
184 print(" kickban # n m p reason - kickban player n for m seconds, using mask size p (1 to 4)\n");
185 print(" ban ip m reason - ban an IP or range (incomplete IP, like 1.2.3) for m seconds\n");
186 print(" bans - list all existing bans\n");
187 print(" unban n - delete the entry #n from the bans list\n");
190 if(argv(0) == "kickban")
192 #define INITARG(c) reasonarg = c
193 #define GETARG(v,d) if((argc > reasonarg) && ((v = stof(argv(reasonarg))) != 0)) ++reasonarg; else v = d
194 #define RESTARG(v) if(argc > reasonarg) v = substring(command, argv_start_index(reasonarg), strlen(command) - argv_start_index(reasonarg)); else v = ""
197 entno = stof(argv(2));
198 if(entno > maxclients || entno < 1)
200 client = edict_num(entno);
203 GETARG(bantime, autocvar_g_ban_default_bantime);
204 GETARG(masksize, autocvar_g_ban_default_masksize);
207 Ban_KickBanClient(client, bantime, masksize, reason);
211 else if(argv(0) == "ban")
219 GETARG(bantime, autocvar_g_ban_default_bantime);
222 Ban_Insert(ip, bantime, reason, 1);
229 else if(argv(0) == "bans")
234 else if(argv(0) == "unban")