Compartilhe
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Ter 23 Ago 2016, 00:13
@Fabio escreveu:size 16?
É, por quê? Não entendi o problema? É o padrão de tamanho de bytes para pegar strings de nome de seções que vão estar no menu...
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18911
Reputação : 346
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com

Re: Novo Mod Planter (nome provisório)

em Ter 23 Ago 2016, 01:38
@Deadstroke escreveu:
@Fabio escreveu:size 16?
É, por quê? Não entendi o problema? É o padrão de tamanho de bytes para pegar strings de nome de seções que vão estar no menu...

https://github.com/cleolibrary/CLEO4/blob/master/CCustomOpcodeSystem.cpp

Vai acontecer isso:

Código:

            0AC6: 2@ = label @str_PEDESTRIANS offset
            0A8C: write_memory 30@ size 16 value 2@ virtual_protect 0

Memória antes do código:
Código:

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Digamos que o endereço seja esse:
Código:

2@ = 0x35002063

Depois do código:
Código:

63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63

https://github.com/cleolibrary/CLEO4/blob/master/CCustomOpcodeSystem.cpp#L850
https://github.com/cleolibrary/CLEO4/blob/master/CCustomOpcodeSystem.cpp#L860

0x54 = 84 decimal

______________________________

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 - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 00:35
Ainda não consigo fazer isso direito (vide erros 1 e 2 nas linhas 64 e 66).

Script:

Código:
{$cleo}
0000:
 
const
    sscanf = 0x8220AD
    _COUNT_SECTIONS_ = 26@    
    _TH_MEM_SECTIONS_ = 27@
    _OFFSET_SECTIONS_ = 28@    
    _COUNT_OBJS_ = 29@
    _TH_MEM_OBJS_ = 30@
    _OFFSET_OBJS_ = 31@    
end

var
    _COUNT_SECTIONS_ : int
    _COUNT_OBJS_ : int
end
 
while true
    wait 0
    
    if  8AAB:   file_exists "cleo\MapperMod.ini"
    then
        0ACD: show_text_highpriority "The file ~b~'cleo\MapperMod.ini'~s~ haven't been found." time 7000
        0A93: end_custom_thread
    end
    
    0AB1: call_scm_func @ReadAllIde 3 mod 1 offset_section 0 offset_objects 0 -> _COUNT_SECTIONS_ _COUNT_OBJS_
    wait 0
    
    0085: 1@ = _COUNT_SECTIONS_
    1@ *= 20
    0AC8: _TH_MEM_SECTIONS_ = allocate_memory_size 1@    
    0AC7: _OFFSET_SECTIONS_ = var _TH_MEM_SECTIONS_ offset
    
    //Peds
    0A8E: 3@ = _OFFSET_SECTIONS_ + 0
    0A8C: write_memory 3@ size 4 value -3 virtual_protect 0
    0A8E: 3@ = _OFFSET_SECTIONS_ + 4
    0AC6: 4@ = label @str_PEDESTRIANS offset
    0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 11
    0A8E: 3@ = _OFFSET_SECTIONS_ + 20          
    //Vehicles
    0A8C: write_memory 3@ size 4 value -2 virtual_protect 0
    0A8E: 3@ = _OFFSET_SECTIONS_ + 24
    0AC6: 4@ = label @str_VEHICLES offset
    0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 8
    0A8E: 3@ = _OFFSET_SECTIONS_ + 40            
    //Weapons
    0A8C: write_memory 3@ size 4 value -1 virtual_protect 0
    0A8E: 3@ = _OFFSET_SECTIONS_ + 44
    0AC6: 4@ = label @str_WEAPONS offset
    0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 7

    _OFFSET_SECTIONS_ += 60

    //Objects memory
    0085: 1@ = _COUNT_OBJS_
    1@ *= 40            
    0AC8: _TH_MEM_OBJS_ = allocate_memory_size 1@    
    0AC7: _OFFSET_OBJS_ = var _TH_MEM_OBJS_ offset
    
    //ERRO 1: essa função abaixo está dando crash por motivos X!!!  
    0AB1: call_scm_func @ReadAllIde 3 mod 2 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_
    
    //ERRO 2: não consigo ler os valores salvos corretamente, acredito que tenham sifo salvos de maneira errada!  
    while true
        wait 0
        if 0ADC: test_cheat "fil"
        jf continue
        0AD1: show_formatted_text_highpriority "%d %d" time 2500 _COUNT_SECTIONS_ _COUNT_OBJS_
        wait 2000
        0ACD: show_text_highpriority "SECTIONS" time 7000
        wait 2000      
        0AC7: 3@ = var _TH_MEM_SECTIONS_ offset
        For 1@ = 1 to _COUNT_SECTIONS_
            0A8D: 4@ = read_memory 3@ size 4 virtual_protect 0
            3@ += 4
            //0A8D: 5@v = read_memory 3@ size 16 virtual_protect 0
            3@ += 16
            //0AD1: show_formatted_text_highpriority "%d %s" time 1000 4@ 5@v
            0AD1: show_formatted_text_highpriority "%d" time 1000 4@
            wait 1000                                    
        end
        /*0ACD: show_text_highpriority "OBJECTS" time 7000
        wait 2000
        0085: 0@ = _TH_MEM_OBJS_
        For 1@ = 1 to _COUNT_OBJS_
            0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0
            0@ += 4
            0A8D: 3@v = read_memory 0@ size 32 virtual_protect 0
            0@ += 32
            0A8D: 10@ = read_memory 0@ size 4 virtual_protect 0
            0@ += 4            
            0AD1: show_formatted_text_highpriority "%d %s %s" time 1000 2@ 3@v 10@
            0@ += 40
            0AD1: show_formatted_text_highpriority "%d" time 1000 2@
            wait 100                                    
        end  */              
    end    
end


