AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting (https://forums.alliedmods.net/forumdisplay.php?f=107)
-   -   Help | Trying to remove item from menu (https://forums.alliedmods.net/showthread.php?t=294005)

SynysteR 02-17-2017 09:30

Help | Trying to remove item from menu
 
Hey, i am trying to make a command that will make admins have the option to be invisible in the !admins command, the thing is, if i type !admins 0, the menu will still remember my name because it put it there when i was on !admins 1 (default), i want to remove my name when i change to invisible but i dont really know how to do it, would love some help :)
Code:

#include <sourcemod>
#include <cstrike>
#include <sdktools>
#pragma semicolon 1

new Handle:g_adminListEnable = INVALID_HANDLE;
new Handle:AdminMenu = INVALID_HANDLE;
new Handle:ClientMenu = INVALID_HANDLE;

new count=0;
new check[MAXPLAYERS+1]={1,...};

public Plugin:myinfo =
{
        name = "Admins List",
        author = "Kyubi",
        description = "Shows a menu of online admins",
        version = "1.0"
}

public OnPluginStart()
{
        /*
                Regs
        */
        RegConsoleCmd("sm_admins", Command_Admins);
        RegAdminCmd("sm_check", Command_Check, ADMFLAG_GENERIC);
       
        /*
                ConVars
        */
        g_adminListEnable = CreateConVar("sm_enableadmins", "1", "Wether the admins menu works or not");
        AutoExecConfig(true);
}

public Action:Command_Admins(client, args)
{
        if(GetConVarInt(g_adminListEnable) == 1)
        {
                new String:arg1[32];
                GetCmdArg(1, arg1, sizeof(arg1));
               
                if(IsAdmin(client))
                {
                        if(StrEqual(arg1, "0"))
                        {
                                check[client] = 0;
                        }
                        else if(StrEqual(arg1, "1"))
                        {
                                check[client] = 1;
                        }
                }

                if(args <1)
                {
                        AdminMenu = CreateMenu(AdminsMenu);
                        ClientMenu = CreateMenu(ClientsMenu);
                        SetMenuTitle(AdminMenu, "Admins Online:");
                        SetMenuTitle(ClientMenu, "Admins Online:");
                       
               
                        for(new i = 1; i<MaxClients; i++)
                        {
                                if(IsClientInGame(i))
                                {
                                        new AdminId:AdminID = GetUserAdmin(i);
                                        new AdminRoot = GetAdminFlags(AdminID, Access_Real);

                                        if(AdminID != INVALID_ADMIN_ID)
                                        {
                                                if(AdminRoot != ADMFLAG_ROOT)
                                                {
                                                        decl String:AdminName[MAX_NAME_LENGTH];
                                                        decl String:menuadmin[MAX_NAME_LENGTH];
                                                        GetClientName(i, AdminName, sizeof(AdminName));
                                                        Format(menuadmin, sizeof(menuadmin), "(Invisible) %s",AdminName);
                                                        if(check[i] == 1)
                                                        {
                                                                AddMenuItem(AdminMenu, AdminName, AdminName, ITEMDRAW_DISABLED);
                                                                AddMenuItem(ClientMenu, AdminName, AdminName, ITEMDRAW_DISABLED);
                                                                count = 1;
                                                        }
                                                        if(check[i] == 0)
                                                        {
                                                                AddMenuItem(AdminMenu, menuadmin, menuadmin, ITEMDRAW_DISABLED);
                                                                count = 1;
                                                        }
                                                }
                                        }
                                }
                        }
                        if(count ==0)
                        {       
                                AddMenuItem(AdminMenu,"","No Admins Online.", ITEMDRAW_DISABLED);
                                AddMenuItem(ClientMenu, "", "No Admins Online.", ITEMDRAW_DISABLED);
                        }
               
                        if(IsAdmin(client))
                        {
                                DisplayMenu(AdminMenu, client, MENU_TIME_FOREVER);
                                SetMenuExitButton(AdminMenu, true);
                        }
                        else
                        {
                                DisplayMenu(ClientMenu, client, MENU_TIME_FOREVER);
                                SetMenuExitBackButton(ClientMenu, true);
                        }
                        count=0;
                }
        }
        return Plugin_Handled;
}

public AdminsMenu(Handle:menu, MenuAction:action, param1, param2)
{

}

public ClientsMenu(Handle:menu, MenuAction:action, param1, param2)
{

}

bool:IsAdmin(client)
{
        if (CheckCommandAccess(client, "sm_admin", 2, false))
        {
                return true;
        }
        return false;
}

public Action:Command_Check(client, args)
{
        if(check[client] == 1)
                PrintToChat(client, "check = 1");
        if(check[client] == 0)
                PrintToChat(client, "check = 0");
}


OSWO 02-17-2017 09:40

Re: Help | Trying to remove item from menu
 
So you want a Menu for users to show Admins currently online? But you want the option for Admins to "Hide" themself from that Menu too?

SynysteR 02-17-2017 09:43

Re: Help | Trying to remove item from menu
 
Quote:

Originally Posted by OSWO (Post 2496113)
So you want a Menu for users to show Admins currently online? But you want the option for Admins to "Hide" themself from that Menu too?

yes exactly

OSWO 02-17-2017 09:48

Re: Help | Trying to remove item from menu
 
Give me 10 minutes, I'll get something written for you :)

SynysteR 02-17-2017 09:49

Re: Help | Trying to remove item from menu
 
Quote:

Originally Posted by OSWO (Post 2496119)
Give me 10 minutes, I'll get something written for you :)

Thanks, however im doing this just for the sake of learning, so i would love some help with my code :P

OSWO 02-17-2017 10:08

Re: Help | Trying to remove item from menu
 
If there's something not working, or you want changed, let me know. I tried to comment everything possible.

PHP Code:

#pragma semicolon 1
#pragma newdecls required

#define PLUGIN_AUTHOR "Oscar Wos (OSWO)"
#define PLUGIN_VERSION "1.00"

#include <sourcemod>

ConVar gCn_Enabled;

bool gB_Invisible[MAXPLAYERS 1];

public 
Plugin myinfo =
{
    
name "Show Admins",
    
author PLUGIN_AUTHOR,
    
description "Admin Menu - Requested by (SynysteR)",
    
version PLUGIN_VERSION,
    
url "https://steamcommunity.com/id/oswo"
};

public 
void OnClientPostAdminCheck(int I_Client) {
    
//Reseting Variables
    
ResetVariables(I_Client);
}

public 
void OnClientDisconnect(int I_Client) {
    
//Reseting Variables
    
ResetVariables(I_Client);
}

public 
void OnPluginStart() {
    
//Registering The Command
    
RegConsoleCmd("sm_admins"Command_Admins"Show Avaliable Admins Online");

    
//ConVar Management
    
gCn_Enabled CreateConVar("showadmins_enable""1""Enables the Show Admins Menu"_true0.00true1.00);
    
AutoExecConfig(true"showadmins");
}

public 
Action Command_Admins(int I_Clientint I_Args) {
    if (
gCn_Enabled.BoolValue) {
        
MainMenu(I_Client);
    }

    return 
Plugin_Handled;
}

public 
int AdminsMenuHandle(Menu M_MenuMenuAction mA_Actionint I_Param1int I_Param2) {
    if (
mA_Action == MenuAction_Select) {
        if (
I_Param2 == 0) {
            if (
CheckCommandAccess(I_Param1""ADMFLAG_GENERICtrue)) {
                
gB_Invisible[I_Param1] = !gB_Invisible[I_Param1];

                
PrintToChat(I_Param1"[\x07Admin\x01] Invisibility Now: %s", (gB_Invisible[I_Param1] ? "\x06Invisible" "\x07Visable"));
                
MainMenu(I_Param1);
            }
        }
    }
}

void MainMenu(int I_Client) {
    
char C_buffer[512];
    
Menu M_Menu = new Menu(AdminsMenuHandle);
    
bool B_RootUser;

    
//Clean Title
    
FormatEx(C_buffersizeof(C_buffer), "Show Admins\n");
    
FormatEx(C_buffersizeof(C_buffer), "%s \n"C_buffer);
    
M_Menu.SetTitle(C_buffer);

    
B_RootUser CheckCommandAccess(I_Client""ADMFLAG_ROOTtrue);

    
//No need to grab AdminID, etc.
    
if (CheckCommandAccess(I_Client""ADMFLAG_GENERICtrue)) {
        
FormatEx(C_buffersizeof(C_buffer), "Toggle Invisibility - Currently: %s", (gB_Invisible[I_Client]) ? "Invisible" "Visable");
        
M_Menu.AddItem(C_bufferC_buffer);
    }

    
//Loop and Check Admins + If they're Invisible
    
for (int i 1<= MaxClientsi++) {
        if (
IsValidClient(i)) {
            if (
CheckCommandAccess(i""ADMFLAG_GENERICtrue)) {
                if (
B_RootUser && gB_Invisible[i]) {
                    
FormatEx(C_buffersizeof(C_buffer), "%N (Invisible)"i);
                } else if (!
gB_Invisible[i]) {
                    
FormatEx(C_buffersizeof(C_buffer), "%N"i);
                }

                
M_Menu.AddItem(C_bufferC_bufferITEMDRAW_DISABLED);
            }
        }
    }

    
M_Menu.Display(I_Client0);
}

void ResetVariables(int I_Client) {
    
gB_Invisible[I_Client] = false;
}

stock bool IsValidClient(int I_Client) {
    if (
I_Client >= && (I_Client <= MaxClients) && IsValidEntity(I_Client) && IsClientConnected(I_Client) && IsClientInGame(I_Client) && !IsFakeClient(I_Client)) {
        return 
true;
    }

    return 
false;


Edit: I added a check if the Admin is a RootUser so it shows Invisible Admins to them.

SynysteR 02-17-2017 10:15

Re: Help | Trying to remove item from menu
 
Quote:

Originally Posted by OSWO (Post 2496127)
If there's something not working, or you want changed, let me know. I tried to comment everything possible.

PHP Code:

#pragma semicolon 1
#pragma newdecls required

#define PLUGIN_AUTHOR "Oscar Wos (OSWO)"
#define PLUGIN_VERSION "1.00"

#include <sourcemod>

ConVar gCn_Enabled;

bool gB_Invisible[MAXPLAYERS 1];

public 
Plugin myinfo =
{
    
name "Show Admins",
    
author PLUGIN_AUTHOR,
    
description "Admin Menu - Requested by (SynysteR)",
    
version PLUGIN_VERSION,
    
url "https://steamcommunity.com/id/oswo"
};

public 
void OnClientPostAdminCheck(int I_Client) {
    
//Reseting Variables
    
ResetVariables(I_Client);
}

public 
void OnClientDisconnect(int I_Client) {
    
//Reseting Variables
    
ResetVariables(I_Client);
}

public 
void OnPluginStart() {
    
//Registering The Command
    
RegConsoleCmd("sm_admins"Command_Admins"Show Avaliable Admins Online");

    
//ConVar Management
    
gCn_Enabled CreateConVar("showadmins_enable""1""Enables the Show Admins Menu"_true0.00true1.00);
    
AutoExecConfig(true"showadmins");
}

public 
Action Command_Admins(int I_Clientint I_Args) {
    if (
gCn_Enabled.BoolValue) {
        
MainMenu(I_Client);
    }

    return 
Plugin_Handled;
}

public 
int AdminsMenuHandle(Menu M_MenuMenuAction mA_Actionint I_Param1int I_Param2) {
    if (
mA_Action == MenuAction_Select) {
        if (
I_Param2 == 0) {
            if (
CheckCommandAccess(I_Param1""ADMFLAG_GENERICtrue)) {
                
gB_Invisible[I_Param1] = !gB_Invisible[I_Param1];

                
PrintToChat(I_Param1"[\x07Admin\x01] Invisibility Now: %s", (gB_Invisible[I_Param1] ? "\x06Invisible" "\x07Visable"));
                
MainMenu(I_Param1);
            }
        }
    }
}

void MainMenu(int I_Client) {
    
char C_buffer[512];
    
Menu M_Menu = new Menu(AdminsMenuHandle);

    
//Clean Title
    
FormatEx(C_buffersizeof(C_buffer), "Show Admins\n");
    
FormatEx(C_buffersizeof(C_buffer), "%s \n"C_buffer);
    
M_Menu.SetTitle(C_buffer);

    
//No need to grab AdminID, etc.
    
if (CheckCommandAccess(I_Client""ADMFLAG_GENERICtrue)) {
        
FormatEx(C_buffersizeof(C_buffer), "Toggle Invisibility - Currently: %s", (gB_Invisible[I_Client]) ? "Invisible" "Visable");
        
M_Menu.AddItem(C_bufferC_buffer);
    }

    
//Loop and Check Admins + If they're Invisible
    
for (int i 1<= MaxClientsi++) {
        if (
IsValidClient(i)) {
            if (
CheckCommandAccess(i""ADMFLAG_GENERICtrue) && !gB_Invisible[i]) {
                
FormatEx(C_buffersizeof(C_buffer), "%N"i);
                
M_Menu.AddItem(C_bufferC_bufferITEMDRAW_DISABLED);
            }
        }
    }

    
M_Menu.Display(I_Client0);
}

void ResetVariables(int I_Client) {
    
gB_Invisible[I_Client] = false;
}

stock bool IsValidClient(int I_Client) {
    if (
I_Client >= && (I_Client <= MaxClients) && IsValidEntity(I_Client) && IsClientConnected(I_Client) && IsClientInGame(I_Client) && !IsFakeClient(I_Client)) {
        return 
true;
    }

    return 
false;



Thank you very much for your time and effort, im sure it will work great, but could you possibly help me with my code? :) it's not a plugin that i need, im just building it for the sake of challenge and learning.

i would like to know how can i make my code work (probably by removing the admin from the menu if he wrote !admins 0, however i dont know how to do it).

OSWO 02-17-2017 10:17

Re: Help | Trying to remove item from menu
 
The best way of learning (for me) is through reading other peoples code. That has been the most effective way of learning for me. You can pick up tricks, and easier methods like that.


All times are GMT -4. The time now is 03:41.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.