- 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
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