//0AB1: call_scm_func @ReadAllIde 3 mod 2 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_ -> _COUNT_SECTIONS_ _COUNT_OBJS_
//mod: 1 = count; 2 = save    
:ReadAllIde
27@ = 0
28@ = 0
if  0A9A: 31@ = openfile "cleo\MapperMod.ini" mode "rt"  // IF and SET
then        
    //Reading .ini lines
    0AC6: 11@ = label @Buffer_0_1_128 offset
    while   File.ReadString(31@, 11@, 128)        
        //Check if it's 'files'
        0AC6: 29@ = label @str_FILES offset
        if  0AB1: call_scm_func @StringsCompare_bySize 3 29@ 11@ Size 5
        then              
            while   File.ReadString(31@, 11@, 128)                
                //Check if it's 'end'
                0AC6: 2@ = label @str_END offset
                if  0AB1: call_scm_func @StringsCompare_bySize 3 29@ 11@ Size 3
                then    break
                end                
                //Read line from .ini
                0AC6: 12@ = label @Buffer_0_2_32 offset
                0AC6: 13@ = label @Buffer_0_3_16 offset
                0AC6: 14@ = label @Buffer_0_4_32 offset
                0AA7: call_function sscanf num_params 5 pop 5 receive 14@ 13@ 12@ format "%d%s%s" bufferToRead 11@ -> 15@    //readstring
                if  15@ == 3
                then
                    //Check if the file exists and read it
                    if  0A9A: 30@ = openfile 14@ mode "rt"  // IF and SET
                    then                        
                        //Count or save sections
                        if  0@ == 2
                        then
                            0A8D: 15@ = read_memory 12@ size 4 virtual_protect 0
                            0A8C: write_memory 1@ size 4 value 15@ virtual_protect 0
                            1@ += 4
                            0A8C: write_memory 1@ size 16 value 13@ virtual_protect 0
                            1@ += 16                              
                        end
                        27@++
                        //Count or save ide lines
                        0AB1: call_scm_func @ReadFileTest 4 file 30@ mod 0@ offset_objects 2@ section 15@ -> counter 26@
                        005A: 28@ += 26@                                                    
                    end
                end                                    
            end
            27@ += 3    //More three lines to peds, cars and weapons
            break                
        end
    end
    file.Close(31@)        
end
if  0@ == 1  
then    0AB2: ret 2 27@ 28@
else    0AB2: ret 0
end


//0AB1: call_scm_func @ReadFileTest 4 file 30@ mod 0@ offset_objects 2@ section 15@ -> counter 26@
:ReadFileTest
0085: 30@ = 0@      
31@ = 0
0AC6: 10@ = label @Buffer_1_1_128 offset
while   File.ReadString(30@, 10@, 128)
    if 0AB1: call_scm_func @IsValidString 1 10@
    jf  continue    
    gosub   @ReadFile2        
end
file.Close(30@)  
0AB2: ret 1 31@


:ReadFile2
0AC6: 6@ = label @str_ANIM offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    0085: 29@ = 3@
    gosub   @ReadFile3
    return    
end
0AC6: 6@ = label @str_OBJS offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    0085: 29@ = 3@
    gosub   @ReadFile3
    return    
end
0AC6: 6@ = label @str_TOBJ offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    0085: 29@ = 3@
    gosub   @ReadFile3
    return    
end
0AC6: 6@ = label @str_WEAP offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    29@ = -1
    gosub   @ReadFile3
    return    
end
return


:ReadFile3
0AC6: 11@ = label @Buffer_1_2_32 offset  
0AC6: 12@ = label @Buffer_1_3_32 offset  
0AC6: 13@ = label @Buffer_1_4_32 offset
0AC6: 14@ = label @Buffer_1_5_32 offset  

while   File.ReadString(30@, 10@, 128)    
    //Is string valid?
    if  0AB1: call_scm_func @IsValidString 1 10@
    jf  continue        
    //Check if it's END
    0AC6: 6@ = label @str_END offset
    if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 3
    then    break
    end                    
    //Eliminate ","
    repeat
        0A8D: 21@ = read_memory 10@ size 1 virtual_protect 0
        if  21@ == 44 // ","            
        then    0A8C: write_memory 10@ size 1 value 0x20 virtual_protect 0  //Writing space (0x20) in place of "," (0x2C)
        end        
        10@ += 1
    until   21@ == 0x00 // end of text                                    
    //Reading again and checking line
    0AC6: 10@ = label @Buffer_1_1_128 offset
    0AA7: call_function sscanf num_params 6 pop 6  receive 14@ 13@ 12@ 11@ format "%d%s%s%s"  bufferToRead 10@ -> 17@    //readstring
    if  17@ == 4
    then
        31@++    
        if  1@ == 2
        then
            0A8D: 17@ = read_memory 11@ size 4 virtual_protect 0
            0A8C: write_memory 2@ size 4 value 17@ virtual_protect 0
            2@ += 4
            0A8C: write_memory 2@ size 32 value 12@ virtual_protect 0
            2@ += 32
            0A8C: write_memory 2@ size 4 value 29@ virtual_protect 0
            2@ += 4
        else
            0A8D: 21@ = read_memory 11@ size 4 virtual_protect 0
            0AD1: show_formatted_text_highpriority "%d %s %s %d" time 2000 21@ 12@ 13@ 29@
            wait 10          
        end
    end          
end
return
 
 
 
//------------------------------------
 
//nota: essa função é meio provisória, está meio adaptada às minhas necessidades do TM
//ela é case sensitive, precisamos corrigir isso ou o 'OBJS' não será lido, somente 'objs'
:StringsCompare_bySize {*str1, *str2, size}
30@ = 0
0A8D: 3@ = read_memory 0@ size 1 virtual_protect 0
0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
while 001D: 2@ > 30@
    0A8D: 3@ = read_memory 0@ size 1 virtual_protect 0
    0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
    if 4@ == 0x20 // ' '
    then
        1@++
        continue
    end
    if or
    3@ == 35 //#
    4@ == 35 //#
    then //ignore char diff
    else
        if 803B: 3@ <> 4@
        then
            059A: return_false
            0AB2: ret 0
        end
    end
    0@++
    1@++
    30@++
