23.12.2011, 21:57
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'
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
ou
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.
por traz do comando...
Vocк pode usar os parametros do zcmd, exemplo.
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'
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
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
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
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:
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
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");
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");
pawn Код:
COMMAND:hello(playerid,params[]) return print("Hello World");
pawn Код:
CMD:hello(playerid,params[]) return print("Hello World");
pawn Код:
forward cmd_hello(playerid,params[]);
public cmd_hello(playerid,params[]) return print("Hello World");
pawn Код:
CMD:vida(playerid,params[]) return SetPlayerHealth(playerid,strval(params));
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 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
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;
}
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"
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