• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Gu?a] Como crear comandos con ZCMD y sscanf2
#1
[Presentaci?n]



?Hola a todos! Vengo aqu? a presentar otra gu?a creada por m? para algunos novatos iniciando en el mundo del Pawn.



[?Qu? es ZCMD]



ZCMD es un?procesador de comandos muy efectivo y r?pido usado por much?simos servidores para una mejor?optimizaci?n.



[?Qu? es sscanf2]





sscanf2 (Plugin) es un usualmente usado como?procesador de par?metros que trabaja muy bien de la mano de ZCMD.



[?C?mo usar ZCMD?]



ZCMD puede ser usado de las siguientes formas:



PHP Code:
zcmd(comandoplayeridparams[])

{

// C?digo

return 1;

}



CMD:comando(playeridparams[])

{

// C?digo

return 1;

}



COMMAND:comando(playeridparams[])

{

// C?digo

return 1;

}



command:comando(playeridparams[])

{

// C?digo

return 1;





Todas se escriben diferente, pero tienen el mismo resultado.



[Nota Importante] ZCMD no debe ir dentro de una funci?n o callback.



[Nota Importante] ZCMD siempre debe retornar verdadero (return 1) al final, como se muestra en los ejemplos o si no aparecer? el mensaje "Unknown Command" cuando se introduzca el comando.



Ejemplo de uso:



PHP Code:
CMD:mensaje(playeridparams[])

{

SendClientMessage(playerid, -1"Este es un mensaje");

return 
1;





Funciona como si fuera una funci?n, al menos as? lo veo yo.



Ahora, incluyamos a sscanf2 y por qu? va de la mano con ZCMD.



[?C?mo usar SSCANF2?]



La sint?xis de sscanf2 ser?a algo as?:



Code:
sscanf(const data[], const format[], ...)



const data[] = Ah? ir?a la data constante, es decir, la informaci?n constante que se introdujo, en este caso (ZCMD), usamos "params"

const format[] = Aqu? van los especificadores?(integers, floats, strings, etc) que se introducir?n en los par?metros.

... = aqu? se ponen las variables de los par?metros



PHP Code:
CMD:dardinero(playeridparams[])

{

? ?new 
idjugadordinero;

? ?if(!
sscanf(params"ud"idjugadordinero))

? ?{

? ? ? ?
GivePlayerMoney(idjugadordinero);

? ?}

? ?return 
1;





Ahora, ??Qu? acaba de pasar aqu??! Pasamos de ver sint?xis a un comando normal. Pues bueno, ahora explico qu? pasa.

Fijemonos en estas?l?neas:



PHP Code:
new idjugadordinero;

if(!
sscanf(params"ud"idjugadordinero)) 



As? se usa usualmente el sscanf. Efectivamente usamos una condicional para que suceda lo siguiente:

si los par?metros (params) son la id de un jugador y numeros?integer, retornaremos verdadero.

?Qu? es "ud"?

Son especificadores de datos, "u" ser?a la id de un jugador (o nombre) y "d" ser?a un integer.?

En "(params, "ud", idjugador, dinero)" podemos ver que tambi?n tenemos 2 variables (que creamos anteriormente) y ?qu? son? Pues son esos mismos datos especificados. Es decir, "u" es "idjugador"? y "d" es "dinero", osea, idjugador es la id de un jugador y dinero es un integer. Es un poco confuso pero es entendible, tambi?n podemos observar que puse "!sscanf", qu? es este operador?(!)? Lo usamos para que tome un valor contrario, ya veremos para qu?.

Entonces tenemos la funci?n?



Code:
GivePlayerMoney(playerid, money) // Funci?n por defecto



GivePlayerMoney(idjugador, dinero); // Reemplazamos nuestra ID (playerid) por la ID del jugador que elijamos en los par?metros, y (money) por "dinero", que ser?a la cantidad de dinero (Entero) que especificamos en los par?metros.



Imagina que tu jugador escribe:

/dardinero 6?1000?(6?ser?a la ID del jugador al que se le dar? dinero) (1000 es la cantidad de dinero que se le dar? a la id del jugador)



Todo eso suceder?a en un comando, s?lo usa tu imaginaci?n para crear todos los comandos y par?metros que desees.



Imagina que un jugador escribe /dardinero 6 d (El jugador escribe un string y no un integer, eso no har? nada)?

Ahora c?mo le decimos al jugador que los par?metros que est? poniendo son inv?lidos?

Pues atento a lo siguiente:



PHP Code:
CMD:dardinero(playeridparams[])

{

? ?new 
idjugadordinero;

? ?if(!
sscanf(params"ud"idjugadordinero))

? ?{

? ? ? ?
GivePlayerMoney(idjugadordinero);

? ?}

? ?else 
SendClientMessage(playerid, -1"Haz escrito mal el comando, usa /dardinero (id) (cantidad)");

? ?return 
1;





Con eso cu?ndo el jugador se equivoque de comandos retornar? el mensaje que pusimos, para que se d? cuenta que est? poniendo mal los par?metros indicados.



[Nota]?Tambi?n existe la funci?n "unformat" que viene con el sscanf2 por defecto, que act?a igual que la funci?n sscanf.



[Final]





Bueno, eso ha sido todo?lo que puedo aportar hasta ahora, si me equivoqu? en algo o expliqu? algo mal h?ganmelo saber.?



- SKainer
Languajes de Programaci?n que domino:

Pawn, Lua.

Lenguajes de Programaci?n que estoy aprendiendo:

C, JavaScript & C#.



?Listo para ayudarte!

  Reply
#2
Much?simas gracias, ven?a d?as buscando una gu?a bien explicada de como usar estos, y que explicaran cada cosita, porque no me gusta utilizar algo en un script que no entiendo, porque si no lo entiendo no lo podr? volver a usar, muchas gracias otra vez, creo que puedo dar , si no, pues no te doy ajaaj.
  Reply
#3
Has un tuto de como usar strcmp :)
  Reply
#4
(2020-08-25, 01:22 PM)R4lpH Wrote: Has un tuto de como usar strcmp :)



Tal vez haga un tutorial sobre las funciones de los strings
Languajes de Programaci?n que domino:

Pawn, Lua.

Lenguajes de Programaci?n que estoy aprendiendo:

C, JavaScript & C#.



?Listo para ayudarte!

  Reply
#5
Thumbs Up 
Buena gu?a solo que te falto explicar lo de los par?metros muchos definen los par?metros cuando no se utilizan.





Quote:CMD:mensaje(playerid,?params[])

{

SendClientMessage(playerid,?-1,?"Este?es?un?mensaje");

return?
1;

}?
  Reply


Forum Jump: