fix adminmenu 2.0

This commit is contained in:
rtldg 2022-06-07 16:50:40 +00:00
parent 8f11f9aaf1
commit 09917f91d9
4 changed files with 84 additions and 147 deletions

View File

@ -46,6 +46,8 @@
#include <shavit/sql-create-tables-and-migrations.sp> #include <shavit/sql-create-tables-and-migrations.sp>
#include <shavit/physicsuntouch> #include <shavit/physicsuntouch>
#include <adminmenu>
#pragma newdecls required #pragma newdecls required
#pragma semicolon 1 #pragma semicolon 1
@ -120,6 +122,10 @@ bool gB_Zones = false;
bool gB_ReplayPlayback = false; bool gB_ReplayPlayback = false;
bool gB_Rankings = false; bool gB_Rankings = false;
bool gB_HUD = false; bool gB_HUD = false;
bool gB_AdminMenu = false;
TopMenu gH_AdminMenu = null;
TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT;
// cvars // cvars
Convar gCV_Restart = null; Convar gCV_Restart = null;
@ -402,6 +408,7 @@ public void OnPluginStart()
gB_ReplayPlayback = LibraryExists("shavit-replay-playback"); gB_ReplayPlayback = LibraryExists("shavit-replay-playback");
gB_Rankings = LibraryExists("shavit-rankings"); gB_Rankings = LibraryExists("shavit-rankings");
gB_HUD = LibraryExists("shavit-hud"); gB_HUD = LibraryExists("shavit-hud");
gB_AdminMenu = LibraryExists("adminmenu");
// database connections // database connections
SQL_DBConnect(); SQL_DBConnect();
@ -409,6 +416,12 @@ public void OnPluginStart()
// late // late
if(gB_Late) if(gB_Late)
{ {
if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null)
{
OnAdminMenuCreated(gH_AdminMenu);
OnAdminMenuReady(gH_AdminMenu);
}
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
if(IsValidClient(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() void LoadDHooks()
{ {
Handle gamedataConf = LoadGameConfigFile("shavit.games"); Handle gamedataConf = LoadGameConfigFile("shavit.games");
@ -557,6 +597,10 @@ public void OnLibraryAdded(const char[] name)
{ {
gB_Eventqueuefix = true; gB_Eventqueuefix = true;
} }
else if (StrEqual(name, "adminmenu"))
{
gB_AdminMenu = true;
}
} }
public void OnLibraryRemoved(const char[] name) public void OnLibraryRemoved(const char[] name)
@ -581,6 +625,12 @@ public void OnLibraryRemoved(const char[] name)
{ {
gB_Eventqueuefix = false; gB_Eventqueuefix = false;
} }
else if (StrEqual(name, "adminmenu"))
{
gB_AdminMenu = false;
gH_AdminMenu = null;
gH_TimerCommands = INVALID_TOPMENUOBJECT;
}
} }
public void OnMapStart() public void OnMapStart()

View File

@ -163,6 +163,7 @@ float gF_VelocityDifference2D[MAXPLAYERS+1];
float gF_VelocityDifference3D[MAXPLAYERS+1]; float gF_VelocityDifference3D[MAXPLAYERS+1];
bool gB_Late = false; bool gB_Late = false;
bool gB_AdminMenu = false;
// forwards // forwards
Handle gH_OnReplayStart = null; Handle gH_OnReplayStart = null;
@ -323,12 +324,6 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
public void OnAllPluginsLoaded() public void OnAllPluginsLoaded()
{ {
// admin menu
if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null))
{
OnAdminMenuReady(gH_AdminMenu);
}
if (LibraryExists("closestpos")) if (LibraryExists("closestpos"))
{ {
gB_ClosestPos = true; gB_ClosestPos = true;
@ -458,10 +453,17 @@ public void OnPluginStart()
CreateAllNavFiles(); CreateAllNavFiles();
gB_AdminMenu = LibraryExists("adminmenu");
if(gB_Late) if(gB_Late)
{ {
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount()); Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded(); Shavit_OnChatConfigLoaded();
if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null)
{
OnAdminMenuReady(gH_AdminMenu);
}
} }
for(int i = 1; i < sizeof(gA_BotInfo); i++) 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 (strcmp(name, "adminmenu") == 0)
{ {
if ((gH_AdminMenu = GetAdminTopMenu()) != null) gB_AdminMenu = true;
{
OnAdminMenuReady(gH_AdminMenu);
}
} }
else if (strcmp(name, "closestpos") == 0) else if (strcmp(name, "closestpos") == 0)
{ {
@ -645,6 +644,7 @@ public void OnLibraryRemoved(const char[] name)
{ {
if (strcmp(name, "adminmenu") == 0) if (strcmp(name, "adminmenu") == 0)
{ {
gB_AdminMenu = false;
gH_AdminMenu = null; gH_AdminMenu = null;
gH_TimerCommands = INVALID_TOPMENUOBJECT; 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)) gH_AdminMenu = TopMenu.FromHandle(topmenu);
{
return;
}
if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) != INVALID_TOPMENUOBJECT) 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); gH_AdminMenu.AddItem("sm_deletereplay", AdminMenu_DeleteReplay, gH_TimerCommands, "sm_deletereplay", ADMFLAG_RCON);
} }
} }

View File

@ -57,6 +57,7 @@ enum struct stagetimewrcp_t
bool gB_Late = false; bool gB_Late = false;
bool gB_Rankings = false; bool gB_Rankings = false;
bool gB_Stats = false; bool gB_Stats = false;
bool gB_AdminMenu = false;
// forwards // forwards
Handle gH_OnWorldRecord = null; Handle gH_OnWorldRecord = null;
@ -203,6 +204,7 @@ public void OnPluginStart()
// modules // modules
gB_Rankings = LibraryExists("shavit-rankings"); gB_Rankings = LibraryExists("shavit-rankings");
gB_Stats = LibraryExists("shavit-stats"); gB_Stats = LibraryExists("shavit-stats");
gB_AdminMenu = LibraryExists("adminmenu");
// cache // cache
gA_ValidMaps = new ArrayList(ByteCountToCells(PLATFORM_MAX_PATH)); gA_ValidMaps = new ArrayList(ByteCountToCells(PLATFORM_MAX_PATH));
@ -212,61 +214,22 @@ public void OnPluginStart()
Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount()); Shavit_OnStyleConfigLoaded(Shavit_GetStyleCount());
Shavit_OnChatConfigLoaded(); Shavit_OnChatConfigLoaded();
Shavit_OnDatabaseLoaded(); Shavit_OnDatabaseLoaded();
if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null)
{
OnAdminMenuReady(gH_AdminMenu);
}
} }
CreateTimer(2.5, Timer_Dominating, 0, TIMER_REPEAT); CreateTimer(2.5, Timer_Dominating, 0, TIMER_REPEAT);
} }
public void OnAllPluginsLoaded() public void OnAdminMenuReady(Handle topmenu)
{ {
// admin menu gH_AdminMenu = TopMenu.FromHandle(topmenu);
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;
}
if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) != INVALID_TOPMENUOBJECT) 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_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_delete", AdminMenu_Delete, gH_TimerCommands, "sm_delete", ADMFLAG_RCON);
} }
@ -308,10 +271,7 @@ public void OnLibraryAdded(const char[] name)
} }
else if (StrEqual(name, "adminmenu")) else if (StrEqual(name, "adminmenu"))
{ {
if ((gH_AdminMenu = GetAdminTopMenu()) != null) gB_AdminMenu = true;
{
OnAdminMenuReady(gH_AdminMenu);
}
} }
} }
@ -327,6 +287,7 @@ public void OnLibraryRemoved(const char[] name)
} }
else if (StrEqual(name, "adminmenu")) else if (StrEqual(name, "adminmenu"))
{ {
gB_AdminMenu = false;
gH_AdminMenu = null; gH_AdminMenu = null;
gH_TimerCommands = INVALID_TOPMENUOBJECT; gH_TimerCommands = INVALID_TOPMENUOBJECT;
} }

View File

@ -183,6 +183,7 @@ float gF_StartAng[MAXPLAYERS+1][TRACKS_SIZE][3];
// modules // modules
bool gB_Eventqueuefix = false; bool gB_Eventqueuefix = false;
bool gB_ReplayRecorder = false; bool gB_ReplayRecorder = false;
bool gB_AdminMenu = false;
#define CZONE_VER 'b' #define CZONE_VER 'b'
// custom zone stuff // custom zone stuff
@ -364,12 +365,18 @@ public void OnPluginStart()
gB_ReplayRecorder = LibraryExists("shavit-replay-recorder"); gB_ReplayRecorder = LibraryExists("shavit-replay-recorder");
gB_Eventqueuefix = LibraryExists("eventqueuefix"); gB_Eventqueuefix = LibraryExists("eventqueuefix");
gB_AdminMenu = LibraryExists("adminmenu");
if (gB_Late) if (gB_Late)
{ {
Shavit_OnChatConfigLoaded(); Shavit_OnChatConfigLoaded();
Shavit_OnDatabaseLoaded(); Shavit_OnDatabaseLoaded();
if (gB_AdminMenu && (gH_AdminMenu = GetAdminTopMenu()) != null)
{
OnAdminMenuReady(gH_AdminMenu);
}
for(int i = 1; i <= MaxClients; i++) for(int i = 1; i <= MaxClients; i++)
{ {
if (IsValidClient(i)) if (IsValidClient(i))
@ -464,23 +471,11 @@ void LoadDHooks()
delete hGameData; delete hGameData;
} }
public void OnAllPluginsLoaded()
{
// admin menu
if(LibraryExists("adminmenu") && ((gH_AdminMenu = GetAdminTopMenu()) != null))
{
OnAdminMenuReady(gH_AdminMenu);
}
}
public void OnLibraryAdded(const char[] name) public void OnLibraryAdded(const char[] name)
{ {
if (strcmp(name, "adminmenu") == 0) if (strcmp(name, "adminmenu") == 0)
{ {
if ((gH_AdminMenu = GetAdminTopMenu()) != null) gB_AdminMenu = true;
{
OnAdminMenuReady(gH_AdminMenu);
}
} }
else if (StrEqual(name, "shavit-replay-recorder")) else if (StrEqual(name, "shavit-replay-recorder"))
{ {
@ -496,6 +491,7 @@ public void OnLibraryRemoved(const char[] name)
{ {
if (strcmp(name, "adminmenu") == 0) if (strcmp(name, "adminmenu") == 0)
{ {
gB_AdminMenu = false;
gH_AdminMenu = null; gH_AdminMenu = null;
gH_TimerCommands = INVALID_TOPMENUOBJECT; 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)) gH_AdminMenu = TopMenu.FromHandle(topmenu);
{
return;
}
if ((gH_TimerCommands = gH_AdminMenu.FindCategory("Timer Commands")) != INVALID_TOPMENUOBJECT) 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_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_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_deleteallzones", AdminMenu_DeleteAllZones, gH_TimerCommands, "sm_deleteallzones", ADMFLAG_RCON);