r5215 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Dec 14 13:50:09 EST 2008


Author: div0
Date: 2008-12-14 13:50:08 -0500 (Sun, 14 Dec 2008)
New Revision: 5215

Modified:
   trunk/data/qcsrc/server/ipban.qc
Log:
hopefulyl working kickban parsing with optional ban duration now


Modified: trunk/data/qcsrc/server/ipban.qc
===================================================================
--- trunk/data/qcsrc/server/ipban.qc	2008-12-14 18:37:13 UTC (rev 5214)
+++ trunk/data/qcsrc/server/ipban.qc	2008-12-14 18:50:08 UTC (rev 5215)
@@ -388,11 +388,14 @@
 	FOR_EACH_REALCLIENT(e)
 		if(Ban_IsClientBanned(e, i))
 		{
-			if(s == "")
-				reason = strcat(reason, ": affects ");
-			else
-				reason = strcat(reason, ", ");
-			reason = strcat(reason, e.netname);
+			if(reason != "")
+			{
+				if(s == "")
+					reason = strcat(reason, ": affects ");
+				else
+					reason = strcat(reason, ", ");
+				reason = strcat(reason, e.netname);
+			}
 			s = strcat(s, "^1NOTE:^7 banned client ", e.netname, "^7 has to go\n");
 			dropclient(e);
 		}
@@ -447,36 +450,34 @@
 	float entno;
 	float masksize;
 	string reason;
+	float reasonarg;
 
 	argc = tokenize_sane(command);
 	if(argv(0) == "help")
 	{
-		print("  kickban # n m p - kickban player n for m seconds, using mask size p (1 to 4)\n");
-		print("  ban ip m - ban an IP or range (incomplete IP, like 1.2.3) for m seconds\n");
+		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);
-			if(argc >= 4)
-				bantime = stof(argv(3));
-			else
-				bantime = cvar("g_ban_default_bantime");
-			if(argc >= 5)
-				masksize = stof(argv(4));
-			else
-				masksize = cvar("g_ban_default_masksize");
-			if(argc >= 6)
-				reason = substring(command, argv_start_index(5), strlen(command) - argv_start_index(5));
-			else
-				reason = "";
+
+			INITARG(3);
+			GETARG(bantime, cvar("g_ban_default_bantime"));
+			GETARG(masksize, cvar("g_ban_default_masksize"));
+			RESTARG(reason);
+
 			Ban_KickBanClient(client, bantime, masksize, reason);
 			return TRUE;
 		}
@@ -487,17 +488,17 @@
 		{
 			string ip;
 			ip = argv(1);
-			if(argc >= 3)
-				bantime = stof(argv(2));
-			else
-				bantime = cvar("g_ban_default_bantime");
-			if(argc >= 4)
-				reason = substring(command, argv_start_index(3), strlen(command) - argv_start_index(3));
-			else
-				reason = "";
+
+			INITARG(2);
+			GETARG(bantime, cvar("g_ban_default_bantime"));
+			RESTARG(reason);
+
 			Ban_Insert(ip, bantime, reason, 1);
 			return TRUE;
 		}
+#undef INITARG
+#undef GETARG
+#undef RESTARG
 	}
 	else if(argv(0) == "bans")
 	{




More information about the nexuiz-commits mailing list