02.12.2010, 13:00
(
Последний раз редактировалось rjjj; 24.01.2011 в 22:00.
Причина: Mudando o Nome Zcmd para KcmD pois jб existe um cуdigo chamado Zcmd
)
Tutorial: KcmD - Criaзгo de Espaзos nos Comandos
* Crйditos do KcmD б Ken_xD/rjjj e б Wiki sa-mp.
Bem, como vi que muitos estavam fazendo tutoriais sobre temas diversos da programaзгo PAWN, resolvi fazer sobre um tema que pra min foi muito difнcil, a criaзгo de espaзos nos comandos. Claro que existe o famoso strtok mas o mesmo me confundia muito (nem conseguia fazer mais de 1 espaзo), e o KcmD apresenta melhoras se comparado ao strtok.
Em fim, espero que gostem, й meu primeiro tutorial aqui no SA-MP Fуrum, comemoraзгo do meu centйsimo post
* Como assim criaзгo de espaзos nos comandos ?
Sгo simplesmente os espaзos em que durante um comando, digitamos determinados valores:
Os espaзos os quais citei sгo os em azul no cуdigo acima.
* Mas para que vгo servir esses espaзos e os valores que sгo digitados neles ?
Podemos durante o jogo, por exemplo, usar o comando /pagar 2 5000.
Fazendo isto estarнamos dando uma quantia de 5000 ao ID 2 do servidor, podemos isso graзas б funзхes criadoras de espaзos, dentre elas a mais conhecida strtok. Mas no caso, vamos aprender KcmD
Atenзгo: Veja sempre o nъmero de dнgitos que forma a palavra do comando e troque no comeзo dele, por exemplo:
A palavra LOL tem 3 dнgitos.
Entгo na linha do comeзo do comando /LOL ficarб
- Bom, antes de mais nada vamos ver um comando sem espaзos:
Agora continuando:
O comando acima й digitado sem espaзos ou seja, vocк apenas digita /desisto e o comando executa perfeitamente hehe.
Agora um comando com espaзos, vamos usar KcmD a partir de agora .
Antes de mais nada coloque no final do seu gamemode:
Acima й a funзгo do KcmD, agora poderemos programar usando ela.
//============ Comando Simples com 1 Espaзo ============//
Agora entendendo: Apуs a criaзгo da variбvel "Vazio" igualamos ela ao primeiro espaзo que aparece no comando, por exemplo:
E depois disso, o que aparece ? A funзгo SendClientMesage, mas perceba que no lugar onde normalmente fica o texto que serб enviado ao jogador, estб a variбvel Vazio:
E o que significa a variбvel Vazio ? Significa o Primeiro Espaзo do Comando (definido antes), em outras palavras, o que vocк digitar no Primeiro Espaзo do Comando(durante o jogo) irб ser a variбvel Vazio que alйm de ser o Primeiro Espaзo do Comando, й tambйm o Texto de SendClientMessage.
//============ Comando Avanзado de 1 Espaзo ============//
Note que o cуdigo acima й igual ao de antes, mas com 2 detalhes, agora (na SendClientMessage) a Variбvel Vazio estб no lugar onde normalmente fica o playerid, e o parвmetro de Texto estб normal:
oO, mas espera aн ! Nгo era pra estar escrito Vazio no Lugar do playerid ?
Sempre estarб escrito Vazio quando o parвmetro for um Texto, no caso da SendClientMessage que tem um parвmetro de Texto (algo entre " ").
Mas quando se tratar de algo que nгo seja um Texto, como playerid por exemplo deverб ser usado strval(NomeDaVariбvel), no caso, strval(Vazio) .
//============ Comando de mais de 1 Espaзo ============//
Agora usando tudo que vocк aprendeu atй agora sobre KcmD, vamos entender o de 2 variбveis ! :
Qual o motivo do cуdigo acima ?
O motivo й dar dinheiro a um determinado jogador, por isso usamos strval(NomeDaVariбvel):
Pois na funзгo normal de dar dinheiro nгo hб presenзa de Texto (algo entre " "), veja:
E й isso galera !!
//===========FIM===========//
* Crйditos do KcmD б Ken_xD/rjjj e б Wiki sa-mp.
Bem, como vi que muitos estavam fazendo tutoriais sobre temas diversos da programaзгo PAWN, resolvi fazer sobre um tema que pra min foi muito difнcil, a criaзгo de espaзos nos comandos. Claro que existe o famoso strtok mas o mesmo me confundia muito (nem conseguia fazer mais de 1 espaзo), e o KcmD apresenta melhoras se comparado ao strtok.
Em fim, espero que gostem, й meu primeiro tutorial aqui no SA-MP Fуrum, comemoraзгo do meu centйsimo post
* Como assim criaзгo de espaзos nos comandos ?
Sгo simplesmente os espaзos em que durante um comando, digitamos determinados valores:
Код:
/pagar [id] [preзo]
Os espaзos os quais citei sгo os em azul no cуdigo acima.
* Mas para que vгo servir esses espaзos e os valores que sгo digitados neles ?
Podemos durante o jogo, por exemplo, usar o comando /pagar 2 5000.
Fazendo isto estarнamos dando uma quantia de 5000 ao ID 2 do servidor, podemos isso graзas б funзхes criadoras de espaзos, dentre elas a mais conhecida strtok. Mas no caso, vamos aprender KcmD
Atenзгo: Veja sempre o nъmero de dнgitos que forma a palavra do comando e troque no comeзo dele, por exemplo:
A palavra LOL tem 3 dнgitos.
Entгo na linha do comeзo do comando /LOL ficarб
Код:
if(strcmp("/LOL", cmdtext, true, 4) == 0)//4 devido ao nъmero de dнgitos do nome do comando (contando com barra / ).
- Bom, antes de mais nada vamos ver um comando sem espaзos:
Agora continuando:
pawn Код:
if(strcmp("/desisto", cmdtext, true, 8) == 0)//Texto do Comando
{
Ban(playerid);//Bane quem usou o comando
return 1;
}
O comando acima й digitado sem espaзos ou seja, vocк apenas digita /desisto e o comando executa perfeitamente hehe.
Agora um comando com espaзos, vamos usar KcmD a partir de agora .
Antes de mais nada coloque no final do seu gamemode:
pawn Код:
stock KcmD(param, cmdtext[])
{
new string[128], pos, var;
format(string, sizeof(string), "%s ", cmdtext);
while((pos = strfind(string, " ", true)) != -1)
{
if(var == param) return string;
var++;
strdel(string, 0, pos + 1);
if(strcmp(string, " ", true, pos) == 0) goto end;
}
end:
string[0] = '\0';
return string;
}
Acima й a funзгo do KcmD, agora poderemos programar usando ela.
//============ Comando Simples com 1 Espaзo ============//
pawn Код:
if(strcmp("/Oie", cmdtext, true, 4) == 0) //Define o nome do comando.
{
new Vazio[256]; //Essa linha cria a variбvel Vazio que serб usada para indicar um Espaзo no Comando.
Vazio = KcmD(1, cmdtext); //Essa linha iguala a variбvel Vazio (criada antes) ao primeiro espaзo do comando.
//Acima, o nъmero 1 de "KcmD(1, cmdtext)" indica o espaзo, ou seja, 1 = Primeiro Espaзo.
if(!strlen(Vazio))//Dб uma Checada para ver se o Jogador Digitou a Variбvel Vazio (criada antes) de forma correta.
{
SendClientMessage(playerid, 0xFFFFFFFF, "Digite /Oie [texto]");//Mostra ao jogador como se usa de forma correta.
return 1;//Encerra o comando.
}
//Se o jogador tiver digitado corretamente, o comando continua
SendClientMessage(playerid, 0xFFFFFFFF, Vazio);//Manda uma mensagem б quem usou o comando, ou seja, o jogador "playerid".
return 1;//Encerra o comando.
}
Agora entendendo: Apуs a criaзгo da variбvel "Vazio" igualamos ela ao primeiro espaзo que aparece no comando, por exemplo:
Код:
/kick [id] [motivo]
E depois disso, o que aparece ? A funзгo SendClientMesage, mas perceba que no lugar onde normalmente fica o texto que serб enviado ao jogador, estб a variбvel Vazio:
Код:
Normalmente ==>> SendClientMessage(playerid, 0xFFFFFFFF, "Texto Aqui"); No Caso ==>> SendClientMessage(playerid, 0xFFFFFFFF, Vazio);
//============ Comando Avanзado de 1 Espaзo ============//
pawn Код:
if(strcmp("/Oie", cmdtext, true, 4) == 0)//Texto do comando
{
new Vazio[256];
Vazio = KcmD(1, cmdtext);
if(!strlen(Vazio))
{
SendClientMessage(playerid, 0xFFFFFFFF, "Digite /Oie [id]");
return 1;
}
SendClientMessage(strval(Vazio), 0xFFFFFFFF, "Koe");
return 1;
}
Код:
Normalmente ==>> SendClientMessage(playerid, 0xFFFFFFFF, "Texto Aqui"; No Caso ==>> SendClientMessage(strval(Vazio), 0xFFFFFFFF, "Texto Aqui"[/color]);
Sempre estarб escrito Vazio quando o parвmetro for um Texto, no caso da SendClientMessage que tem um parвmetro de Texto (algo entre " ").
Mas quando se tratar de algo que nгo seja um Texto, como playerid por exemplo deverб ser usado strval(NomeDaVariбvel), no caso, strval(Vazio) .
//============ Comando de mais de 1 Espaзo ============//
Agora usando tudo que vocк aprendeu atй agora sobre KcmD, vamos entender o de 2 variбveis ! :
pawn Код:
if(strcmp("/pagar", cmdtext, true, 6) == 0)//Texto do comando
{
new Vazio1[256];//Cria variбvel Vazio1
new Vazio2[256];//Cria variбvel Vazio2
Vazio1 = KcmD(1, cmdtext);//Define que a variбvel Vazio 1 й igual ao Primeiro Espaзo do Comando
Vazio2 = KcmD(2, cmdtext);//Define que a variбvel Vazio 2 й igual ao Segundo Espaзo do Comando
if(!strlen(Vazio1))//Checa para ver se o jogador digitou a variбvel Vazio 1 corretamente
{
SendClientMessage(playerid, 0xFFFFFFFF, "Digite /pagar [id] [preзo]");//Informa uso correto
return 1;
}
if(!strlen(Vazio2))//Checa para ver se o jogador digitou a variбvel Vazio 2 corretamente
{
SendClientMessage(playerid, 0xFFFFFFFF, "Digite /pagar [id] [preзo]");//Informa uso correto
return 1;
}
GivePlayerMoney(strval(Vazio1), strval(Vazio2));//Darб ao ID (Vazio1) uma grana (Vazio2)
return 1;
}
Qual o motivo do cуdigo acima ?
O motivo й dar dinheiro a um determinado jogador, por isso usamos strval(NomeDaVariбvel):
Код:
GivePlayerMoney(strval(Vazio1), strval(Vazio2));
Код:
GivePlayerMoney(playerid, 10000);
E й isso galera !!
//===========FIM===========//