diff --git a/plugins/adminmenu.sp b/plugins/adminmenu.sp index 99760f5f5..27040b080 100644 --- a/plugins/adminmenu.sp +++ b/plugins/adminmenu.sp @@ -54,6 +54,7 @@ new Handle:hAdminMenu = INVALID_HANDLE; /* Top menu objects */ new TopMenuObject:obj_playercmds = INVALID_TOPMENUOBJECT; +new TopMenuObject:obj_servercmds = INVALID_TOPMENUOBJECT; public bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max) { @@ -82,6 +83,12 @@ public OnAllPluginsLoaded() TopMenuObject_Category, CategoryHandler, INVALID_TOPMENUOBJECT); + + obj_servercmds = AddToTopMenu(hAdminMenu, + "ServerCommands", + TopMenuObject_Category, + CategoryHandler, + INVALID_TOPMENUOBJECT); Call_StartForward(hOnAdminMenuCreated); Call_PushCell(hAdminMenu); @@ -109,6 +116,10 @@ public CategoryHandler(Handle:topmenu, { Format(buffer, maxlength, "%T:", "Player Commands", param); } + else if (object_id == obj_servercmds) + { + Format(buffer, maxlength, "%T:", "Server Commands", param); + } } else if (action == TopMenuAction_DrawOption) { @@ -116,6 +127,10 @@ public CategoryHandler(Handle:topmenu, { Format(buffer, maxlength, "%T", "Player Commands", param); } + else if (object_id == obj_servercmds) + { + Format(buffer, maxlength, "%T", "Server Commands", param); + } return ITEMDRAW_DEFAULT; } @@ -174,3 +189,4 @@ stock UTIL_AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only) return num_clients; } + diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp index 2cc119bc6..0e9c2ae80 100644 --- a/plugins/basecommands.sp +++ b/plugins/basecommands.sp @@ -49,6 +49,7 @@ public Plugin:myinfo = new Handle:hTopMenu = INVALID_HANDLE; #include "basecommands/kick.sp" +#include "basecommands/reloadadmins.sp" public OnPluginStart() { @@ -95,6 +96,19 @@ public OnAdminMenuReady(Handle:topmenu) "sm_kick", ADMFLAG_KICK); } + + new TopMenuObject:server_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_SERVERCOMMANDS); + + if (server_commands != INVALID_TOPMENUOBJECT) + { + AddToTopMenu(hTopMenu, + "Reload Admins", + TopMenuObject_Item, + AdminMenu_ReloadAdmins, + server_commands, + "sm_reloadadmins", + ADMFLAG_BAN); + } } public OnLibraryRemoved(const String:name[]) @@ -105,18 +119,6 @@ public OnLibraryRemoved(const String:name[]) } } -public Action:Command_ReloadAdmins(client, args) -{ - /* Dump it all! */ - DumpAdminCache(AdminCache_Groups, true); - DumpAdminCache(AdminCache_Overrides, true); - - LogAction(client, -1, "\"%L\" refreshed the admin cache.", client); - ReplyToCommand(client, "[SM] %t", "Admin cache refreshed"); - - return Plugin_Handled; -} - #define FLAG_STRINGS 14 new String:g_FlagNames[FLAG_STRINGS][20] = { diff --git a/plugins/basecommands/reloadadmins.sp b/plugins/basecommands/reloadadmins.sp new file mode 100644 index 000000000..61fb4c544 --- /dev/null +++ b/plugins/basecommands/reloadadmins.sp @@ -0,0 +1,37 @@ + +PerformReloadAdmins(client) +{ + /* Dump it all! */ + DumpAdminCache(AdminCache_Groups, true); + DumpAdminCache(AdminCache_Overrides, true); + + LogAction(client, -1, "\"%L\" refreshed the admin cache.", client); + ReplyToCommand(client, "[SM] %t", "Admin cache refreshed"); +} + +public AdminMenu_ReloadAdmins(Handle:topmenu, + TopMenuAction:action, + TopMenuObject:object_id, + param, + String:buffer[], + maxlength) +{ + if (action == TopMenuAction_DrawOption) + { + Format(buffer, maxlength, "%T", "Kick player", param); + } + else if (action == TopMenuAction_SelectOption) + { + PerformReloadAdmins(param); + RedisplayAdminMenu(topmenu, param); + } +} + +public Action:Command_ReloadAdmins(client, args) +{ + PerformReloadAdmins(client); + + return Plugin_Handled; +} + + diff --git a/plugins/include/adminmenu.inc b/plugins/include/adminmenu.inc index 126c94007..5e265ed6e 100644 --- a/plugins/include/adminmenu.inc +++ b/plugins/include/adminmenu.inc @@ -52,6 +52,8 @@ /** Category for player commands. */ #define ADMINMENU_PLAYERCOMMANDS "PlayerCommands" +/** Category for server commands. */ +#define ADMINMENU_SERVERCOMMANDS "ServerCommands" /** * Called when the admin menu is created and 3rd party plugins can grab @@ -91,6 +93,24 @@ native Handle:GetAdminTopMenu(); */ native AddTargetsToMenu(Handle:menu, source_client, bool:in_game_only=true); +/** + * Re-displays the admin menu to a client after selecting an item. + * Auto-aborts if the Handle is invalid. + * + * @param topmenu TopMenu Handle. + * @param client Client index. + * @return True on success, false on failure. + */ +stock bool:RedisplayAdminMenu(Handle:topmenu, client) +{ + if (topmenu == INVALID_HANDLE) + { + return false; + } + + return DisplayTopMenu(topmenu, client, TopMenuPosition_LastCategory); +} + /* DO NOT EDIT BELOW THIS LINE */ public SharedPlugin:__pl_adminmenu = diff --git a/translations/common.phrases.txt b/translations/common.phrases.txt index 9397c93b1..dd2ae2df3 100644 --- a/translations/common.phrases.txt +++ b/translations/common.phrases.txt @@ -256,5 +256,10 @@ { "en" "Player Commands" } + + "Server Commands" + { + "en" "Server Commands" + } }