SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031977
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf Empty [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf

    Mensagem por Weslley_Script Sex 12 maio 2023 - 11:31

    Antes de comeзar, quero deixar claro que o melhor й se usar sscanf com algum processador de comados (zcmd, jcmd, dcmd, ycmd, entre outros), mas para quem jб se acostumou com strcmp ou o Game Mode estб em strcmp e nгo quer converter ele para algum processador, esse tutorial й muito recomendando. Tambйm serve como estudo de sscanf, ver outras aplicaзхes desse poderoso plugin de ******.
    [size=32]OnPlayerCommandText e Sscanf[/size]

    Sumбrio

    - Sscanf
    • Baixando

    • Como instalar

    • O que й?


    - OnPlayerCommandText (strcmp)
    • O que й?

    • Entendendo seus parвmetros


    - OnPlayerCommandText e Sscanf
    • Como usar

    • Exemplos



    Sscanf


    Baixando

    Nгo vou falar muito sobre baixar, todos os arquivos necessбrios podem ser encontrados no tуpico oficial do sscanf by ******

    Como instalar

    Apуs baixar o arquivo sscanf.rar vocк verб 3 pastas:
    - pawno
    - plugins
    - sscanf

    A pasta pawno contйm a include sscanf2.inc que serб usada no nosso Game Mode, entгo coloque ela em pawno/include e no topo do seu GameMode:
    pawn Код:

    Código:
    #include < sscanf2 >


    Depois, й necessбrio colocar o arquivo .dll ou .so na pasta Servidor/plugins e configurб-lo no arquivo server.cfg. Apуs isso, essa incrнvel ferramenta estarб disponнvel para nosso uso [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf Smile

    O que й?

    Basicamente, sscanf й um separador de strings, ou seja, ela separa dentro de uma determinada strings vбrias sub strings, por exemplo:
    pawn Код:

    Código:
    sscanf ( "Tutorial 1" , "s[20]d", texto, numero );


    Ira retornar

    Tutorial
    1



    OnPlayerCommandText


    O que й?

    OnPlayerCommandText й a callback do SA:MP responsбvel por processar os comandos, ela recebe tudo que for digitado depois de uma barra / CASO a barra esteja no comeзo da caixa de diбlogo de chat. Exemplo:

    /Isso й um comando, e nгo aparecerб no chat

    Oi Pessoal /Isso nгo й um comando, e tudo isso aparecerб no chat

    Basicamente, quando um comando й digitado, essa callback й chamada. Os processadores de comando fazem agilizar esse processo de Digitar > OnPlayerCommandText > Processamento > Retorno.

    Entendendo seus parвmetros

    Essa callback possui 2 parвmetros: playerid e cmdtext[]. Playerid й уbvio, й o ID do jogador que digitou o comando, e cmdtext й tudo que foi digitado na caixa de chat do SAMP.

    Tendo em mente que tudo que foi digitado faz parte do cmdtext, podemos concluir que a primeira substring serб o comando, e todo o resto serгo os parвmetros, que podem ou nгo ser usados. Como o objetivo do sscanf nesse tutorial й extrair parвmetros de um comando, iremos partir desse princнpio: O que nгo й comando, й parвmetro.

    OnPlayerCommandText e Sscanf


    Como usar

    O primeiro passo apуs entender o que й sscanf e OnPlayerCommandText й entender como a string presente nessa callback pode ser extraнda usando sscanf. Vamos ao cуdigo:
    pawn Код:

    Código:
    public OnPlayerCommandText ( playerid , cmdtext[] /*Dessa String iremos pegar os parвmetros*/ )
    {
        new _cmdtext [ 50 ], params [ 200 ]; //Criamos nossas variбveis

        sscanf ( cmdtext , "s[50]s[200]" , _cmdtext , params ); //Separamos Comando e Parвmetros
       

        return 0; //Essa callback sempre retorna 0;
    }


    O cуdigo acima irб retornar:

    Comando
    Parвmetros.


    Agora que jб temos comando e parвmetros extraнdos, nгo podemos mais comparar a string bruta (cmdtext[], que contйm comando e parвmetros) com nossos comandos, precisamos comparar agora apenas o comando, que estб na nossa variбvel _cmdtext. Ou seja:
    pawn Код:

    Código:
    public OnPlayerCommandText ( playerid , cmdtext[] )
    {
        new _cmdtext [ 50 ], params [ 200 ]; //Criamos nossas variбveis

        sscanf ( cmdtext , "s[50]s[200]" , _cmdtext , params ); //Separamos Comando e Parвmetros
       
        if ( !strcmp ( _cmdtext , "/ComandoComParametro" ) )
        {
            return 1;
        }

        return 0; //Essa callback sempre retorna 0
    }


    Agora que jб comparamos apenas nosso comando, podemos extrair os parвmetros que queremos de dentro dos parвmetros jб extraнdos (caso essa frase fique um pouco confusa, releia e tente entender), novamente usando sscanf, porйm agora extraindo apenas dos parвmetros, nгo da string bruta.
    pawn Код:

    Código:
    [size=14][size=13]public OnPlayerCommandText ( playerid , cmdtext[] )
    {
        new _cmdtext [ 50 ], params [ 200 ]; //Criamos nossas variбveis

        sscanf ( cmdtext , "s[50]s[200]" , _cmdtext , params ); //Separamos Comando e Parвmetros
       
        if ( !strcmp ( _cmdtext , "/ComandoComParametro" ) )
        {
            new Motivo [ 50 ] , ID;    

            if ( sscanf ( params , "si" , Motivo , ID ) ) //Sscanf retorna 1 quando os parвmetros nгo sгo completados com sucesso
                return SendClientMessage ( playerid , 0xFF0000FF , "Uso Correto /ComandoComParametro [Motivo] [Quantia]" ); //OBS: Parвmetros aleatуrios.

           

            return 1;
        }

        return 0; //Essa callback sempre retorna 0
    }[/size][/size]


    [center][/center]

    Pronto, agora nуs temos os parвmetros separados [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf Smile

    Sobre os tipos de valores que podem ser extraнdos (String, Numero, Float, etc) vejam o tуpico oficial do plugin, jб linkado vбrias vezes nesse tutorial.

    Exemplos

    Criando um /kick [ID] :
    pawn Код:

    Código:
    public OnPlayerCommandText ( playerid , cmdtext[] )
    {
        new _cmdtext [ 50 ], params [ 200 ]; //Criamos nossas variбveis

        sscanf ( cmdtext , "s[50]s[200]" , _cmdtext , params ); //Separamos Comando e Parвmetros
       
        if ( !strcmp ( _cmdtext , "/kick" ) )
        {
            if ( !sscanf ( params , "i" , ID ) ) //Caso vocк queria usar sscanf dessa forma, funciona sem problemas, afinal, ela retorna 0 quando os parвmetros sгo completados com sucesso
            {
                if (IsPlayerConnected(ID))
                {
                    Kick ( ID );
                }
            }

            return 1;
        }

        return 0;
    }


    Bem, esse tutorial pode ser um pouco confuso para quem nгo sabia que sscanf separava strings (eu mesmo nгo sabia disso, e criava comandos sem a menor dificuldade usando sscanf) ou que nгo sabia que cmdtext[] era todo o texto digitado.

    Qualquer dъvida/sugestгo postem abaixo para que eu possa responder ou acrescentar ao tutorial.

    -----------------------------------------------------------------------------------------------

    Crйditos desse tutorial:
    • Juniiro3 (Criador)

    • Willian_Luigi (Aprendi algumas funзхes de sscanf com ele)




    [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf D07Xwqb
    [Tutorial] Strcmp (OnPlayerCommandText) e Sscanf Yjab9HN

      Data/hora atual: Qua 8 maio 2024 - 16:56