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:
- 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
O que й?
Basicamente, sscanf й um separador de strings, ou seja, ela separa dentro de uma determinada strings vбrias sub strings, por exemplo:
pawn Код:O que й?
Basicamente, sscanf й um separador de strings, ou seja, ela separa dentro de uma determinada strings vбrias sub strings, por exemplo:
- 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 Код: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:
- 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 Код: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:
- 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
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 Код: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] :
- 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:
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)