Hola amigos, hoy vengo a enseñar a los mas nuevos como crear comandos con parámetros o sin parámetros. Hay muchas formas de crear comandos y muchos metodos en los cuales pueden ser:
* strcmp
* strock
* dcmd
* zcmd
En este tutorial utilizaremos los metodos zcmd y dcmd , ya que son los mas utilizados, mas faciles de usar y eficientes.
Tambien utilizaremos sscanf para checkear los parametros del comando que crearemos
______________________________________________________________________________
Crear comandos por dcmd:
Para poder crearlos necesitamos agregar el siguiente codigo (agregarlo en la parte de los "#define") :
Por ejemplo los comandos /hola y /adios:
Debemos saber que existen varios tipos de comandos:
* Sin Parametros (ejemplo: /morir)
* Uniparametros (ejemplo: /mundo [id del mundo])
* Multiparametros(ejemplo: /vehiculo [id del vehiculo] [color del vehiculo])
Comandos con parametros:
Para crear comandos con parametros necesitamos utilizar sscanf, por ejemplo /matar [id] (para matar a alguien, tiene un parametro que es "id"):
Como en el comando que hicimos, lo que queremos ver es si el jugador introdujo el parametro, entonces el sscanf va a checkear si esta "params". Entonces sustituimos "lo que queremos ver si esta" por params.
c - Un caracter. (ejemplo: a, b, c, d...)
d, i - Un numero o cifra. (ejemplo: 1, 2, 3, 14, 10048...)
h, x - Un numero hexadecimal. (ejemplo: colores: 0xFFFFFFFF).
f - Un decimal. (ejemplo: una coodernada 1025.0777).
s - Un string o texto. (ejemplo: "casa" o "pera")
z - Un texto opcional. (ejemplo: la razon de una expulsión la cual no siempre tienes que poner)
pX - Un delimitador, siendo la letra "x" un caracter. (ejemplo: ps, la s seria el delimitador)
u - Un jugador o ID de un jugador.
Debido a que el tipo de variable que estamos buscando es el ID de un jugador utilizamos "u" (cambiamos "tipo de parametro o variable" por "u")
Recomiendo investigar como utilizar el if, else if y el else para poder controlar tu comando y limitarlo a lo que tu quieras. Por ahora utilizamos el if para ver si sscanf no detecto nada, si no lo hizo entonces pasa lo que esta entre brackets {} (el mensaje de como usar el comando).
Comandos sin parametros:
Estos son mucho más simples de hacer, lo unico que necesitas es declarar que no vas a utilizar el parametro y hacer las limitaciones de su uso. Ejemplo: /morir
Comandos por zcmd:
Son muchos mas faciles de realizar que los que utilizan dcmd. Para crearlos necesitamos agregar a nuestros includes (Carpeta de tu sever > Pawno > Includes) este .INC:
Después de haberlos descargado en la carpeta de "includes" nos vamos a nuestro script, en la parte de arriba donde estan todos los #include <> y agregamos:
Con el zcmd no necesitamos el callback "OnPlayerCommandText" por lo que lo borramos y lo sustituimos por:
Como acabamos de ver, ponemos primero command y despues ponemos entre parentesis: (nombredelcomando, playerid, params[]).
Bueno amigos, eso ha sido todo, espero que les haya servido, haya gustado, saquen lo que nececiten y que lo utilizen ps. Att: Aldys
Ni miro ni copio, lo mio es estilo propio.
* strcmp
* strock
* dcmd
* zcmd
En este tutorial utilizaremos los metodos zcmd y dcmd , ya que son los mas utilizados, mas faciles de usar y eficientes.
Tambien utilizaremos sscanf para checkear los parametros del comando que crearemos
- Codigo sscanf:
______________________________________________________________________________
Crear comandos por dcmd:
Para poder crearlos necesitamos agregar el siguiente codigo (agregarlo en la parte de los "#define") :
- Código:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
- Código:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(comando, lengh, cmdtext);
//comando = nombre del comando.
//lengh = tamaño del comando (cantidad de carácteres).
//cmdtext = no se cambia, siempre va eso.
return 0; // return 0; se puede cambiar por un mensaje, por ejemplo: return SendClientMessage(playerid, color, "comando desconocido.");
}
- Código:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(comoestas, 5, cmdtext);
dcmd(queonda, 4, cmdtext);
return SendClientMessage(playerid, 0xFFFFFFFF, "Comando desconocido.");
}
- Código:
dcmd_comando(playerid, params[]) // en donde dice comando ponemos el nombre del comando ya declarado arriba...
{
//efecto del comando
return 1;
}
Por ejemplo los comandos /hola y /adios:
- Código:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(hola, 9, cmdtext);
dcmd(adios, 4, cmdtext);
return 0; // esta vez quiero que cuando el comando sea desconocido se muestre el mensaje por defecto "Unknown command." por lo que pongo return 0;
}
dcmd_hola(playerid, params[])
{
// efecto del comando
return 1;
}
dcmd_adios(playerid, params[])
{
//efecto
return 1; // siempre se pone return 1; al final del comando
}
Debemos saber que existen varios tipos de comandos:
* Sin Parametros (ejemplo: /morir)
* Uniparametros (ejemplo: /mundo [id del mundo])
* Multiparametros(ejemplo: /vehiculo [id del vehiculo] [color del vehiculo])
Comandos con parametros:
Para crear comandos con parametros necesitamos utilizar sscanf, por ejemplo /matar [id] (para matar a alguien, tiene un parametro que es "id"):
- Código:
dcmd_matar(playerid, params[])
{
new id; // necesitamos crear una varible para guardar el id del jugador que queremos matar.
new string; // para hacer el mensaje de muerte
if(sscanf(params, "u", id)) // esto checkea si escribiste todos los parametros, si no lo hiciste se manda el mensaje de error de abajo
{
SendClientMessage(playerid, 0xFFFFFFFF, "Uso correcto: /matar [player id]"); // es el mensaje que se manda si no se escribieron los parametros (el id)
}
else if(IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFFFFFFFF, "Ese jugador no esta conectado!"); // esto es opcional, lo puse solo para ver si el jugador esta conectado.
else // esto es lo que pasa si los parametros fueron introducidos correctamente, es decir, si pusiste el id del jugador y si el jugador esta conectado
{
SetPlayerHealth(id, 0.0); // se cambia la vida del jugador a 0
format(string, sizeof(string), "Has matado al jugador numero %d!", id); // aqui creamos el mensaje que vamos a dar, dandole formato al "string"
SendClientMessage(playerid, 0xFFFFFFFF, string); // se manda el mensaje guardado en string.
}
return 1;
}
- Código:
sscanf(lo que queremos ver si está, "tipo de parametro o variable", la variable ya definida);
Como en el comando que hicimos, lo que queremos ver es si el jugador introdujo el parametro, entonces el sscanf va a checkear si esta "params". Entonces sustituimos "lo que queremos ver si esta" por params.
- Código:
sscanf(params, "tipo de parametro o variable", la variable ya definida);
c - Un caracter. (ejemplo: a, b, c, d...)
d, i - Un numero o cifra. (ejemplo: 1, 2, 3, 14, 10048...)
h, x - Un numero hexadecimal. (ejemplo: colores: 0xFFFFFFFF).
f - Un decimal. (ejemplo: una coodernada 1025.0777).
s - Un string o texto. (ejemplo: "casa" o "pera")
z - Un texto opcional. (ejemplo: la razon de una expulsión la cual no siempre tienes que poner)
pX - Un delimitador, siendo la letra "x" un caracter. (ejemplo: ps, la s seria el delimitador)
u - Un jugador o ID de un jugador.
Debido a que el tipo de variable que estamos buscando es el ID de un jugador utilizamos "u" (cambiamos "tipo de parametro o variable" por "u")
- Código:
sscanf(params, "u", la variable ya definida);
- Código:
sscanf(params, "u", id);
Recomiendo investigar como utilizar el if, else if y el else para poder controlar tu comando y limitarlo a lo que tu quieras. Por ahora utilizamos el if para ver si sscanf no detecto nada, si no lo hizo entonces pasa lo que esta entre brackets {} (el mensaje de como usar el comando).
Comandos sin parametros:
Estos son mucho más simples de hacer, lo unico que necesitas es declarar que no vas a utilizar el parametro y hacer las limitaciones de su uso. Ejemplo: /morir
- Código:
dcmd_morir(playerid, params[])
{
#pragma unused params // se coloca esto para declarar que no vamos a utilizar un parametro
SetPlayerHealth(playerid, 0.0); // el efecto, morir!
return 1; // siempre se coloca al final del comando
}
Comandos por zcmd:
Son muchos mas faciles de realizar que los que utilizan dcmd. Para crearlos necesitamos agregar a nuestros includes (Carpeta de tu sever > Pawno > Includes) este .INC:
- Link .INC:
Después de haberlos descargado en la carpeta de "includes" nos vamos a nuestro script, en la parte de arriba donde estan todos los #include <> y agregamos:
- Código:
#include <zcmd>
Con el zcmd no necesitamos el callback "OnPlayerCommandText" por lo que lo borramos y lo sustituimos por:
- Código:
public OnPlayerCommandReceived(playerid, cmdtext[])
{
// esto lo puedes utilizar para muchas cosas como por ejemplo hacer que en la consola aparesca el mensaje que escribiste
new string[80];
format(string, sizeof(string), "* %s (ID:%d) has typed: %s", pName(playerid), playerid, cmdtext);
printf("[Command] %s: %s", pName(playerid), cmdtext); // imprime el comando que escribiste en la consola!
return 1;
}
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(!success)
{
//lo que quieres que pase si el comando no existe, por ejemplo: SendClientMessage(playerid, 0xFFFFFFFF, "Comando desconocido.");
return 1;
}
return 1;
}
- Código:
//estos comandos se pueden hacer de varias formas:
CMD:nombredelcomando(playerid, params[])
COMMAND:nombredelcomando(playerid, params[])
cmd(nombredelcomando, playerid, params[])
command(nombredelcomando, playerid, params[])
//vamos a utilizar la primera
CMD:matar(playerid, params[])
{
new id; // necesitamos crear una variable para guardar el id del jugador que queremos matar.
new string; // para hacer el mensaje de muerte
if(sscanf(params, "u", id)) // esto checkea si escribiste todos los parametros, si no lo hiciste se manda el mensaje de error de abajo
{
SendClientMessage(playerid, 0xFFFFFFFF, "Uso correcto: /matar [player id]"); // es el mensaje que se manda si no se escribieron los parametros (el id)
}
else if(IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFFFFFFFF, "Ese jugador no esta conectado!"); // esto es opcional, lo puse solo para ver si el jugador esta conectado.
else // esto es lo que pasa si los parametros fueron introducidos correctamente, es decir, si pusiste el id del jugador y si el jugador esta conectado
{
SetPlayerHealth(id, 0.0); // se cambia la vida del jugador a 0
format(string, sizeof(string), "Has matado al jugador numero %d!", id); // aqui creamos el mensaje que vamos a dar, dandole formato al "string"
SendClientMessage(playerid, 0xFFFFFFFF, string); // se manda el mensaje guardado en string.
}
return 1;
}
- Código:
command(morir, playerid, params[])
{
#pragma unused params // se coloca esto para declarar que no vamos a utilizar un parametro
SetPlayerHealth(playerid, 0.0); // el efecto, morir!
return 1; // siempre se coloca al final del comando
}
Como acabamos de ver, ponemos primero command y despues ponemos entre parentesis: (nombredelcomando, playerid, params[]).
Bueno amigos, eso ha sido todo, espero que les haya servido, haya gustado, saquen lo que nececiten y que lo utilizen ps. Att: Aldys
Ni miro ni copio, lo mio es estilo propio.