Portal SAMP
[Ajuda] Bloquear jogadores de usar comandos não está funcionando - 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] Bloquear jogadores de usar comandos não está funcionando (/showthread.php?tid=3281)



Bloquear jogadores de usar comandos não está funcionando - AllanSG - 02/02/2023

Olá,
Estou fazendo um sistema de bloquear jogadores de usarem comandos.
O sistema está quase pronto, porém mesmo o jogador estando bloqueado ele executa o comando e a mensagem de que ele esta bloqueado aparece logo em seguida que o comando foi executado.

Citar:if(Player[playerid][SegBlock] != 0) return SendClientMessage(playerid, vermelho, "Você está bloqueado de usar comandos.");

uso esse codigo na public OnPlayerCommandPerformed, ja tentei colocar na OnPlayerCommandText e OnPlayerCommandReceived e mesmo assim o comando primeiro executa e depois diz que não posso usar comando.

Minhas publics ficam na parte de cima do GM e os comandos (zcmd) ficam no final do gm.

Tem algum jeito que eu possa arrumar isso sem precisar colocar a verificação no script de cada comando individualmente?

Já agradeço quem puder ajudar.


RE: Bloquear jogadores de usar comandos não está funcionando - White_Blue - 02/02/2023

Bom, o comando passa pela OnPlayerCommandReceived antes de passar pela OnPlayerCommandPerformed no zcmd, e não vai funcionar se colocar na OnPlayerCommandText, por que você está usando zcmd como você disse.

O código abaixo deve funcionar se estiver tudo certo.
Código PHP:
new bool:blockcmd[MAX_PLAYERS] = false;

public 
OnPlayerCommandReceived(playeridcmdtext[]) {
      if(
blockcmd[playerid] == true) return SendClientMessage(playeridvermelho"Você está bloqueado de usar comandos.");
      return 
1;




RE: Bloquear jogadores de usar comandos não está funcionando - MarcosBrazz - 03/02/2023

Se as ajudas acima não funcionar:
Verificando na própia include e vi que para impedir do comando ser usado, precisa retornar 0 ou false na public OnPlayerCommandPerformed.

Seu código mostra que você está retornando SendClientMessage.
Verificando os valores de retorno de SendClientMessage:
Citar:Returns
1: The function was executed successfully. Success is reported when the string is over 144 characters, but the message won't be sent.

0: The function failed to execute. The player is not connected.
Traduzindo: retorna 1 se a função foi executada corretamente e 0 se não funcionar.
Ou seja, usar "return SendClientMessage" é o mesmo que usar "return 1", e você precisa retornar 0 ou false para impedir o uso do comando.
Exemplo usando sua variavel:
Código PHP:
public OnPlayerCommandReceived(playeridcmdtext[]) {
    if(Player[playerid][SegBlock] != 0) {
        SendClientMessage(playeridvermelho"Você está bloqueado de usar comandos.");
        return 0;
    }
    return 1;




RE: Bloquear jogadores de usar comandos não está funcionando - AllanSG - 04/02/2023

Funcionou guys, agradeço a ajuda.
Coloquei o código do MarcosBrazz e evitou do comando ser executado.
Agradeço tambem ao white blue e bruno por terem me explicado melhor.