[Tutorial] How to: zcmd & sscanf
#1

Oque й o ZCMD e o SSCANF?
ZCMD й um processador de comandos rapido que usa "CallRemoteFunction".
SSCANF faz o mesmo trabalho que o strtok, porйm й muito mais rapido, facil, ocupa menos espaзo e й multiread.

ZCMD'

pawn Код:
CMD:hello(playerid,params[]) return print("Hello World");
Zcmd й muito mais rapido, como pode ver eu gastei 1 linha, em strcmp iria gastar mais, o que o comando irб fazer й executar o comando e retornar com uma mensagem para o log do servidor.

Para fazer um comando zcmd vocк necessita de fazer um Marco, um marco й o mesmo que uma define, ou seja, vocк pode usar

pawn Код:
CMD:hello(playerid,params[]) return print("Hello World");
ou
pawn Код:
COMMAND:hello(playerid,params[]) return print("Hello World");
Dentro desde bonito comando esta uma funзгo muito grande que o faz ser rapido porque o zcmd usa CallRemoteFunction, ou sejб irб chamar uma callback veja o exemplo.

pawn Код:
CMD:hello(playerid,params[]) return print("Hello World");
por traz do comando...
pawn Код:
forward cmd_hello(playerid,params[]);
public cmd_hello(playerid,params[]) return print("Hello World");
Vocк pode usar os parametros do zcmd, exemplo.

pawn Код:
CMD:vida(playerid,params[]) return SetPlayerHealth(playerid,strval(params));
Bem como pode ver aqui nгo й necessario usarmos sscanf, pois vocк usou 1 parвmetro (/vida [parвmetro]) se usar mais que ai sim deve usar o sscanf, agora vejamos o que й o sscanf.

SSCANF'

pawn Код:
CMD:pm(playerid,params[])
{
    new
        mString[50],
        iName[25],
        pName[25],
        text,
        id
    ;
    if(sscanf(params,"us[128]",id,text))
        return SendClientMessage(playerid,-1,"USE: /pm [id] [texto]");
        if(!IsPlayerConnected(id))
        return SendClientMessage(playerid,-1,"*Jogador offline");
    GetPlayerName(playerid,pName,sizeof(pName));
    GetPlayerName(id,iName,sizeof(iName));
    format(mString,sizeof(mString),"Nova PM de %s | Texto: %s",pName,text);
    SendClientMessage(id,-1,mString);
    format(mString,sizeof(mString),"PM enviada com sucesso! Destinatario %s",iName);
    SendClientMessage(playerid,-1,mString);
    return true;
}
Como pode ver aqui usamos apenas 19 linhas, se fosse em strcmp teria o dobro, ou seja seria 38 linhas.
Como pode ver usamos 2 parвmetros, o "u" e o "s[128]", o "u" й para ID e Nomes de jogadores, ou seja, o "u" verifica o id e o nome do player, jб se vocк usar "d" sу irб verificar o id, depois o "id" e o "text" 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.

Parвmetros do 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
%					Deprecated optional specifier prefix
Concluindo: SSCANF & ZCMD sгo coisas simples, rapidas e faceis de usar.

Perguntas Ferquentes'

Antes de perguntar algo veja isto.

P: Onde faзo o download do SSCANF & ZCMD?
R: ZCMD | SSCANF

P: Qual a difrenзa entre return 1 e return true?
R: Nenhuma, 1 ou true sгo os mesmo valores, alias sу existe 2 valores, (true = 1 ou false = 0).

P: Posso usar sscanf com um parвmetro?
R: Sim, mas apenas use o parвmetro "u", caso for usar parametros como "d" "i" "s" etc.. use os parametros do zcmd.

P: Como uso o "params" do zcmd?
R: Veja este exemplo

pawn Код:
CMD:all(playerid,params[])
{
    if(!IsPlayerAdmin(playerid))
        return SendClientMessage(playerid,-1,"*Vocк nгo й admin!");
    new text,tString[34];
    if(isnull(params))
        return SendClientMessage(playerid,-1,"use: /all [texto]");
    text = strval(params);
    GetPlayerName(playerid,tString,sizeof(tString));
    format(tString,sizeof(tString),"Admin %s : %s",tString,text);
    SendClientMessageToAll(-1,tString);
    return true;   
}
P: O SSCANF funciona para o 0.3d
R: Sim o ****** atualizou o sscanf para o 0.3d

P: Porque vocк nгo explicou o delimitador?
R: Bem sinceramente ainda nгo precebi muito como o usa, mas pelo que eu vejo, o delimitador й para dividir, ou seja, se vocк tiver algo assim

pawn Код:
string[] = "Texto,50.6,2"
Como vocк pode ver no "Texto,50...." tem uma virgula, essa virgula esta a dividir, entгo й isso que temos que fazer no sscanf, vocк deve colocar algo assim:
pawn Код:
"p<|>s[6]dd"


P: Jб tem muitos tutoriais sobre o zcmd & sscanf, porque fez mais outro?
R: Bem os que jб existem sгo desatualizados e eu gosto de manter esta board informada (:

Creditos'

BlueX - Pelo tutorial
Zeex - Criador do ZCMD
****** - Criador do sscanf
RockFire - Pelo tutorial dele
Reply


Messages In This Thread
How to: zcmd & sscanf - by RebeloX - 23.12.2011, 21:57
Re: How to: zcmd & sscanf - by Hardware - 23.12.2011, 22:21
Re: How to: zcmd & sscanf - by RebeloX - 23.12.2011, 22:24
Re: How to: zcmd & sscanf - by BrunoBSF - 23.12.2011, 23:03
Re: How to: zcmd & sscanf - by Hardware - 23.12.2011, 23:08
Re: How to: zcmd & sscanf - by RebeloX - 23.12.2011, 23:09
Re: How to: zcmd & sscanf - by RebeloX - 23.12.2011, 23:19
Re: How to: zcmd & sscanf - by Macintosh - 23.12.2011, 23:22
Re: How to: zcmd & sscanf - by RebeloX - 23.12.2011, 23:23
Re: How to: zcmd & sscanf - by Victor Cesaroni - 23.12.2011, 23:34
Re: How to: zcmd & sscanf - by RebeloX - 24.12.2011, 00:32
Re: How to: zcmd & sscanf - by Sampizito - 24.12.2011, 00:34
Re: How to: zcmd & sscanf - by RebeloX - 24.12.2011, 00:36
Re: How to: zcmd & sscanf - by Sampizito - 24.12.2011, 00:40
Re: How to: zcmd & sscanf - by RebeloX - 24.12.2011, 00:49
Re: How to: zcmd & sscanf - by [O.z]Caroline - 24.12.2011, 03:25
Re: How to: zcmd & sscanf - by !Niiw - 24.12.2011, 04:54
Re: How to: zcmd & sscanf - by StreetGT - 24.12.2011, 11:37
Re: How to: zcmd & sscanf - by WLSF - 24.12.2011, 12:16
Re: How to: zcmd & sscanf - by RebeloX - 24.12.2011, 12:17

Forum Jump:


Users browsing this thread: 1 Guest(s)