06.10.2013, 23:07
(
Последний раз редактировалось Juniiro3; 10.10.2013 в 21:36.
)
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 ******.
Sumбrio
- Sscanf
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:
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:
Ira retornar
Tutorial
1
Para mais informaзхes veja o tуpico oficial do plugin.
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:
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:
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.
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] :
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:
OnPlayerCommandText e Sscanf
Sumбrio
- Sscanf
- Baixando
- Como instalar
- O que й?
- O que й?
- Entendendo seus parвmetros
- 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 Код:
#include < sscanf2 >

O que й?
Basicamente, sscanf й um separador de strings, ou seja, ela separa dentro de uma determinada strings vбrias sub strings, por exemplo:
pawn Код:
sscanf ( "Tutorial 1" , "s[20]d", texto, numero );
Tutorial
1
Para mais informaзхes veja o tуpico oficial do plugin.
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 Код:
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;
}
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 Код:
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
}
pawn Код:
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
}

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 Код:
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;
}
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)