[Include] beta icmd 7.0 (rбpido)
#1

Introduзгo

Este й um novo processador de comandos, nгo hб CallFunction como todos os outros. Neste novo sistema, consegui projetar os comandos de forma que cada um represente ids, e que assim nгo seja necessбrio o uso de strcmp.

Como ainda estб em fase de testes, alguns comandos com caracteres especiais sгo recusados, e o uso dele й um pouco mais complicado que os outros tradicionais comandos. Por isto, nгo recomendo que novatos utilizem este sistema, й um pouco mais complexo que usar zcmd ou icmd 6

Include

icmd7.inc

pawn Код:
/*
 * --- iCmd 7 ---
 * Por Bruno da Silva
 * [iPs]TeaM
 * mixmusicas.com.br ipsbr.net
 * email@ brunodasilva.com
 *
*/


#define retn("%0") init(%0,@,@)

#define init(%0,%1) def%0(%1)

#define defA(%1) init(%1)+(0x40BF)
#define defB(%1) init(%1)+(0x41BE)
#define defC(%1) init(%1)+(0x42BD)
#define defD(%1) init(%1)+(0x43BC)
#define defE(%1) init(%1)+(0x44BB)
#define defF(%1) init(%1)+(0x45BA)
#define defG(%1) init(%1)+(0x46B9)
#define defH(%1) init(%1)+(0x47B8)
#define defI(%1) init(%1)+(0x48B7)
#define defJ(%1) init(%1)+(0x49B6)
#define defK(%1) init(%1)+(0x4AB5)
#define defe(%1) init(%1)+(25755)
#define deff(%1) init(%1)+(26010)
#define defg(%1) init(%1)+(26265)
#define defq(%1) init(%1)+(28815)
#define defn(%1) init(%1)+(28050)
#define defo(%1) init(%1)+(28305)
#define defp(%1) init(%1)+(28560)
#define defb(%1) init(%1)+(24990)
#define defc(%1) init(%1)+(25245)
#define defd(%1) init(%1)+(25500)
#define defx(%1) init(%1)+(30600)
#define defy(%1) init(%1)+(30855)
#define defz(%1) init(%1)+(31110)
#define defr(%1) init(%1)+(29070)
#define defs(%1) init(%1)+(29325)
#define defh(%1) init(%1)+(26520)
#define defi(%1) init(%1)+(26775)
#define defj(%1) init(%1)+(27030)
#define defk(%1) init(%1)+(27285)
#define defq(%1) init(%1)+(28815)
#define defr(%1) init(%1)+(29070)
#define defs(%1) init(%1)+(29325)
#define defa(%1) init(%1)+(24735)
#define defb(%1) init(%1)+(24990)
#define defc(%1) init(%1)+(25245)
#define defd(%1) init(%1)+(25500)
#define deft(%1) init(%1)+(29580)
#define defu(%1) init(%1)+(29835)
#define defv(%1) init(%1)+(30090)
#define defw(%1) init(%1)+(30345)
#define defx(%1) init(%1)+(30600)
#define defy(%1) init(%1)+(30855)
#define defz(%1) init(%1)+(31110)
#define def0(%1) init(%1)+(12240)
#define defL(%1) init(%1)+(0x4BB4)
#define defM(%1) init(%1)+(0x4CB3)
#define defN(%1) init(%1)+(0x4DB2)
#define defO(%1) init(%1)+(0x4EB1)
#define defP(%1) init(%1)+(0x4FB0)
#define defQ(%1) init(%1)+(0x50AF)
#define defR(%1) init(%1)+(0x51AE)
#define defS(%1) init(%1)+(0x52AD)
#define defT(%1) init(%1)+(0x53AC)
#define defU(%1) init(%1)+(0x54AB)
#define defV(%1) init(%1)+(0x55AA)
#define defW(%1) init(%1)+(0x56A9)
#define defX(%1) init(%1)+(0x57A8)
#define defY(%1) init(%1)+(0x58A7)
#define defZ(%1) init(%1)+(0x59A6)
#define def1(%1) init(%1)+(12495)
#define def2(%1) init(%1)+(12750)
#define def3(%1) init(%1)+(13005)
#define def4(%1) init(%1)+(13260)
#define def5(%1) init(%1)+(13515)
#define def7(%1) init(%1)+(14025)
#define def8(%1) init(%1)+(14280)
#define def9(%1) init(%1)+(14535)
#define defa(%1) init(%1)+(24735)
#define defl(%1) init(%1)+(27540)
#define defm(%1) init(%1)+(27795)
#define defe(%1) init(%1)+(25755)
#define deff(%1) init(%1)+(26010)
#define defg(%1) init(%1)+(26265)
#define defh(%1) init(%1)+(26520)
#define defi(%1) init(%1)+(26775)
#define defj(%1) init(%1)+(27030)
#define def6(%1) init(%1)+(13770)
#define defk(%1) init(%1)+(27285)
#define defl(%1) init(%1)+(27540)
#define defm(%1) init(%1)+(27795)
#define defn(%1) init(%1)+(28050)
#define defo(%1) init(%1)+(28305)
#define defp(%1) init(%1)+(28560)
#define deft(%1) init(%1)+(29580)
#define defu(%1) init(%1)+(29835)
#define defv(%1) init(%1)+(30090)
#define defw(%1) init(%1)+(30345)

