/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 i: Player) { switch(Player[i][pAdmin]) { case 0: AdminClass = "Ajudante"; case 1: AdminClass = "Moderador"; case 2: AdminClass = "Administrador"; case 3: AdminClass = "Gerente"; case 4: AdminClass = "Diretor"; case 5: AdminClass = "Fundador"; } format(Message, sizeof(Message), "Admin: %s | Cargo: %s", pName(i), AdminClass); ShowPlayerDialog(playerid, 5000, DIALOG_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(Message, sizeof(Message), "Admins online\n\nNome\t\t\tCargo\n"); foreach(new i : Player) { if (Player[i][pAdmin] > 0) { hasAdmins = true; 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 = "Indefinido"; } format(SingleMessage, sizeof(SingleMessage), "%s\t\t\t%s\n", pName(i), AdminClass); strcat(Message, SingleMessage); } } if(hasAdmins) { ShowPlayerDialog(playerid, 5000, DIALOG_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 i: Player) { switch(Player[i][pAdmin]) { case 0: AdminClass = "Ajudante"; case 1: AdminClass = "Moderador"; case 2: AdminClass = "Administrador"; case 3: AdminClass = "Gerente"; case 4: AdminClass = "Diretor"; case 5: AdminClass = "Fundador"; } format(Message, sizeof(Message), "Admin: %s | Cargo: %s", pName(i), AdminClass); ShowPlayerDialog(playerid, 5000, DIALOG_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(Message, sizeof(Message), "Admins online\n\nNome\t\t\tCargo\n"); foreach(new i : Player) { if (Player[i][pAdmin] > 0) { hasAdmins = true; 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 = "Indefinido"; } format(SingleMessage, sizeof(SingleMessage), "%s\t\t\t%s\n", pName(i), AdminClass); strcat(Message, SingleMessage); } } if(hasAdmins) { ShowPlayerDialog(playerid, 5000, DIALOG_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
|