Burgershot
  • Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Burgershot Other languages Spanish/Español Programación [Guía] Como crear comandos con ZCMD y sscanf2

 
  • 0 Vote(s) - 0 Average
[Guía] Como crear comandos con ZCMD y sscanf2
SKainer
Offline

Burgershot Member
Posts: 15
Threads: 3
Joined: Jan 2020
Reputation: 0
#1
2020-04-15, 12:07 AM (This post was last modified: 2020-05-24, 05:10 AM by SKainer. Edit Reason: Mejorar )
[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(comando, playerid, params[])
{
// Código
return 1;
}

CMD:comando(playerid, params[])
{
// Código
return 1;
}

COMMAND:comando(playerid, params[])
{
// Código
return 1;
}

command:comando(playerid, params[])
{
// 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(playerid, params[])
{
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(playerid, params[])
{
   new idjugador, dinero;
   if(!sscanf(params, "ud", idjugador, dinero))
   {
       GivePlayerMoney(idjugador, dinero);
   }
   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 idjugador, dinero;
if(!
sscanf(params, "ud", idjugador, dinero)) 

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(playerid, params[])
{
   new idjugador, dinero;
   if(!sscanf(params, "ud", idjugador, dinero))
   {
       GivePlayerMoney(idjugador, dinero);
   }
   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!
DanielFz
Offline

Burgershot Member
Posts: 9
Threads: 3
Joined: Aug 2020
Reputation: 1
Location: Venezuela
#2
2020-08-10, 05:46 PM
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 +1, si no, pues no te doy ajaaj.
R4lpH
Offline

Burgershot Member
Posts: 9
Threads: 2
Joined: Jul 2020
Reputation: 0
Location: Argentina
#3
2020-08-25, 01:22 PM
Has un tuto de como usar strcmp :)
SKainer
Offline

Burgershot Member
Posts: 15
Threads: 3
Joined: Jan 2020
Reputation: 0
#4
2020-08-29, 07:39 AM
(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!
ImFlanny
Offline

Burgershot Member
Posts: 8
Threads: 0
Joined: May 2021
Reputation: 0
#5
2021-05-29, 03:03 AM (This post was last modified: 2021-05-29, 03:04 AM by ImFlanny.)
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;
} 
« Next Oldest | Next Newest »



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Burgershot - Powered by our Community and MyBB Original Theme by Emerald

Linear Mode
Threaded Mode