31.10.2013, 14:15
Buenas, antes de nada me gustarнa decir que este tutorial no es mio y que ZCMD es una buena forma de procesar los comandos, pero hay un problema utilizando secuencias de comandos, tienen muchos comandos definidos ya, utilizando otros mйtodos que exigen la devoluciуn de llamada OnPlayerCommandText (como strcmp o dcmd). Si deseas utilizar ZCMD allн, tendrнa que convertir todos los comandos en ZCMD. Pero si tienes muchos comandos, podrнa tomar mucho tiempo. Afortunadamente, hay una soluciуn para ese problema.
Puedes colocar el contenido de zcmd.inc dentro de su GameMode / FilterScript;
Define
Primero, elige como quieres definir tus comandos:
Si estas usando: COMMAND:micomando(playerid, params[]), pon esto en tu Script:
Si no estбs usando ese y estas usando otro como cmd(....), CMD:comando...., command(..) usa el que necesites:
OnPlayerCommandText
Ahora a la CallBack 'OnPlayerCommandText:
Si quieres cambiar el mensaje de por defecto de cuando el comando no existe.
NOTA: Ъsalo sуlo en el script del GameMode, porque retornando a 1 en un FilterScript desactivarб comandos de otros scripts..
Y ahн ya habrбs acabado.
EJEMPLO
NOTA: No necesitarбs aсadir la lнnea: #include <zcmd>
EDITO: Si quieren una forma MUUUUUCHO mбs fбcil:
Poned encima del gm:
Y cambiad "OnPlayerCommandText" por:
Crйditos: ZeeX por el original include ZCMD, MadeMan (por el tutorial en ingles), yo por la traducciуn del tutorial.
PD: No sй si ya lo tradujeron antes, es el motivo por el que lo he hecho yo.
Un saludo, y espero que valoren el esfuerzo.
Puedes colocar el contenido de zcmd.inc dentro de su GameMode / FilterScript;
Define
Primero, elige como quieres definir tus comandos:
Si estas usando: COMMAND:micomando(playerid, params[]), pon esto en tu Script:
pawn Код:
#define COMMAND:%1(%2) \
forward cmd_%1(%2); \
public cmd_%1(%2)
pawn Код:
#define CMD:%1(%2) \
forward cmd_%1(%2); \
public cmd_%1(%2)
//=============
#define command(%1,%2) \
forward cmd_%1(%2); \
public cmd_%1(%2)
//=============
#define cmd(%1,%2) \
forward cmd_%1(%2); \
public cmd_%1(%2)
Ahora a la CallBack 'OnPlayerCommandText:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
new
pos,
funcname[32];
while (cmdtext[++pos] > ' ')
{
funcname[pos-1] = tolower(cmdtext[pos]);
}
format(funcname, sizeof(funcname), "cmd_%s", funcname);
while (cmdtext[pos] == ' ') pos++;
if (!cmdtext[pos])
{
return CallLocalFunction(funcname, "is", playerid, "");
}
return CallLocalFunction(funcname, "is", playerid, cmdtext[pos]);
}
NOTA: Ъsalo sуlo en el script del GameMode, porque retornando a 1 en un FilterScript desactivarб comandos de otros scripts..
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
new
pos,
funcname[32];
while (cmdtext[++pos] > ' ')
{
funcname[pos-1] = tolower(cmdtext[pos]);
}
format(funcname, sizeof(funcname), "cmd_%s", funcname);
while (cmdtext[pos] == ' ') pos++;
if (!cmdtext[pos]) cmdtext[pos] = '';
if(!CallLocalFunction(funcname, "is", playerid, cmdtext[pos]))
{
SendClientMessage(playerid, -1, "[SERVER] Comando {FF0000}erroneo");
}
return 1;
}
EJEMPLO
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/ayuda", true) == 0)
{
SendClientMessage(playerid, -1, "Comandos disponibles: /suicidarse - /ayuda");
return 1;
}
if(strcmp(cmdtext, "/suicidarse", true) == 0)
{
SetPlayerHealth(playerid, 0);
return 1;
}
new
pos,
funcname[32];
while (cmdtext[++pos] > ' ')
{
funcname[pos-1] = tolower(cmdtext[pos]);
}
format(funcname, sizeof(funcname), "cmd_%s", funcname);
while (cmdtext[pos] == ' ') pos++;
if (!cmdtext[pos])
{
return CallLocalFunction(funcname, "is", playerid, "");
}
return CallLocalFunction(funcname, "is", playerid, cmdtext[pos]);
}
EDITO: Si quieren una forma MUUUUUCHO mбs fбcil:
Poned encima del gm:
pawn Код:
#include <zcmd>
pawn Код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(success)
{
return 1;
}
if(strcmp(cmdtext, "/ayuda", true) == 0)
{
SendClientMessage(playerid, -1, "Comandos disponibles: ");
return 1;
}
if(strcmp(cmdtext, "/morir", true) == 0)
{
SetPlayerHealth(playerid, 0);
return 1;
}
return 0;
}
PD: No sй si ya lo tradujeron antes, es el motivo por el que lo he hecho yo.
Un saludo, y espero que valoren el esfuerzo.