21.12.2009, 12:03
(
Последний раз редактировалось TheChaoz; 26.09.2013 в 00:19.
Причина: [Tutorial] tag added
)
Hola todos, en este tutorial aprenderemos a crear comandos con o sin parбmetros. Debemos saber que existen muchos metodos para crear comandos entre los cuales estan:
_________________________________________________
Sscanf
Para poder utilizarlo debemos agregar el siguiente codigo a nuestro script (se recomienda agregarlo al final):
Sscanf (link).
Despuйs de haberlos agregado ya estara listo para ser usado en conjunto con los comandos. Recuerda que para poder crear los comandos ya debe estar agregado al script.
_________________________________________________
Comandos con dcmd
Para poder crearlos necesitamos agregar el siguiente codigo (agregarlo en la parte de los "#define"):
Despuйs de agregado este codigo nos vamos a el callback OnPlayerCommandText y comenzamos a crear nuestros comandos. Antes de crearlos necesitamos declararlos, por lo que debemos hacerlo de la siguiente forma:
Por ejemplo, los comandos /morir y /vida:
Entonces, ya declaramos el comando que vamos a hacer, ahora vamos a crearlo. Para crearlo lo debemos hacer de la siguiente forma:
Por ejemplo los comandos /holatodos y /chao:
Antes de seguir, debemos saber que existen varios tipos de comandos:
Para crear comandos con parametros necesitamos utilizar sscanf, por ejemplo /matar [id] (para matar a alguien, tiene un parametro que es "id"):
Por lo que observaras, el sscanf en este caso, sirve para ver si el jugador introdujo los parametros, pero para esto necesitamos saber como utilizarlo correctamente:
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.
Lo siguiente es ver que tipo de variable vamos a checkear. A continuaciуn los tipos de variables y sus respectivos ejemplos:
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")
Y por ultimo la variable a la cual le vamos a asignar el parametro (tenemos que crearla primero), que en este caso es "id" (new id. Cambiamos "la variable ya definida" por "id"
Ya tenemos nuestro sscanf listo!
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 con 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:
http://solidfiles.com/d/879d1213462f...16d464e90c8cf9
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:
Tambiйn debemos recordar poner el sscanf lo cual ya dijimos como hacerlo... Ahora procedemos a crear nuestros comandos.
Con el zcmd no necesitamos el callback "OnPlayerCommandText" por lo que lo borramos y lo sustituimos por:
Despuйs de agregado esto podemos empezar a hacer nuestros comandos normalmente, OJO, no los tenemos que declarar primero como en el caso de los hechos en dcmd.
Ejemplos:
Se hace exactamente igual que el dcmd, utilizando sscanf, lo ъnico es que en vez de utilizar dcmd_matar utilizamos CMD:matar.
Otro ejemplo:
Como acabamos de ver, ponemos primero command y despues ponemos entre parentesis: (nombredelcomando, playerid, params[]).
Bueno, eso ha sido todo el tutorial, espero que saquen lo que necesiten, lo utilizen y que lo disfruten!
Thanks!
- strcmp
- strock
- dcmd
- zcmd
_________________________________________________
Sscanf
Para poder utilizarlo debemos agregar el siguiente codigo a nuestro script (se recomienda agregarlo al final):
Sscanf (link).
Despuйs de haberlos agregado ya estara listo para ser usado en conjunto con los comandos. Recuerda que para poder crear los comandos ya debe estar agregado al script.
_________________________________________________
Comandos con dcmd
Para poder crearlos necesitamos agregar el siguiente codigo (agregarlo en la parte de los "#define"):
pawn Код:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
pawn Код:
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.");
}
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(morir, 5, cmdtext);
dcmd(vida, 4, cmdtext);
return SendClientMessage(playerid, 0xFFFFFFFF, "Comando desconocido.");
}
pawn Код:
dcmd_comando(playerid, params[]) // en donde dice comando ponemos el nombre del comando ya declarado arriba...
{
//efecto del comando
return 1;
}
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(holatodos, 9, cmdtext);
dcmd(chao, 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_holatodos(playerid, params[])
{
// efecto del comando
return 1;
}
dcmd_chao(playerid, params[])
{
//efecto
return 1; // siempre se pone return 1; al final del comando
}
- Sin Parametros (ejemplo: /morir)
- Uniparametros (ejemplo: /mundo [id del mundo])
- Multiparametros(ejemplo: /vehiculo [id del veh'] [color del veh'])
Para crear comandos con parametros necesitamos utilizar sscanf, por ejemplo /matar [id] (para matar a alguien, tiene un parametro que es "id"):
pawn Код:
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;
}
pawn Код:
sscanf(lo que queremos ver si estб, "tipo de parametro o variable", la variable ya definida);
pawn Код:
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")
pawn Код:
sscanf(params, "u", la variable ya definida);
pawn Код:
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
pawn Код:
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 con 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:
http://solidfiles.com/d/879d1213462f...16d464e90c8cf9
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:
pawn Код:
#include <zcmd>
Con el zcmd no necesitamos el callback "OnPlayerCommandText" por lo que lo borramos y lo sustituimos por:
pawn Код:
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;
}
Ejemplos:
pawn Код:
//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;
}
Otro ejemplo:
pawn Код:
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
}
Bueno, eso ha sido todo el tutorial, espero que saquen lo que necesiten, lo utilizen y que lo disfruten!
Thanks!