Compartilhe
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

8. Bits & Bytes

em Qui 26 Jan 2017, 03:34
Concluindo esta parte você vai:
Entender os "1" e "0" de um computador: O "verdadeiro" e o "falso", o "sim" e o "não";
Ter uma introdução aos armazenamento de dados.

Para nos tornarmos programadores, temos que entender como um computador funciona.

Esta parte do tutorial pode não ser inicialmente útil diretamente para os seus scripts, devido a você só necessitar manipular bits e Bytes em necessidades pouco mais avançadas, mas será útil para você entender melhor sobre o funcionamento de códigos, de um computador e de armazenamento de dados, o que é um passo para entender "variáveis" entre outras coisas que serão explicados em seguida.


Bits

Um computador funciona de uma maneira bem interessante: 1 e 0.
Todos os comandos de um computador são processados desta maneira, um "sim ou não", um "1 ou 0", um "bit ligado ou bit desligado", um "true ou false".

Os processadores processam estes "1" e "0" bilhões de vezes por segundo, e seus discos de armazenamento guardam zilhões de "1" e "0"! E é assim que uma música, uma imagem, uma letra, é armazenada, processada...


Vamos ver o funcionamento de um computador, na prática:

Você está com 3 amigos na sala — ou seja, 4 pessoas — e quer tirar "Cara ou Coroa" com uma moeda para decidir quem vai ficar com o último pedaço de pizza.
Repito, 1 moeda! Para 4 pessoas.

Você tem a opção de jogar a moeda 3 vezes, como um torneio de eliminação:
Jogue a moeda pela primeira vez: Decide quem ganha, a pessoa "A" ou a pessoa "B".
Jogue a moeda pela segunda vez: Decide quem ganha, a pessoa "C" ou a pessoa "D".
Jogue a moeda pela terceira vez: Decide quem ganha, o vencedor da primeira jogava contra o vencedor da segunda jogada.

Entendeu? Foi uma solução até fácil. Mas e se usarmos o poder do binário? Nós podemos jogar a moeda somente 2 vezes!

"Cara" vai valer "1" e "Coroa" vai valer "0".

Temos 4 possibilidades de resultado:
Duas Coroas = 00
Uma Coroa e uma Cara = 01
Uma Cara e uma Coroa = 10
Duas Caras = 11

Para definirmos o vencedor, é só fazermos assim:
00 = Vencedor "A"
01 = Vencedor "B"
10 = Vencedor "C"
11 = Vencedor "D"

Viu? Com somente 2 jogadas e utilizando o método binário, nós conseguimos definir o vencedor entre 4 pessoas, ou seja, nós temos 4 possibilidades em 2 bits, portanto podemos dizer que um computador consegue armazenar 4 valores diferentes dentro de 2 bits.
A equação é simples: n = 2b, por exemplo, com 4 bits você tem 16 valores diferentes (16 = 24), ou seja, com 4 jogadas (4 bits) você pode fazer isso com 16 pessoas (16 valores diferentes)!

É assim que todas as informações (estou falando de modo literal) funcionam no PC, seja no processamento, seja no armazenamento... O método binário é realmente interessante, rápido e eficaz.

Você inclusive já com certeza usou "true" e "false" em mods. Sabe aqueles mods que usam .ini onde você coloca 1 ou 0 para ativar ou desativar alguma coisa? Então! 1 e 0 é muito usado para dizer "sim" ou "não".


Bytes

1 Byte tem 8 bits (1B = 8b).
2 Bytes tem 16 bits...
...
Isso é extremamente simples, e você já sabendo o que é bit, não há muito o que explicar sobre o que é Byte.
Do mesmo modo que não preciso explicar o que é KB, ou MB, ou GB... Simplesmente, cada unidade armazena um número de Bytes, que armazenam um número de bits, como 1 KB = 1000 B.

