Portal SAMP
[Ajuda] /Admins | Ver admins online - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] /Admins | Ver admins online (/showthread.php?tid=4827)



/Admins | Ver admins online - Alfarr Heimrik - 06/07/2024

Boa noite. Criei um código para verificar se há administradores online, e ele funciona em partes.
Código PHP:
CMD:admins(playerid) {
    new 
AdminClass[32], Message[256];
    foreach(new 
iPlayer) {
        switch(Player[i][pAdmin]) {
            case 0AdminClass "Ajudante";
            case 1AdminClass "Moderador";
            case 2AdminClass "Administrador";
            case 3AdminClass "Gerente";
            case 4AdminClass "Diretor";
            case 5AdminClass "Fundador";
        }
        format(Messagesizeof(Message), "Admin: %s | Cargo: %s"pName(i), AdminClass);
        ShowPlayerDialog(playerid5000DIALOG_STYLE_TABLIST"Admins online"Message"Visto""");
    }
    return true;

O código acima mostra os admins, mas não informa o cargo.
Eu acredito que este código venha mostrar todos os jogadores online, e não apenas os admins... Estava pensando agora enquanto analisava.


Tentei dessa outra forma, mas continua com o mesmo problema.
Código PHP:
CMD:adminson(playerid) {
    new AdminClass[32], Message[2048], SingleMessage[256];
    new bool:hasAdmins false;
    format(Messagesizeof(Message), "Admins online\n\nNome\t\t\tCargo\n");
    foreach(new Player) {
        if (Player[i][pAdmin] > 0) {
            hasAdmins true
            switch (Player[i][pAdmin]) {
                case 1AdminClass "Ajudante";
                case 2AdminClass "Moderador";
                case 3AdminClass "Administrador";
                case 4AdminClass "Gerente";
                case 5AdminClass "Diretor";
                case 6AdminClass "Fundador";
                default: AdminClass "Indefinido";
            }
            format(SingleMessagesizeof(SingleMessage), "%s\t\t\t%s\n"pName(i), AdminClass);
            strcat(MessageSingleMessage);
        }
    }
    if(hasAdmins) {
        ShowPlayerDialog(playerid5000DIALOG_STYLE_TABLIST_HEADERS"Admins online"Message"Visto""");
    } else return SendClientMessage(playerid, -1"Nenhum administrador está online no momento.");
    return true;




Uma outra dúvida.
Qual versão do sscanf eu devo usar? Pois está aparecendo isso aqui no console:

sscanf warning (`(null)`): "Include / plugin mismatch, please recompile your script for the latest features."


RE: /Admins | Ver admins online - xbruno1000x - 06/07/2024

Primeiramente, peço-lhe que se atente a área. Esse problema não é um problema mobile, é um problema multiplataforma e portanto foi movido para a devida área.

Tente assim:
Código:
CMD:admins(playerid)
{
    new AdminClass[32], Message[4096];
   
    foreach(new i: Player)
    {
        if (Player[i][pAdmin] > 0) // Verifica se o jogador é admin
        {
            switch(Player[i][pAdmin])
            {
                case 1: { AdminClass = "Ajudante"; }
                case 2: { AdminClass = "Moderador"; }
                case 3: { AdminClass = "Administrador"; }
                case 4: { AdminClass = "Gerente"; }
                case 5: { AdminClass = "Diretor"; }
                case 6: { AdminClass = "Fundador"; }
                default: { AdminClass = "Desconhecido"; }
            }
            format(Message, sizeof(Message), "Admin: %s | Cargo: %s \n", pName(i), AdminClass);
        }
    }

    if (strlen(Message) == 0)
    {
        strcat(Message, "Nenhum administrador online.");
    }

    ShowPlayerDialog(playerid, 5000, DIALOG_STYLE_TABLIST_HEADERS, "Admins online", Message, "Visto", "");
    return true;
}



RE: /Admins | Ver admins online - Alfarr Heimrik - 06/07/2024

(06/07/2024 03:50)xbruno1000x Escreveu: Primeiramente, peço-lhe que se atente a área. Esse problema não é um problema mobile, é um problema multiplataforma e portanto foi movido para a devida área.

Tente assim:
Código:
CMD:admins(playerid)
{
    new AdminClass[32], Message[4096];
   
    foreach(new i: Player)
    {
        if (Player[i][pAdmin] > 0) // Verifica se o jogador é admin
        {
            switch(Player[i][pAdmin])
            {
                case 1: { AdminClass = "Ajudante"; }
                case 2: { AdminClass = "Moderador"; }
                case 3: { AdminClass = "Administrador"; }
                case 4: { AdminClass = "Gerente"; }
                case 5: { AdminClass = "Diretor"; }
                case 6: { AdminClass = "Fundador"; }
                default: { AdminClass = "Desconhecido"; }
            }
            format(Message, sizeof(Message), "Admin: %s | Cargo: %s \n", pName(i), AdminClass);
        }
    }

    if (strlen(Message) == 0)
    {
        strcat(Message, "Nenhum administrador online.");
    }

    ShowPlayerDialog(playerid, 5000, DIALOG_STYLE_TABLIST_HEADERS, "Admins online", Message, "Visto", "");
    return true;
}

Bom dia.
Perdão, mas eu fiz a postagem em um local indevido? Esta não é a área de suporte sa-mp? Foi criado uma área especifica para mobile?

Sobre o código, o seu funcionou. Poderia me explicar o porquê? Seria por eu não ter verificado se há player admin ou foi outra coisa?
Antes mostrava meu nome como admin, só não mostrava qual cargo eu ocupava, agora está OK.


RE: /Admins | Ver admins online - xbruno1000x - 07/07/2024

(06/07/2024 10:52)Alfarr Heimrik Escreveu: Bom dia.
Perdão, mas eu fiz a postagem em um local indevido? Esta não é a área de suporte sa-mp? Foi criado uma área especifica para mobile?

Sobre o código, o seu funcionou. Poderia me explicar o porquê? Seria por eu não ter verificado se há player admin ou foi outra coisa?
Antes mostrava meu nome como admin, só não mostrava qual cargo eu ocupava, agora está OK.

É que nós temos uma área de suporte mobile, que é especifica para problemas exclusivos do client mobile. Fica mais organizado para quem busca soluções para problemas que estão ocorrendo apenas no celular. Mas não tem problema, já movi para a área de suporte geral e está tudo certo.

Sobre o seu problema:
Você criou um looping que passava por todos os jogadores do servidor e colocou um switch para pegar o nome cargo do admin. Porém, sem a verificação se esses jogadores do looping eram admins, você estaria listando o servidor todo dentro da dialog. Por ter colocado um switch com case 0, provavelmente todos os jogadores que não eram admins seriam mostrados como "Ajudante".

Inseri a documentação e a explicação de cada ponto do que eu fiz no código, segue abaixo:
Código:
/*
* CMD:admins(playerid)
*
* Exibe uma lista de administradores atualmente online, mostrando seus nomes e cargos.
* Se nenhum administrador estiver online, uma mensagem informando isso será exibida.
*
* Parameters:
*   playerid - O ID do jogador que chamou o comando.
*
* Returns:
*   true - Indica que o comando foi executado com sucesso.
*/
CMD:admins(playerid)
{
    // Declaração de variáveis
    new AdminClass[32], Message[4096];
   
    // Loop através de todos os jogadores online
    foreach(new i: Player)
    {
        // Verifica se o jogador é administrador
        if (Player[i][pAdmin] > 0) // Verifica se o jogador é admin
        {
            // Determina o cargo do administrador baseado no nível
            switch(Player[i][pAdmin])
            {
                case 1: { AdminClass = "Ajudante"; }    // Nível 1 - Ajudante
                case 2: { AdminClass = "Moderador"; }   // Nível 2 - Moderador
                case 3: { AdminClass = "Administrador"; } // Nível 3 - Administrador
                case 4: { AdminClass = "Gerente"; }     // Nível 4 - Gerente
                case 5: { AdminClass = "Diretor"; }     // Nível 5 - Diretor
                case 6: { AdminClass = "Fundador"; }    // Nível 6 - Fundador
                default: { AdminClass = "Desconhecido"; } // Qualquer outro nível - Desconhecido
            }
            // Formata a mensagem com o nome do administrador e seu cargo
            format(Message, sizeof(Message), "Admin: %s | Cargo: %s \n", pName(i), AdminClass);
        }
    }

    // Se não houver nenhum administrador online, adiciona uma mensagem informando isso
    if (strlen(Message) == 0)
    {
        strcat(Message, "Nenhum administrador online.");
    }

    // Exibe o diálogo para o jogador
    ShowPlayerDialog(playerid, 5000, DIALOG_STYLE_TABLIST_HEADERS, "Admins online", Message, "Visto", "");
    return true;
}



RE: /Admins | Ver admins online - White_Blue - 07/07/2024

(06/07/2024 02:14)Alfarr Heimrik Escreveu: Boa noite. Criei um código para verificar se há administradores online, e ele funciona em partes.
Código PHP:
CMD:admins(playerid) {
    new 
AdminClass[32], Message[256];
    foreach(new 
iPlayer) {
        switch(Player[i][pAdmin]) {
            case 0AdminClass "Ajudante";
            case 1AdminClass "Moderador";
            case 2AdminClass "Administrador";
            case 3AdminClass "Gerente";
            case 4AdminClass "Diretor";
            case 5AdminClass "Fundador";
        }
        format(Messagesizeof(Message), "Admin: %s | Cargo: %s"pName(i), AdminClass);
        ShowPlayerDialog(playerid5000DIALOG_STYLE_TABLIST"Admins online"Message"Visto""");
    }
    return true;

O código acima mostra os admins, mas não informa o cargo.
Eu acredito que este código venha mostrar todos os jogadores online, e não apenas os admins... Estava pensando agora enquanto analisava.


Tentei dessa outra forma, mas continua com o mesmo problema.
Código PHP:
CMD:adminson(playerid) {
    new AdminClass[32], Message[2048], SingleMessage[256];
    new bool:hasAdmins false;
    format(Messagesizeof(Message), "Admins online\n\nNome\t\t\tCargo\n");
    foreach(new Player) {
        if (Player[i][pAdmin] > 0) {
            hasAdmins true
            switch (Player[i][pAdmin]) {
                case 1AdminClass "Ajudante";
                case 2AdminClass "Moderador";
                case 3AdminClass "Administrador";
                case 4AdminClass "Gerente";
                case 5AdminClass "Diretor";
                case 6AdminClass "Fundador";
                default: AdminClass "Indefinido";
            }
            format(SingleMessagesizeof(SingleMessage), "%s\t\t\t%s\n"pName(i), AdminClass);
            strcat(MessageSingleMessage);
        }
    }
    if(hasAdmins) {
        ShowPlayerDialog(playerid5000DIALOG_STYLE_TABLIST_HEADERS"Admins online"Message"Visto""");
    } else return SendClientMessage(playerid, -1"Nenhum administrador está online no momento.");
    return true;




Uma outra dúvida.
Qual versão do sscanf eu devo usar? Pois está aparecendo isso aqui no console:

sscanf warning (`(null)`): "Include / plugin mismatch, please recompile your script for the latest features."

Citar:sscanf warning (`(null)`): "Include / plugin mismatch, please recompile your script for the latest features."

Quanto ao warning acima, isso significa que a include e o plugin não estão na mesma versão. Recomendo que você baixe a versão mais recente do sscanf e substitua tanto a include quanto o plugin.


RE: /Admins | Ver admins online - Alfarr Heimrik - 07/07/2024

Entendido !! Muito obrigado por me ajudar.
@White_Blue , @xbruno1000x