// Last updated: December 29th, 2011
// =====================================================
-void BanCommand_ban(float request, float argc)
+void BanCommand_ban(float request, float argc, string command)
{
switch(request)
{
case CMD_REQUEST_COMMAND:
{
-
- return;
+ if(argc >= 2)
+ {
+ string ip = argv(1);
+ float reason_arg, bantime;
+ string reason;
+
+ reason_arg = 2;
+
+ GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime);
+ GET_BAN_REASON(reason, "No reason provided");
+
+ Ban_Insert(ip, bantime, reason, 1);
+ return;
+ }
}
default:
+ print("Incorrect parameters for ^2ban^7\n");
case CMD_REQUEST_USAGE:
{
- print("\nUsage:^3 sv_cmd ");
- print(" No arguments required.\n");
+ print("\nUsage:^3 sv_cmd ban address [bantime] [reason]\n");
+ print(" 'address' is the IP address or range of the player to ban,\n");
+ print(" 'bantime' is the amount of time that the ban is active (default if not provided),\n");
+ print(" and 'reason' is the string to label the ban with as reason for banning.\n");
+ print("See also: ^2banlist, kickban, unban^7\n");
return;
}
}
{
case CMD_REQUEST_COMMAND:
{
-
+ Ban_View();
return;
}
default:
case CMD_REQUEST_USAGE:
{
- print("\nUsage:^3 sv_cmd ");
+ print("\nUsage:^3 sv_cmd banlist\n");
print(" No arguments required.\n");
+ print("See also: ^2ban, kickban, unban^7\n");
return;
}
}
}
-void BanCommand_kickban(float request, float argc)
+void BanCommand_kickban(float request, float argc, string command)
{
switch(request)
{
case CMD_REQUEST_COMMAND:
{
-
- return;
+ if(argc >= 2)
+ {
+ entity client = GetIndexedEntity(argc, 1);
+ float accepted = VerifyClientEntity(client, TRUE, FALSE);
+ float reason_arg, bantime, masksize;
+ string reason;
+
+ if(accepted > 0)
+ {
+ 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");
+ }
+ }
}
default:
+ print("Incorrect parameters for ^2kickban^7\n");
case CMD_REQUEST_USAGE:
{
- print("\nUsage:^3 sv_cmd ");
- print(" No arguments required.\n");
+ print("\nUsage:^3 sv_cmd kickban client [bantime] [masksize] [reason]\n");
+ print(" 'client' is the entity number or name of the player to ban,\n");
+ print(" 'bantime' is the amount of time that the ban is active (default if not provided),\n");
+ print(" 'masksize' is the range of the IP address (1-thru-4, default if not provided),\n");
+ print(" and 'reason' is the string to label the ban with as reason for banning.\n");
+ print("See also: ^2ban, banlist, unban^7\n");
return;
}
}
switch(request)
{
case CMD_REQUEST_COMMAND:
- {
-
- return;
+ {
+ if(argv(1))
+ {
+ 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:
{
- print("\nUsage:^3 sv_cmd ");
- print(" No arguments required.\n");
+ print("\nUsage:^3 sv_cmd unban banid\n");
+ print(" Where 'banid' is the ID of the ban of which to remove.\n");
+ print("See also: ^2ban, banlist, kickban^7\n");
return;
}
}
default:
case CMD_REQUEST_USAGE:
{
- print("\nUsage:^3 sv_cmd ");
+ print("\nUsage:^3 sv_cmd \n");
print(" No arguments required.\n");
return;
}
// ==================================
// 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), "Ban an IP address or a range of addresses (like 1.2.3)") \
+ 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("kickban", BanCommand_kickban(request, arguments), "Disconnect a client and ban it at the same time") \
+ 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("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"); }
+ { if(strtolower(description) != "") { print(" ^2", name, "^7: ", description, "\n"); } }
BAN_COMMANDS(0, 0, "")
#undef BAN_COMMAND
void BanCommand_macro_write_aliases(float fh)
{
#define BAN_COMMAND(name,function,description) \
- { CMD_Write_Alias("qc_cmd_sv", name, description); }
+ { if(strtolower(description) != "") { CMD_Write_Alias("qc_cmd_sv", name, description); } }
BAN_COMMANDS(0, 0, "")
#undef BAN_COMMAND
float BanCommand(string command)
{
- float argc;
- float bantime;
- entity client;
- float entno;
- float masksize;
- string reason;
- float reasonarg;
-
- argc = tokenize_console(command);
- if(argv(0) == "help")
- {
- print(" kickban # n m p reason - kickban player n for m seconds, using mask size p (1 to 4)\n");
- print(" ban ip m reason - ban an IP or range (incomplete IP, like 1.2.3) for m seconds\n");
- print(" bans - list all existing bans\n");
- print(" unban n - delete the entry #n from the bans list\n");
- return TRUE;
- }
- if(argv(0) == "kickban")
- {
-#define INITARG(c) reasonarg = c
-#define GETARG(v,d) if((argc > reasonarg) && ((v = stof(argv(reasonarg))) != 0)) ++reasonarg; else v = d
-#define RESTARG(v) if(argc > reasonarg) v = substring(command, argv_start_index(reasonarg), strlen(command) - argv_start_index(reasonarg)); else v = ""
- if(argc >= 3)
- {
- entno = stof(argv(2));
- if(entno > maxclients || entno < 1)
- return TRUE;
- client = edict_num(entno);
-
- INITARG(3);
- GETARG(bantime, autocvar_g_ban_default_bantime);
- GETARG(masksize, autocvar_g_ban_default_masksize);
- RESTARG(reason);
-
- Ban_KickBanClient(client, bantime, masksize, reason);
- return TRUE;
- }
- }
- else if(argv(0) == "ban")
- {
- if(argc >= 2)
- {
- string ip;
- ip = argv(1);
-
- INITARG(2);
- GETARG(bantime, autocvar_g_ban_default_bantime);
- RESTARG(reason);
+ float argc = tokenize_console(command);
+
+ // Guide for working with argc arguments by example:
+ // argc: 1 - 2 - 3 - 4
+ // argv: 0 - 1 - 2 - 3
+ // cmd vote - master - login - password
- Ban_Insert(ip, bantime, reason, 1);
- return TRUE;
- }
-#undef INITARG
-#undef GETARG
-#undef RESTARG
- }
- else if(argv(0) == "bans")
- {
- Ban_View();
- return TRUE;
- }
- else if(argv(0) == "unban")
+ if(BanCommand_macro_command(argc, command)) // continue as usual and scan for normal commands
{
- if(argc >= 2)
- {
- float who;
- who = stof(argv(1));
- Ban_Delete(who);
- return TRUE;
- }
+ return TRUE; // handled by one of the above GenericCommand_* functions
}
+
return FALSE;
-}
\ No newline at end of file
+}