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);
![Wink](images/smilies/wink.png)
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!