Brebe introducciуn a ZCMD:
pawn Код:
CMD:nombre_del_comando(playerid, params[])
{
return 1;
}
El ej anterior es la estructura minima que todo comando ZCMD debe tener. Para evitar marearte
digamos lo basico:
- nombre_del_comando: representa como bien dice, el nombre de nuestro comando (la '\' no forma parte del nombre)
- playerid representa el id del jugador que ejecuto el comando (puedes ponerle player, jugador o como tu quieras, pero en general se le llama playerid)
- params[] representa los parametros que el jugador ingresa con el comando. ej: (/texto hola; params seria "texto")
Algo basico sin parametros:
pawn Код:
//strcmp:
if(!strcmp(cmdtext, "/micomando", true))
{
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playerid, -1, "Has sido curado");
return 1;
}
//zcmd:
CMD:micomando(playerid, params[])
{
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playeridn -1, "Has sido curado");
return 1;
}
Algun comando con parametros:
pawn Код:
//strcmp
if(!strcmp(cmd, "/micomando", true))
{
//No abalo el uso de 256 cells en casos innecesarios, solo me baso en los estandares utilizados comunmente por los scripters que utilizan strtok
//---------Esta es la seccion de codigo que cambiaremos al utilizar ZCMD o casi cualquier otro procesador decomandos
new player, dinero, str[128], tmp[256], tmp2[256];
tmp = strtok(cmdtext, idx);
tmp2 = strtok(cmdtext, idx);
if(strlen(tmp) == 0 || strlen(tmp2) == 0 || !IsNumeric(tmp) || !IsNumeric(tmp2))
SendClientMessage(playerid, -1, "USO: /micomando <playerid> <dinero>");
player = strval(tmp);
dinero = strval(tmp2);
//---------
if(!IsPlayerConnected(player))
return SendClientMessage(playerid, -1, "Error: Jugador no conectado");
if(dinero < 0)
return SendClientMessage(playerid, -1, "No puedes sacarle dinero a un jugador");
GivePlayerMoney(player, dinero);
format(str, 128, "El jugador %d te dio %d dinero.", playerid, dinero);
SendClientMessage(player, -1, str);
format(str, 128, "Le enviaste %d pesos al jugador %d", dinero, player);
SendClientMessage(playerid, -1, str);
return 1;
}
//zcmd
CMD:micomando(playerid, params[])
{
new player, dinero, str[128];
/*la funcion sscanf retorna 0 si el formato del string y el indicados fueron correctos o 1 si no lo es/hubo algun error
El formato "dd" indica que se espera algo asi "[numero] [numero]" (sin los []".
Existen muchos demas caracteres para indicar formatos mucho mas complejos, pero eso te lo dejo a ti.*/
if(sscanf(params, "dd", player, dinero))
return SendClientMessage(playerid, -1, "USO: /micomando <playerid> <dinero>");
//A partir de este punto, el codigo es completamente identico
if(!IsPlayerConnected(player))
return SendClientMessage(playerid, -1, "Error: Jugador no conectado");
if(dinero < 0)
return SendClientMessage(playerid, -1, "No puedes sacarle dinero a un jugador");
GivePlayerMoney(player, dinero);
format(str, 128, "El jugador %d te dio %d dinero.", playerid, dinero);
SendClientMessage(player, -1, str);
format(str, 128, "Le enviaste %d pesos al jugador %d", dinero, player);
SendClientMessage(playerid, -1, str);
return 1;
}
Como puedes ver sscanf hace la mayor parte del trabajo. Un tutorial sobre este tema podria a llegar a ser muy extenso, pero con estos 2 ejemplos intente resumirlo a lo mas basico para que tu luego puedas ir aprendiendo lo demas si es que lo necesitas, ya que sscanf no tiene como unico uso escanear un string de un comando.
Nota: strcmp no es un procesador de comandos, solo es una funcion que compara 2 cadenas de texto (tambien llamadas strings del ingles)