Opt-in to per-plugin adminmenu integration rather.

Rather than creating the category via core and then adding items on it.
This commit is contained in:
shavit 2018-05-02 10:23:43 +03:00
parent fa78e70dbb
commit c1b93bfdff
5 changed files with 84 additions and 60 deletions

View File

@ -25,7 +25,6 @@
#include <clientprefs> #include <clientprefs>
#undef REQUIRE_PLUGIN #undef REQUIRE_PLUGIN
#include <adminmenu>
#include <bhopstats> #include <bhopstats>
#define USES_CHAT_COLORS #define USES_CHAT_COLORS
@ -328,8 +327,6 @@ public void OnPluginStart()
// late // late
if(gB_Late) if(gB_Late)
{ {
OnAdminMenuReady(null);
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
if(IsValidClient(i)) if(IsValidClient(i))
@ -385,29 +382,6 @@ public void OnLibraryRemoved(const char[] name)
} }
} }
public void OnAdminMenuReady(Handle topmenu)
{
Handle hTopMenu = INVALID_HANDLE;
if(LibraryExists("adminmenu") && ((hTopMenu = GetAdminTopMenu()) != INVALID_HANDLE))
{
AddToTopMenu(hTopMenu, "Timer Commands", TopMenuObject_Category, CategoryHandler, INVALID_TOPMENUOBJECT);
}
}
public void CategoryHandler(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength)
{
if(action == TopMenuAction_DisplayTitle)
{
strcopy(buffer, maxlength, "Timer Commands:");
}
else if(action == TopMenuAction_DisplayOption)
{
strcopy(buffer, maxlength, "Timer Commands");
}
}
public void OnMapStart() public void OnMapStart()
{ {
// styles // styles

View File

@ -62,7 +62,8 @@ ArrayList gA_Leaderboard[STYLE_LIMIT][TRACKS_SIZE];
float gF_PlayerRecord[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE]; float gF_PlayerRecord[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE];
// admin menu // admin menu
Handle gH_AdminMenu = null; TopMenu gH_AdminMenu = null;
TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT;
// table prefix // table prefix
char gS_MySQLPrefix[32]; char gS_MySQLPrefix[32];
@ -115,6 +116,7 @@ public void OnAllPluginsLoaded()
{ {
if(gH_SQL == null) if(gH_SQL == null)
{ {
Shavit_OnDatabaseLoaded(); Shavit_OnDatabaseLoaded();
} }
} }
@ -164,7 +166,10 @@ public void OnPluginStart()
AutoExecConfig(); AutoExecConfig();
// admin menu // admin menu
OnAdminMenuReady(null); if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null))
{
OnAdminMenuReady(gH_AdminMenu);
}
// modules // modules
gB_Rankings = LibraryExists("shavit-rankings"); gB_Rankings = LibraryExists("shavit-rankings");
@ -182,19 +187,47 @@ public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] n
gI_RecentLimit = gCV_RecentLimit.IntValue; gI_RecentLimit = gCV_RecentLimit.IntValue;
} }
public void OnAdminMenuCreated(Handle topmenu)
{
if(gH_AdminMenu == null || (topmenu == gH_AdminMenu && gH_TimerCommands != INVALID_TOPMENUOBJECT))
{
return;
}
gH_TimerCommands = gH_AdminMenu.AddCategory("Timer Commands", CategoryHandler, "shavit_admin", ADMFLAG_RCON);
}
public void CategoryHandler(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength)
{
if(action == TopMenuAction_DisplayTitle)
{
FormatEx(buffer, maxlength, "%T:", "TimerCommands", param);
}
else if(action == TopMenuAction_DisplayOption)
{
FormatEx(buffer, maxlength, "%T", "TimerCommands", param);
}
}
public void OnAdminMenuReady(Handle topmenu) public void OnAdminMenuReady(Handle topmenu)
{ {
if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) if((gH_AdminMenu = GetAdminTopMenu()) != null)
{ {
TopMenuObject tmoTimer = FindTopMenuCategory(gH_AdminMenu, "Timer Commands"); if(gH_TimerCommands == INVALID_TOPMENUOBJECT)
{
gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands");
if(tmoTimer != INVALID_TOPMENUOBJECT) if(gH_TimerCommands == INVALID_TOPMENUOBJECT)
{ {
AddToTopMenu(gH_AdminMenu, "sm_deleteall", TopMenuObject_Item, AdminMenu_DeleteAll, tmoTimer, "sm_deleteall", ADMFLAG_RCON); OnAdminMenuCreated(topmenu);
AddToTopMenu(gH_AdminMenu, "sm_delete", TopMenuObject_Item, AdminMenu_Delete, tmoTimer, "sm_delete", ADMFLAG_RCON);
AddToTopMenu(gH_AdminMenu, "sm_deletestylerecords", TopMenuObject_Item, AdminMenu_DeleteStyleRecords, tmoTimer, "sm_deletestylerecords", ADMFLAG_RCON);
} }
} }
gH_AdminMenu.AddItem("sm_deleteall", AdminMenu_DeleteAll, gH_TimerCommands, "sm_deleteall", ADMFLAG_RCON);
gH_AdminMenu.AddItem("sm_delete", AdminMenu_Delete, gH_TimerCommands, "sm_delete", ADMFLAG_RCON);
gH_AdminMenu.AddItem("sm_deletestylerecords", AdminMenu_DeleteStyleRecords, gH_TimerCommands, "sm_deletestylerecords", ADMFLAG_RCON);
}
} }
public void AdminMenu_Delete(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) public void AdminMenu_Delete(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength)
@ -263,7 +296,7 @@ public void OnLibraryRemoved(const char[] name)
else if(StrEqual(name, "adminmenu")) else if(StrEqual(name, "adminmenu"))
{ {
gH_AdminMenu = null; delete gH_AdminMenu;
} }
} }

