Utilizando strtok -
Joker_OutLock - 25.04.2012
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..
Re: Utilizando strtok -
humildadeforever - 25.04.2012
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.
Re: Utilizando strtok -
RoacH` - 25.04.2012
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
Re: Utilizando strtok -
zSuYaNw - 25.04.2012
Nossa, Strtok й tгo "destualizado" e lento,
da mais lucro fazer a limpo mesmo.
Use
SSCANF.
Re: Utilizando strtok -
RoacH` - 25.04.2012
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
Re: Utilizando strtok -
Kuddy - 25.04.2012
Quote:
Originally Posted by [Full]Garfield[XDB]
|
Use sscanfІ
Re: Utilizando strtok -
[BND]Rodrigues - 25.04.2012
Cara, Use SSCANF e ZCMD e Bem Mais ъtil e Rapido....
Re: Utilizando strtok -
WLSF - 25.04.2012
Й, para o primeiro tutorial parabйns... Mas nгo tб na йpoca certa, ultrapassado, nгo й bom influenciar strcmp + strtok para os novatos...
Re: Utilizando strtok -
Don_Speed - 26.04.2012
Quote:
Originally Posted by dMagnus
Use sscanfІ
|
Use sscanfі
Re: Utilizando strtok -
histire - 26.04.2012
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.