end
0485: return_true
0AB2: ret 0
 
 
:IsValidString
0A8D: 1@ = read_memory 0@ size 1 vp 0
if or
1@ == 0
1@ == 35 //#  
1@ == 59 //;
then
    059A:  return_false
    0AB2: ret 0
end
0485:  return_true
0AB2: ret 0

//0AB1: call_scm_func @memcpy 3 dest 1@ src 0@ size 28
:memcpy
for 30@ = 0 to 2@
    0A8D: 3@ = read_memory 1@ size 1 virtual_protect 0
    inc(1@)
    0A8C: write_memory 0@ size 1 value 3@ virtual_protect 0
    inc(0@)          
end
0AB2: ret 0

:str_FILES
hex
"files" 00
end
 
:str_ANIM
hex
"anim" 00
end
 
:str_OBJS
hex
"objs" 00
end
 
:str_WEAP
hex
"weap" 00
end

:str_TOBJ
hex
"tobj" 00
end
 
:str_END
hex
"end" 00
end

:str_PEDESTRIANS
hex
"PEDESTRIANS" 00
end

:str_VEHICLES
hex
"VEHICLES" 00
end

:str_WEAPONS
hex
"WEAPONS" 00
end

:Buffer_0_1_128
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_0_2_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_0_3_16
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_0_4_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_1_1_128
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end
 
:Buffer_1_2_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end    
 
:Buffer_1_3_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end
 
:Buffer_1_4_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end
 
:Buffer_1_5_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end


Última edição por Deadstroke em Sab 27 Ago 2016, 12:02, editado 1 vez(es)
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18911
Reputação : 346
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 01:14

______________________________

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 : 21905
Reputação : 678
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 02:55
↑ Acho que pra ficar mais bonitinho e user friendly, pois ficar tendo de colocar por exemplo uns "1=[endereço]", "2=[endereço]" é um saco

Poderia enviar o .ini que você está testando? Assim fica mais fácil e preciso os testes

______________________________

avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 12:10
O .ini está abaixo. Achei que já tinha mostrado antes:

Código:
Files
#ID    Nome do .ide/menu    caminho do .ide
1   DEFAULT      data\default.ide
2   BARRIES      data\maps\generic\barries.ide   
end

Acho que conseguem entender o que cada campo significa acima né.
@Fabio , como pode ver, não posso ler as linhas com os opcodes tradicionais da cleo justamente por se tratar de linhas extensas e sem um valor de comparação (ex.: Nome = 1 DEFAULT data\default.ide).

Código:
0AB1: call_scm_func @ReadAllIde 3 mod 1 offset_section 0 offset_objects 0 -> _COUNT_SECTIONS_ _COUNT_OBJS_  //Contar linhas no mod 1
0AB1: call_scm_func @ReadAllIde 3 mod 2 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_  //Salvar linhas no mod 2

Essa função vai salvar valores em duas memórias: seções, grupos de cada objeto, que é normalmente separado em arquivos .ide, exceto para peds, cars and, weapons; e as linhas de objetos .ide por si só, que serão atreladas às seções para que o usuário consiga encontrar um objeto mais facilmente.
O problema não é ler as linhas, isso está tudo bem (praticamente), o problema são em salvar, reler as linhas salvas e alguns crashes, que diria, sem sentido, que acontecem (talvez por problema da livraria cleo).
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21905
Reputação : 678
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 16:34
Difícil encontrar o problema, dei uma olhada rápida e vi nada pokerface é sempre complicado alguém entender códigos grandes de outras pessoas :v:

______________________________

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

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 16:39
Linha 140:
Código:
0A8C: write_memory 1@ size 16 value 13@ virtual_protect 0
                            1@ += 16  

Size 16?

Suponho que você queira strpcy 0x00826590 ou 0x0069F910

.text:0069F910 ; char *__cdecl strcpy(char *dst, const char *src)

call _strcpy push 2 pop 2 source destino

______________________________

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 : 21905
Reputação : 678
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 16:48
Nossa, o size 16 ainda tá lá :v:

______________________________

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

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 20:07
Galera, vamos deixar de sofrer. Faça o I/O em C++ pelo amr de deus, use funções diferentes pra pegar cada dado ou sei la se tiver uma maneira melhor
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Sab 27 Ago 2016, 23:00
Tudo bem, não completei algumas coisas do código, agora acredito que esteja "completo". A parte do size 16 não era o maior problema, mas confundiu vocês ao entender os erros.

Temos dois problemas:

1) Na função na linha @ReadAllIde , na linha 64, quando eu leio no mod 2 (ler e salvar), há um crash na linha 171, quando lê o arquivo .ide, o que não acontece no mod 1 (contagem). Apenas entre no jogo com esse e perceba;

Depois coloque // na linha 64 para a função não ser ativada ou toque mod 1 por mod 2 e veja os erros seguintes:

2) Quando se digita "fil", a partir da linha 67, tento ler as seções salvas entre as linhas 37 a 53. Ela até lê a primeiro campo corretamente , igual a -3, mas as outras não são lidas corretamente...

3) Na mesma parte da leitura, como consigo ler string salvas na var memory? Veja que tentei com 5@v , mas falhou miseravelmente...

Código:
Código:
{$cleo}
0000:
 
const
    sscanf = 0x8220AD
    _COUNT_SECTIONS_ = 26@   
    _TH_MEM_SECTIONS_ = 27@
    _OFFSET_SECTIONS_ = 28@   
    _COUNT_OBJS_ = 29@
    _TH_MEM_OBJS_ = 30@
    _OFFSET_OBJS_ = 31@   
end

var
    _COUNT_SECTIONS_ : int
    _COUNT_OBJS_ : int
end
 
