08.04.2012, 12:18
(
Последний раз редактировалось whiXґ; 08.04.2012 в 16:20.
)
Olб pessoal, bem estavo muito tempo inativo ao forum e decide criar esse tutorial sobre SSCANF e ZCMD
No topo do Gm/Fs adicione:
Como vocкs podem ver zcmd й bem mas rapido e oculpa menos espaзo й claro se fosse strcmp iria oculpar mais ou menos 4 a 5 linhas.
Tudo que vocк precisa adicionar um comando й sу fazer uma funзгo pъblica usando macro prй-definido especial, como este:
ou vocк pode faser de outro estilo:
Entaum agora vamos a criaзгo de um simples comando.
Bem agora vamos falar um pouco sobre esse comando.
sscanf tem dois parвmetros principais, a seqькncia que vocк deseja obter informaзхes a partir de (neste caso params) eo tipo de informaзгo que vocк quer sair. Em seguida, toma parвmetros adicionais, em nъmero igual а quantidade de dados que vocк deseja, neste exemplo, nуs sу queremos um pedaзo de dados (o texto para mandar a todos os players), os textos sгo especiais, para que possamos usar o 's' que as pessoas possam digitar o texto.
Se sscanf obtйm todos os dados corretamente, retorna 0, para que possamos verificar que nгo й 0 e se for, entгo ele falhou eo jogador digitando o comando nгo informar os dados corretamente.
Aqui "params[]" й a seqькncia de parвmetros, й um playerid ID do jogador que enviar este comando.
params - Como vocк jб sabe, no zcmd, params й o que vem depois do /comando. Ou seja, seu objetivo й quebrar a string 'params' para poder pegar a hora para setar o servidor. (Stewie)
us - Vocк sabe quando temos que usar o %s %d para pegar nome/id do player? sscanf й mesma coisa mas sem o %, sгo variaveis que defenimos, caso reparar o sscanf й parecido ao format, ou seja, ambos usam parametros, sу que o format usa %s, mas no fim vocк deve defenir as variaveis para nгo dar nenhum erro.
if(IsPlayerConnected(id)) - verifica se o player citado existe, caso exista retornara 0, caso naum exista retorna a mensagem.
return - caso o player digite o comando sem nenhum parametro, simplesmente retorna a mesagem "SendClientMessage(playerid, -1, "/an [text].");".
else - caso o player digite o comando certo ou seja "/an ola" retorna.");".
format - Formatara a mensagem.
sizeof - Determina o tamanho da array ''string''.
%s - Obtemos as strings.
GameTextForPlayer(id, string, 3000, 4); - Envia a gametext ao id desejado.
Parametros Sscanf:
sscanf tem inbuilt proteзгo contra o acidente de nъmero longo (onde os nъmeros muito longos podem falhar strval).
IsNumeric incluнdo, sscanf nгo tentarб avaliar strings como nъmeros (que sу vai retornar 0) se digitou o comando errado.
Simples de adicionar mais parвmetros para um comando sem reestruturaзгo cуdigo principal.
Crйditos
• whiX - Pelo Tutorial
• BlueX - Pelo Tutorial: "Usando sscanf em zcmd"
• Zeex - Criador do ZCMD
• ****** - Criador do sscanf
Espero que tenha gostado, aceito criticas CONSTRUTIVAS e sugestхes.
No topo do Gm/Fs adicione:
pawn Код:
#include zcmd
#include sscanf
pawn Код:
CMD:ola(playerid,params[]) return SendClientMessage(playerid, -1, "Olб!");
Tudo que vocк precisa adicionar um comando й sу fazer uma funзгo pъblica usando macro prй-definido especial, como este:
pawn Код:
COMMAND:ola (playerid, params []) // ou CMD:ola (playerid, params [])
{
//Funзгo
return 1;
}
pawn Код:
command(ola, playerid, params[]) // ou cmd(ola, playerid, params[])
{
// Funзгo
return 1;
}
pawn Код:
CMD:an(playerid, params[])
{
new texto,id;
new string[128];
if(sscanf(params, "us[128]",id,texto)) return
SendClientMessage(playerid, -1, "/an [id] [texto].");
if(IsPlayerConnected(id)) return
SendClientMessage(playerid, -1, "Este jogador nгo estб conectado");
else {
format(string, sizeof(string), "%s", texto);
GameTextForPlayer(id, string, 3000, 4);
}
return 1;
}
sscanf tem dois parвmetros principais, a seqькncia que vocк deseja obter informaзхes a partir de (neste caso params) eo tipo de informaзгo que vocк quer sair. Em seguida, toma parвmetros adicionais, em nъmero igual а quantidade de dados que vocк deseja, neste exemplo, nуs sу queremos um pedaзo de dados (o texto para mandar a todos os players), os textos sгo especiais, para que possamos usar o 's' que as pessoas possam digitar o texto.
Se sscanf obtйm todos os dados corretamente, retorna 0, para que possamos verificar que nгo й 0 e se for, entгo ele falhou eo jogador digitando o comando nгo informar os dados corretamente.
pawn Код:
CMD:an(playerid, params[])
pawn Код:
if(sscanf(params, "us[128]",id,texto)) return
SendClientMessage(playerid, -1, "/an [text].");
us - Vocк sabe quando temos que usar o %s %d para pegar nome/id do player? sscanf й mesma coisa mas sem o %, sгo variaveis que defenimos, caso reparar o sscanf й parecido ao format, ou seja, ambos usam parametros, sу que o format usa %s, mas no fim vocк deve defenir as variaveis para nгo dar nenhum erro.
Код:
d ou i - utilizado quando й usado numeros. s - utilizado quando se й usado letras famose string *-* Claro que existe muito mas, estarб no final deste tutorial
pawn Код:
if(IsPlayerConnected(id)) return
SendClientMessage(playerid, -1, "Este jogador nгo estб conectado");
pawn Код:
else {
format(string, sizeof(string), "%s", texto);
GameTextForPlayer(id, string, 3000, 4);
}
else - caso o player digite o comando certo ou seja "/an ola" retorna.");".
format - Formatara a mensagem.
sizeof - Determina o tamanho da array ''string''.
%s - Obtemos as strings.
GameTextForPlayer(id, string, 3000, 4); - Envia a gametext ao id desejado.
Parametros Sscanf:
Код:
Format Use L(true/false) Optional logical truthity l Logical truthity B(binary) Optional binary number b Binary number N(any format number) Optional number n Number C(character) Optional character c Character I(integer) Optional integer i Integer D(integer) Optional integer d Integer H(hex value) Optional hex number h Hex number O(octal value) Optional octal value o Octal value F(float) Optional floating point number f Floating point number G(float/INFINITY/-INFINITY/NAN/NAN_E) Optional float with IEEE definitions g Float with IEEE definitions { Open quiet section } Close quiet section P<delimiter> Invalid delimiter change p<delimiter> Delimiter change Z(string)[length] Invalid optional string z(string)[length] Deprecated optional string S(string)[length] Optional string s[length] String U(name/id) Optional user (bot/player) u User (bot/player) Q(name/id) Optional bot (bot) q Bot (bot) R(name/id) Optional player (player) r Player (player) A<type>(default)[length] Optional array of given type a<type>[length] Array of given type E<specification>(default) Optional enumeration of given layout e<specification> Enumeration of given layout 'string' Search string %
IsNumeric incluнdo, sscanf nгo tentarб avaliar strings como nъmeros (que sу vai retornar 0) se digitou o comando errado.
Simples de adicionar mais parвmetros para um comando sem reestruturaзгo cуdigo principal.
Crйditos
• whiX - Pelo Tutorial
• BlueX - Pelo Tutorial: "Usando sscanf em zcmd"
• Zeex - Criador do ZCMD
• ****** - Criador do sscanf
Espero que tenha gostado, aceito criticas CONSTRUTIVAS e sugestхes.