11.01.2013, 00:41
(
Последний раз редактировалось oOFotherOo; 11.01.2013 в 01:51.
)
Tutorial -Uso correcto de params con sscanf en ZCMD e YCMD
Buenas hoy os vengo con un pequeсo tutorial de como usar sscanf correctamente en los procesadores de comandos ZCMD e YCMD.Empezamos este metodo que les voy a explicar evita las creaciones de Variables y asi al mismo tiempo consumimos menos Byte y hacemos una pequeсa optimizaciуn en el comando, ya que este metodo al no crear una Variable cada vez que se ejecuta el comando entonces hace la lectura del codigo un poco mas rapida.
Muchos cometen el error de que al usar sscanf crean una Variable para cada parametro del sscanf.
Ejemplo ZCMD:
pawn Код:
CMD:dardinero(playerid, params[])
{
new dinero, jugador;
if(!sscanf(params, "ri", jugador, dinero))
{
GivePlayerMoney(jugador, dinero);
}
else SendClientMessage(playerid, -1 "Uso: /dardinero [ID] [DINERO]");
return 1;
}
pawn Код:
YCMD:dardinero(playerid, params[], help)
{
new dinero, jugador;
if(help) return SendClientMessage(playerid, -1 "Este comando sirve para entregar dinero a un jugador.");
if(!sscanf(params, "ri", jugador, dinero))
{
GivePlayerMoney(jugador, dinero);
}
else SendClientMessage(playerid, -1 "Uso: /dardinero [ID] [DINERO]");
return 1;
}
Deberia ir de esta manera, ejemplo:
Ejemplo ZCMD:
pawn Код:
CMD:dardinero(playerid, params[])
{
if(!sscanf(params, "ri", params[0], params[1]))
{
GivePlayerMoney(params[0], params[1]);
}
else SendClientMessage(playerid, -1 "Uso: /dardinero [ID] [DINERO]");
return 1;
}
pawn Код:
YCMD:dardinero(playerid, params[], help)
{
if(help) return SendClientMessage(playerid, -1 "Este comando sirve para entregar dinero a un jugador.");
if(!sscanf(params, "ri", params[0], params[1]))
{
GivePlayerMoney(params[0], params[1]);
}
else SendClientMessage(playerid, -1 "Uso: /dardinero [ID] [DINERO]");
return 1;
}
їComo usarlo?
Bueno es sumamente facil, simplemente asignaremos a cada parametro "params" un slot para almacenar el dato insertado en el sscanf para luego ser usado en una determinada funciуn, Ejemplo: "params[0]", params[1], params[2]", entonces "params[0]" este almacenara un dato diferente a "params[1] y params[2]" ya que contienen diferentes slots, cada slot se asigna entre los " [] ", Ejemplo: params[0], params[1], ect.
Ejemplo ZCMD:
pawn Код:
CMD:banear(playerid, params[])
{
new string[128]; // Definimos este array para almacenar el formato del texto al usar la funciуn format().
if(!sscanf(params, "rs[128]", params[0], params[1]))
{
format(string, sizeof(string), "Un administrador te ha baneado. razуn: %s", params[1]); // Aqui ponemos params[1], porque este almacena el "STRING" insertado en el sscanf o mejor dicho almacena la razуn del baneo.
SendClientMessage(params[0], -1, string); // Esto enviarб el mensaje que contiene la funciуn format, al usuario baneado.
Ban(params[0]); // Aqui ponemos params[0], porque este almacena la ID del jugador insertado en el sscanf.
}
else SendClientMessage(playerid, -1 "Uso: /banear [ID] [RAZУN]");
return 1;
}
pawn Код:
YCMD:banear(playerid, params[], help)
{
new string[128]; // Definimos este array para almacenar el formato del texto al usar la funciуn format().
if(help) return SendClientMessage(playerid, -1 "Este comando sirve para banear a un jugador.");
if(!sscanf(params, "rs[128]", params[0], params[1]))
{
format(string, sizeof(string), "Un administrador te ha baneado. razуn: %s", params[1]); // Aqui ponemos params[1], porque este almacena el "STRING" insertado en el sscanf o mejor dicho almacena la razуn del baneo.
SendClientMessage(params[0], -1, string); // Esto enviarб el mensaje que contiene la funciуn format, al usuario baneado.
Ban(params[0]); // Aqui ponemos params[0], porque este almacena la ID del jugador insertado en el sscanf.
}
else SendClientMessage(playerid, -1 "Uso: /banear [ID] [RAZУN]");
return 1;
}
Fin del tutorial, espero que les haya gustado, cualquier duda postear por este mismo post.
Creditos: oOFotherOo - Creador del tutorial.
Un saludo.