[Tutorial] Usando rBits
#1

Sumбrio:
...• Oque й rBits?
...• Porque usar rBits?
...• Como usar rBits?
...• Poupando memуria:
...• Quais sгo os limites?
...• Onde posso encontrar rBits?
...• Quem desenvolveu rBits?
...• Agradecimentos.

O que й rBits?
rBits й uma forma pratica e fбcil de manipular bits nas arrays.

Porque usar rBits?
Usando-a corretamente vocк irб economizar muita memуria!
Muita gente utiliza arrays de 32bits( as famosas new array[tamanho]; ) que podem armazenar valores atй 2147483647, quando sу precisam armazenar valores de 0 e 1.

Com rBits vocк pode criar uma array que armazena apenas os valores que vocк precisa( Assim, poupando memуria ).

Como usar rBits?
Para declarar uma bit array vocк apenas deve criar uma array com o nome Bit e em seguida o seu tipo ( 16, 8, 4, 2 ou 1 ) e o tamanho entre '<' e '>'.
pawn Code:
new Bit16: MinhaArray <5>;
Para definir um valor а essa array apenas use Bit seguida de seu tipo e entгo adicione '_Set'. Usando nosso exemplo, uma array 16-bit ficaria:
pawn Code:
Bit16_Set(bitArr[], arrIdx, value);
// ...
Bit16(MinhaArray, 1, 250);
Para obter o valor й muito similar, vocк apenas troca o '_Set' para '_Get'.
pawn Code:
Bit16_Get(bitArr, arrIdx);
// ...
Bit16_Get(MinhaArray, 1);
Poupando memуria:
Aqui estб o que eu quero dizer com a poupanзa de memуria. Veja esse exemplo ( note que isto й apenas um exemplo ):

Muitas pessoas escrevem seus cуdigos desse jeito.
pawn Code:
#include <a_samp>
   
new
    bool: g_PlayerSpawned[MAX_PLAYERS]
;

public OnPlayerSpawn(playerid)
{
    g_PlayerSpawned[playerid] = true;
    return 1;
}

public OnPlayerDeath(playerid)
{
    g_PlayerSpawned[playerid] = false;
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    g_PlayerSpawned[playerid] = false;
    return 1;
}

stock IsPlayerSpawned(playerid)
    return g_PlayerSpawned[playerid];
O tamanho do arquivo .amx й de 726 bytes. Estamos usando arrays 32-bits neste exemplo quando nуs precisamos apenas armazenar valores entre 0 e 1. Sendo que poderнamos usar arrays de 1-bit:

pawn Code:
#include <a_samp>
#include <rBits>

new
    Bit1: g_PlayerSpawned <MAX_PLAYERS>
;

public OnPlayerSpawn(playerid)
{
    Bit1_Set(g_PlayerSpawned, playerid, true);
    return 1;
}

public OnPlayerDeath(playerid)
{
    Bit1_Set(g_PlayerSpawned, playerid, false);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    Bit1_Set(g_PlayerSpawned, playerid, false);
    return 1;
}

stock IsPlayerSpawned(playerid)
    return Bit1_Get(g_PlayerSpawned, playerid);
Agora o tamanho do arquivo .amx й de 473 bytes. Nгo й muita coisa aqui, mas imagine em um script grande com muitas arrays!

Aqui, outro exemplo (Um exemplo meio bobo, mas nгo consegui pensar em outro.):

Vamos dizer que o valor mбximo que o nosso veнculo pode ter й 65535 e estamos usando arrays de 32-bits:
pawn Code:
#include <a_samp>

new
    g_VehiclePrice[MAX_VEHICLES]
;

public OnVehicleSpawn(vehicleid)
{
    g_VehiclePrice[vehicleid] = random(65535); // Vamos dizer que o valor mбximo permitido seria 65535.
    return 1;
}
O tamanho do arquivo compilado seria 2.12 kB.

Agora, vamos usar arrays de 16-bits ( porque sу precisamos armazenar valores atй no mбximo 65535 ):

pawn Code:
#include <a_samp>
#include <rBits>

new
    Bit16: g_VehiclePrice <MAX_VEHICLES>
;

public OnVehicleSpawn(vehicleid)
{
    Bit16_Set(g_VehiclePrice, vehicleid, random(65535));
    return 1;
}
O tamanho agora й somente 1.37 kB.

Quais sгo os limites?
Nome da arrayValor mбximo armazenбvel (limite)
arrays de 1-bitLimitado a valores atй 1 (0x1). " "
arrays de 2-bitLimitado a valores atй 3 (0x3). " "
arrays de 4-bit (nibble arrays)Limitado a valores atй 15 (0xF). " "
arrays de 8-bit (tambйm conhecidas como char arrays no PAWN)Limitado a valores atй 255 (0xFF). " "
arrays de 16-bitLimitado a valores atй 65535 (0xFFFF). " "
arrays de 32-bitUtilize as arrays comuns.
Atenзгo:
" " = Significa que vocк pode usar valores entre 0 e 1. Caso vocк adicionar um valor mais alto ele irб repetir sempre entre 1 e 0.

Onde posso encontrar rBits?
https://sampforum.blast.hk/showthread.php?tid=275142

Quem desenvolveu rBits?
Ryder`

Agradecimentos:
Agradecimentos a Ryder` por disponibilizar em seu tуpico cуdigos para o uso neste tutorial.
Reply
#2

LOOOL parabйns! muito lecal!
first ^^
Reply
#3

Nem sabia que isso existia, legal o tutorial vou comeзar a estudar isso hm.
Reply
#4

Otimo Tutorial Larceny...
Reply
#5

Quote:
Originally Posted by Willian_Luigi
View Post
Nem sabia que isso existia, legal o tutorial vou comeзar a estudar isso hm.
Tambйm nгo sabia que isso existia.
Boa tutorial! :}
Reply
#6

Bem legal como vocк disse se for em um grande script economizara bastante .. 100/10
Reply
#7

Quote:
Originally Posted by Willian_Luigi
View Post
Nem sabia que isso existia, legal o tutorial vou comeзar a estudar isso hm.
Eu jб tinha ouvido falar, mas nunca tinha pesquisado/estudado/interessado..

Vou comeзar a usar, a partir de hoje
Reply
#8

Muito Bom
Reply
#9

Sem dъvidas уtimo tutorial.
Reply
#10

Ele manipula arrays, nгo variбveis, apenas uma correзгo. Уtimo tutorial
Reply
#11

PERFEITO!

nem sabia que existia esse negocio!

talvez eu use
Reply
#12

Quote:
Originally Posted by RockFire
View Post
Ele manipula arrays, nгo variбveis, apenas uma correзгo. Уtimo tutorial
Verdade, pequeno engano meu.
Valeu, corrigido.
Reply
#13

ja tinha visto mas nao me interessado
vou usar apartir de hj
Reply
#14

Jб tinha usado ela em um pequeno GM que eu fiz.
------->
Bom tutorial [10/10].
Reply
#15

agora que vi o tutorial!,
muito bom, eu precisava aprender *---*

+rep!
Reply
#16

UFF axei q era o unico q nгo conhecia... valeu por compartilhar isso, vou comeзar a estudar....
Reply
#17

obrigada novamente, com este tutorial aprendi tambйm a ajeitar minha assinatura ^^'
Reply
#18

Jб usei, sу que nгo gostei, bom!
Reply
#19

Muito bem, gostei do tutorial por os seguintes motivos.

Organizaзгo, Boa Explicaзгo e um Bom Estilo.

10/10 (:
Reply
#20

Уtimo tutorial.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)