diff --git a/addons/sourcemod/scripting/shavit-core.sp b/addons/sourcemod/scripting/shavit-core.sp index aa542088..b1a4d9a4 100644 --- a/addons/sourcemod/scripting/shavit-core.sp +++ b/addons/sourcemod/scripting/shavit-core.sp @@ -25,7 +25,6 @@ #include #undef REQUIRE_PLUGIN -#include #include #define USES_CHAT_COLORS @@ -328,8 +327,6 @@ public void OnPluginStart() // late if(gB_Late) { - OnAdminMenuReady(null); - for(int i = 1; i <= MaxClients; 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() { // styles diff --git a/addons/sourcemod/scripting/shavit-wr.sp b/addons/sourcemod/scripting/shavit-wr.sp index e649ef09..0d7b01d0 100644 --- a/addons/sourcemod/scripting/shavit-wr.sp +++ b/addons/sourcemod/scripting/shavit-wr.sp @@ -62,7 +62,8 @@ ArrayList gA_Leaderboard[STYLE_LIMIT][TRACKS_SIZE]; float gF_PlayerRecord[MAXPLAYERS+1][STYLE_LIMIT][TRACKS_SIZE]; // admin menu -Handle gH_AdminMenu = null; +TopMenu gH_AdminMenu = null; +TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT; // table prefix char gS_MySQLPrefix[32]; @@ -115,6 +116,7 @@ public void OnAllPluginsLoaded() { if(gH_SQL == null) { + Shavit_OnDatabaseLoaded(); } } @@ -164,7 +166,10 @@ public void OnPluginStart() AutoExecConfig(); // admin menu - OnAdminMenuReady(null); + if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) + { + OnAdminMenuReady(gH_AdminMenu); + } // modules gB_Rankings = LibraryExists("shavit-rankings"); @@ -182,18 +187,46 @@ public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] n 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) { - if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) + if((gH_AdminMenu = GetAdminTopMenu()) != null) { - TopMenuObject tmoTimer = FindTopMenuCategory(gH_AdminMenu, "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); - 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_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands"); + + if(gH_TimerCommands == INVALID_TOPMENUOBJECT) + { + OnAdminMenuCreated(topmenu); + } } + + 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); } } @@ -263,7 +296,7 @@ public void OnLibraryRemoved(const char[] name) else if(StrEqual(name, "adminmenu")) { - gH_AdminMenu = null; + delete gH_AdminMenu; } } diff --git a/addons/sourcemod/scripting/shavit-zones.sp b/addons/sourcemod/scripting/shavit-zones.sp index 143364b8..0046ac91 100644 --- a/addons/sourcemod/scripting/shavit-zones.sp +++ b/addons/sourcemod/scripting/shavit-zones.sp @@ -108,7 +108,8 @@ int gI_BeamSprite = -1; int gI_HaloSprite = -1; // admin menu -Handle gH_AdminMenu = INVALID_HANDLE; +TopMenu gH_AdminMenu = null; +TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT; // misc cache bool gB_Late = false; @@ -177,11 +178,6 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max public void OnAllPluginsLoaded() { - if(gB_Late) - { - OnAdminMenuReady(null); - } - if(gH_SQL == null) { Shavit_OnDatabaseLoaded(); @@ -252,6 +248,12 @@ public void OnPluginStart() AutoExecConfig(); + // admin menu + if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) + { + OnAdminMenuReady(gH_AdminMenu); + } + // misc cvars 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"); - - if(tmoTimer != INVALID_TOPMENUOBJECT) - { - 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); - } + 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) @@ -351,7 +347,28 @@ public void CategoryHandler(Handle topmenu, TopMenuAction action, TopMenuObject } } -public void AdminMenu_Zones(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) +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) { if(action == TopMenuAction_DisplayOption) { @@ -364,7 +381,7 @@ public void AdminMenu_Zones(Handle topmenu, TopMenuAction action, TopMenuObject } } -public void AdminMenu_DeleteZone(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) +public void AdminMenu_DeleteZone(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) { if(action == TopMenuAction_DisplayOption) { @@ -390,7 +407,7 @@ public void AdminMenu_DeleteAllZones(Handle topmenu, TopMenuAction action, TopM } } -public void AdminMenu_ZoneEdit(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) +public void AdminMenu_ZoneEdit(Handle topmenu, TopMenuAction action, TopMenuObject object_id, int param, char[] buffer, int maxlength) { if(action == TopMenuAction_DisplayOption) { diff --git a/addons/sourcemod/translations/shavit-common.phrases.txt b/addons/sourcemod/translations/shavit-common.phrases.txt index d4126158..99849345 100644 --- a/addons/sourcemod/translations/shavit-common.phrases.txt +++ b/addons/sourcemod/translations/shavit-common.phrases.txt @@ -31,6 +31,10 @@ "#format" "{1:s}" "en" "Usage: {1}" } + "TimerCommands" + { + "en" "Timer Commands" + } // ---------- Timelimit ---------- // "Minutes" { diff --git a/addons/sourcemod/translations/shavit-zones.phrases.txt b/addons/sourcemod/translations/shavit-zones.phrases.txt index 59ee98ee..86034225 100644 --- a/addons/sourcemod/translations/shavit-zones.phrases.txt +++ b/addons/sourcemod/translations/shavit-zones.phrases.txt @@ -13,10 +13,6 @@ { "en" "Delete map zone" } - "TimerCommands" - { - "en" "Timer Commands" - } // ---------- Commands ---------- // "ModifierCommandNoArgs" {