#define def@(%1) 0

#define iscmd retn

stock __@cmdvalue, __@loopv;
stock __@param[126];

public OnPlayerCommandText( playerid, cmdtext[] ) {

    __@cmdvalue = 0;
    __@loopv = 0;
    __@param[0] = EOS;

    while (cmdtext[++__@loopv] > ' ')  {
        __@cmdvalue += (0xff * tolower(cmdtext[__@loopv]));
    }



    while (strlen(cmdtext) > __@loopv && cmdtext[++__@loopv] == ' ') {}

    if( __@loopv < strlen(cmdtext)) {
        format(__@param, 125, "%s", cmdtext[__@loopv]);
    }

    #if defined icmd@___OnPlayerCommandText
    return icmd@___OnPlayerCommandText(playerid, __@cmdvalue, __@param);
    #else
    return 0;
    #endif
}


#if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
#else
    #define _ALS_OnPlayerCommandText
#endif
#define OnPlayerCommandText icmd@___OnPlayerCommandText
#if defined icmd@___OnPlayerCommandText
    forward icmd@___OnPlayerCommandText(playerid, commandid, params[]);
#endif

Novo Uso

Agora a callback OnPlayerCommandText foi modificada, e o uso dela serб o seguinte:

pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])


Commandid? Params?

Simples, commandid representa o ID do comando. E params[] representa os parвmetros do comando — caso o jogador tenha digitado algum, й claro



Alguns exemplos de uso:


/vida [valor]

pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {


        case iscmd("v,i,d,a"): {

            if(!params[0]) {
                return SendClientMessage(playerid, -1, "[Erro]: Use /vida [valor]");
            }

            SetPlayerHealth(playerid, floatstr(params));

            return true;
        }


        default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
    }

    return false;
}


/dinheiro [valor]

pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {


        case iscmd("d,i,n,h,e,i,r,o"): {

            if(!params[0]) {
                return SendClientMessage(playerid, -1, "[Erro]: Use /dinheiro [valor]");
            }

            GivePlayerMoney(playerid, strval(params));

            return true;
        }


        default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
    }

    return false;
}

/eu [mensagem]

pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {


        case iscmd("e,u"): {

            if(!params[0]) {
                return SendClientMessage(playerid, -1, "[Erro]: Use /eu [mensagem]");
            }

            static szName[128];
            GetPlayerName(playerid, szName, sizeof szName);
            format(szName, 128, "O jogador %s ANUNCIOU: %s", szName, params);

            SendClientMessageToAll(-1, szName);

            return true;
        }


        default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
    }

    return false;
}


/vida /dinheiro /eu

pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {

        case iscmd("v,i,d,a"): {

            if(!params[0]) {
                return SendClientMessage(playerid, -1, "[Erro]: Use /vida [valor]");
            }

            SetPlayerHealth(playerid, floatstr(params));

            return true;
        }



        case iscmd("d,i,n,h,e,i,r,o"): {

            if(!params[0]) {
                return SendClientMessage(playerid, -1, "[Erro]: Use /dinheiro [valor]");
            }

            GivePlayerMoney(playerid, strval(params));

            return true;
        }


        case iscmd("e,u"): {

            if(!params[0]) {
                return SendClientMessage(playerid, -1, "[Erro]: Use /eu [mensagem]");
            }

            static szName[128];
            GetPlayerName(playerid, szName, sizeof szName);
            format(szName, 128, "O jogador %s ANUNCIOU: %s", szName, params);

            SendClientMessageToAll(-1, szName);

            return true;
        }


        default: return SendClientMessage(playerid, -1, "[Erro]: Comando desconhecido, desculpe.");
    }

    return false;
}

Importante: Como puderam ver, ele funciona desta forma. Com switch case. Apesar de tambйm funcionar com if eu prefiro que usem com switch, por ser muito mais rбpido


