- added AddTargetsToMenu2() for using COMMAND_FILTER flags
authorDavid Anderson <dvander@alliedmods.net>
Fri Jan 04 16:05:26 2008 +0000 (2008-01-04)
changeset 18321f97873475e8
parent 1831 af5c93c936d7
child 1833 3bb2c9cb63d2
- added AddTargetsToMenu2() for using COMMAND_FILTER flags
- fixed amb1350 - sm_voteban/menu ban on fake clients would crash
- fake clients can no longer be banned and do not appear on ban menus
core/smn_banning.cpp
plugins/adminmenu.sp
plugins/basebans/ban.sp
plugins/basevotes/voteban.sp
plugins/include/adminmenu.inc
plugins/include/commandfilters.inc
     1.1 --- a/core/smn_banning.cpp	Thu Jan 03 19:40:55 2008 +0000
     1.2 +++ b/core/smn_banning.cpp	Fri Jan 04 16:05:26 2008 +0000
     1.3 @@ -256,6 +256,11 @@
     1.4  		return pContext->ThrowNativeError("Client index %d is invalid", client);
     1.5  	}
     1.6  
     1.7 +	if (pPlayer->IsFakeClient())
     1.8 +	{
     1.9 +		return pContext->ThrowNativeError("Cannot ban fake client %d", client);
    1.10 +	}
    1.11 +
    1.12  	pContext->LocalToString(params[4], &ban_reason);
    1.13  	pContext->LocalToString(params[5], (char **)&kick_message);
    1.14  	pContext->LocalToString(params[6], &ban_cmd);
     2.1 --- a/plugins/adminmenu.sp	Thu Jan 03 19:40:55 2008 +0000
     2.2 +++ b/plugins/adminmenu.sp	Fri Jan 04 16:05:26 2008 +0000
     2.3 @@ -61,6 +61,7 @@
     2.4  {
     2.5  	CreateNative("GetAdminTopMenu", __GetAdminTopMenu);
     2.6  	CreateNative("AddTargetsToMenu", __AddTargetsToMenu);
     2.7 +	CreateNative("AddTargetsToMenu2", __AddTargetsToMenu2);
     2.8  	RegPluginLibrary("adminmenu");
     2.9  	return true;
    2.10  }
    2.11 @@ -181,6 +182,11 @@
    2.12  	return UTIL_AddTargetsToMenu(GetNativeCell(1), GetNativeCell(2), GetNativeCell(3), alive_only);
    2.13  }
    2.14  
    2.15 +public __AddTargetsToMenu2(Handle:plugin, numParams)
    2.16 +{
    2.17 +	return UTIL_AddTargetsToMenu2(GetNativeCell(1), GetNativeCell(2), GetNativeCell(3));
    2.18 +}
    2.19 +
    2.20  public Action:Command_DisplayMenu(client, args)
    2.21  {
    2.22  	if (client == 0)
    2.23 @@ -194,7 +200,7 @@
    2.24  	return Plugin_Handled;
    2.25  }
    2.26  
    2.27 -stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only, bool:alive_only)
    2.28 +stock UTIL_AddTargetsToMenu2(Handle:menu, source_client, flags)
    2.29  {
    2.30  	new max_clients = GetMaxClients();
    2.31  	decl String:user_id[12];
    2.32 @@ -210,17 +216,34 @@
    2.33  			continue;
    2.34  		}
    2.35  		
    2.36 -		if (in_game_only && !IsClientInGame(i))
    2.37 +		PrintToServer("%d, %d, %d", i, flags, IsFakeClient(i));
    2.38 +		
    2.39 +		if (((flags & COMMAND_FILTER_NO_BOTS) == COMMAND_FILTER_NO_BOTS)
    2.40 +			&& IsFakeClient(i))
    2.41 +		{
    2.42 +			continue;
    2.43 +		}
    2.44 +		
    2.45 +		if (((flags & COMMAND_FILTER_CONNECTED) != COMMAND_FILTER_CONNECTED)
    2.46 +			&& !IsClientInGame(i))
    2.47  		{
    2.48  			continue;
    2.49  		}
    2.50  		
    2.51 -		if (alive_only && !IsPlayerAlive(i))
    2.52 +		if (((flags & COMMAND_FILTER_ALIVE) == COMMAND_FILTER_ALIVE) 
    2.53 +			&& !IsPlayerAlive(i))
    2.54  		{
    2.55  			continue;
    2.56  		}
    2.57  		
    2.58 -		if (source_client && !CanUserTarget(source_client, i))
    2.59 +		if (((flags & COMMAND_FILTER_DEAD) == COMMAND_FILTER_DEAD)
    2.60 +			&& IsPlayerAlive(i))
    2.61 +		{
    2.62 +			continue;
    2.63 +		}
    2.64 +		
    2.65 +		if ((source_client && ((flags & COMMAND_FILTER_NO_IMMUNITY) != COMMAND_FILTER_NO_IMMUNITY))
    2.66 +			&& !CanUserTarget(source_client, i))
    2.67  		{
    2.68  			continue;
    2.69  		}
    2.70 @@ -235,3 +258,20 @@
    2.71  	return num_clients;
    2.72  }
    2.73  
    2.74 +stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only, bool:alive_only)
    2.75 +{
    2.76 +	new flags = 0;
    2.77 +	
    2.78 +	if (!in_game_only)
    2.79 +	{
    2.80 +		flags |= COMMAND_FILTER_CONNECTED;
    2.81 +	}
    2.82 +	
    2.83 +	if (alive_only)
    2.84 +	{
    2.85 +		flags |= COMMAND_FILTER_ALIVE;
    2.86 +	}
    2.87 +	
    2.88 +	return UTIL_AddTargetsToMenu2(menu, source_client, flags);
    2.89 +}
    2.90 +
     3.1 --- a/plugins/basebans/ban.sp	Thu Jan 03 19:40:55 2008 +0000
     3.2 +++ b/plugins/basebans/ban.sp	Fri Jan 04 16:05:26 2008 +0000
     3.3 @@ -75,7 +75,7 @@
     3.4  	SetMenuTitle(menu, title);
     3.5  	SetMenuExitBackButton(menu, true);
     3.6  	
     3.7 -	AddTargetsToMenu(menu, client, false, false);
     3.8 +	AddTargetsToMenu2(menu, client, COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_CONNECTED);
     3.9  	
    3.10  	DisplayMenu(menu, client, MENU_TIME_FOREVER);
    3.11  }
     4.1 --- a/plugins/basevotes/voteban.sp	Thu Jan 03 19:40:55 2008 +0000
     4.2 +++ b/plugins/basevotes/voteban.sp	Fri Jan 04 16:05:26 2008 +0000
     4.3 @@ -167,7 +167,7 @@
     4.4  			client,
     4.5  			target_list,
     4.6  			MAXPLAYERS,
     4.7 -			COMMAND_FILTER_NO_MULTI,
     4.8 +			COMMAND_FILTER_NO_MULTI|COMMAND_FILTER_NO_BOTS,
     4.9  			target_name,
    4.10  			sizeof(target_name),
    4.11  			tn_is_ml)) <= 0)
     5.1 --- a/plugins/include/adminmenu.inc	Thu Jan 03 19:40:55 2008 +0000
     5.2 +++ b/plugins/include/adminmenu.inc	Fri Jan 04 16:05:26 2008 +0000
     5.3 @@ -94,7 +94,23 @@
     5.4   * @param alive_only 	True to only select alive players.
     5.5   * @return				Number of clients added.
     5.6   */
     5.7 -native AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only=true, bool:alive_only=false);
     5.8 +native AddTargetsToMenu(Handle:menu, 
     5.9 +						source_client, 
    5.10 +						bool:in_game_only=true, 
    5.11 +						bool:alive_only=false);
    5.12 +
    5.13 +/**
    5.14 + * Adds targets to an admin menu.
    5.15 + *
    5.16 + * Each client is displayed as: name (userid)
    5.17 + * Each item contains the userid as a string for its info.
    5.18 + *
    5.19 + * @param menu			Menu Handle.
    5.20 + * @param source_client	Source client, or 0 to ignore immunity.
    5.21 + * @param flags			COMMAND_FILTER flags from commandfilters.inc.
    5.22 + * @return				Number of clients added.
    5.23 + */
    5.24 +native AddTargetsToMenu2(Handle:menu, source_client, flags);
    5.25  
    5.26  /**
    5.27   * Re-displays the admin menu to a client after selecting an item.
    5.28 @@ -132,5 +148,6 @@
    5.29  {
    5.30  	MarkNativeAsOptional("GetAdminTopMenu");
    5.31  	MarkNativeAsOptional("AddTargetsToMenu");
    5.32 +	MarkNativeAsOptional("AddTargetsToMenu2");
    5.33  }
    5.34  #endif
     6.1 --- a/plugins/include/commandfilters.inc	Thu Jan 03 19:40:55 2008 +0000
     6.2 +++ b/plugins/include/commandfilters.inc	Fri Jan 04 16:05:26 2008 +0000
     6.3 @@ -37,21 +37,21 @@
     6.4  
     6.5  #define MAX_TARGET_LENGTH			64
     6.6  
     6.7 -#define COMMAND_FILTER_ALIVE		(1<<0)		/* Only allow alive players */
     6.8 -#define COMMAND_FILTER_DEAD			(1<<1)		/* Only filter dead players */
     6.9 -#define COMMAND_FILTER_CONNECTED	(1<<2)		/* Allow players not fully in-game */
    6.10 -#define COMMAND_FILTER_NO_IMMUNITY	(1<<3)		/* Ignore immunity rules */
    6.11 -#define COMMAND_FILTER_NO_MULTI		(1<<4)		/* Do not allow multiple target patterns */
    6.12 -#define COMMAND_FILTER_NO_BOTS		(1<<5)		/* Do not allow bots to be targetted */
    6.13 +#define COMMAND_FILTER_ALIVE		(1<<0)		/**< Only allow alive players */
    6.14 +#define COMMAND_FILTER_DEAD			(1<<1)		/**< Only filter dead players */
    6.15 +#define COMMAND_FILTER_CONNECTED	(1<<2)		/**< Allow players not fully in-game */
    6.16 +#define COMMAND_FILTER_NO_IMMUNITY	(1<<3)		/**< Ignore immunity rules */
    6.17 +#define COMMAND_FILTER_NO_MULTI		(1<<4)		/**< Do not allow multiple target patterns */
    6.18 +#define COMMAND_FILTER_NO_BOTS		(1<<5)		/**< Do not allow bots to be targetted */
    6.19  
    6.20 -#define COMMAND_TARGET_NONE			0			/* No target was found */
    6.21 -#define COMMAND_TARGET_NOT_ALIVE	-1			/* Single client is not alive */
    6.22 -#define COMMAND_TARGET_NOT_DEAD		-2			/* Single client is not dead */
    6.23 -#define COMMAND_TARGET_NOT_IN_GAME	-3			/* Single client is not in game */
    6.24 -#define COMMAND_TARGET_IMMUNE		-4			/* Single client is immune */
    6.25 -#define COMMAND_TARGET_EMPTY_FILTER	-5			/* A multi-filter (such as @all) had no targets */
    6.26 -#define COMMAND_TARGET_NOT_HUMAN	-6			/* Target was not human */
    6.27 -#define COMMAND_TARGET_AMBIGUOUS	-7			/* Partial name had too many targets */
    6.28 +#define COMMAND_TARGET_NONE			0			/**< No target was found */
    6.29 +#define COMMAND_TARGET_NOT_ALIVE	-1			/**< Single client is not alive */
    6.30 +#define COMMAND_TARGET_NOT_DEAD		-2			/**< Single client is not dead */
    6.31 +#define COMMAND_TARGET_NOT_IN_GAME	-3			/**< Single client is not in game */
    6.32 +#define COMMAND_TARGET_IMMUNE		-4			/**< Single client is immune */
    6.33 +#define COMMAND_TARGET_EMPTY_FILTER	-5			/**< A multi-filter (such as @all) had no targets */
    6.34 +#define COMMAND_TARGET_NOT_HUMAN	-6			/**< Target was not human */
    6.35 +#define COMMAND_TARGET_AMBIGUOUS	-7			/**< Partial name had too many targets */
    6.36  
    6.37  /**
    6.38   * Processes a generic command target string, and resolves it to a list