Como usar OnPlayerCommandText con ZCMD -
byNer0x - 31.10.2013
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:
pawn Код:
#define COMMAND:%1(%2) \
forward cmd_%1(%2); \
public cmd_%1(%2)
Si no estбs usando ese y estas usando otro como cmd(....), CMD:comando...., command(..) usa el que necesites:
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)
OnPlayerCommandText
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]);
}
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..
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;
}
Y ahн ya habrбs acabado.
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]);
}
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:
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;
}
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.
Respuesta: Como usar OnPlayerCommandText con ZCMD -
MugiwaraNoLuffy - 31.10.2013
їPara quй demonios necesitas usar OnPlayerCommandText si ya usas ZCMD? (ya sй que solo tradujiste el post).
Re: Respuesta: Como usar OnPlayerCommandText con ZCMD -
0xFFFFFF - 31.10.2013
Quote:
Originally Posted by MugiwaraNoLuffy
їPara quй demonios necesitas usar OnPlayerCommandText si ya usas ZCMD? (ya sй que solo tradujiste el post).
|
Muchos tienen comando en strcmp y aun no saben como pasarlos a zcmd.
Respuesta: Re: Respuesta: Como usar OnPlayerCommandText con ZCMD -
Parka - 31.10.2013
Quote:
Originally Posted by MugiwaraNoLuffy
їPara quй demonios necesitas usar OnPlayerCommandText si ya usas ZCMD? (ya sй que solo tradujiste el post).
|
Concuerdo contigo.
Quote:
Originally Posted by 0xFFFFFF
Muchos tienen comando en strcmp y aun no saben como pasarlos a zcmd.
|
La idea es que aprendan a hacer ese simple cambio no crees.
OFF: creo que te conozco 
On: bueno tutorial
pero la verdad es mejor que aprendan a usa ZCMD
Re: Como usar OnPlayerCommandText con ZCMD -
0xFFFFFF - 31.10.2013
Aun asi, los mas nuevos no saben como hacerlo, nosotros como estamos mas avanzados sabemos hacerlo, de hecho, ahora mismo creare un tutorial sobre esto.
Respuesta: Como usar OnPlayerCommandText con ZCMD -
DesingMyCry - 31.10.2013
No es que no sepan. En la mayoria de los casos, tienen tantos comandos usando strcmp que realmente da flojera transformar el cуdigo a la otra forma.
Respuesta: Como usar OnPlayerCommandText con ZCMD -
byNer0x - 01.11.2013
Quote:
Originally Posted by MugiwaraNoLuffy
їPara quй demonios necesitas usar OnPlayerCommandText si ya usas ZCMD? (ya sй que solo tradujiste el post).
|
Obviamente, nunca estб demбs saber este tipo de cosas; por lo que comprenderбs no todos lo saben, y a pesar de que hayan maneras mбs fбciles йsto les podrнa ayudar a aprender.
-----------
Gracias a los que agradecieron ^^
Respuesta: Re: Respuesta: Como usar OnPlayerCommandText con ZCMD -
DanDRT - 01.11.2013
Quote:
Originally Posted by 0xFFFFFF
Muchos tienen comando en strcmp y aun no saben como pasarlos a zcmd.
|
Concuerdo.
Re: Respuesta: Como usar OnPlayerCommandText con ZCMD -
PT - 01.11.2013
Quote:
Originally Posted by 0xFFFFFF
Muchos tienen comando en strcmp y aun no saben como pasarlos a zcmd.
|
Concuerdo contigo.
@ topic
esto no es nada bueno....