while true
    wait 0
   
    if  8AAB:  file_exists "cleo\MapperMod.ini"
    then
        0ACD: show_text_highpriority "The file ~b~'cleo\MapperMod.ini'~s~ haven't been found." time 7000
        0A93: end_custom_thread
    end
   
    0AB1: call_scm_func @ReadAllIde 3 mod 1 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_ -> _COUNT_SECTIONS_ _COUNT_OBJS_
    wait 0
   
    0085: 1@ = _COUNT_SECTIONS_
    1@ *= 20
    0AC8: _TH_MEM_SECTIONS_ = allocate_memory_size 1@   
    0AC7: _OFFSET_SECTIONS_ = var _TH_MEM_SECTIONS_ offset
   
    //Peds
    0A8E: 3@ = _OFFSET_SECTIONS_ + 0
    0A8C: write_memory 3@ size 4 value -3 virtual_protect 0
    0A8E: 3@ = _OFFSET_SECTIONS_ + 4
    0AC6: 4@ = label @str_PEDESTRIANS offset
    0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 16
    0A8E: 3@ = _OFFSET_SECTIONS_ + 20         
    //Vehicles
    0A8C: write_memory 3@ size 4 value -2 virtual_protect 0
    0A8E: 3@ = _OFFSET_SECTIONS_ + 24
    0AC6: 4@ = label @str_VEHICLES offset
    0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 16
    0A8E: 3@ = _OFFSET_SECTIONS_ + 40           
    //Weapons
    0A8C: write_memory 3@ size 4 value -1 virtual_protect 0
    0A8E: 3@ = _OFFSET_SECTIONS_ + 44
    0AC6: 4@ = label @str_WEAPONS offset
    0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 16

    _OFFSET_SECTIONS_ += 60

    //Objects memory
    0085: 1@ = _COUNT_OBJS_
    1@ *= 40           
    0AC8: _TH_MEM_OBJS_ = allocate_memory_size 1@   
    0AC7: _OFFSET_OBJS_ = var _TH_MEM_OBJS_ offset
   
    //ERRO 1: essa função abaixo está dando crash por motivos X!!! 
    0AB1: call_scm_func @ReadAllIde 3 mod 2 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_ -> _COUNT_SECTIONS_ _COUNT_OBJS_
   
    //ERRO 2: não consigo ler os valores salvos corretamente, acredito que tenham sido salvos de maneira errada! 
    while true
        wait 0
        if 0ADC: test_cheat "fil"
        jf continue
        0AD1: show_formatted_text_highpriority "%d %d" time 2500 _COUNT_SECTIONS_ _COUNT_OBJS_
        wait 2000
        0ACD: show_text_highpriority "SECTIONS" time 7000
        wait 2000     
        0AC7: _OFFSET_SECTIONS_ = var _TH_MEM_SECTIONS_ offset
        For 1@ = 1 to _COUNT_SECTIONS_
            0A8D: 4@ = read_memory _OFFSET_SECTIONS_ size 4 virtual_protect 0
            _OFFSET_SECTIONS_ += 4
            //0A8D: 5@v = read_memory _OFFSET_SECTIONS_ size 16 virtual_protect 0
            _OFFSET_SECTIONS_ += 16
            //0AD1: show_formatted_text_highpriority "%d %s" time 1000 4@ 5@v
            0AD1: show_formatted_text_highpriority "%d" time 1000 4@
            wait 1000                                   
        end
        /*0ACD: show_text_highpriority "OBJECTS" time 7000
        wait 2000
        0085: 0@ = _TH_MEM_OBJS_
        For 1@ = 1 to _COUNT_OBJS_
            0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0
            0@ += 4
            0A8D: 3@v = read_memory 0@ size 32 virtual_protect 0
            0@ += 32
            0A8D: 10@ = read_memory 0@ size 4 virtual_protect 0
            0@ += 4           
            0AD1: show_formatted_text_highpriority "%d %s %s" time 1000 2@ 3@v 10@
            0@ += 40
            0AD1: show_formatted_text_highpriority "%d" time 1000 2@
            wait 100                                   
        end  */             
    end   
end


//0AB1: call_scm_func @ReadAllIde 3 mod 2 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_ -> _COUNT_SECTIONS_ _COUNT_OBJS_
//mod: 1 = count; 2 = save   
:ReadAllIde
27@ = 0
28@ = 0
if  0A9A: 31@ = openfile "cleo\MapperMod.ini" mode "rt"  // IF and SET
then       
    //Reading .ini lines
    0AC6: 11@ = label @Buffer_0_1_128 offset
    while  File.ReadString(31@, 11@, 128)       
        //Check if it's 'files'
        0AC6: 29@ = label @str_FILES offset
        if  0AB1: call_scm_func @StringsCompare_bySize 3 29@ 11@ Size 5
        then             
            while  File.ReadString(31@, 11@, 128)               
                //Check if it's 'end'
                0AC6: 2@ = label @str_END offset
                if  0AB1: call_scm_func @StringsCompare_bySize 3 29@ 11@ Size 3
                then    break
                end               
                //Read line from .ini
                0AC6: 12@ = label @Buffer_0_2_32 offset
                0AC6: 13@ = label @Buffer_0_3_16 offset
                0AC6: 14@ = label @Buffer_0_4_32 offset
                0AA7: call_function sscanf num_params 5 pop 5 receive 14@ 13@ 12@ format "%d%s%s" bufferToRead 11@ -> 15@    //readstring
                if  15@ == 3
                then
                    //Check if the file exists and read it
                    if  0A9A: 30@ = openfile 14@ mode "rt"  // IF and SET
                    then                       
                        //Count or save sections
                        if  0@ == 2
                        then
                            0A8D: 15@ = read_memory 12@ size 4 virtual_protect 0
                            0A8C: write_memory 1@ size 4 value 15@ virtual_protect 0
                            1@ += 4
                            0AB1: call_scm_func @memcpy 3 dest 1@ src 13@ size 16
                            1@ += 16                             
                        end
                        27@++
                        //Count or save ide lines
                        0AB1: call_scm_func @ReadFileTest 4 file 30@ mod 0@ offset_objects 2@ section 15@ -> counter 26@
                        005A: 28@ += 26@                                                   
                    end
                end                                   
            end
            27@ += 3    //More three lines to peds, cars and weapons
            break               
        end
    end
    file.Close(31@)       