Nota: Não confundir b com B!
b = bits
B = Bytes
1 Mb = Megabit = 125.000 Bytes (base 10) — 131.072 Bytes (base 2)
1 MB = MegaByte = 1.000.000 Bytes (base 10) — 1.048.576 Bytes (base 2)
Nota: A contagem base 2 é a mais usada. Mais corretamente chamada de "MiB" mas ainda sempre chamada de "MB" até hoje por pessoas e empresas — seu PC tem 8,0 GiB e não GB.

A velocidade da sua internet é por exemplo 1 Megabit, e não 1 MegaByte.



Em seguida, você aprenderá o que são as variáveis, e mais para frente, você, em geral, entenderá melhor sobre como o computador se comporta, como os dados são armazenados etc etc.


Próxima parte:
9. Variáveis e constantes


Última edição por Junior_Djjr em Sex 27 Jan 2017, 01:00, editado 2 vez(es)

______________________________

avatar
Veterano
Veterano
Mensagens : 2915
Reputação : 81
Desde : 31/07/2013
Ver perfil do usuário

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 14:17
Não tinha parado pra pensar nisso, então podemos processar empresas que oferecem 10MB mas entregam 10Mb por propaganda enganosa? philosoraptor

______________________________
I̜mpe͢r͚at̲ivoͯ, ͘no̅ mụnd̶o͋ ̺sl͟o͗w
́Co͔m͢ó ̼a ̒p̎eçͦa̲ ̖MC͝s ̚só͊ ͡faz̀em̈́ ̛s̸p͆ee͌df̡l̡owͭ
̟Pͭra ̌que̲ ä́ p̐r͜es̋s͉aͤ?
avatar
Scripter CLEO - Básico
Scripter CLEO - Básico
Mensagens : 1023
Reputação : 82
Desde : 04/03/2013
Idade : 17
Ver perfil do usuário

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 14:56
@Elyzandro escreveu:Não tinha parado pra pensar nisso, então podemos processar empresas que oferecem 10MB mas entregam 10Mb por propaganda enganosa? philosoraptor
Elas oferecem 10 Mb, ou não deixam explicito e só colocam "10 Mega"
Anyway, mesmo que estejam oferecendo 10 MB elas são obrigadas a fornecer apenas 10%.
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 15:03
@Nex' escreveu:
@Elyzandro escreveu:Não tinha parado pra pensar nisso, então podemos processar empresas que oferecem 10MB mas entregam 10Mb por propaganda enganosa? philosoraptor
Elas oferecem 10 Mb, ou não deixam explicito e só colocam "10 Mega"
Anyway, mesmo que estejam oferecendo 10 MB elas são obrigadas a fornecer apenas 10%.
Mas seria até menos, os 10% aí nesse caso seria então 100% do 1 Mb, o que nem isso acontece :v:

______________________________

avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18878
Reputação : 344
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com
  • Reputação da mensagem: 100% (1 votos)

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 15:47
@Junior_Djjr escreveu:
Nota: Não confundir b com B!
b = bits
B = Bytes
1 Mb = Megabit = 125.000 Bytes
1 MB = MegaByte = 1.000.000 Bytes

Poderia informar que este é um cálculo de base 10, em base 2 que é o que geralmente usamos, seria 1MB = 1048576 bytes, 1Mb = 131072 bytes, 1KB = 1024B

https://pt.wikipedia.org/wiki/Megabyte (observe a tabela ao lado)

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 17:28
@Fabio escreveu:
@Junior_Djjr escreveu:
Nota: Não confundir b com B!
b = bits
B = Bytes
1 Mb = Megabit = 125.000 Bytes
1 MB = MegaByte = 1.000.000 Bytes

Poderia informar que este é um cálculo de base 10, em base 2 que é o que geralmente usamos, seria 1MB = 1048576 bytes, 1Mb = 131072 bytes, 1KB = 1024B

