[Tutorial] Como crear comandos.
#1

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:
  • strcmp
  • strock
  • dcmd
  • zcmd
Y muchos otros mбs metodos. En este tutorial utilizaremos dcmd y zcmd, debido a que son los mбs faciles de crear y mбs eficientes por ahora. Tambiйn utilizaremos sscanf para checkear los parametros del comando.
_________________________________________________
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
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:
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.");
}
Por ejemplo, los comandos /morir y /vida:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  dcmd(morir, 5, cmdtext);
  dcmd(vida, 4, cmdtext);
  return SendClientMessage(playerid, 0xFFFFFFFF, "Comando desconocido.");
}
Entonces, ya declaramos el comando que vamos a hacer, ahora vamos a crearlo. Para crearlo lo debemos hacer de la siguiente forma:
pawn Код:
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 /holatodos y /chao:
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  
}
Antes de seguir, debemos saber que existen varios tipos de comandos:
  • Sin Parametros (ejemplo: /morir)
  • Uniparametros (ejemplo: /mundo [id del mundo])
  • Multiparametros(ejemplo: /vehiculo [id del veh'] [color del veh'])
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"):
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;
}
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:

pawn Код:
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.
pawn Код:
sscanf(params, "tipo de parametro o variable", la variable ya definida);
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")

pawn Код:
sscanf(params, "u", la variable ya definida);
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"
pawn Код:
sscanf(params, "u", 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

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>
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:
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;
}
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:

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;
}
Se hace exactamente igual que el dcmd, utilizando sscanf, lo ъnico es que en vez de utilizar dcmd_matar utilizamos CMD:matar.

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
}
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!
Reply


Messages In This Thread
Como crear comandos. - by Miguel - 21.12.2009, 12:03
Re: [Tutorial] Como crear comandos - by pooooolo - 21.12.2009, 14:04
Re: [Tutorial] Como crear comandos - by G.B - 21.12.2009, 15:15
Re: [Tutorial] Como crear comandos - by Miguel - 22.12.2009, 23:46
Re: [Tutorial] Como crear comandos. - by CristianTdj - 23.12.2009, 10:42
Re: [Tutorial] Como crear comandos. - by Zamaroht - 23.12.2009, 13:29
Re: [Tutorial] Como crear comandos. - by Blaxter - 24.12.2009, 19:25
Re: [Tutorial] Como crear comandos. - by CristianTdj - 05.01.2010, 16:07
Re: [Tutorial] Como crear comandos. - by SegaX - 05.01.2010, 16:40
Re: [Tutorial] Como crear comandos. - by CristianTdj - 06.01.2010, 16:47
Re: [Tutorial] Como crear comandos. - by Miguel - 17.01.2010, 04:46
Re: [Tutorial] Como crear comandos. - by TheChaoz - 17.01.2010, 06:25
Re: [Tutorial] Como crear comandos. - by CristianTdj - 04.03.2010, 13:45
Re: [Tutorial] Como crear comandos. - by xenowort - 04.03.2010, 14:00
Re: [Tutorial] Como crear comandos. - by CristianTdj - 04.03.2010, 14:09
Re: [Tutorial] Como crear comandos. - by TheChaoz - 04.03.2010, 17:24
Re: [Tutorial] Como crear comandos. - by Miguel - 04.03.2010, 18:53
Re: [Tutorial] Como crear comandos. - by TheChaoz - 04.03.2010, 19:04
Re: [Tutorial] Como crear comandos. - by xenowort - 04.03.2010, 21:15
Re: [Tutorial] Como crear comandos. - by LongQuad - 14.06.2012, 09:51
Respuesta: [Tutorial] Como crear comandos. - by josefr6 - 30.08.2013, 20:42
Respuesta: [Tutorial] Como crear comandos. - by Swedky - 24.09.2013, 22:17
Respuesta: [Tutorial] Como crear comandos. - by JustBored - 24.09.2013, 23:10
Respuesta: [Tutorial] Como crear comandos. - by Swedky - 24.09.2013, 23:18
Respuesta: [Tutorial] Como crear comandos. - by Adoniiz - 25.09.2013, 03:29
Respuesta: [Tutorial] Como crear comandos. - by Swedky - 25.09.2013, 04:05
Re: Como crear comandos. - by Shekar - 26.09.2013, 00:22
Re: Como crear comandos. - by Miguel - 27.09.2013, 18:04
Respuesta: Re: Como crear comandos. - by Swedky - 27.09.2013, 20:44
Re: Como crear comandos. - by PT - 27.09.2013, 22:59
Re: Como crear comandos. - by Valen452 - 28.04.2017, 18:46
Re: Como crear comandos. - by Telvis - 13.07.2017, 15:30

Forum Jump:


Users browsing this thread: 1 Guest(s)