end
if  0@ == 1 
then    0AB2: ret 2 27@ 28@
else    0AB2: ret 0
end


//0AB1: call_scm_func @ReadFileTest 4 file 30@ mod 0@ offset_objects 2@ section 15@ -> counter 26@
:ReadFileTest   
31@ = 0
28@ = 0
0AC6: 10@ = label @Buffer_1_1_128 offset
0AC6: 11@ = label @Buffer_1_2_32 offset 
0AC6: 12@ = label @Buffer_1_3_32 offset 
0AC6: 13@ = label @Buffer_1_4_32 offset
0AC6: 14@ = label @Buffer_1_5_32 offset
while  File.ReadString(0@, 10@, 128)
   
    if 0AB1: call_scm_func @IsValidString 1 10@
    jf  continue
   
    //Checking if it's looking a section or it's already reading
    if  28@ == 0
    then   
        gosub  @ReadFile2
        if  28@ == 1
        jf  continue
    end
   
    //Reading Lines from .ide!!!   
         
    //Check if it's END
    0AC6: 6@ = label @str_END offset
    if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 3
    then
        28@ = 0
        continue
    end
                       
    //Eliminate ","
    repeat
        0A8D: 21@ = read_memory 10@ size 1 virtual_protect 0
        if  21@ == 44 // ","           
        then    0A8C: write_memory 10@ size 1 value 0x20 virtual_protect 0  //Writing space (0x20) in place of "," (0x2C)
        end       
        10@ += 1
    until  21@ == 0x00 // end of text                                   
   
    //Reading again and checking line
    0AC6: 10@ = label @Buffer_1_1_128 offset
    0AA7: call_function sscanf num_params 6 pop 6  receive 14@ 13@ 12@ 11@ format "%d%s%s%s"  bufferToRead 10@ -> 17@    //readstring
    if  17@ == 4
    then
        31@++   
        if  1@ == 2
        then
            0A8D: 17@ = read_memory 11@ size 4 virtual_protect 0
            0A8C: write_memory 2@ size 4 value 17@ virtual_protect 0
            2@ += 4
            0AB1: call_scm_func @memcpy 3 dest 2@ src 12@ size 32
            2@ += 32
            0A8C: write_memory 2@ size 4 value 29@ virtual_protect 0
            2@ += 4
        else
            0A8D: 21@ = read_memory 11@ size 4 virtual_protect 0
            0AD1: show_formatted_text_highpriority "%d %s %s %d" time 2000 21@ 12@ 13@ 29@
            wait 10         
        end
    end
         
end
file.Close(0@) 
0AB2: ret 1 31@


:ReadFile2
0AC6: 6@ = label @str_ANIM offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    0085: 29@ = 3@
    28@ = 1
    return   
end
0AC6: 6@ = label @str_OBJS offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    0085: 29@ = 3@
    28@ = 1
    return   
end
0AC6: 6@ = label @str_TOBJ offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    0085: 29@ = 3@
    28@ = 1
    return   
end
0AC6: 6@ = label @str_WEAP offset
if  0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4
then
    29@ = -1
    28@ = 1
    return   
end
return
 
 
 
//------------------------------------
 
//nota: essa função é meio provisória, está meio adaptada às minhas necessidades do TM
//ela é case sensitive, precisamos corrigir isso ou o 'OBJS' não será lido, somente 'objs'
:StringsCompare_bySize {*str1, *str2, size}
30@ = 0
0A8D: 3@ = read_memory 0@ size 1 virtual_protect 0
0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
while 001D: 2@ > 30@
    0A8D: 3@ = read_memory 0@ size 1 virtual_protect 0
    0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
    if 4@ == 0x20 // ' '
    then
        1@++
        continue
    end
    if or
    3@ == 35 //#
    4@ == 35 //#
    then //ignore char diff
    else
        if 803B: 3@ <> 4@
        then
            059A: return_false
            0AB2: ret 0
        end
    end
    0@++
    1@++
    30@++
end
0485: return_true
0AB2: ret 0
 
 
:IsValidString
0A8D: 1@ = read_memory 0@ size 1 vp 0
if or
1@ == 0
1@ == 35 //# 
1@ == 59 //;
then
    059A:  return_false
    0AB2: ret 0
end
0485:  return_true
0AB2: ret 0

//0AB1: call_scm_func @memcpy 3 dest 1@ src 0@ size 28
:memcpy
for 30@ = 0 to 2@
    0A8D: 3@ = read_memory 1@ size 1 virtual_protect 0
    inc(1@)
    0A8C: write_memory 0@ size 1 value 3@ virtual_protect 0
    inc(0@)         
end
0AB2: ret 0

:str_FILES
hex
"files" 00
end
 
:str_ANIM
hex
"anim" 00
end
 
:str_OBJS
hex
"objs" 00
end
 
:str_WEAP
hex
"weap" 00
end

:str_TOBJ
hex
"tobj" 00
end
 
:str_END
hex
"end" 00
end

:str_PEDESTRIANS
hex
"PEDESTRIANS" 00
end

:str_VEHICLES
hex
"VEHICLES" 00
end

:str_WEAPONS
hex
"WEAPONS" 00
end

:Buffer_0_1_128
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_0_2_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_0_3_16
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_0_4_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

:Buffer_1_1_128
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end
 
:Buffer_1_2_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end   
 
:Buffer_1_3_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end
 
:Buffer_1_4_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end
 
:Buffer_1_5_32
hex
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
end

