[Tutorial] Como usar OnPlayerCommandText con ZCMD
#1

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:

pawn Код:
#include <zcmd>
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.
Reply
#2

їPara quй demonios necesitas usar OnPlayerCommandText si ya usas ZCMD? (ya sй que solo tradujiste el post).
Reply
#3

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.
Reply
#4

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
Reply
#5

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.
Reply
#6

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.
Reply
#7

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 ^^
Reply
#8

Quote:
Originally Posted by 0xFFFFFF
Посмотреть сообщение
Muchos tienen comando en strcmp y aun no saben como pasarlos a zcmd.
Concuerdo.
Reply
#9

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....
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)