[Tutorial] Utilizando strtok
#1

Olб pessoal hoje vim postar um tutorial sobre strtok, pois vi que muita gente tem dъvida de como utiliza-lo..

strval - Converte uma string em Integer, nesse caso usado para definir o outro jogador...
strtok - Usado para separar strings em partes..

vamos as definiзхes..

No fim ou inнcio do gm:
pawn Код:
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }
 
    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
Defina isto no inicio da Callback OnPlayerCommandText:

pawn Код:
new nome[MAX_PLAYER_NAME]; //defini para o jogador, seu nome..
new string[128]; // Array
new cmd[128], tmp[128], idx;
cmd = strtok(cmdtext,idx);
bom vamos ao tuto..

antes de comeзar o comando que for utilizar strtok sempre use:

pawn Код:
if(strcmp(cmd,"/nomecomando", true) == 0)
e nгo:

pawn Код:
if(strcmp("/nomecomando", cmdtext, true) == 0)
Obs: se o comando nгo conter strtok pode utilizar a segunda forma normalmente..

Vamos ao simples exemplo de kickar o jogador:

pawn Код:
if(strcmp(cmd,"/kickar", true) == 0)
{
   tmp = strtok(cmdtext,idx); // Aqui serб utilizado como o ID do outro jogador
   new player = strval(tmp); // Transforma em ID.
   if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Use /kickar [id]");//Se o comando for digitado incorretamente.
   if(!IsPlayerConnected(player)) return SendClientMessage(playerid, -1, "Jogador desconectado..");//Caso o jogador esteja desconectado..
   GetPlayerName(player, nome, sizeof(nome));//Pega o nome do jogador..
   format(string, sizeof(string), "O jogador %s[ID:%d] foi kickado do servidor!!", nome, outro); //Formata a array..
   SendClientMessageToAll(-1, string); //Cor, array
   Kick(player); //Kicka o jogador..
   return 1;
}
dar dinheiro ao jogador:

pawn Код:
if(strcmp(cmd,"/darmoney", true) == 0)
{
    tmp = strtok(cmdtext,idx);
    new player = strval(tmp);
    if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Use /darmoney [id]");//Se o comando for digitado incorretamente.
    if(!IsPlayerConnected(player)) return SendClientMessage(playerid, -1, "Jogador desconectado..");//Caso o jogador esteja desconectado..
    GivePlayerMoney(player, 5000);
    return 1;
}
lembre-se caso o comando for para outro jogador por exemplo:

pawn Код:
nunca use:
   
GivePlayerMoney(playerid, 5000); //Isto irб para o jogador que chamar a funзгo, e nгo o ID que vocк digitou..

utilize:

GivePlayerMoney(VARIБVELDOINICIODOCMD, 5000);
Pronto.. pessoal й sу isso, como й meu primeiro tutorial, estб aberto a critнcas, dъvidas e etc..
Reply
#2

Quote:
Originally Posted by Joker_OutLock
Посмотреть сообщение
pawn Код:
if(strcmp(cmd,"/kickar", true) == 0)
{
   tmp = strtok(cmdtext,idx); // Aqui serб utilizado como o ID do outro jogador
   new player = strval(tmp); // Transforma em ID.
   if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Use /kickar [id]");//Se o comando for digitado incorretamente.
   if(!IsPlayerConnected(player)) return SendClientMessage(playerid, -1, "Jogador desconectado..");//Caso o jogador esteja desconectado..
   GetPlayerName(player, nome, sizeof(nome));//Seta o nome do jogador..
   format(string, sizeof(string), "O jogador %s[ID:%d] foi kickado do servidor!!", nome, outro); //Formata a array..
   SendClientMessageToAll(-1, string); //Cor, array
   Kick(player); //Kicka o jogador..

}
Faltou o return 1; E seria melhor usar strval, se for pra usar strlen й melhor usar ReturnUser tambйm:
pawn Код:
if(!strval(tmp)) return SendClientMessage(playerid, -1, "Use /kickar [id]");//Se o comando for digitado
Quote:
Originally Posted by Joker_OutLock
Посмотреть сообщение
dar dinheiro ao jogador:

pawn Код:
if(strcmp(cmd,"/darmoney", true) == 0)
{
    tmp = strtok(cmdtext,idx);
    new player = strval(tmp);
    GivePlayerMoney(player, 5000);
    return 1;
}
Nгo colocou para verificar se ele digitou o ID de um jogador.


E nгo vejo necessidade de criar tutorial pra strtok, agora que o povo tб comeзando aprender sscanf, vк um tutorial de strtok, vai querer aprender e pode comeзar usar.
Incentive as pessoas a usarem o melhor, strtok jб estб ultrapassado como muitos dizem.
Reply
#3

pawn Код:
GetPlayerName(player, nome, sizeof(nome));//Seta o nome do jogador..
Isto nгo seta o nome do jogador, isso geta o nome do jogador ou seja pega o nome do player e define o tamanho "nome" no caso MAX_PLAYER_NAME
Reply
#4

Nossa, Strtok й tгo "destualizado" e lento,
da mais lucro fazer a limpo mesmo.

Use SSCANF.
Reply
#5

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Nossa, Strtok й tгo "destualizado" e lento,
da mais lucro fazer a limpo mesmo.

Use SSCANF.
Eu atй mesmo prefiro rCmd e DynamicParams, oculpa menos linha apesar de zcmd e sscanf ser mas rapido
Reply
#6

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Use SSCANF.
Use sscanfІ
Reply
#7

Cara, Use SSCANF e ZCMD e Bem Mais ъtil e Rapido....
Reply
#8

Й, para o primeiro tutorial parabйns... Mas nгo tб na йpoca certa, ultrapassado, nгo й bom influenciar strcmp + strtok para os novatos...
Reply
#9

Quote:
Originally Posted by dMagnus
Посмотреть сообщение
Use sscanfІ
Use sscanfі
Reply
#10

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Й, para o primeiro tutorial parabйns... Mas nгo tб na йpoca certa, ultrapassado, nгo й bom influenciar strcmp + strtok para os novatos...
Falou certinho,
Ainda mais se eles estгo a estudar ZCMD + SSCANF ai que confunde a cabeзa de qualquer um.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)