Infelizmente vai ser bem mais complicado aprender C++, tive um estudo básico, bem básico sobre, mas aprender isso não é o meu foco agora. Se acham que não estou pronto para fazer isso, tudo bem, deixo parado pra depois...
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21905
Reputação : 678
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: Novo Mod Planter (nome provisório)

em Dom 28 Ago 2016, 04:38
@Deadstroke escreveu:3) Na mesma parte da leitura, como consigo ler string salvas na var memory? Veja que tentei com 5@v , mas falhou miseravelmente...
Também não é assim que se lê uma string Fuch That Guy
Esqueça destes "size 16", o opcode foi feito para 1, 2 ou 4, ou outros números para NOP, acredito que não tenha como usá-lo para cópias de memória

Você pode ler uma string simplesmente usando o opcode "format" ou alguma função de copiar uma memória pra outra.
Não sei se você viu, mas eu publiquei algumas funções de strings do C++ pra serem usadas em cleo aqui:
http://bms.mixmods.com.br/t5399-medio-funcoes-para-operacoes-com-strings
Veja o "strcpy" para copiar uma string, mas o opcode "format" já deve fazer isso muito bem.

______________________________

avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Dom 28 Ago 2016, 11:19
@Junior_Djjr escreveu:
@Deadstroke escreveu:3) Na mesma parte da leitura, como consigo ler string salvas na var memory? Veja que tentei com 5@v , mas falhou miseravelmente...
Também não é assim que se lê uma string Fuch That Guy
Esqueça destes "size 16", o opcode foi feito para 1, 2 ou 4, ou outros números para NOP, acredito que não tenha como usá-lo para cópias de memória

Você pode ler uma string simplesmente usando o opcode "format" ou alguma função de copiar uma memória pra outra.
Não sei se você viu, mas eu publiquei algumas funções de strings do C++ pra serem usadas em cleo aqui:
http://bms.mixmods.com.br/t5399-medio-funcoes-para-operacoes-com-strings
Veja o "strcpy" para copiar uma string, mas o opcode "format" já deve fazer isso muito bem.

Eu utilizei esse aqui para salvar os opcodes, não estou usando size 16 para salvar:

Código:
0AB1: call_scm_func @memcpy 3 dest 3@ src 4@ size 16

E já vi aquele tópico, não tinha nenhuma função específica para ler strings naquele formato. E ainda não me ajudou nos REAIS problemas que tenho, sobre os erros 1 e 2, não está dando certo...
Ainda estou vendo isso, o problema é que não tenho muito tempo pra vir tão a fundo a explorar tudo isso, então o entendimento está mais devagas mesmo...

Edit.: entre as linhas 76 e 87, tentei fazer isso, aparentemente lê alguma coisa, mas é como disse, provavelmente há alguma coisa que não estou fazendo certo ao salvar os valores. Não sei como trablhar corretamente com o opcode 0AC8.

Código:
       For 1@ = 1 to _COUNT_SECTIONS_
            0A8D: 4@ = read_memory _OFFSET_SECTIONS_ size 4 virtual_protect 0
            _OFFSET_SECTIONS_ += 4
            0AC6: 5@ = label @Buffer_2_1_32 offset
            0AB1: call_scm_func @memcpy 3 dest 5@ src _OFFSET_SECTIONS_ size 16
            0AD3: 5@ = format "%s" 5@
            //0A8D: 5@v = read_memory _OFFSET_SECTIONS_ size 16 virtual_protect 0
            _OFFSET_SECTIONS_ += 16
            //0AD1: show_formatted_text_highpriority "%d" time 1000 4@
            0AD1: show_formatted_text_highpriority "%d %s" time 1000 4@ 5@
            wait 1000                                    
        end

Edit 2: percebi que o erro 1 é causado pela linha 140, através da função memcpy. Não faço ideia o porquê? Pode me ajudar nisso?
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18911
Reputação : 346
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com

Re: Novo Mod Planter (nome provisório)

em Dom 28 Ago 2016, 15:29
Tem como mandar o modloader.log e o scrlog.log dos crashs que você tá falando? pokerface

O 0AC8 é igual trabalhar com thread memory, só que a diferença é que você vai dar o tamanho na hora de chamar o opcode e essa memória precisa ser limpa quando você não precisar mais.

______________________________

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 - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Dom 28 Ago 2016, 16:47
Scrlog do Erro 1:
Scrlog.log:

