SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Truque iCmd 7.0 (organização)

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031977
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Truque iCmd 7.0 (organização) Empty [Tutorial] Truque iCmd 7.0 (organização)

    Mensagem por Weslley_Script Ter 9 maio 2023 - 15:43

    Introdução

    Bom, como meus últimos posts têm sido relacionados a IPSI, e melhorias sistemáticas, uma das minhas inclui linguagens relacionadas a cabordava o conceito de 'state machines' o que era algo muito bom, e inovador aqui na placa, nгo sгo lanзados projetos relacionados a isto.

    Decidir utilizar o estado não só para hooks, mas também por questões de organização, o que me fez dar início a este tutorial, vou utilizar estados para criar comandos criados com o iCmd 7.0 Apresentado como muitos sabem, o iCmd funciona de forma diferenciada DOS




    demais

    ( para quem ainda nгo sabe, atualize-se.)

    Logo podemos assumir essa estrutura:
    peão Код:

    Código:
    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





    O que eu pretendo sugerir para vocês nesse tutorial é bastante diferente ao que vemos no dia-a-dia, exemplo de estrutura comum utilizando o iCmd 7.0:
    peão Код:

    Código:
    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 );
                retornar  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 ) ;
                retornar  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.
                retornar  1 ;
            }

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

        retorna  0 ;
    }


    Especificadores :
    Код:
    normais | Todo mundo pode usar.
    administradores | Somente os administradores podem utilizar.


    Usando o conceito de estado 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:
    peão Код:

    Código:
    main ( )
    {
        estado  cmd : jogadores;
    }




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


    Código:
    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.
                retornar  1 ;
            }

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


    //fim dos comandos
       

       

    Código:
    if  ( none ( admin_level, playerid, bit4 ) )  //verificando se o jogador é admin.
            retorna  0 ;



        estado  cmd : administradores;

        return OnPlayerCommandText ( playerid, commandid, params ) ;
    }




    /*
    *
    * Comandos administrativos, onde somente
    * os administradores online podem alcançar e utilizá-los.
    *
    */


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

        estado  cmd : jogadores;




    //inicio dos comandos administrativos
       

    Código:
    switch  ( commandid )
        {
            case iscmd ( "k,i,l,l" ) , iscmd ( "m,a,t,a,r" ) :  //admin
            {
                 Kill ( id ) ;
                retornar  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 ) ;
                retornar  1 ;
            }
        }


    //fim dos comandos


       

    Código:
    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 [Tutorial] Truque iCmd 7.0 (organização) Smile

    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 estado é meio confuso para quem nunca o viu, então é necessário um certo cuidado quando para mexer com o mesmo, pois pode ter erros fáceis, como por exemplo:
    • Você cria um estado que está aspirando para uma variável inexistente.

    • Você cria um método utilizando state com nomes aleatórios, o método não será executado, pois o método chamado primeiro sempre será o vбzio
      peão Код:
      public metodo ( )  <>  //mÉtodo inicial
      Logo você precisa apontar a variável para o seu método.
      peão Код:
      estado  var : m;
      public metodo ( )  < var : m >  // será chamado


    • Você gera loops infinitos entre os estados, isso pode falhar todo o seu trabalho após gerar um estouro de pilha no servidor, muita atenção para isso.




    A finalidade do tutorial era mostrar o uso diferenciado(states) dentro de um conceito de organização utilizando o iCmd 7.0, mas acredito que servirá para outras finalidades também, dъvidas serão bem-vindas.


    • Créditos
      • Willian Luigi - Tópico, tutorial e aplicativos com estado.
      • ipsBruno - Incluir
      • [iPs]TeaM
      • Agradecimentos a todos BETA-TESTERS e pessoas que aderiram ao uso da lib.(PT, Kronus13, DanDRT, e os demais...)





    [Tutorial] Truque iCmd 7.0 (organização) D07Xwqb
    [Tutorial] Truque iCmd 7.0 (organização) Yjab9HN

      Data/hora atual: Qua 8 maio 2024 - 18:43