1 // =====================================================
2 // Banning and kicking command code, written by Samual
3 // Last updated: December 29th, 2011
4 // =====================================================
6 void BanCommand_ban(float request, float argc)
10 case CMD_REQUEST_COMMAND:
17 case CMD_REQUEST_USAGE:
19 print("\nUsage:^3 sv_cmd ");
20 print(" No arguments required.\n");
26 void BanCommand_banlist(float request)
30 case CMD_REQUEST_COMMAND:
37 case CMD_REQUEST_USAGE:
39 print("\nUsage:^3 sv_cmd ");
40 print(" No arguments required.\n");
46 void BanCommand_kickban(float request, float argc)
50 case CMD_REQUEST_COMMAND:
57 case CMD_REQUEST_USAGE:
59 print("\nUsage:^3 sv_cmd ");
60 print(" No arguments required.\n");
66 void BanCommand_unban(float request, float argc)
70 case CMD_REQUEST_COMMAND:
77 case CMD_REQUEST_USAGE:
79 print("\nUsage:^3 sv_cmd ");
80 print(" No arguments required.\n");
86 /* use this when creating a new command, making sure to place it in alphabetical order... also,
87 ** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION!
88 void BanCommand_(float request)
92 case CMD_REQUEST_COMMAND:
99 case CMD_REQUEST_USAGE:
101 print("\nUsage:^3 sv_cmd ");
102 print(" No arguments required.\n");
110 // ==================================
111 // Macro system for server commands
112 // ==================================
114 // Do not hard code aliases for these, instead create them in commands.cfg... also: keep in alphabetical order, please ;)
115 #define BAN_COMMANDS(request,arguments,command) \
116 BAN_COMMAND("ban", BanCommand_ban(request, arguments), "Ban an IP address or a range of addresses (like 1.2.3)") \
117 BAN_COMMAND("banlist", BanCommand_banlist(request), "List all existing bans") \
118 BAN_COMMAND("kickban", BanCommand_kickban(request, arguments), "Disconnect a client and ban it at the same time") \
119 BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
122 void BanCommand_macro_help()
124 #define BAN_COMMAND(name,function,description) \
125 { print(" ^2", name, "^7: ", description, "\n"); }
127 BAN_COMMANDS(0, 0, "")
133 float BanCommand_macro_command(float argc, string command)
135 #define BAN_COMMAND(name,function,description) \
136 { if(name == strtolower(argv(0))) { function; return TRUE; } }
138 BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
144 float BanCommand_macro_usage(float argc)
146 #define BAN_COMMAND(name,function,description) \
147 { if(name == strtolower(argv(1))) { function; return TRUE; } }
149 BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "")
155 void BanCommand_macro_write_aliases(float fh)
157 #define BAN_COMMAND(name,function,description) \
158 { CMD_Write_Alias("qc_cmd_sv", name, description); }
160 BAN_COMMANDS(0, 0, "")
166 float BanCommand(string command)
176 argc = tokenize_console(command);
177 if(argv(0) == "help")
179 print(" kickban # n m p reason - kickban player n for m seconds, using mask size p (1 to 4)\n");
180 print(" ban ip m reason - ban an IP or range (incomplete IP, like 1.2.3) for m seconds\n");
181 print(" bans - list all existing bans\n");
182 print(" unban n - delete the entry #n from the bans list\n");
185 if(argv(0) == "kickban")
187 #define INITARG(c) reasonarg = c
188 #define GETARG(v,d) if((argc > reasonarg) && ((v = stof(argv(reasonarg))) != 0)) ++reasonarg; else v = d
189 #define RESTARG(v) if(argc > reasonarg) v = substring(command, argv_start_index(reasonarg), strlen(command) - argv_start_index(reasonarg)); else v = ""
192 entno = stof(argv(2));
193 if(entno > maxclients || entno < 1)
195 client = edict_num(entno);
198 GETARG(bantime, autocvar_g_ban_default_bantime);
199 GETARG(masksize, autocvar_g_ban_default_masksize);
202 Ban_KickBanClient(client, bantime, masksize, reason);
206 else if(argv(0) == "ban")
214 GETARG(bantime, autocvar_g_ban_default_bantime);
217 Ban_Insert(ip, bantime, reason, 1);
224 else if(argv(0) == "bans")
229 else if(argv(0) == "unban")