Sempre que usarem

PHP код:
iscmd("string"); 
deve separar as strings pro virgula, para o processador conseguir processar os caracteres

PHP код:
iscmd("s,t,r,i,n,g"
caso contrбrio darб erro.


pawn Код:
public OnPlayerCommandText(playerid, commandid, params[]) {

    switch(commandid) {

        /*
             /comando
        */

        case iscmd("C,O,M,A,N,D,O"): {

            if(!params[0]) {
                // nгo digitou parametros
            }
            else
           
            {
                // digitou parametros
            }
   

            return true;
        }

        default: {
            // comando desconhecido
        }
    }

    return false;
}



Notas finais

Sei que muita gente jб tem um sistema de comandos preferencial. Mas eu quero deixar uma coisa clara: Se vocк quer velocidade, esse й o processador que vocк deverб usar. Apesar do difнcil uso dele, й tudo compensado na velocidade e na clareza de como ele funciona.

Nгo postarei aqui os testes de velocidade, vocкs podem fazer por si prуprios e verгo que o processador й em torno de duas vezes mais veloz que os processadores atuais. Enquanto os atuais processam 250 comandos em um segundo, este processa 500 comandos em um segundo.


Autoria

Este sistema foi criado por Bruno da Silva. Agradeзo ao tutorial pre-processor de ******

Equipe [iPs]TeaM!



Abraзos
Reply


Messages In This Thread
beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 04:05
Re: beta icmd 7.0 (rбpido) - by Petrick™ - 07.10.2013, 04:20
Respuesta: Re: beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 04:21
Re: beta icmd 7.0 (rбpido) - by ThuuGLif3 - 07.10.2013, 04:25
Respuesta: Re: beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 04:29
Re: beta icmd 7.0 (rбpido) - by Schocc - 07.10.2013, 04:50
Respuesta: Re: beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 05:15
Re: beta icmd 7.0 (rбpido) - by zSuYaNw - 07.10.2013, 05:16
Respuesta: beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 05:18
Respuesta: beta icmd 7.0 (rбpido) - by DanDRT - 07.10.2013, 06:31
Re: beta icmd 7.0 (rбpido) - by zSuYaNw - 07.10.2013, 06:37
Respuesta: Re: beta icmd 7.0 (rбpido) - by DanDRT - 07.10.2013, 06:46
Respuesta: Re: beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 07:29
Re: Respuesta: Re: beta icmd 7.0 (rбpido) - by zSuYaNw - 07.10.2013, 07:55
Re: Respuesta: Re: beta icmd 7.0 (rбpido) - by PT - 07.10.2013, 08:19
Re: beta icmd 7.0 (rбpido) - by Juniiro3 - 07.10.2013, 09:25
Re: beta icmd 7.0 (rбpido) - by WLSF - 07.10.2013, 11:35
Re: beta icmd 7.0 (rбpido) - by smiiir - 07.10.2013, 11:53
Re: beta icmd 7.0 (rбpido) - by shittt - 07.10.2013, 12:50
Re: beta icmd 7.0 (rбpido) - by Mteck - 07.10.2013, 12:53
Re: beta icmd 7.0 (rбpido) - by RuanRider - 07.10.2013, 13:39
Re: beta icmd 7.0 (rбpido) - by Russo66 - 07.10.2013, 14:24
Re: beta icmd 7.0 (rбpido) - by Falcon. - 07.10.2013, 14:35
Re: beta icmd 7.0 (rбpido) - by SkullFire - 07.10.2013, 15:47
Re: beta icmd 7.0 (rбpido) - by Jardell - 07.10.2013, 16:15
Re: beta icmd 7.0 (rбpido) - by zPain - 07.10.2013, 16:20
Respuesta: Re: beta icmd 7.0 (rбpido) - by ipsBruno - 07.10.2013, 19:30
Re: Respuesta: Re: beta icmd 7.0 (rбpido) - by RebeloX - 10.10.2013, 15:22
Respuesta: Re: Respuesta: Re: beta icmd 7.0 (rбpido) - by ipsBruno - 10.10.2013, 19:36
Re: Respuesta: Re: Respuesta: Re: beta icmd 7.0 (rбpido) - by PT - 10.10.2013, 23:08
Re: beta icmd 7.0 (rбpido) - by Jimmmy - 23.02.2015, 21:04
Re: beta icmd 7.0 (rбpido) - by HoTMalkovich - 23.02.2015, 21:50
Respuesta: beta icmd 7.0 (rбpido) - by ipsBruno - 23.02.2015, 23:21

Forum Jump:


Users browsing this thread: 2 Guest(s)