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] usando iBits

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


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

    [Tutorial] usando iBits Empty [Tutorial] usando iBits

    Mensagem por Weslley_Script Sáb 15 Abr 2023 - 11:50

    Introduзгo

    A utilizaзгo deste tуpico ficarб para dъvidas correntes a respeito do iBits, tutorial para quem tem o interesse de entender mais a respeito do iBits e suas funcionalidades, e quem pretende utilizar a include em seus sistemas.
    • Caso contrбrio este tutorial nгo lhe servirб.


    A introduзгo a respeito da iBits jб foi feita no seu devido tуpico: 

    (OBS): Dъvidas a respeito do funcionamento da iBits poderгo ser tirados no tуpico de apresentaзгo da include.





    Apresentaзгo
    Code:

    Código:
    1 bit:

       - Acumula apenas 2 valores(0/1), logo pode se recomendar a substituiзгo por vars booleanas.
       - Os valores sгo manipulados com as funзхes: setBit1, getBit1.


    -----------------------------------------------------------------------------------------------------

    2 bits:

       - Acumula 4 valores(0, 1, 2, 3), valores acima disso deverгo utilizar bits maiores.
       - Os valores sгo manipulados com as funзхes: setBit2, getBit2.
       - Й uma boa variбvel para se usar em sistemas de administraзгo com atй 3 nнveis, por ser economico o suficiente.


    -----------------------------------------------------------------------------------------------------

    4 bits:

       - Acumula 16 valores(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), valores acima disso deversгo utilizar bits maiores.
       - Os valores sгo manipulados com as funзхes: setBit4, getBit4.


    -----------------------------------------------------------------------------------------------------

    16 bits:

       - Acumula 65536 valores(0, 1, 2, 3, 4... 65535), valores maiores que isso deverгo ser utilizados de forma padrгo, sem o uso da iBits.
       - Os valores sгo manipulados com as funзхes: setBit16, getBit16.



    -----------------------------------------------------------------------------------------------------


    O uso da iBits й simples, tentei manter uma sintaxe que nгo complicasse muito a sua compreensгo e que seguisse visual de outras includes, assim para quem jб й acostumado com outras, nгo terб tanto transtorno.

    Em casos comuns vocк costumam declarar variбveis para todo e qualquer tipo de uso.

    A utilizaзгo da include й simples, basta vocк saber qual й a quantidade de valores que vocк quer armazenar em uma variбvel, sabendo isto, vocк cria a variбvel que consiga aguentar oque vocк precisa armazenar.

    O uso й simples por ser sempre igual, a diferenзa sгo apenas os nomes.
    bit1,
    bit2,
    bit4,
    bit16






    Eu citarei os mais bбsicos, comeзando pela variбvel que й utilizada para nнveis administrativos.
    Estou supondo que o sistema sу terб apenas 3 nнveis, logo podemos utilizar a var bit2(2 bits).
    pawn Code:

    Código:
    [size=14][size=13]new bit2: admin_nivel <MAX_PLAYERS> ;

    //bit2 = variбvel de 2 bits, 4 valores ( 0 , 1 , 2 , 3 )
    //admin_nivel = nome da variбvel.
    //MAX_PLAYERS = quantidade de slots que vocк usarб nessa variбvel, ou seja, 500 possibilidades de jogadores.

    //o uso dessa variбvel agora estб subdividido entre usar setBit2 para alterar os valores dela
    //e getBit2 para pegar os valores dela.

    //A variбvel й apenas uma, e como ela serб picotada para economizar memуria.
    //nгo trabalharemos com indexes, mas sim slots...

    public OnPlayerConnect(playerid)
    {
        if ((GetPlayersConnected() / playerid) < 10)
        //cуdigo aleatуrio, ele irб gerar um administrador novo, se a divisгo do ID conectado
        //pelo tanto de players no servidor for menor que 10
        {
            setBit2(admin_nivel, playerid, /*nнvel de admin(0-3)*/ 1);
            //setamos o nнvel de admin do playerid para 1.
            //logo agora podemos fazer as verificaзхes para saber se ele й ou nгo admin
            //utilizando a nova funcionalidade da include iBits
            // - any(arr[], slot, type)
        }
    }

    public OnPlayerCommandText(playerid, commandid, params[])
    {
        if (any(admin_nivel, playerid, bit2))
        {
       
       
            //COMANDOS DO SERVIDOR QUE SУ PODERГO SER UTILIZADOS POR ADMINISTRADORES


        }
       
        //comandos gerais.
       
        return 0;
    }[/size][/size]


    [center]
    [/center]





    Citarei um exemplo agora a respeito de usos gerais,
    todos GameModes fazem uso de um enum com os idx dos valores utilizados,
    e uma variбvel que serve para separar cada valor de cada jogador.

    Tambйm й possнvel fazer isto com o iBits, vejam:
    pawn Code:

    Código:
    [size=14][size=13]new bit16:player_level<MAX_PLAYERS>;
    //variбvel utilizada para manipular a informaзгo level do jogador.
    //ela foi criada como bit 16, logo vocк pode armazenar um valor de 0 a 65535
    //isso indica que o seu sistema pode conter bastantes leveis, nгo ? :D

    //nгo utilizaremos enum, a organizaзгo ficarб separada por variбveis,
    //exemplo:
    /*

    new bit16: player_matou<MAX_PLAYERS>;
    new bit16: player_morreu<MAX_PLAYERS>;

    etc...

    */
    //й possнvel que algumas pessoas perguntem: mas assim nгo vai ficar desotimizado ?
    //nгo ! A memуria serб sim beneficiada pelo fato de vocк estar compactando os valores.


    public OnPlayerConnect(playerid)
    {
        setBit16(player_level, playerid, 0);
        //Estamos setando o level do jogador para zero, ao se conectar.


        return 1;
    }

    public OnPlayerDeath(playerid, killerid, reason)
    {
        if (IsPlayerConnected(killerid))
        {
            setBit16(player_level, playerid, getBit16(player_level, playerid) + 1);
            //Aqui estamos setando o nнvel do jogador para +1 quando ele matar alguйm.
        }
       
       
       
        return 1;
    }[/size][/size]


    [center][/center]





    Exemplo de matrizes com iBits, utilizando a nova atualizaзгo:
    pawn Code:

    Código:
    enum VARS_BIT2
    {
        admin,          //0 = no admin, 1 = admin, 2 = admin leader, 3 = owner
        is_working,     //0 = none, 1 = working, 2 = event, 3 = playing
    };

    bit_array PlayerAdmin_b2 <MAX_PLAYERS, VARS_BIT2 @bit2>;
    //A variбvel PlayerInfo manipula dados de um jogador
    //utilizando o enum como estrutura de idx.
    //os enuns com ibits sгo separados por tamanho
    //1 enum para dados com 2bits, 1 enum para dados com 4 bits e por ai vai...

    enum VARS_BIT16
    {
        level,
        cel
    };

    bit_array PlayerInfo_b16 <MAX_PLAYERS, VARS_BIT16 @bit16>;


    public OnPlayerConnect(playerid)
    {
        bit_array_set:2(PlayerAdmin_b2, playerid, admin, 0);
        bit_array_set:2(PlayerAdmin_b2, playerid, is_working, 0);
       
        bit_array_set:16(PlayerInfo_b16, playerid, level, 0);
        bit_array_set:16(PlayerInfo_b16, playerid, cel, 0);
        return 1;
    }


    public OnPlayerCommandText(playerid, commandid, params[])
    {
        switch (commandid)
        {
            case iscmd("c,e,l,u,l,a,r"): //comprar celular
            {
                bit_array_set:16(PlayerInfo_b16, playerid, cel, 4039); //nъmero fixo exemplar
               
                SendClientMessage(playerid, -1, "Vocк acabou de comprar um celular, nъmero: 4039");
            }
       
       
            case iscmd("t,r,a,b,a,l,h,a,r"):
            {
                bit_array_set:2(PlayerAdmin_b2, playerid, is_working, 1);
            }

            case iscmd("a,d,m,i,n,s"):
            {
                new msg[128];
                each(Players->new i) // iLoops / iEach
                {
                    if (bit_array_get:2(PlayerAdmin_b2, i, admin) > 0) //verifica se o jogador й admin.
                    {
                        format(msg, 128, "%sAdmin id %d\n", msg, i);
                    }
                }
               
                ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Admins online", msg, "OK", "");
                return 1;
            }
        }
       
        return 0;
    }









    Testem vocкs prуprios fazerem cуdigos pequenos utilizando o iBits,
    as dъvidas podem ser tiradas aqui, eu vou atualizando o tуpico ao longo das dъvidas que aparecerem.




    Dica: Й muito importante vocкs entenderem o porque de usar o iBits, ele pode sim diminuir o tamanho de seu AMX, e eu lhes garanto que nгo й um resultado pequeno, que nгo tenha tanta diferenзa.
    O uso й simples, e pelo fato de vocк poder separar as variбveis por classes como bit1, bit2... etc, isso faz com que seu cуdigo fique mais organizado e controlado.

    Sem tirar que a manipulaзгo do iBits mantйm a velocidade, vocк nгo terб problemas por perca de velocidade,
    seu cуdigo sу tem a ganhar...

    • Crйditos
      • Willian Luigi - Include & Tуpico
      • Agradecimentos a ipsBruno
      • [iPs]TeaM





    [Tutorial] usando iBits D07Xwqb
    [Tutorial] usando iBits Yjab9HN

      Data/hora atual: Qua 1 maio 2024 - 20:46