Código:
00000780&0: [004D] GOTO_IF_FALSE -794
00000794&0: [0AC6] GET_LABEL_POINTER -3192 -> 409718088
00000804&0: [0AC6] GET_LABEL_POINTER -3224 -> 409718120
00000814&0: [0AC6] GET_LABEL_POINTER -3256 -> 409718152
00000824&0: [0AA7] CALL_FUNCTION_RETURN 0x8220AD 5 5 409718152 409718120 409718088 "%d%s%s" 409717832 -> 3
00000859&0: [00D6] IF 0
00000863&0: [0039] p186C6608(?) == 3    // TRUE
00000870&1: [004D] GOTO_IF_FALSE -1014
00000877&1: [00D6] IF 0
00000881&0: [0A9A] OPEN_FILE 409718152 "rt" -> 9317520    // TRUE
00000893&1: [004D] GOTO_IF_FALSE -1014
00000900&1: [000A] p186C6638(?) += 1
00000907&1: [0A8D] READ_MEMORY 0x186BCD48 4 0 -> 2
00000919&1: [00D6] IF 0
00000923&0: [0039] p186C65CC(?) == 2    // TRUE
00000930&1: [004D] GOTO_IF_FALSE -981
00000937&1: [0A8C] WRITE_MEMORY 0x186C6688 4 2 0
00000949&1: [000A] p186C65D0(?) += 4
00000956&1: [0AB1] CALL -2805 3 409757324 409718120 16
00002805&1: [0006] p186C6644(?) = 0
00002812&1: [0A8D] READ_MEMORY 0x186BCD68 1 0 -> 66
00002824&1: [000A] p186C65D0(?) += 1
00002831&1: [0A8C] WRITE_MEMORY 0x186C668C 1 66 0
00002843&1: [000A] p186C65CC(?) += 1
00002850&1: [000A] p186C6644(?) += 1
00002857&1: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD69 1 0 -> 65
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C668D 1 65 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD6A 1 0 -> 82
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C668E 1 82 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD6B 1 0 -> 82
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C668F 1 82 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD6C 1 0 -> 73
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6690 1 73 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD6D 1 0 -> 69
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6691 1 69 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD6E 1 0 -> 83
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6692 1 83 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD6F 1 0 -> 0
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6693 1 0 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD70 1 0 -> 111
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6694 1 111 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD71 1 0 -> 120
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6695 1 120 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD72 1 0 -> 98
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6696 1 98 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD73 1 0 -> 105
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6697 1 105 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD74 1 0 -> 103
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6698 1 103 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD75 1 0 -> 0
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C6699 1 0 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD76 1 0 -> 111
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C669A 1 111 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD77 1 0 -> 0
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C669B 1 0 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // FALSE
00002865&0: [004D] GOTO_IF_FALSE -2812
00002812&0: [0A8D] READ_MEMORY 0x186BCD78 1 0 -> 55
00002824&0: [000A] p186C65D0(?) += 1
00002831&0: [0A8C] WRITE_MEMORY 0x186C669C 1 55 0
00002843&0: [000A] p186C65CC(?) += 1
00002850&0: [000A] p186C6644(?) += 1
00002857&0: [001D] p186C6644(?) > p186C65D4(?)     // TRUE
00002865&1: [004D] GOTO_IF_FALSE -2812
00002872&1: [0AB2] RET 0
00000974&1: [000A] p186C65D0(?) += 16
00000981&1: [0AB1] CALL -1088 4 9317520 2 409717799 2
00001088&1: [0006] p186C6648(?) = 0
00001095&1: [0006] p186C663C(?) = 0
00001102&1: [0AC6] GET_LABEL_POINTER -3288 -> 409718184
00001112&1: [0AC6] GET_LABEL_POINTER -3544 -> 409718440
00001122&1: [0AC6] GET_LABEL_POINTER -3576 -> 409718472
00001132&1: [0AC6] GET_LABEL_POINTER -3608 -> 409718504
00001142&1: [0AC6] GET_LABEL_POINTER -3640 -> 409718536
00001152&1: [0AD7] READ_STRING_FROM_FILE 9317520 409718184 128

*********************************
> Logging finished: 16:42:12
  Powered by SCRLog (by LINK/2012)
*********************************

Modloader.log do erro 1:
Modloader.log:

Código:
Game version: GTA SA 1.0 US
Unhandled exception at 0x770A6D39 in ntdll.dll (+0x26d39): 0xC0000005: Access violation writing location 0x00000014.
    Register dump:
        EAX: 0x00000000  EBX: 0xFFFFFF00  ECX: 0x008E2CB0  EDX: 0xFFFFFFFA  
        EDI: 0x00000000  ESI: 0x008E2CB0  EBP: 0x0177F518  EIP: 0x770A6D39  
        ESP: 0x0177F4F0  EFL: 0x00010213  CS: 0x00000023   SS: 0x0000002B  
        GS: 0x0000002B   FS: 0x00000053   ES: 0x0000002B   DS: 0x0000002B  
        
    Stack dump:
        0x0177F4F0:  00000000 008E2CB4 FFFFFFFA FFFFFFFA 00000000 00000000
        0x0177F508:  00000000 FFFFFF00 1C35156B 003CE000 0177F538 770BF8A5
        0x0177F520:  186BCDA8 008E2CB0 186BCDA8 00000001 008E2CB0 01000099
        0x0177F538:  0177F544 770BF7C5 00000000 0177F554 7243D0A7 008E2CB0
        0x0177F550:  008E2C90 0177F594 7243CB5E 008E2C90 C2E086D5 186BCDA8
        0x0177F568:  186C6590 008E2C90 66763E55 66773743 186BCDA8 0177F560
        0x0177F580:  0177EF24 0177F6D0 72442720 B1D1FEE1 FFFFFFFE 0177F5B4
        0x0177F598:  72455DEC 008E2C90 00000080 008E2C90 186C6590 186C6590
        0x0177F5B0:  00000001 0177F5C0 72452860 186C6590 0177F618 00469FF7
        0x0177F5C8:  00000AD7 186C6590 00000000 7245054F 00000000 186C6590
        base: 0x01580000   top: 0x0177F4F0   bottom: 0x01780000
        
    Backtrace (may be wrong):
        =>0x770A6D39 RtlWaitOnAddress+0x99 in ntdll.dll (+0x26d39) (0x0177F518)
          0x770BF8A5 RtlEnterCriticalSection+0x125 in ntdll.dll (+0x3f8a5) (0x0177F538)
          0x770BF7C5 RtlEnterCriticalSection+0x45 in ntdll.dll (+0x3f7c5) (0x0177F544)
          0x7243D0A7 in CLEO.asi (+0xd0a7) (0x0177F554)
          0x7243CB5E in CLEO.asi (+0xcb5e) (0x0177F594)
          0x72455DEC CLEO_GetIntOpcodeParam+0x345c in CLEO.asi (+0x25dec) (0x0177F5B4)
          0x72452860 CLEO_ReadStringOpcodeParam+0x300 in CLEO.asi (+0x22860) (0x0177F5C0)
          0x00469FF7 in gta_sa.exe (+0x69ff7) (0x0177F618)
          0x6671B2AF in newopcodes.cleo (+0xb2af) (0x0177F630)
          0x72635A4F in ped_spec.asi (+0x5a4f) (0x0177F648)
          0x0053BFCC in gta_sa.exe (+0x13bfcc) (0x0177F67C)
          0x0053E986 in gta_sa.exe (+0x13e986) (0x0177F694)
          0x7238C0DD in modloader.asi (+0x1c0dd) (0x0177F6DC)
          0x72390552 in modloader.asi (+0x20552) (0x0177F6F0)
          0x7238EBB7 in modloader.asi (+0x1ebb7) (0x0177F70C)
          0x72390C06 in modloader.asi (+0x20c06) (0x0177F880)
          0x72390AFC in modloader.asi (+0x20afc) (0x0177F88C)
          0x0053ECC2 in gta_sa.exe (+0x13ecc2) (0x0177F894)
          0x00619B71 in gta_sa.exe (+0x219b71) (0x0177F8A8)
        
    


Shutting down Mod Loader...
Shutting down filesystem watcher...
Shutting down menu...
Unloading plugin "gta3.std.fx"
Unloading plugin "gta3.std.asi"
Unloading plugin "gta3.std.bank"
Unloading plugin "gta3.std.data"
Unloading plugin "gta3.std.movies"
Unloading plugin "gta3.std.scm"
Unloading plugin "gta3.std.text"
Unloading plugin "gta3.std.tracks"
Unloading plugin "gta3.std.sprites"
Unloading plugin "gta3.std.stream"
Mod Loader has been shutdown.

Se você eliminar aonde tem o erro onde indiquei no edit 2 não haver o crash, o que é completamente estranho.

Para ver o erro 2, basta dar // no começo da linha na função 0AB1: call_scm_func @ReadAllIde 3 mod 2 offset_section _OFFSET_SECTIONS_ offset_objects _OFFSET_OBJS_ -> _COUNT_SECTIONS_ _COUNT_OBJS_ , e digitar "fil" depois que estiver logado. Você verá que as linhas não estão sendo lidas corretamente.

Parece que é igual, mas lidando da mesma forma que a thread memory tradicional não funciona, além de eu ainda não saber muito usar com strings. Ainda prefiriria poder calcular o tamanho diretamente na thread memory tradicional...
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18911
Reputação : 346
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com

Re: Novo Mod Planter (nome provisório)

em Dom 28 Ago 2016, 19:12
Sei lá, tenta usar file seek offset 0 antes de começar a leitura ;-;

Já que está apontando erro no [0AD7] READ_STRING_FROM_FILE ;-;




O jogo tem essa função para cópias de string com tamanho limitado:

Código:
0x0069DB70
int __cdecl gtaStrncpyOrZeroFill(void *dest, const void *src, uint16_t len);

Tem essa também:
Código:
00821F40
char *__cdecl strncpy(char *dest, const char *src, size_t)

Recomendo que use esta última.

A diferença de usar uma função específica para string e o memcpy é que a própria para string irá adicionar o null terminator, que é extremamente importante em quase todos os casos.

______________________________

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 - Intermediário
Scripter CLEO - Intermediário
Mensagens : 511
Reputação : 34
Desde : 08/02/2016
Localização : São Paulo
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Dom 28 Ago 2016, 23:27
Vlw. Vou tentar mexer nisso quando puder, e passo feedbacks. Se tiver mais alguma coisa pra falar fica a vontade...
avatar
Programador - Avançado
Programador - Avançado
Mensagens : 18911
Reputação : 346
Desde : 04/05/2012
Idade : 20
Link : gtamodvicio.blogspot.com
Ver perfil do usuáriohttp://gtamodvicio.blogspot.com

Re: Novo Mod Planter (nome provisório)

em Seg 29 Ago 2016, 16:10
Acho que talvez para fins de teste, ao invés de usar o opcode de ler string de arquivo da cleo, usar direto a função fgets do jogo:
Código:
0x00823798
int __cdecl fgets(char *, int, FILE *)
http://www.cplusplus.com/reference/cstdio/fgets/

Só usar o opcode de call que tem retorno, se retornar igual a zero é porque deu erro.

Código:

0AA7: call_function 0x00823798 num_params 3 pop 3   arquivo    128   BufferLabelOffset       -> retorno

if retorno <> 0
then
// ok
end    


______________________________

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'
Mensagens Nível 6
Mensagens Nível 6
Mensagens : 4076
Reputação : 467
Desde : 14/06/2015
Ver perfil do usuário

Re: Novo Mod Planter (nome provisório)

em Ter 13 Set 2016, 20:41
Viram que isso http://forum.sa-mp.com/showthread.php?t=282801 tem código aberto ? https://github.com/JernejL/samp-map-editor
Tem como converter pro jogo normal ?
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21905
Reputação : 678
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

Re: Novo Mod Planter (nome provisório)

em Ter 13 Set 2016, 20:59
Uia que interessante, só acho que ninguém aqui teria coragem e habilidade pra fazer isso, quem sabe algum fodão da GTAForums (eu imaginaria o The_GTA, mas duvido que ele tenha tempo, mas interesse deve ter)

______________________________

avatar
Produtor de vídeos - Avançado
Produtor de vídeos - Avançado
Mensagens : 16006
Reputação : 156
Desde : 03/06/2012
Ver perfil do usuáriohttp://playgamemods.blogspot.com.br/

Re: Novo Mod Planter (nome provisório)

em Dom 09 Out 2016, 00:21
caraca, tomara que dê certo!

______________________________
http://playgamemods.blogspot.com.br/






"“Toda verdade passa por três estágios. Primeiro, ela é ridicularizada. Segundo, ela é violentamente resistida. Terceiro, ela é aceita como sendo autoevidente” (Arthur Schopenhauer, filósofo alemão [1788-1860])"

“Se pudesse ser demonstrada a existência de qualquer órgão complexo que não poderia ter sido formado por numerosas, sucessivas e ligeiras modificações, minha teoria desmoronaria por completo.” (DARWIN 1872)"
Conteúdo patrocinado

Re: Novo Mod Planter (nome provisório)

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