https://pt.wikipedia.org/wiki/Megabyte (observe a tabela ao lado)
(difícil deixar as coisas simples :v:)

Mas isso não é "errado"? É que foi introduzido o Mebibyte (MiB) e KiB para diferenciar do MB:
https://pt.wikipedia.org/wiki/Mebibyte
Ou seja, na verdade 1 Mib = 131072 bytes.
Na própria página que você enviou diz ser "incoerente".

______________________________

avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18878
Reputação : 344
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 17:34
@Junior_Djjr escreveu:
@Fabio escreveu:
@Junior_Djjr escreveu:
Nota: Não confundir b com B!
b = bits
B = Bytes
1 Mb = Megabit = 125.000 Bytes
1 MB = MegaByte = 1.000.000 Bytes

Poderia informar que este é um cálculo de base 10, em base 2 que é o que geralmente usamos, seria 1MB = 1048576 bytes, 1Mb = 131072 bytes, 1KB = 1024B

https://pt.wikipedia.org/wiki/Megabyte (observe a tabela ao lado)
(difícil deixar as coisas simples :v:)

Mas isso não é "errado"? É que foi introduzido o Mebibyte (MiB) e KiB para diferenciar do MB:
https://pt.wikipedia.org/wiki/Mebibyte
Ou seja, na verdade 1 Mib = 131072 bytes.
Na própria página que você enviou diz ser "incoerente".

É, mas todos usam apenas "Mb"/"MB" para múltiplos de base 2, então é bom esclarecer.

Até o Windows faz isso:


(8192MiB, que o Windows mostra como 8GB, quando o certo deveria ser 8GiB)


Última edição por Fabio em Qui 26 Jan 2017, 19:07, editado 1 vez(es) (Razão : MiB, não MB)

______________________________

Modifico quase qualquer coisa.   :)
------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

Meu PC:
Spoiler:

Configurações PC:
*Processador: Intel Core i7 4790K 4.00GHz LGA1150
*Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
*HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
*HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
*Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
*RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
*Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
*Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
*Monitor: LG 23MP55HQ Full HD HDMI 23'
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 18:00
Talá.

______________________________

avatar
Mensagens Nível 2
Mensagens Nível 2
Mensagens : 50
Reputação : 2
Desde : 14/03/2015
Ver perfil do usuário

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 22:14
@Junior_Djjr escreveu:
A equação é simples: n = 2b, por exemplo, com 4 bits você tem 16 valores diferentes (16 = 24), ou seja, com 4 jogadas (4 bits) você pode fazer isso com 16 pessoas (16 valores diferentes)!
Li isso milhares de vezes e não intendi. ;-; Não seria n = b^2 ? E que diabos é esse 16 = 24?
avatar
Scripter CLEO - Básico
Scripter CLEO - Básico
Mensagens : 1023
Reputação : 82
Desde : 04/03/2013
Idade : 17
Ver perfil do usuário

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 22:18
@Rodrigo294 escreveu:
@Junior_Djjr escreveu:
A equação é simples: n = 2b, por exemplo, com 4 bits você tem 16 valores diferentes (16 = 24), ou seja, com 4 jogadas (4 bits) você pode fazer isso com 16 pessoas (16 valores diferentes)!
Li isso milhares de vezes e não intendi. ;-; Não seria n = b^2 ? E que diabos é esse 16 = 24?
Acho que era 16 = 2^4.
avatar
Mensagens Nível 2
Mensagens Nível 2
Mensagens : 50
Reputação : 2
Desde : 14/03/2015
Ver perfil do usuário

Re: 8. Bits & Bytes

em Qui 26 Jan 2017, 22:48
@Nex' escreveu:
Acho que era 16 = 2^4.
hmmm então provavelmente seria n = 2^b
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: 8. Bits & Bytes

