SA-MP Forums Archive
[Tutorial] Truque iCmd 7.0 (organizaзгo) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Truque iCmd 7.0 (organizaзгo) (/showthread.php?tid=471058)



Truque iCmd 7.0 (organizaзгo) - WLSF - 21.10.2013

Introduзгo

Bom, como meus ultimos posts tem sido relacionados a IPSI, e melhorias sistemбticas, uma das minhas includes lanзadas relacionadas a hooks(w!hooks) abordava o conceito de 'state machines' oque era algo muito bom, e inovador aqui na board, nгo sгo lanзados projetos relacionados a isto.

Decidi utilizar o state nгo sу para hooks, mas tambйm por questхes de organizaзгo, oque me fez dar inicio a este tutorial, irei utilizar states para organizar comandos criados com o iCmd 7.0




Apresentaзгo

como muitos sabem, o iCmd funciona de forma diferenciada dos demais(para quem ainda nгo sabe, atualize-se aqui.)

Logo podemos assumir essa estrutura:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])
{

    switch (commandid)
    {
        case iscmd("c,m,d"):
        {
            //comando
        }
        //comandos a mais
    }

    return 1;
}
Como sendo a estrutura padrгo para os usuбrios do iCmd 7.0





Oque eu pretendo sugerir para vocкs nesse tutorial й bastante diferente ao que vemos no dia-a-dia, exemplo de estrutura comum utilizando iCmd 7.0:
pawn Код:
public OnPlayerCommandText(playerid, commandid, params[])
{

    switch (commandid)
    {
        case iscmd("h,e,l,p"), iscmd("a,j,u,d,a"): //normal
        {
            //comando de ajuda
            return 1;
        }
        //comandos a mais

        case iscmd("k,i,l,l"), iscmd("m,a,t,a,r"): //admin
        {
            Kill(id);
            return 1;
        }

        case iscmd("s,l,a,y"), iscmd("t,a,p,a"): //admin
        {
            //tapa
            return 1;
        }

        case iscmd("b,a,n"), iscmd("b,a,n,i,r"): //admin
        {
            Ban(id);
            //comando de ban
            return 1;
        }

        case iscmd("k,i,c,k"), iscmd("c,h,u,t,a,r"): //admin
        {
            Kick(id);
            return 1;
        }

        case iscmd("m,y,p,r,o,p"), iscmd("m,i,n,h,a,e,m,p"): //normal
        {
            //comando da empresa
            return 1;
        }

        case iscmd("m,y,h,o,u,s,e"), iscmd("m,i,n,h,a,c,a,s,a"): //normal
        {
            //comando da casa
            return 1;
        }

        case iscmd("s,t,a,t,s"), iscmd("r,g"): //normal
        {
            //comando de mostrar o RG
            return 1;
        }

        case iscmd("r,e,p,o,r,t"), iscmd("r,e,l,a,t,o,r,i,o"): //normal
        {
            //comando de enviar relatуrio para os admins.
            return 1;
        }

        case iscmd("a,d,m,i,n,s"), iscmd("a,d,m"): //normal
        {
            //ver admins online
            return 1;
        }
    }

    return 0;
}
Especificadores:
Код:
normal		|	Todo mundo pode utilizar.
admins		|	Somente administradores podem utilizar.

Utilizando o conceito de state podemos manipular estes comandos com uma certa organizaзгo a agradar os olhos...
E isso й bom para manipulaзгo, atualizaзгo, e atй mesmo em questгo de execuзгo, quando se trata de comandos normais(players).






Estrutura sugerida por mim:
pawn Код:
main()
{
    state cmd:players;
}


/*
*
* Comandos em geral, onde qualquer jogador
* Tem acesso e pode utilizar.
*
*/


public OnPlayerCommandText(playerid, commandid, params[]) <cmd:players>
{

//inicio dos comandos gerais.
    switch (commandid)
    {
        case iscmd("h,e,l,p"), iscmd("a,j,u,d,a"): //normal
        {
            //comando de ajuda
            return 1;
        }
        //comandos a mais

        case iscmd("m,y,p,r,o,p"), iscmd("m,i,n,h,a,e,m,p"): //normal
        {
            //comando da empresa
            return 1;
        }

        case iscmd("m,y,h,o,u,s,e"), iscmd("m,i,n,h,a,c,a,s,a"): //normal
        {
            //comando da casa
            return 1;
        }

        case iscmd("s,t,a,t,s"), iscmd("r,g"): //normal
        {
            //comando de mostrar o RG
            return 1;
        }

        case iscmd("r,e,p,o,r,t"), iscmd("r,e,l,a,t,o,r,i,o"): //normal
        {
            //comando de enviar relatуrio para os admins.
            return 1;
        }

        case iscmd("a,d,m,i,n,s"), iscmd("a,d,m"): //normal
        {
            //ver admins online
            return 1;
        }
    }
//fim dos comandos
   

    if (none(admin_level, playerid, bit4)) //verificando se o jogador й admin.
        return 0;



    state cmd:admins;

    return OnPlayerCommandText(playerid, commandid, params);
}


/*
*
* Comandos administrativos, onde somente
* administradores online podem alcanзar e utiliza-los.
*
*/


