+#if defined(CSQC)
+#elif defined(MENUQC)
+#elif defined(SVQC)
+ #include "../../dpdefs/dpextensions.qh"
+ #include "../../common/util.qh"
+ #include "../../common/command/shared_defs.qh"
+ #include "../autocvars.qh"
+ #include "common.qh"
+ #include "banning.qh"
+ #include "../ipban.qh"
+#endif
// =====================================================
// Banning and kicking command code, written by Samual
// Last updated: December 29th, 2011
string ip = argv(1);
float reason_arg, bantime;
string reason;
-
- reason_arg = 2;
-
+
+ reason_arg = 2;
+
GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime);
GET_BAN_REASON(reason, "No reason provided");
return;
}
}
-
+
default:
print("Incorrect parameters for ^2ban^7\n");
case CMD_REQUEST_USAGE:
Ban_View();
return;
}
-
+
default:
case CMD_REQUEST_USAGE:
{
if(argc >= 2)
{
entity client = GetIndexedEntity(argc, 1);
- float accepted = VerifyClientEntity(client, TRUE, FALSE);
+ float accepted = VerifyKickableEntity(client);
float reason_arg, bantime, masksize;
string reason;
-
- if(accepted > 0)
+
+ if(accepted > 0)
{
- reason_arg = next_token;
+ 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");
+ print("kickban: ", GetClientErrorString(accepted, argv(1)), ".\n");
}
}
}
-
+
default:
print("Incorrect parameters for ^2kickban^7\n");
case CMD_REQUEST_USAGE:
}
}
+void BanCommand_mute(float request, float argc, string command) // TODO: Add a sort of mute-"ban" which allows players to be muted based on IP/cryptokey
+{
+ switch(request)
+ {
+ case CMD_REQUEST_COMMAND:
+ {
+ if(argc >= 2)
+ {
+ entity client = GetFilteredEntity(argv(1));
+ float accepted = VerifyClientEntity(client, true, false);
+
+ if(accepted > 0)
+ {
+ client.muted = true;
+ return;
+ }
+ else
+ {
+ print("mute: ", GetClientErrorString(accepted, argv(1)), ".\n");
+ }
+ }
+ }
+
+ default:
+ print("Incorrect parameters for ^2mute^7\n");
+ case CMD_REQUEST_USAGE:
+ {
+ print("\nUsage:^3 sv_cmd mute client\n");
+ print(" 'client' is the entity number or name of the player to mute.\n");
+ print("See also: ^2unmute^7\n");
+ return;
+ }
+ }
+}
+
void BanCommand_unban(float request, float argc)
{
switch(request)
{
case CMD_REQUEST_COMMAND:
- {
+ {
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 // maybe it's ONLY a number?
{
tmp_number = stof(argv(1));
-
+
if((tmp_number == 0) && (argv(1) != "0"))
{ tmp_number = -1; }
}
}
}
}
-
+
default:
case CMD_REQUEST_USAGE:
{
}
}
+void BanCommand_unmute(float request, float argc)
+{
+ switch(request)
+ {
+ case CMD_REQUEST_COMMAND:
+ {
+ if(argc >= 2)
+ {
+ entity client = GetFilteredEntity(argv(1));
+ float accepted = VerifyClientEntity(client, true, false);
+
+ if(accepted > 0)
+ {
+ client.muted = false;
+ return;
+ }
+ else
+ {
+ print("unmute: ", GetClientErrorString(accepted, argv(1)), ".\n");
+ }
+ }
+ }
+
+ default:
+ print("Incorrect parameters for ^2mute^7\n");
+ case CMD_REQUEST_USAGE:
+ {
+ print("\nUsage:^3 sv_cmd unmute client\n");
+ print(" 'client' is the entity number or name of the player to unmute.\n");
+ print("See also: ^2mute^7\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)
{
case CMD_REQUEST_COMMAND:
{
-
+
return;
}
-
+
default:
case CMD_REQUEST_USAGE:
{
// ==================================
// 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, 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("bans", BanCommand_banlist(request), "") \
BAN_COMMAND("kickban", BanCommand_kickban(request, arguments, command), "Disconnect a client and ban it at the same time") \
+ BAN_COMMAND("mute", BanCommand_mute(request, arguments, command), "Disallow a client from talking by muting them") \
BAN_COMMAND("unban", BanCommand_unban(request, arguments), "Remove an existing ban") \
+ BAN_COMMAND("unmute", BanCommand_unmute(request, arguments), "Unmute a client") \
/* nothing */
void BanCommand_macro_help()
{
#define BAN_COMMAND(name,function,description) \
{ if(strtolower(description) != "") { print(" ^2", name, "^7: ", description, "\n"); } }
-
- BAN_COMMANDS(0, 0, "")
+
+ 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)
+ { if(name == strtolower(argv(0))) { function; return true; } }
+
+ BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command);
#undef BAN_COMMAND
-
- return FALSE;
+
+ 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, "")
+ { if(name == strtolower(argv(1))) { function; return true; } }
+
+ BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "");
#undef BAN_COMMAND
-
- return FALSE;
+
+ return false;
}
void BanCommand_macro_write_aliases(float fh)
{
#define BAN_COMMAND(name,function,description) \
{ if(strtolower(description) != "") { CMD_Write_Alias("qc_cmd_sv", name, description); } }
-
- BAN_COMMANDS(0, 0, "")
+
+ BAN_COMMANDS(0, 0, "");
#undef BAN_COMMAND
-
+
return;
}
float BanCommand(string command)
{
float argc = tokenize_console(command);
-
+
// Guide for working with argc arguments by example:
// argc: 1 - 2 - 3 - 4
- // argv: 0 - 1 - 2 - 3
+ // argv: 0 - 1 - 2 - 3
// cmd vote - master - login - password
if(BanCommand_macro_command(argc, command)) // continue as usual and scan for normal commands
{
- return TRUE; // handled by one of the above GenericCommand_* functions
+ return true; // handled by one of the above GenericCommand_* functions
}
-
- return FALSE;
+
+ return false;
}