From 09917f91d97320afad9227798bbcd3b9184be8be Mon Sep 17 00:00:00 2001 From: rtldg <55846624+rtldg@users.noreply.github.com> Date: Tue, 7 Jun 2022 16:50:40 +0000 Subject: [PATCH] fix adminmenu 2.0 --- addons/sourcemod/scripting/shavit-core.sp | 50 +++++++++++++++ .../scripting/shavit-replay-playback.sp | 59 ++++-------------- addons/sourcemod/scripting/shavit-wr.sp | 61 ++++--------------- addons/sourcemod/scripting/shavit-zones.sp | 61 ++++--------------- 4 files changed, 84 insertions(+), 147 deletions(-) diff --git a/addons/sourcemod/scripting/shavit-core.sp b/addons/sourcemod/scripting/shavit-core.sp index cb1bb023..08a54ae4 100644 --- a/addons/sourcemod/scripting/shavit-core.sp +++ b/addons/sourcemod/scripting/shavit-core.sp @@ -46,6 +46,8 @@ #include #include +#include + #pragma newdecls required #pragma semicolon 1 @@ -120,6 +122,10 @@ bool gB_Zones = false; bool gB_ReplayPlayback = false; bool gB_Rankings = false; bool gB_HUD = false; +bool gB_AdminMenu = false; + +TopMenu gH_AdminMenu = null; +TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT; // cvars Convar gCV_Restart = null; @@ -402,6 +408,7 @@ public void OnPluginStart() gB_ReplayPlayback = LibraryExists("shavit-replay-playback"); gB_Rankings = LibraryExists("shavit-rankings"); gB_HUD = LibraryExists("shavit-hud"); + gB_AdminMenu = LibraryExists("adminmenu"); // database connections SQL_DBConnect(); @@ -409,6 +416,12 @@ public void OnPluginStart() // late if(gB_Late) { + if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null) + { + OnAdminMenuCreated(gH_AdminMenu); + OnAdminMenuReady(gH_AdminMenu); + } + for(int i = 1; i <= MaxClients; i++) { if(IsValidClient(i)) @@ -419,6 +432,33 @@ public void OnPluginStart() } } +public void OnAdminMenuCreated(Handle topmenu) +{ + gH_AdminMenu = TopMenu.FromHandle(topmenu); + + if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) == INVALID_TOPMENUOBJECT) + { + 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) +{ + gH_AdminMenu = TopMenu.FromHandle(topmenu); +} + void LoadDHooks() { Handle gamedataConf = LoadGameConfigFile("shavit.games"); @@ -557,6 +597,10 @@ public void OnLibraryAdded(const char[] name) { gB_Eventqueuefix = true; } + else if (StrEqual(name, "adminmenu")) + { + gB_AdminMenu = true; + } } public void OnLibraryRemoved(const char[] name) @@ -581,6 +625,12 @@ public void OnLibraryRemoved(const char[] name) { gB_Eventqueuefix = false; } + else if (StrEqual(name, "adminmenu")) + { + gB_AdminMenu = false; + gH_AdminMenu = null; + gH_TimerCommands = INVALID_TOPMENUOBJECT; + } } public void OnMapStart() diff --git a/addons/sourcemod/scripting/shavit-replay-playback.sp b/addons/sourcemod/scripting/shavit-replay-playback.sp index 452db39b..fbfdc99f 100644 --- a/addons/sourcemod/scripting/shavit-replay-playback.sp +++ b/addons/sourcemod/scripting/shavit-replay-playback.sp @@ -163,6 +163,7 @@ float gF_VelocityDifference2D[MAXPLAYERS+1]; float gF_VelocityDifference3D[MAXPLAYERS+1]; bool gB_Late = false; +bool gB_AdminMenu = false; // forwards Handle gH_OnReplayStart = null; @@ -323,12 +324,6 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max public void OnAllPluginsLoaded() { - // admin menu - if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) - { - OnAdminMenuReady(gH_AdminMenu); - } - if (LibraryExists("closestpos")) { gB_ClosestPos = true; @@ -458,10 +453,17 @@ public void OnPluginStart() CreateAllNavFiles(); + gB_AdminMenu = LibraryExists("adminmenu"); + if(gB_Late) { Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount()); Shavit_OnChatConfigLoaded(); + + if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null) + { + OnAdminMenuReady(gH_AdminMenu); + } } for(int i = 1; i < sizeof(gA_BotInfo); i++) @@ -630,10 +632,7 @@ public void OnLibraryAdded(const char[] name) { if (strcmp(name, "adminmenu") == 0) { - if ((gH_AdminMenu = GetAdminTopMenu()) != null) - { - OnAdminMenuReady(gH_AdminMenu); - } + gB_AdminMenu = true; } else if (strcmp(name, "closestpos") == 0) { @@ -645,6 +644,7 @@ public void OnLibraryRemoved(const char[] name) { if (strcmp(name, "adminmenu") == 0) { + gB_AdminMenu = false; gH_AdminMenu = null; gH_TimerCommands = INVALID_TOPMENUOBJECT; } @@ -684,47 +684,12 @@ public void OnForcedConVarChanged(ConVar convar, const char[] oldValue, const ch } } -public void OnAdminMenuCreated(Handle topmenu) +public void OnAdminMenuReady(Handle topmenu) { - if(gH_AdminMenu == null || (topmenu == gH_AdminMenu && gH_TimerCommands != INVALID_TOPMENUOBJECT)) - { - return; - } + gH_AdminMenu = TopMenu.FromHandle(topmenu); if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) != 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((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_deletereplay", AdminMenu_DeleteReplay, gH_TimerCommands, "sm_deletereplay", ADMFLAG_RCON); } } diff --git a/addons/sourcemod/scripting/shavit-wr.sp b/addons/sourcemod/scripting/shavit-wr.sp index 39e366c1..cded9b8b 100644 --- a/addons/sourcemod/scripting/shavit-wr.sp +++ b/addons/sourcemod/scripting/shavit-wr.sp @@ -57,6 +57,7 @@ enum struct stagetimewrcp_t bool gB_Late = false; bool gB_Rankings = false; bool gB_Stats = false; +bool gB_AdminMenu = false; // forwards Handle gH_OnWorldRecord = null; @@ -203,6 +204,7 @@ public void OnPluginStart() // modules gB_Rankings = LibraryExists("shavit-rankings"); gB_Stats = LibraryExists("shavit-stats"); + gB_AdminMenu = LibraryExists("adminmenu"); // cache gA_ValidMaps = new ArrayList(ByteCountToCells(PLATFORM_MAX_PATH)); @@ -212,61 +214,22 @@ public void OnPluginStart() Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount()); Shavit_OnChatConfigLoaded(); Shavit_OnDatabaseLoaded(); + + if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null) + { + OnAdminMenuReady(gH_AdminMenu); + } } CreateTimer(2.5, Timer_Dominating, 0, TIMER_REPEAT); } -public void OnAllPluginsLoaded() +public void OnAdminMenuReady(Handle topmenu) { - // admin menu - if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) - { - OnAdminMenuReady(gH_AdminMenu); - } -} - -public void OnAdminMenuCreated(Handle topmenu) -{ - if(gH_AdminMenu == null || (topmenu == gH_AdminMenu && gH_TimerCommands != INVALID_TOPMENUOBJECT)) - { - return; - } + gH_AdminMenu = TopMenu.FromHandle(topmenu); if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) != 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((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_deleteall", AdminMenu_DeleteAll, gH_TimerCommands, "sm_deleteall", ADMFLAG_RCON); gH_AdminMenu.AddItem("sm_delete", AdminMenu_Delete, gH_TimerCommands, "sm_delete", ADMFLAG_RCON); } @@ -308,10 +271,7 @@ public void OnLibraryAdded(const char[] name) } else if (StrEqual(name, "adminmenu")) { - if ((gH_AdminMenu = GetAdminTopMenu()) != null) - { - OnAdminMenuReady(gH_AdminMenu); - } + gB_AdminMenu = true; } } @@ -327,6 +287,7 @@ public void OnLibraryRemoved(const char[] name) } else if (StrEqual(name, "adminmenu")) { + gB_AdminMenu = false; gH_AdminMenu = null; gH_TimerCommands = INVALID_TOPMENUOBJECT; } diff --git a/addons/sourcemod/scripting/shavit-zones.sp b/addons/sourcemod/scripting/shavit-zones.sp index 66aa0475..3adc27f9 100644 --- a/addons/sourcemod/scripting/shavit-zones.sp +++ b/addons/sourcemod/scripting/shavit-zones.sp @@ -183,6 +183,7 @@ float gF_StartAng[MAXPLAYERS+1][TRACKS_SIZE][3]; // modules bool gB_Eventqueuefix = false; bool gB_ReplayRecorder = false; +bool gB_AdminMenu = false; #define CZONE_VER 'b' // custom zone stuff @@ -364,12 +365,18 @@ public void OnPluginStart() gB_ReplayRecorder = LibraryExists("shavit-replay-recorder"); gB_Eventqueuefix = LibraryExists("eventqueuefix"); + gB_AdminMenu = LibraryExists("adminmenu"); if (gB_Late) { Shavit_OnChatConfigLoaded(); Shavit_OnDatabaseLoaded(); + if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null) + { + OnAdminMenuReady(gH_AdminMenu); + } + for(int i = 1; i <= MaxClients; i++) { if (IsValidClient(i)) @@ -464,23 +471,11 @@ void LoadDHooks() delete hGameData; } -public void OnAllPluginsLoaded() -{ - // admin menu - if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null)) - { - OnAdminMenuReady(gH_AdminMenu); - } -} - public void OnLibraryAdded(const char[] name) { if (strcmp(name, "adminmenu") == 0) { - if ((gH_AdminMenu = GetAdminTopMenu()) != null) - { - OnAdminMenuReady(gH_AdminMenu); - } + gB_AdminMenu = true; } else if (StrEqual(name, "shavit-replay-recorder")) { @@ -496,6 +491,7 @@ public void OnLibraryRemoved(const char[] name) { if (strcmp(name, "adminmenu") == 0) { + gB_AdminMenu = false; gH_AdminMenu = null; gH_TimerCommands = INVALID_TOPMENUOBJECT; } @@ -548,47 +544,12 @@ public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] n } } -public void OnAdminMenuCreated(Handle topmenu) +public void OnAdminMenuReady(Handle topmenu) { - if(gH_AdminMenu == null || (topmenu == gH_AdminMenu && gH_TimerCommands != INVALID_TOPMENUOBJECT)) - { - return; - } + gH_AdminMenu = TopMenu.FromHandle(topmenu); if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) != 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((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);