public OnPlayerCommandText(playerid, commandid, params[]) <cmd:admins>
{

    state cmd:players;


//inicio dos comandos administrativos
    switch (commandid)
    {
        case iscmd("k,i,l,l"), iscmd("m,a,t,a,r"): //admin
        {
            Kill(id);
            return 1;
        }

        case iscmd("s,l,a,y"), iscmd("t,a,p,a"): //admin
        {
            //tapa
            return 1;
        }

        case iscmd("b,a,n"), iscmd("b,a,n,i,r"): //admin
        {
            Ban(id);
            //comando de ban
            return 1;
        }

        case iscmd("k,i,c,k"), iscmd("c,h,u,t,a,r"): //admin
        {
            Kick(id);
            return 1;
        }
    }
//fim dos comandos


    return 0;
}




[offtopic] O 'state machine' pode ser aplicado desta forma(organizaзгo) em outros locais tambйm, como por exemplo, um sistema de login

Vocк pode diferenciar login de um admin, para o login de um player normal.

Vale ressaltar tambйm, que nгo й utilizado somente entre organizaзгo player X admin,
pode ser utilizado de vбrias outras maneiras, vai da criatividade de cada um.




OBS: O state й meio confuso para quem nunca o viu, entгo й necessбrio um certo cuidado quando for mexer com o mesmo, pois pode ter fбceis erros, como por exemplo:


A finalidade do tutorial era mostrar o uso diferenciado(states) dentro de um conceito de organizaзгo utilizando iCmd 7.0, mas creio que servirб para outras finalidades tambйm, dъvidas serгo bem-vindas.






Tуpicos relacionados:

- Includes
beta iBits
beta iCmd 7.0(rбpido)
beta iLoops
beta iEach



- Tutoriais
Como usar iLoops!
Usando iBits!
Truques com icmd7

- FilterScripts
Sistema de admin
Sistema de Registro & Login


Respuesta: Truque iCmd 7.0 (organizaзгo) - DanDRT - 21.10.2013

Bom tutorial!


Re: Truque iCmd 7.0 (organizaзгo) - SeV_ - 21.10.2013

Pode Ser Rбpido e tudo.

Mais Prefiro algo que me dк facilidade. Nгo ficar botando:
pawn Код:
switch (commandid)
    {
        case iscmd("i,c,m,d"), iscmd("a,j,u,d,a"):
        {
             return 1;
        }
Уtima include. porйm poderia melhorar neste aspecto. E nгo somente pensar em Velocidade.


Re: Truque iCmd 7.0 (organizaзгo) - smiiir - 21.10.2013

Bom gostei.


Re: Truque iCmd 7.0 (organizaзгo) - Juniiro3 - 21.10.2013

Eu nem sabia que essa keyword existia ( state ), mas poderia me explicar uma coisa? Qual й a funзгo de <> no fim da callback? Isso permite que a callback seja usada 2 vezes?

Se permitir, acaba de surgir um novo mйtodo de hook '--' (ou nгo)


Re: Truque iCmd 7.0 (organizaзгo) - WLSF - 21.10.2013

Quote:
Originally Posted by _SysTeM_OFF
Посмотреть сообщение
Pode Ser Rбpido e tudo.

Mais Prefiro algo que me dк facilidade. Nгo ficar botando:
pawn Код:
switch (commandid)
    {
        case iscmd("i,c,m,d"), iscmd("a,j,u,d,a"):
        {
             return 1;
        }
Уtima include. porйm poderia melhorar neste aspecto. E nгo somente pensar em Velocidade.
Na verdade nгo й tгo complicado.

"oi" e "o,i" sгo a mesma coisa a diferenзa que tem uma vнrgula no meio, que no caso й considerado um caractere alfa-numйrico, logo nгo hб do que reclamar em questгo de facilidade de uso.

E se for o caso de vocк usar ZCMD, como vocк linkaria um comando ao outro ?

pawn Код:
CMD:cmd1(playerid)
{
    //comando
    return 1;
}

CMD:cmd2(playerid)
{
    cmd_cmd2();
    return 1;
}
Realmente acha mais fбcil isto /\, do que isto \/ ?!
pawn Код:
case iscmd("c,m,d,1"), iscmd("c,m,d,2"): //normal
{
    //comando
    return 1;
}

Sem esquecer que iCmd estб em versгo beta, estб sim sendo trabalhado possibilidades de melhoras.
Mas sinceramente falando, do jeito que estб, nгo estб difнcil.




Quote:
Originally Posted by Juniiro3
Посмотреть сообщение
Eu nem sabia que essa keyword existia ( state ), mas poderia me explicar uma coisa? Qual й a funзгo de <> no fim da callback? Isso permite que a callback seja usada 2 vezes?

Se permitir, acaba de surgir um novo mйtodo de hook '--' (ou nгo)
Exatamente isso, o w!hooks foi baseado nisso, pode perceber lб no tуpico.


Re: Truque iCmd 7.0 (organizaзгo) - Dolby - 21.10.2013

Usando state machine...? muito interessante Willian, esta de parabйns


Re: Truque iCmd 7.0 (organizaзгo) - zSuYaNw - 21.10.2013

Belo tutorial Willian!


Re: Truque iCmd 7.0 (organizaзгo) - AlieN_. - 21.10.2013

vc й o segundo kara mais foda ke konhesso luigi,o primeiro й o super mario :B Parabйns


Re: Truque iCmd 7.0 (organizaзгo) - Russo66 - 21.10.2013

Existe testes de velocidades referente ao iCmd vs Zcmd ?