View File

@ -108,7 +108,8 @@ int gI_BeamSprite = -1;
int gI_HaloSprite = -1; int gI_HaloSprite = -1;
// admin menu // admin menu
Handle gH_AdminMenu = INVALID_HANDLE; TopMenu gH_AdminMenu = null;
TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT;
// misc cache // misc cache
bool gB_Late = false; bool gB_Late = false;
@ -177,11 +178,6 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
public void OnAllPluginsLoaded() public void OnAllPluginsLoaded()
{ {
if(gB_Late)
{
OnAdminMenuReady(null);
}
if(gH_SQL == null) if(gH_SQL == null)
{ {
Shavit_OnDatabaseLoaded(); Shavit_OnDatabaseLoaded();
@ -252,6 +248,12 @@ public void OnPluginStart()
AutoExecConfig(); AutoExecConfig();
// admin menu
if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null))
{
OnAdminMenuReady(gH_AdminMenu);
}
// misc cvars // misc cvars
sv_gravity = FindConVar("sv_gravity"); sv_gravity = FindConVar("sv_gravity");
@ -322,20 +324,14 @@ public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] n
} }
} }
public void OnAdminMenuReady(Handle topmenu) public void OnAdminMenuCreated(Handle topmenu)
{ {
if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) if(gH_AdminMenu == null || (topmenu == gH_AdminMenu && gH_TimerCommands != INVALID_TOPMENUOBJECT))
{ {
TopMenuObject tmoTimer = FindTopMenuCategory(gH_AdminMenu, "Timer Commands"); return;
}
if(tmoTimer != INVALID_TOPMENUOBJECT) gH_TimerCommands = gH_AdminMenu.AddCategory("Timer Commands", CategoryHandler, "shavit_admin", ADMFLAG_RCON);
{
AddToTopMenu(gH_AdminMenu, "sm_zones", TopMenuObject_Item, AdminMenu_Zones, tmoTimer, "sm_zones", ADMFLAG_RCON);
AddToTopMenu(gH_AdminMenu, "sm_deletezone", TopMenuObject_Item, AdminMenu_DeleteZone, tmoTimer, "sm_deletezone", ADMFLAG_RCON);
AddToTopMenu(gH_AdminMenu, "sm_deleteallzones", TopMenuObject_Item, AdminMenu_DeleteAllZones, tmoTimer, "sm_deleteallzones", ADMFLAG_RCON);
AddToTopMenu(gH_AdminMenu, "sm_zoneedit", TopMenuObject_Item, AdminMenu_ZoneEdit, tmoTimer, "sm_zoneedit", ADMFLAG_RCON);
}
}
} }
public void CategoryHandler(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) public void CategoryHandler(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength)
@ -351,6 +347,27 @@ public void CategoryHandler(Handle topmenu, TopMenuAction action, TopMenuObject
} }
} }
public void OnAdminMenuReady(Handle topmenu)
{
if((gH_AdminMenu = GetAdminTopMenu()) != null)
{
if(gH_TimerCommands == INVALID_TOPMENUOBJECT)
{
gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands");
if(gH_TimerCommands == INVALID_TOPMENUOBJECT)
{
OnAdminMenuCreated(topmenu);
}
}
gH_AdminMenu.AddItem("sm_zones", AdminMenu_Zones, gH_TimerCommands, "sm_zones", ADMFLAG_RCON);
gH_AdminMenu.AddItem("sm_deletezone", AdminMenu_DeleteZone, gH_TimerCommands, "sm_deletezone", ADMFLAG_RCON);
gH_AdminMenu.AddItem("sm_deleteallzones", AdminMenu_DeleteAllZones, gH_TimerCommands, "sm_deleteallzones", ADMFLAG_RCON);
gH_AdminMenu.AddItem("sm_zoneedit", AdminMenu_ZoneEdit, gH_TimerCommands, "sm_zoneedit", ADMFLAG_RCON);
}
}
public void AdminMenu_Zones(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) public void AdminMenu_Zones(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength)
{ {
if(action == TopMenuAction_DisplayOption) if(action == TopMenuAction_DisplayOption)

View File

@ -31,6 +31,10 @@
"#format" "{1:s}" "#format" "{1:s}"
"en" "Usage: {1}" "en" "Usage: {1}"
} }
"TimerCommands"
{
"en" "Timer Commands"
}
// ---------- Timelimit ---------- // // ---------- Timelimit ---------- //
"Minutes" "Minutes"
{ {

View File

@ -13,10 +13,6 @@
{ {
"en" "Delete map zone" "en" "Delete map zone"
} }
"TimerCommands"
{
"en" "Timer Commands"
}
// ---------- Commands ---------- // // ---------- Commands ---------- //
"ModifierCommandNoArgs" "ModifierCommandNoArgs"
{ {