em Sex 27 Jan 2017, 00:59
@Rodrigo294 escreveu:
@Junior_Djjr escreveu:
A equação é simples: n = 2b, por exemplo, com 4 bits você tem 16 valores diferentes (16 = 24), ou seja, com 4 jogadas (4 bits) você pode fazer isso com 16 pessoas (16 valores diferentes)!
Li isso milhares de vezes e não intendi. ;-; Não seria n = b^2 ? E que diabos é esse 16 = 24?
OPA, erro de conversão.
É que eu digitei o tutorial em HTML e converti para BBCode para postar aqui.
n = 2b
16 = 24
Ainda bem que você avisou (eu ainda nem divulguei o tutorial por causa disso mesmo, ainda tá nos "beta testes" :v:

______________________________

avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 4
Reputação : 0
Desde : 22/05/2017
Ver perfil do usuário

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 02:35
Vou aproveitar este capitulo do tutorial pra tirar minha duvida (não encontrei resposta em nenhum outro local do fórum, e minha questão tem a ver com o tema claro! ).

Estou tentando obter o valor de 1 Byte da memória, em específico é o BYTE correspondente a WEAPON_ACCURACY do PED em questão, porém pelo fato do GTA3script não possuir uma variável CHAR não estou conseguindo capturar este valor com o comando READY_MEMORY 'var_1' 1 FALSE 'va2_2', tento capturar com um inteiro (já tentei de 1 a 4  Bytes, e no desespero tentei com Float ) porém o valor retornado é sempre incorreto.

Segue a CLEO_FUNCTION:

{
       LVAR_INT i_char i_accuracy
       CLEO_GET_CHAR_ACCURACY:
           GET_PED_POINTER i_char i_char
           i_char += 0x72C // +0x72C [byte]
           READ_MEMORY i_char 1 FALSE i_accuracy
           // PRINT_FORMATTED_NOW "%d" 1 i_accuracy
       CLEO_RETURN 0 i_accuracy
   }

Alguém poderia me explicar como faço pra obter corretamente o valor de um BYTE ( 0 ... 255) da memória? E saberia me explicar porque definimos um valor de 0 a 100 para a accuracy do ped, e não de 0 a 255 ( ou com 7 bits de 0 a 127) ?

Valew abraço!
avatar
Scripter CLEO - Básico
Scripter CLEO - Básico
Mensagens : 1023
Reputação : 82
Desde : 04/03/2013
Idade : 17
Ver perfil do usuário

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 04:37
CPed + 0x72C, tem certeza que é esse endereço mesmo? veja:
http://gtaforums.com/topic/855432-sa-i-have-several-questions/#entry1068788145
Silent disse que talvez são valores de 0-2.

Also, não é necessário um tipo de 1 byte, basta o size 1 no READ_MEMORY mesmo e já da pra ler normalmente.
avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 4
Reputação : 0
Desde : 22/05/2017
Ver perfil do usuário

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 11:21
Obrigado, pensei ser necessário uma variável com tamanho idêntico para recuperar o dado.

Me baseei neste tópico:
GTA_SA_PEDS
(demorei pra achar esta coordenada de memória, só encontrei aqui - até o momento)

No tópico que você me enviou, ele diz "If I recall correctly", e ele menciona a característica "weapon_skill" como sendo neste endereço, mas também testei com peds pré-configurados que possuíam nível de habilidade 0 ou 1 (ou 2) e está retornando apenas 2 nesta mesma função.
Mas a habilidade que estou buscando mesmo é a actor.accuracy ( ou GET_CHAR_ACCURACY - função que não existe no GTA3script, mas deveria existir!)

Já encontrei várias páginas sobre GTASA Memory address, mas não acho mais nenhuma confirmando esta informação!

No caso do GTASA há a função SET_CHAR_ACCURACY, por acaso há uma forma de eu saber em que ponto da memória o compilador está setando este valor? Assim creio ser um modo de confirmar esta informação.

Agradeço novamente Nex'
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Título : Carinha que mora logo ali
Mensagens : 539
Reputação : 108
Desde : 07/03/2017
Localização : BH - MG
Ver perfil do usuário

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 12:25
@P_H escreveu:
Segue a CLEO_FUNCTION:

{
      LVAR_INT i_char i_accuracy
      CLEO_GET_CHAR_ACCURACY:
          GET_PED_POINTER i_char i_char
          i_char += 0x72C // +0x72C [byte]
          READ_MEMORY i_char 1 FALSE i_accuracy
          // PRINT_FORMATTED_NOW "%d" 1 i_accuracy
      CLEO_RETURN 0 i_accuracy
  }

Pode não ser a questão, mas tem um detalhes, desculpe se já tinha notado (EEK)

Continuar lendo...:

A questão esta no que e enviado e recebido para(da) função.

Veja que você envia primeiro a var com ped e depois a variável accuracy, o que pode bugar já que isto mudaria o valor da variavel se cPed a retornar.
LVAR_INT i_char i_accuracy

Por fim você só retorna a var accurracy
CLEO_RETURN 0 i_accuracy

Desta forma você esta pegando o char novamente que é a primeira variavel, se for o problema inverter a ordem pode solucionar.
LVAR_INTi_accuracy i_char

avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 4
Reputação : 0
Desde : 22/05/2017
Ver perfil do usuário

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 12:40
Creio que minha função esteja correta (também utilizo esta mesma estrutura em varias outras CLEO_FUNCTION read and write memory), segue ela completa:

{
[...]
CLEO_CALL CLEO_GET_CHAR_ACCURACY 0 (i_char) (i_accuracy)
[...]
}

{
LVAR_INT i_char // char recebido por parâmetro
// -
LVAR_INT i_accuracy // variavel criada e utilizada para armazenar o valor do endereço de memória
CLEO_GET_CHAR_ACCURACY:
GET_PED_POINTER i_char i_char //CPed
i_char += 0x72C // +0x72C [byte]
READ_MEMORY i_char 1 FALSE i_accuracy
// PRINT_FORMATTED_NOW "%d" 1 i_accuracy //
// No caso acima está sempre printando o valor 2 na tela
CLEO_RETURN 0 i_accuracy // retornando somente a variável i_accuracy (int)
}

Mas claro, posso ainda não estar enxergando meu erro. Valew Um Geek
avatar
Mensagens Nível 1
Mensagens Nível 1
Mensagens : 4
Reputação : 0
Desde : 22/05/2017
Ver perfil do usuário

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 14:35
Resolvido a dúvida pessoal...

O endereço em questão
(char_weapon_accuracy): CPed + 0x71A

A CLEO_FUNCTION ficou a seguinte:
Código:
 {
       LVAR_INT i_char // char recebido por parâmetro
       //
       LVAR_INT i_accuracy // variavel criada e utilizada para armazenar o valor retornado da consulta
       CLEO_GET_CHAR_ACCURACY:
           GET_PED_POINTER i_char i_char //CPed
           i_char += 0x71A // +0x71A [byte]
           READ_MEMORY i_char 1 FALSE i_accuracy
           // PRINT_FORMATTED_NOW "%d" 1 i_accuracy
       CLEO_RETURN 0 i_accuracy
   }

Post GTA_FORUMS onde me responderam.

Agradeço aos membros Nex' e Um Geek pela força, e assim que finalizar meu mod (estou tentando colocar mais realismo nos membros da gangue) postarei aqui no fórum. Abraço a todos e até mais...


Última edição por P_H em Seg 22 Maio 2017, 15:05, editado 1 vez(es)
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: 8. Bits & Bytes

em Seg 22 Maio 2017, 14:57
Você usou a tag "hide" (esconder) pra mostrar o código. Você escondeu o código, ninguém está vendo.
Use "code"

______________________________

Conteúdo patrocinado

Re: 8. Bits & Bytes

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum