Novo Mod Planter (nome provisório)

    Compartilhe

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Dom 14 Ago 2016, 18:39

    Esse trabalho é uma nova versão do Mod Planter (vide http://www.mixmods.com.br/2012/06/mod-planter.html ).

    O principal objetivo disso é torná-lo mais funcional a criar novos mods do que apenas para "brincar", como acontece já atualmente.

    O que se pretende melhorar:
    - Objetos colocados no jogo poderem serem salvos em .ipl, em scripts ou somente serem salvas em linhas;
    - Fazer um parker generator in game (apesar de já ter um, acho);
    - Colocar o mod 'NoClip' do Junior ( http://www.mixmods.com.br/2015/05/no-clip-by-juniordjjr.html ), se ele permitir, com fim de ser um auxiliador para andar no mapa. Ou pelo menos ser compatível com;
    - Outras ferramentas que podem ser úteis ou auxiliar;
    - (Sugira, com propriedade, o que pode ser feito).

    Claro que é um trabalho longo, por restrição de tempo e de complexidade desse trabalho. Aceitei iniciar esse projeto por perceber que pode ser útil para muitos modders criarem novos mods...

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Dom 14 Ago 2016, 18:45

    @Junior_djjr , sobre o leitor de .ide, tentei fazer um, mas o que até agora foi um baseado no que o Pep Legal que passou pra ler linhas longas em .ini (ver spoiler abaixo).

    Leitor de .ide:
    Código:
    {$CLEO}
    0000:
    /*
    Exemplo de linha:
    5390, laeskateparkLA, glenpark7_lae, 150, 0
    (o código abaixo é meio pseudo, na real ele é falho)
    */
     
    // Depois de carrega o nosso arquivo "IDE" e encontrar a section "objs", vamos:
    wait 3000
    if  8AAB:  not file_exists "data\maps\generic\barriers.ide"
    then
        0ACD: show_text_highpriority "NOT FILED" time 2000
        0A93: end_custom_thread
    end

    //Prepare Buffer_128
    0AC7: 11@ = var 33@ offset              // get the pointer to the last usable variable
    0AC6: 12@ = label @Buffer_128 offset    // get the pointer to the thread area to store the new variables data
    0A8F: 13@ = 12@ - 11@                  // get the offset from variable 33@ to the memory
    0085: 31@ = 13@
    0016: 31@ /= 16                        // this index is a long-string index, so 16 bytes
    0B14: 10@ = 13@ mod 16                  //Rest of division!!!!

    0A9A: 25@ = openfile "data\maps\generic\barriers.ide" mode "rt"  // IF and SET
    0AC6: 2@ = label @Buffer1 offset
    0AC6: 3@ = label @Buffer2 offset

    while  0AD7: read_string_from_file 25@ to 33@(31@,1v) size 128 // read a line of text from INI file

        0AC6: 12@ = label @Buffer_128 offset    // pointer to Buffer (which has the read text line)
        0062: 12@ -= 10@                  // compensate address offset bettween BUFFER_HANDLE and Buffer
        0085: 14@ = 12@                    // preserve beggining address of buffer

        0AD4: 0@ = scan_string 14@ format "%d" store_results 1@
        //0AD4: 0@ = scan_string 14@ format "%d, %s, %s, %d, %d" store_results 1@ 2@ 3@ 4@ 5@
        if  0@ == 2
        then
            0AD1: show_formatted_text_highpriority "%d" time 300 1@
            //0ACD: show_text_highpriority 2@ time 300
        else    0ACD: show_text_highpriority "NOT READING" time 300     
        end   
       
        wait 250
        /*
        Ficamos com:
        0@ = 5
        1@ = 5390
        2@ = *laeskateparkLA
        3@ = *glenpark7_lae
        4@ = 150           
        5@ = 0
        */
    end
    0ACD: show_text_highpriority "END LEITOR" time 2000
    0A93: end_custom_thread
    // Terminou de ler o arquivo. Ou então faça outro tipo de loop com um "if 0@ == 5"
    // Vai precisar também verificar se a linha lida está comentada, não sei o melhor método,
    // mas no Tuning Mod antes de eu pegar os valores da linha eu li o primeiro caráctere dela e cheque if 35 (#)
    // mas nesse caso eu não usei scan_file mas sim scan_string depois de ler o arquivo, enfim, há vários métodos de fazer isso...

    :Buffer1
    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 
     
    :Buffer2
    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_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

    Consegui ler apenas a primeira linha, mas quando tento extender para ler outras:
    - "%d, %s" -> esse meio que consegue ler, mas quando tentei ler o valor em string, deu crash;
    - "%d, %s, %s, %d, %d" -> não está lendio.

    Preciso saber como proceder nesses casos...

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Dom 14 Ago 2016, 22:19

    Ripei um pedaço do Tuning Mod:

    Código:
    {$cleo}
    0000:

    const
    sscanf        = 0x8220AD
    end

    while true
        wait 0
        if test_cheat "fil"
        jf continue
        
        if 0A9A: 0@ = openfile "data\maps\generic\barriers.ide" mode "rt"  // IF and SET
        then
            0AB1: call_scm_func @ReadFileTest 1 0@ -> 1@
            wait 1000
            0AD1: show_formatted_text_highpriority "Leu %d" time 2000 1@
        end
    end



    :ReadFileTest      
    0085: 20@ = 0@

    // Find 'objs'
    repeat
        :GetSlotsINI_Next        
        0AC6: 10@ = label @Buffer1 offset
        if not File.ReadString(20@, 10@, 128)
        then          
            0ACD: show_text_highpriority "FIM" time 1000
            file.Close(20@)
            0AB2: ret 1 -1
        end
        
        if 0AB1: call_scm_func @IsValidString 1 10@
        jf @GetSlotsINI_Next
        
        0AC6: 6@ = label @str_OBJS offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4  

    // Read lines
    0AC6: 10@ = label @Buffer1 offset  
    0AC6: 11@ = label @Buffer2 offset  
    0AC6: 12@ = label @Buffer3 offset  
    0AC6: 13@ = label @Buffer4 offset
    0AC6: 14@ = label @Buffer5 offset
    0AC6: 15@ = label @Buffer6 offset
    repeat
        if not File.ReadString(20@, 10@, 128)
        then  
            file.Close(20@)
            0AB2: ret 1 -1
        end
        0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@
        if 7@ == 1
        then
            if 0AB1: call_scm_func @IsValidString 1 12@
            then
                31@++
                0AA7: call_function sscanf num_params 7 pop 7  receive 15@ 14@ 13@ 12@ 11@  format "%d,%s,%s,%d,%d"  bufferToRead 12@  -> 7@
                0AD1: show_formatted_text_highpriority "%s" time 2000 12@
                wait 200
            end
        end  
        
        0AC6: 12@ = label @str_END offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 12@ 10@ Size 3  

    file.Close(20@)
    0AB2: ret 1 31@



    //------------------------------------

    //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



    :str_OBJS
    hex
    "objs" 00
    end

    :str_END
    hex
    "end" 00
    end

    :Buffer1
    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

    :Buffer2
    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    

    :Buffer3
    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

    :Buffer4
    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

    :Buffer5
    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

    :Buffer6
    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

    Tá ótimo, exceto o final que está meio gambiarrado e falhando, a variável 12@ que era pra ser o nome do dff está sendo o ID, incluindo com vírgula, sei lá no que deu, mas enfim.
    Também coloquei um monte de buffer mas daria pra enviar o offset da var para pegar os números e usar os buffers somente para as strings.

    Eu utilizei sscanf devido ao scan string da cleo ser limitada à strings de 16 chars... Além de que as vezes não confio muito na cleo. Foi dica do LINK/2012.


    A má notícia é que arquivos .IPL não são carregados in-game pelo ModLoader, mas isso não é grande problema, né, é só a gente ir escrevendo o IPL durante o jogo e foda-se, quando a pessoa reiniciar o jogo o IPL será carregado, este método é até melhor


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    DouglasB2310
    Mensagens Nível 3
    Mensagens Nível 3

    Plataforma : PC
    Processador: Intel(R) Core(TM) i5-2430M 2.40GHz
    Placa de vídeo onboard: Intel HD Graphics 3000
    RAM: 8GB (Já instalei o Windows 32 Bits e só usei 4 GB de RAM sem saber de nada)
    SSD: Não sei qual marca é, 465 GiB.
    SO: Windows 7 Ultimate - 64 Bits
    Mensagens : 179
    Reputação : 8
    Localização : Rio Grande do Sul

    Re: Novo Mod Planter (nome provisório)

    Mensagem por DouglasB2310 em Seg 15 Ago 2016, 12:22

    Bom megusta2

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Seg 15 Ago 2016, 13:04

    @Junior_Djjr escreveu:Ripei um pedaço do Tuning Mod

    Li esse script todo, e tenho dúvidas:

    Código:
    0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@

    Sobre esse opcode, ele substituiu ele por outro que faz a mesma coisa, certo? Como vc encontra os ondereços que podem fazer isso?

    Código:
       0AC6: 10@ = label @Buffer1 offset
        if not File.ReadString(20@, 10@, 128)
        then          
            0ACD: show_text_highpriority "FIM" time 1000
            file.Close(20@)
            0AB2: ret 1 -1
        end

    O script já não poderia parar ai caso tenha uma linha vazia no .ide?

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

    O problema que quiser nesse seria diferenciar letras minúsculas de maiúsculas, certo? Acho que duas soluções pra isso seria fazer isso para 'OBJS' e 'objs'; ou tentar converter a letra de string para inteiro e comparar, porque acho que assim elas serão iguais para minúsculas ou maiúsculas, certo?

    Código:
    // Read lines
    0AC6: 10@ = label @Buffer1 offset  
    0AC6: 11@ = label @Buffer2 offset  
    0AC6: 12@ = label @Buffer3 offset  
    0AC6: 13@ = label @Buffer4 offset
    0AC6: 14@ = label @Buffer5 offset
    0AC6: 15@ = label @Buffer6 offset
    repeat
        if not File.ReadString(20@, 10@, 128)
        then  
            file.Close(20@)
            0AB2: ret 1 -1
        end
        0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@
        if 7@ == 1
        then
            if 0AB1: call_scm_func @IsValidString 1 12@
            then
                31@++
                0AA7: call_function sscanf num_params 7 pop 7  receive 15@ 14@ 13@ 12@ 11@  format "%d,%s,%s,%d,%d"  bufferToRead 12@  -> 7@
                0AD1: show_formatted_text_highpriority "%s" time 2000 12@
                wait 200
            end
        end  
        
        0AC6: 12@ = label @str_END offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 12@ 10@ Size 3

    Esse é o problema que estive tendo, acho que o formato "%d,%s,%s,%d,%d" tem falhado, certo?
    Edit.: acho que a solução é ler a linha para a var 10@, verificar cada byte para ver se tem vírgula, e trocá-lo por um em branco, assim, depois, fica simples de ler o conteúdo do byte. Concorda?

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Seg 15 Ago 2016, 15:05

    @Deadstroke escreveu:
    @Junior_Djjr escreveu:Ripei um pedaço do Tuning Mod

    Li esse script todo, e tenho dúvidas:

    Código:
    0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@

    Sobre esse opcode, ele substituiu ele por outro que faz a mesma coisa, certo? Como vc encontra os ondereços que podem fazer isso?
    Se substituí o scan_string pela função sscanf? Sim, mesma coisa. O LINK/2012 que me enviou quando falei do limite de long string do scan_string, acredito eu não existir nenhuma lista online com os endereços destas funções (bem que poderia ter, né).
    Você pode encontrar estes endereços dentro do .exe do jogo, sabe, basta procurar pelas funções do C++
    http://en.cppreference.com/w/cpp/io/c/fscanf

    @Deadstroke escreveu:
    Código:
       0AC6: 10@ = label @Buffer1 offset
        if not File.ReadString(20@, 10@, 128)
        then          
            0ACD: show_text_highpriority "FIM" time 1000
            file.Close(20@)
            0AB2: ret 1 -1
        end

    O script já não poderia parar ai caso tenha uma linha vazia no .ide?
    Vai ler um vazio se não me engano, eu testei no Tuning Mod e linhas vazias foi problema algum pros INI

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

    O problema que quiser nesse seria diferenciar letras minúsculas de maiúsculas, certo? Acho que duas soluções pra isso seria fazer isso para 'OBJS' e 'objs'; ou tentar converter a letra de string para inteiro e comparar, porque acho que assim elas serão iguais para minúsculas ou maiúsculas, certo?
    É, por outro lado eu não sei se caso estiver escrito "OBJS" no .ide irá funcionar ainda, se não funcionar, então isso nem vai precisar, possivelmente o  jogo lê o .IDE em case sensitive também, né...
    Eu tinha uma funçãozinha que converte as letras caso elas estejam em uppercase, era simples demais pelo que eu lembre.

    @Deadstroke escreveu:
    Código:
    // Read lines
    0AC6: 10@ = label @Buffer1 offset  
    0AC6: 11@ = label @Buffer2 offset  
    0AC6: 12@ = label @Buffer3 offset  
    0AC6: 13@ = label @Buffer4 offset
    0AC6: 14@ = label @Buffer5 offset
    0AC6: 15@ = label @Buffer6 offset
    repeat
        if not File.ReadString(20@, 10@, 128)
        then  
            file.Close(20@)
            0AB2: ret 1 -1
        end
        0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@
        if 7@ == 1
        then
            if 0AB1: call_scm_func @IsValidString 1 12@
            then
                31@++
                0AA7: call_function sscanf num_params 7 pop 7  receive 15@ 14@ 13@ 12@ 11@  format "%d,%s,%s,%d,%d"  bufferToRead 12@  -> 7@
                0AD1: show_formatted_text_highpriority "%s" time 2000 12@
                wait 200
            end
        end  
        
        0AC6: 12@ = label @str_END offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 12@ 10@ Size 3

    Esse é o problema que estive tendo, acho que o formato "%d,%s,%s,%d,%d" tem falhado, certo?
    Edit.: acho que a solução é ler a linha para a var 10@, verificar cada byte para ver se tem vírgula, e trocá-lo por um em branco, assim, depois, fica simples de ler o conteúdo do byte. Concorda?
    Possivelmente, acho que ele não está conseguindo pegar os números pois há uma virgula neles, sei lá.
    edit: Branco não, espaço (0x20), branco (0) seria null terminator


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Fabio
    Programador - Avançado
    Programador - Avançado

    Título : CEO da Fabio's Gambiarra Industries
    Mensagens : 18259
    Reputação : 304
    Idade : 19
    Localização : Reserva, Paraná, Brasil, América Latina, America do Sul, América, Planeta Terra, Sistema Solar, Via láctea, Universo
    Link : gtamodvicio.blogspot.com

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Fabio em Seg 15 Ago 2016, 15:32

    @Deadstroke escreveu:
    @Junior_Djjr escreveu:Ripei um pedaço do Tuning Mod

    Li esse script todo, e tenho dúvidas:

    Código:
    0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@

    Sobre esse opcode, ele substituiu ele por outro que faz a mesma coisa, certo? Como vc encontra os ondereços que podem fazer isso?


    Conhecimento básico sobre as funções de C/C++ e usando um disassembler (IDA, por exemplo)

    @Deadstroke escreveu:
    Código:
       0AC6: 10@ = label @Buffer1 offset
        if not File.ReadString(20@, 10@, 128)
        then          
            0ACD: show_text_highpriority "FIM" time 1000
            file.Close(20@)
            0AB2: ret 1 -1
        end

    O script já não poderia parar ai caso tenha uma linha vazia no .ide?

    Uma linha vazia ainda é algum dado de string, provável que tenha um "\r\n" ou apenas um '\n' que são as representações para retornar ao inicio da linha e nova linha.

    Se a linha estiver vazia, ainda será uma leitura válida. A função que a cleo usa (a 4.2a, pelo menos) é essa: http://www.cplusplus.com/reference/cstdio/fgets/

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

    O problema que quiser nesse seria diferenciar letras minúsculas de maiúsculas, certo? Acho que duas soluções pra isso seria fazer isso para 'OBJS' e 'objs'; ou tentar converter a letra de string para inteiro e comparar, porque acho que assim elas serão iguais para minúsculas ou maiúsculas, certo?


    Ler cada byte e comparar ele como se compara um int? (Mas ali já não está fazendo isso?) Não dá certo, uma letra é maiúscula ou minúscula justamente por terem códigos diferentes, além disso o processador não "enxerga" letras, apenas bits, e tanto você vendo a letra humanamente ou o código representante dela, para o CPU será a mesma coisa.

    Tem que fazer um cálculo +/- assim para converter tudo para a mesma case:
    http://ideone.com/SWsDbB


    @Deadstroke escreveu:
    Código:
    // Read lines
    0AC6: 10@ = label @Buffer1 offset  
    0AC6: 11@ = label @Buffer2 offset  
    0AC6: 12@ = label @Buffer3 offset  
    0AC6: 13@ = label @Buffer4 offset
    0AC6: 14@ = label @Buffer5 offset
    0AC6: 15@ = label @Buffer6 offset
    repeat
        if not File.ReadString(20@, 10@, 128)
        then  
            file.Close(20@)
            0AB2: ret 1 -1
        end
        0AA7: call_function sscanf num_params 3 pop 3  receive 12@  format "%s"  bufferToRead 10@  -> 7@
        if 7@ == 1
        then
            if 0AB1: call_scm_func @IsValidString 1 12@
            then
                31@++
                0AA7: call_function sscanf num_params 7 pop 7  receive 15@ 14@ 13@ 12@ 11@  format "%d,%s,%s,%d,%d"  bufferToRead 12@  -> 7@
                0AD1: show_formatted_text_highpriority "%s" time 2000 12@
                wait 200
            end
        end  
        
        0AC6: 12@ = label @str_END offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 12@ 10@ Size 3

    Esse é o problema que estive tendo, acho que o formato "%d,%s,%s,%d,%d" tem falhado, certo?
    Edit.: acho que a solução é ler a linha para a var 10@, verificar cada byte para ver se tem vírgula, e trocá-lo por um em branco, assim, depois, fica simples de ler o conteúdo do byte. Concorda?

    Apareceu um problema aqui e vou precisar sair, depois eu analiso isso pra ver o que dá pra fazer, mas acho que a sua ideia não é ruim, assim de apenas olhar.


    ____________________

    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'

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Seg 15 Ago 2016, 16:26

    @Junior_Djjr escreveu:
    @Deadstroke escreveu:
    Código:
    :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

    O problema que quiser nesse seria diferenciar letras minúsculas de maiúsculas, certo? Acho que duas soluções pra isso seria fazer isso para 'OBJS' e 'objs'; ou tentar converter a letra de string para inteiro e comparar, porque acho que assim elas serão iguais para minúsculas ou maiúsculas, certo?

    É, por outro lado eu não sei se caso estiver escrito "OBJS" no .ide irá funcionar ainda, se não funcionar, então isso nem vai precisar, possivelmente o jogo lê o .IDE em case sensitive também, né...
    Eu tinha uma funçãozinha que converte as letras caso elas estejam em uppercase, era simples demais pelo que eu lembre.

    "Boas notícias" sobre isso: objs, inst, end (e outros) precisam ser em minúsculo para o jogo ler corretamente (se tiver um END no final do .ide pode ser até que dê certo, deu aqui). Então, não vai ser necessário se preocupar em verificar se está maiúscula também...

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Seg 15 Ago 2016, 17:25

    O leitor de IDE do jogo é meio simples mesmo, lembro até que comentário no fim da linha pode fazer o jogo crashar.
    Ou seja, você também não vai se preocupar em não ler os comentários no fim da linha do .IDE, pois felizmente a Rockstar fez um leitor simples, então o nosso leitor também será simples Fuch That Guy


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Seg 15 Ago 2016, 22:16

    Tentei fazer o script tirando as virgulas da string, mas tem dois problemas: não está lendo algumas linhas corretamente e os valores estão saindo errado. Apesar disso, os nomes estão sendo lidos...

    Script:
    Código:
    {$cleo}
    0000:
     
    const
    sscanf        = 0x8220AD
    end
     
    while true
        wait 0
        if 0ADC: test_cheat "fil"
        jf continue
       
        if 0A9A: 0@ = openfile "data\maps\generic\barriers.ide" mode "rt"  // IF and SET
        then
            0AB1: call_scm_func @ReadFileTest 1 0@ -> 1@
            wait 1000
            0AD1: show_formatted_text_highpriority "Leu %d" time 2000 1@
        end
    end
     
     
     
    :ReadFileTest     
    0085: 20@ = 0@
     
    // Find 'objs'
    repeat
        :GetSlotsINI_Next       
        0AC6: 10@ = label @Buffer1 offset
        if not File.ReadString(20@, 10@, 128)
        then         
            0ACD: show_text_highpriority "FIM" time 1000
            file.Close(20@)
            0AB2: ret 1 -1
        end
       
        if 0AB1: call_scm_func @IsValidString 1 10@
        jf @GetSlotsINI_Next
       
        0AC6: 6@ = label @str_OBJS offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4 
     
    // Read lines
    0AC6: 10@ = label @Buffer1 offset 
    0AC6: 11@ = label @Buffer2 offset 
    0AC6: 12@ = label @Buffer3 offset 
    0AC6: 13@ = label @Buffer4 offset
    0AC6: 14@ = label @Buffer5 offset
    0AC6: 15@ = label @Buffer6 offset
    repeat 

        if not File.ReadString(20@, 10@, 128)
        then 
            file.Close(20@)
            0AB2: ret 1 -1
        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                           
       
        0AC6: 10@ = label @Buffer1 offset
        //0AD1: show_formatted_text_highpriority "%s" time 2000 10@
        //wait 200
        //0AA7: call_function sscanf num_params 3 pop 3  receive 10@  format "%s"  bufferToRead 10@  -> 7@
        if 0AB1: call_scm_func @IsValidString 1 10@
        then
            0AA7: call_function sscanf num_params 7 pop 7  receive 15@ 14@ 13@ 12@ 11@  format "%d%s%s%d%d"  bufferToRead 10@ -> 7@
            //0AD4: 7@ = scan_string 10@ format '%d%d%d%d%d' store_num_results_to 11@ 12@ 13@ 14@ 15@
            if  7@ == 5
            then
                0AD1: show_formatted_text_highpriority "%d %s %s %d %d" time 2000 11@ 12@ 13@ 14@ 15@
                31@++
                wait 200
            end
        end 
       
        0AC6: 12@ = label @str_END offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 12@ 10@ Size 3 
     
    file.Close(20@)
    0AB2: ret 1 31@
     
     
     
    //------------------------------------
     
    //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
     
     
     
    :str_OBJS
    hex
    "objs" 00
    end
     
    :str_END
    hex
    "end" 00
    end
     
    :Buffer1
    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
     
    :Buffer2
    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   
     
    :Buffer3
    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
     
    :Buffer4
    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
     
    :Buffer5
    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
     
    :Buffer6
    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

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Seg 15 Ago 2016, 22:38

    Você está falando do que? Números estranhos na tela? O código que você enviou está mostrando o ponteiro e não o valor dele :v:

    Código:

            if  7@ == 5
            then
                0A8D: 21@ = read_memory 11@ size 4 virtual_protect 0 
                0A8D: 24@ = read_memory 14@ size 4 virtual_protect 0     
                0A8D: 25@ = read_memory 15@ size 4 virtual_protect 0
                0AD1: show_formatted_text_highpriority "%d %s %s %d %d" time 2000 21@ 12@ 13@ 24@ 25@
                31@++
                wait 500
            end

    Tá PERFECT aqui, aparentemente


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Ter 16 Ago 2016, 01:00

    O leitor de .ide, basicamente, está abaixo. Troquei um repeat por while true, pois havia o problema dele não ler todos as linhas corretamente...

    Script: leitor de .ide:
    Código:
    {$cleo}
    0000:
     
    const
    sscanf        = 0x8220AD
    end
     
    while true
        wait 0
        if 0ADC: test_cheat "fil"
        jf continue
       
        if 0A9A: 0@ = openfile "data\maps\generic\barriers.ide" mode "rt"  // IF and SET
        then
            0AB1: call_scm_func @ReadFileTest 1 0@ -> 1@
            wait 1000
            0AD1: show_formatted_text_highpriority "Leu %d" time 2000 1@
        end
    end
     
     
    :ReadFileTest     
    0085: 20@ = 0@
     
    // Find 'objs'
    repeat
        :GetSlotsINI_Next       
        0AC6: 10@ = label @Buffer1 offset
        if not File.ReadString(20@, 10@, 128)
        then         
            0ACD: show_text_highpriority "FIM" time 1000
            file.Close(20@)
            0AB2: ret 1 -1
        end
       
        if 0AB1: call_scm_func @IsValidString 1 10@
        jf @GetSlotsINI_Next
       
        0AC6: 6@ = label @str_OBJS offset
    until 0AB1: call_scm_func @StringsCompare_bySize 3 6@ 10@ Size 4 
     
    // Read lines
    0AC6: 10@ = label @Buffer1 offset 
    0AC6: 11@ = label @Buffer2 offset 
    0AC6: 12@ = label @Buffer3 offset 
    0AC6: 13@ = label @Buffer4 offset
    0AC6: 14@ = label @Buffer5 offset
    0AC6: 15@ = label @Buffer6 offset
     
    while true
        if not File.ReadString(20@, 10@, 128)
        then 
            file.Close(20@)
            0ACD: show_text_highpriority "File didn't read!" time 100
            0AB2: ret 1 -1
        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                           
       
        0AC6: 10@ = label @Buffer1 offset

        if 0AB1: call_scm_func @IsValidString 1 10@
        then
            0AA7: call_function sscanf num_params 7 pop 7  receive 15@ 14@ 13@ 12@ 11@  format "%d%s%s%d%d"  bufferToRead 10@ -> 7@
            if  7@ == 5
            then
                0A8D: 21@ = read_memory 11@ size 4 virtual_protect 0 
                0A8D: 24@ = read_memory 14@ size 4 virtual_protect 0     
                0A8D: 25@ = read_memory 15@ size 4 virtual_protect 0
                0AD1: show_formatted_text_highpriority "%d %s %s %d %d" time 2000 21@ 12@ 13@ 24@ 25@
                31@++
                wait 250
            else
                0AC6: 12@ = label @str_END offset
                if  0AB1: call_scm_func @StringsCompare_bySize 3 12@ 10@ Size 3
                then    break
                end
            end
        end 
    end
     
    file.Close(20@)
    0AB2: ret 1 31@
     
     
     
    //------------------------------------
     
    //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
     
     
     
    :str_OBJS
    hex
    "objs" 00
    end
     
    :str_END
    hex
    "end" 00
    end
     
    :Buffer1
    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
     
    :Buffer2
    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   
     
    :Buffer3
    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
     
    :Buffer4
    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
     
    :Buffer5
    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
     
    :Buffer6
    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

    Sobre armazenar os códigos, usando a função abaixo:
    Código:
    0AC8: 0@ = allocate_memory_size 260
    Posso atualizar a memória deslocada à variável sem perder os valores já inseridos nele (se eu já estiver usando a var 0@ por exemplo)? Ou posso ir inserindo mais memória de alguma maneira?
    E sobre o código abaixo:
    Código:
    0AC9: free_allocated_memory 0@
    Se eu precisar permanentemente a memória alocada na var 0@, precisarei ainda, de alguma maneira, usá-la?Pois, por exemplo, sair do jogo, a memória ficará presa na RAM de qualquer maneira?

    E já falando sobre o menu, posso até usar aquele que você criou, mas precisaria adaptar algumas coisas como poder ler outras strings além dos GXT's nos arquivos FXT's, pois queria ter o ID e o nome do arquivo...

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Ter 16 Ago 2016, 01:18

    @Deadstroke escreveu:Sobre armazenar os códigos, usando a função abaixo:
    Código:
    0AC8: 0@ = allocate_memory_size 260
    Posso atualizar a memória deslocada à variável sem perder os valores já inseridos nele (se eu já estiver usando a var 0@ por exemplo)? Ou posso ir inserindo mais memória de alguma maneira?
    Já te respondi isso, dizendo que deve ser impossível e você vai ter que antes contar quantas linhas e tudo mais para saber quantos bytes serão necessários antes de alocá-los.

    @Deadstroke escreveu:E sobre o código abaixo:
    Código:
    0AC9: free_allocated_memory 0@
    Se eu precisar permanentemente a memória alocada na var 0@, precisarei ainda, de alguma maneira, usá-la?Pois, por exemplo, sair do jogo, a memória ficará presa na RAM de qualquer maneira?
    Imagine se sair do jogo a memória ficasse presa kkkkk seria um problemão mesmo, tudo é descarregado, até mesmo no Load Game acredito eu

    @Deadstroke escreveu:E já falando sobre o menu, posso até usar aquele que você criou, mas precisaria adaptar algumas coisas como poder ler outras strings além dos GXT's nos arquivos FXT's, pois queria ter o ID e o nome do arquivo...
    Mas eu já fiz isso
    http://bms.mixmods.com.br/t5337-basico-shine-gui-tool-criar-menus-facilmente#218554


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Ter 16 Ago 2016, 10:55

    Posso testar isso futuramente.

    Ainda estou melhorando o leitor, pois tem outros tipos de "objetos" a serem lidos, não só os que começam com 'objs', acho que 'weap', 'inst', 'hire', 'cars', 'peds' e outros também se encaixam no contexto. E precisamos adaptá-los também...

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Ter 16 Ago 2016, 13:05

    inst e hire?
    inst só conheço do IPL, hire não vi


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Qua 17 Ago 2016, 15:33

    Errei em algumas considerações: a lista de .ide do jogo se encontra nos dois links abaixo
    http://www.gtamodding.com/wiki/Item_Definition
    http://gta.wikia.com/wiki/IDE

    Mas os que importam são: objs, tobj, cars (daí seria um car spawner, que pode se tornar um park generator), peds (idem para cars, mas não sei o que se poderia fazer com esses peds extra).

    Sabe como pegar um a lista, numa thread memory por exemplo, e ordenar? Fez algo do tipo?

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Qua 17 Ago 2016, 17:41

    Não entendi bem, mas realmente nunca fiz nada próximo à isso

    E com sem dúvidas eu recomendo você ignorar totalmente essa coisa de carros e peds por enquanto, o pessoal quer criar mods de mapa, e não ficar criando pessoas ou carros, há outros mods que fazem isso

    Eu particularmente só quero um mod que adicione ou até mesmo edite objetos de mapa (sendo que editar os originais vai ter certos limites e complicações), se for botar o mod além, que faça criadores de enex, garagem, audiozone etc in-game, pra ficar um IPL completo, assim como a criação de um IDE in-game escolhendo os modelos, botando as flags etc


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Qua 17 Ago 2016, 23:46

    Esqueci de mencionar weap (objeto de armas) e anim (objetos animados).
    Não sei como funciona sobre LOD's e objetos que são difíceis de se colocar, como pedaços de mapas ou coisa assim. Na internet não se encontra muito a respeito...
    Mas você tem razão, adicionar objetos e salvar seus dados é o foco por enquanto...

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Qui 18 Ago 2016, 01:04

    Imagine um mod onde pessoas leigas podem criar mods de mapas adicionando uns objetos onde quiser, coisas de pedaços de mapa, LOD etc é usado só pra quando o projeto é maior, como conversões totais, acho que tentar focar nisso é só pra depois caso o mod ficar bom e compensar bota-lo pra frente

    Mas naboa, não vejo problemas com LOD etc, a não ser que seja problemas com a criação deles por script, e como assim "objetos que são difíceis de colocar"? Qual o problema?

    A partir de amanhã devo ficar sem net até dia 25, mas Fabio ou alguém pode continuar te tirando algumas dúvidas :v:


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Matheus22567
    Mensagens Nível 6
    Mensagens Nível 6

    Plataforma : PC
    Mensagens : 1788
    Reputação : 16
    Idade : 16
    Localização : Rio Claro SP
    Link : http://youtube.com/samu22gamer

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Matheus22567 em Qui 18 Ago 2016, 10:03

    enquanto estiver sem net faz o mod de pokemon djjr irei amalo


    ____________________
    PC:
    Processador: Dual Core G2030 3.00 GHz
    Memoria RAM: 12GB DDR3
    Placa mae: P8H61 LX2 R2.0
    GPU: nvidia GT 730 2gb DDR3 128 bits
    HD: 465GB
    fonte: 500W ATX sla oq




    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Qui 18 Ago 2016, 10:31

    @Junior_Djjr escreveu:Imagine um mod onde pessoas leigas podem criar mods de mapas adicionando uns objetos onde quiser, coisas de pedaços de mapa, LOD etc é usado só pra quando o projeto é maior, como conversões totais, acho que tentar focar nisso é só pra depois caso o mod ficar bom e compensar bota-lo pra frente

    Mas naboa, não vejo problemas com LOD etc, a não ser que seja problemas com a criação deles por script, e como assim "objetos que são difíceis de colocar"? Qual o problema?

    A partir de amanhã devo ficar sem net até dia 25, mas Fabio ou alguém pode continuar te tirando algumas dúvidas :v:

    Suave, vai ser difícil ficar tanto no mod por enquanto, irei devagar. Não devo precisar de nada por enquanto...

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Sab 20 Ago 2016, 21:00

    Eu consegui fazer um leitor de .ide, com direito a um .ini a acrescentar .ide que quiser. Ele quer objetos do tipo 'objs', 'tobj', 'anim' e 'weap'. Acho que são os básicos no jogo.

    Problema: leitor tem, mas não estou conseguindo salvar os valores corretamente, estou tentando pelo opcode 0AC8, mas há crashes esquisitos em salvar e reler os valores salvos nesse... Tentarei ver isso no futuro, mas quem quiser dar um toque agradeço!

    Code:

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

    var
        _COUNT_SECTIONS_ : int
        _COUNT_OBJS_ : int
    end
     
    while true
        wait 0
        if 0ADC: test_cheat "fil"
        jf continue
        
        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 0 -> _COUNT_SECTIONS_ _TH_MEM_SECTIONS_ _COUNT_OBJS_ _TH_MEM_OBJS_
        
        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: 0@ = var _TH_MEM_SECTIONS_ offset
            //0085: 0@ = _TH_MEM_SECTIONS_
            For 1@ = 1 to _COUNT_SECTIONS_
                0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0
                //0@ += 4
                //0A8D: 3@v = read_memory 0@ size 16 virtual_protect 0
                //0@ += 16
                //0AD1: show_formatted_text_highpriority "%d %s" time 1000 2@ 3@v
                0AD1: show_formatted_text_highpriority "%d %d" time 1000 0@ 2@
                0@ += 20
                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



        
    :ReadAllIde
    6@ = 0
    7@ = 0  
    For 0@ = 1 to 2     //1 == counting mod;  2 = saving mod
        if  0A9A: 29@ = openfile "cleo\MapperMod.ini" mode "rt"  // IF and SET
        then  
            
            //Creating thread memory in 'saving mod'
            if  0@ == 2
            then

                //Sections memory            
                6@ += 3     //Sections peds, cars and weapons
                0085: 8@ = 6@
                8@ *= 20
                0AC8: 30@ = allocate_memory_size 8@
                /*
                //Saving current sections in memory
                0AC7: 8@ = var 30@ offset
                //Peds
                0A8C: write_memory 8@ size 4 value -3 virtual_protect 0
                8@ += 4
                0AC6: 2@ = label @str_PEDESTRIANS offset
                0A8C: write_memory 8@ size 16 value 2@ virtual_protect 0
                8@ += 16
                //Vehicles
                0A8C: write_memory 8@ size 4 value -2 virtual_protect 0
                8@ += 4
                0AC6: 2@ = label @str_VEHICLES offset
                0A8C: write_memory 8@ size 16 value 2@ virtual_protect 0
                8@ += 16
                //Weapons
                0A8C: write_memory 8@ size 4 value -1 virtual_protect 0
                8@ += 4
                0AC6: 2@ = label @str_WEAPONS offset
                0A8C: write_memory 8@ size 16 value 2@ virtual_protect 0
                8@ += 16            
                */
                //Objects memory
                0085: 8@ = 7@
                8@ *= 40            
                0AC8: 31@ = allocate_memory_size 8@
                
            end
            
            //Reading .ini lines
            0AC6: 1@ = label @Buffer_0_1_128 offset
            while   File.ReadString(29@, 1@, 128)
                //Check if it's 'files'
                0AC6: 2@ = label @str_FILES offset
                if  0AB1: call_scm_func @StringsCompare_bySize 3 2@ 1@ Size 5
                then    
                    
                    while   File.ReadString(29@, 1@, 128)
                        //Check if it's 'end'
                        0AC6: 2@ = label @str_END offset
                        if  0AB1: call_scm_func @StringsCompare_bySize 3 2@ 1@ Size 3
                        then
                            break
                        end
                        //Read line from .ini
                        0AC6: 2@ = label @Buffer_0_2_32 offset
                        0AC6: 3@ = label @Buffer_0_3_16 offset
                        0AC6: 4@ = label @Buffer_0_4_32 offset
                        0AA7: call_function sscanf num_params 5 pop 5 receive 4@ 3@ 2@ format "%d%s%s" bufferToRead 1@ -> 5@    //readstring
                        if  5@ == 3
                        then
                            //Check if the file exists and read it
                            if 0A9A: 28@ = openfile 4@ mode "rt"  // IF and SET
                            then                        
                                //Count or save sections
                                if  0@ == 2
                                then
                                   /* 0A8D: 5@ = read_memory 2@ size 4 virtual_protect 0
                                    0AC7: 8@ = var 30@ offset
                                    0A8C: write_memory 8@ size 4 value 5@ virtual_protect 0
                                    8@ += 4
                                    0A8C: write_memory 8@ size 16 value 3@ virtual_protect 0
                                    8@ += 16 */
                                else
                                    6@++
                                    0A8D: 5@ = read_memory 2@ size 4 virtual_protect 0
                                    0AD1: show_formatted_text_highpriority "%d %s" time 2000 5@ 3@
                                    wait 1500                              
                                end
                                //Count or save ide lines
                                0AB1: call_scm_func @ReadFileTest 4 file 28@ mod 0@ thread_memory 31@ section 5@ -> counter 8@ //thread_memory 31@
                                005A: 7@ += 8@  // (int)                            
                            end
                        end                    
                    end
                    break                  
                end
            end
            file.Close(29@)        
        end
    end
    0AB2: ret 4 6@ 30@ 7@ 31@


    :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
    // Read lines
    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(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@ -> 7@    //readstring
        if  7@ == 4
        then    
            if  1@ == 2
            then
                /*0A8D: 21@ = read_memory 11@ size 4 virtual_protect 0
                0AC7: 28@ = var 2@ offset
                0A8C: write_memory 28@ size 4 value 21@ virtual_protect 0
                28@ += 4
                0A8C: write_memory 28@ size 32 value 12@ virtual_protect 0
                28@ += 32
                0A8C: write_memory 28@ size 4 value 29@ virtual_protect 0
                28@ += 4  */          
            else
                31@++              
                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 25
            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
     
    :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
    MapperMod.ini:
    Código:
    ;Files
    files
    ;-3 PEDS
    ;-2 VEHICLES
    ;-1 WEAPONS
    1 DEFAULT data\default.ide
    2 BARRIES data\maps\generic\barriers.ide
    end

    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Junior, o periquito.
    Plataforma : PC
    Mensagens : 20319
    Reputação : 569
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Junior_Djjr em Seg 22 Ago 2016, 12:07

    Era pra eu estar sem net mas minhas mãe ganhou mil reais num sorteio e tive que pagar um plano adicional de 20 reais pra pegar um troço no email etc Fuch That Guy

    Dá para explicar melhor qual crash? Olhando no código, não notei nada errado. Poderia tentar criar uma thread memory gigantesca e usá-la para ver se dará o mesmo problema

    Caso o problema for o opcode, como sempre, há alternativas:
    Código:
    const
        _malloc                = 0x00824257
        _memcpy                = 0x00822A20
    end
    0AA7: call_function_return _malloc 1 1 params 100 return 13@ // Allocate memory
    0AA5: call_function _memcpy num_params 3 pop 3 params 100 12@ 13@ // Copy memory
    Como se pode ver, irá alocar 100 bytes e retornar na var 13@
    E depois, irá escrever 100 bytes da var 12@ na var 13@

    Usei no Tuning Mod e funcionou perfeitamente bem, mas, para alguns PCs é necessário NoDEP.asi pois o Windows é cagão


    ____________________
    Evite o pensamento binário do verdadeiro ou falso; do certo ou errado. O mundo é muito mais complexo do que 1 bit.

    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Plataforma : PC
    Fabricante: Acer
    Processador: Intel(R) Core(TM) i3-2338M CPU 2.20 GHz
    Memória RAM: 4 GB
    Sistema: x64, windows 10
    Placa de Vídeo: Intel Graphics 3000
    Mensagens : 280
    Reputação : 14
    Localização : São Paulo

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Deadstroke em Seg 22 Ago 2016, 12:49

    @Junior_Djjr escreveu:Era pra eu estar sem net mas minhas mãe ganhou mil reais num sorteio e tive que pagar um plano adicional de 20 reais pra pegar um troço no email etc Fuch That Guy

    Dá para explicar melhor qual crash? Olhando no código, não notei nada errado. Poderia tentar criar uma thread memory gigantesca e usá-la para ver se dará o mesmo problema

    Caso o problema for o opcode, como sempre, há alternativas:
    Código:
    const
        _malloc                = 0x00824257
        _memcpy                = 0x00822A20
    end
    0AA7: call_function_return _malloc 1 1 params 100 return 13@ // Allocate memory
    0AA5: call_function _memcpy num_params 3 pop 3 params 100 12@ 13@ // Copy memory
    Como se pode ver, irá alocar 100 bytes e retornar na var 13@
    E depois, irá escrever 100 bytes da var 12@ na var 13@

    Usei no Tuning Mod e funcionou perfeitamente bem, mas, para alguns PCs é necessário NoDEP.asi pois o Windows é cagão

    Não sei se estava lendo corretamente a script, tentei fazer como está abaixo:
    Código:
               6@ += 3     //Sections peds, cars and weapons
                0085: 8@ = 6@
                8@ *= 20
                0AC8: 30@ = allocate_memory_size 8@
                
                //Peds
                0A8C: write_memory 30@ size 4 value -3 virtual_protect 0
                30@ += 4
                0AC6: 2@ = label @str_PEDESTRIANS offset
                0A8C: write_memory 30@ size 16 value 2@ virtual_protect 0
                30@ += 16
                //Vehicles
                0A8C: write_memory 30@ size 4 value -2 virtual_protect 0
                30@ += 4
                0AC6: 2@ = label @str_VEHICLES offset
                0A8C: write_memory 30@ size 16 value 2@ virtual_protect 0
                30@ += 16
                //Weapons
                0A8C: write_memory 30@ size 4 value -1 virtual_protect 0
                30@ += 4
                0AC6: 2@ = label @str_WEAPONS offset
                0A8C: write_memory 30@ size 16 value 2@ virtual_protect 0
                30@ += 16

    E depois, para ler, como está abaixo:

    Código:
           0AC7: 0@ = var _TH_MEM_SECTIONS_ offset // fazer uma cópia da var com as memórias
            //0085: 0@ = _TH_MEM_SECTIONS_
            For 1@ = 1 to _COUNT_SECTIONS_
                0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0
                //0@ += 4
                //0A8D: 3@v = read_memory 0@ size 16 virtual_protect 0
                //0@ += 16
                //0AD1: show_formatted_text_highpriority "%d %s" time 1000 2@ 3@v
                0AD1: show_formatted_text_highpriority "%d %d" time 1000 0@ 2@
                0@ += 20
                wait 1000                                    
            end

    Porém não deu certo. Como disse, o script já lê as informações, mas para salvar e reler do que foi salvo é o problema.
    Você já me mostrou como allocar e salvar valores, mas para ler como faço exatamente? Preciso avançar como 30@ += 4 por exemplo ou preciso usar outra função antes como 0AC7: 0@ = var 0@ offset ?

    Fabio
    Programador - Avançado
    Programador - Avançado

    Título : CEO da Fabio's Gambiarra Industries
    Mensagens : 18259
    Reputação : 304
    Idade : 19
    Localização : Reserva, Paraná, Brasil, América Latina, America do Sul, América, Planeta Terra, Sistema Solar, Via láctea, Universo
    Link : gtamodvicio.blogspot.com

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Fabio em Seg 22 Ago 2016, 16:57

    size 16?


    ____________________

    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'

    Conteúdo patrocinado

    Re: Novo Mod Planter (nome provisório)

    Mensagem por Conteúdo patrocinado Hoje à(s) 22:48


      Data/hora atual: Seg 16 Jan 2017, 22:48