Pesquisa resultou em 10 ocorrências

por Junior_Djjr
08 Mai 2018, 18:19
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

O script fica mais bonito mesmo. Só que no caso dos pickups acho que não tem um getAllPickups.
por Junior_Djjr
08 Mai 2018, 16:38
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

mythrillex escreveu:
Israel escreveu: Em lua dá pra usar getAllChars().
:facep: não tinha visto isso, obrigado, vai deixar o script bem mais leve  
Será?
Em CLEO também tem e nem por isso é mais leve (na verdade é caso você estiver usando um raio limite em vez de pegar todo mundo).

Mas o seu código é para pegar pickups não chars. Não entendi.
por Junior_Djjr
04 Mai 2018, 19:27
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

Converte para decimal então. Use qualquer ferramenta online, ou coloque o código no Sanny Builder, cursor de digitação em cima do número e CTRL+H para converter.

Uma coisa, logo antes do // obtain pickup's object pointer, na variável [email protected] você tem o CPickup.
Não sei se você estudou sobre manuseamento de memória (especialmente sobre structs), mas:

Código: Selecionar tudo

00000000 CPickup         struc ; (sizeof=0x20, align=0x4, copyof_1198)
00000000                                         ; XREF: .data:CPickups::aPickUps/r
00000000 m_fRevenueValue dd ?
00000004 m_pObject       dd ?                    ; XREF: CPickups::GenerateNewOne(CVector,uint,uchar,uint,uint,bool,char *)+285/r
00000004                                         ; CPickups::GenerateNewOne(CVector,uint,uchar,uint,uint,bool,char *)+292/r ... ; CObject *
00000008 m_nAmmo         dd ?
0000000C m_nRegenerationTime dd ?
00000010 m_vecPos        CompressedVector ?      ; XREF: CPickup::GetPosn(void)+1/r
00000010                                         ; CPickup::GetPosn(void)+5/r ...
00000016 m_nMoneyPerDay  dw ?
00000018 m_nModelIndex   dw ?
0000001A m_nReferenceIndex dw ?
0000001C m_nPickupType   db ?                    ; XREF: CRunningScript::ProcessCommands1100To1199(int)+AB4/r
0000001D m_nFlags        db ?                    ; flags
0000001E _pad1E          db 2 dup(?)
00000020 CPickup         ends
Aparentemente em +0x1C você tem o tipo de pickup, e é lá que deve estar o tipo "dinheiro". Não sei qual o número do dinheiro mas você consegue descobrir com testes.
Senão cheque o modelo do objeto, mas a forma acima é a mais correta (especialmente porque você não precisa pegar o objeto de todos os pickups do jogo né, você só quer o de dinheiro).
Edit: em +0x18 também tem o ID do modelo :philo: é legal também.
por Junior_Djjr
04 Mai 2018, 19:19
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

ATENÇÃO: CÓDIGO FINAL POSTADO AQUI

Está funcionando aqui.

Código: Selecionar tudo

 {$cleo}
0000:

while true
    wait 0
    for [email protected] = 0x9788C0 to 0x97D620 step 0x20
        0A8E: [email protected] = [email protected] + 0x1A
        0A8D: [email protected] = read_memory [email protected] size 2 virtual_protect 0
        [email protected] *= 0x10000
        0A8F: [email protected] = [email protected] - 0x9788C0
        [email protected] /= 0x20
        005A: [email protected] += [email protected]
        
        if 09D1:   does_pickup_exist [email protected]
        then
            065B: store_pickup [email protected] position_to [email protected] [email protected] [email protected]
            024F: create_corona_with_radius 1.0 type 2 lensflares 0 with_color 255 255 255 at [email protected] [email protected] [email protected]
        end
    end
end
Imagem
Mas tá retornando mesmo que o pickup não exista mais:
Imagem
Essas marcas são pickups "mortos", eles já existiram, não existem mais, mas continua os valores na memória (pois é assim que funciona).
Tem que fazer algo para checar se o tal pickup realmente existe, o 09D1: does_pickup_exist não funciona, e o mesmo comando em Lua com certeza também não funcionará.
 

Adicionado após 5 minutos 44 segundos:
Funcionou 100%:

Código: Selecionar tudo

 {$cleo}
0000:

while true
    wait 0
    for [email protected] = 0x9788C0 to 0x97D620 step 0x20
        0A8E: [email protected] = [email protected] + 0x1A
        0A8D: [email protected] = read_memory [email protected] size 2 virtual_protect 0
        [email protected] *= 0x10000
        0A8F: [email protected] = [email protected] - 0x9788C0
        [email protected] /= 0x20
        005A: [email protected] += [email protected]
        
        if 09D1:   pickup [email protected] created
        then
            if 0AB1: call_scm_func @Pickup2Object 1 [email protected] [email protected]
            then
                01BB: store_object [email protected] position_to [email protected] [email protected] [email protected]
                024F: create_corona_with_radius 1.0 type 2 lensflares 0 with_color 255 255 255 at [email protected] [email protected] [email protected]
            end
        end
    end
end

:Pickup2Object
// [email protected] - input param (pickup handle)
// get pickup pointer
0085: [email protected] = [email protected] 
0A91: [email protected] = [email protected] / 65536
0A90: [email protected] = [email protected] * 65536
0062: [email protected] -= [email protected]
[email protected] *= 32
[email protected] += 0x9788C0
// read index
0A8E: [email protected] = [email protected] + 0x1A
0A8D: [email protected] = read_memory [email protected] size 2 virtual_protect 0
if
    003B: [email protected] == [email protected]
then    
    // obtain pickup's object pointer
    [email protected] += 4
    0A8D: [email protected] = read_memory [email protected] size 4 virtual_protect 0
    if
        [email protected] > 0
    then
        // convert object pointer to a handle
        0A8D: [email protected] = read_memory 0xB7449C size 4 virtual_protect 0
        0AA8: call_function_method 0x465070 struct [email protected] num_params 1 pop 0 [email protected] [email protected]
        if
            03CA:   object [email protected] exists 
        then
            0485: return_true
            0AB2: ret 1 [email protected]
        end
    end
end
059A: return_false
0AB2: ret 1 0
Sabendo que o objeto existe, você pode saber que o pickup também existe.

Agora passe tudo isso pra Lua :fts: 

ATENÇÃO: CÓDIGO FINAL POSTADO AQUI
por Junior_Djjr
04 Mai 2018, 18:57
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

Ué, parece certo.
Mas como o script não está executando? Deu erro no código? (moonloader.log)

edit: na real esse código que passei não faz sentido, o início dele. :philo: 
por Junior_Djjr
04 Mai 2018, 17:06
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

Ah, eu esqueci que eu já postei isso...  :ogw:
http://brmodstudio.forumeiros.com/t4929 ... mente-util

Código: Selecionar tudo

for [email protected] = 0x9788C0 to 0x97D620 step 0x20
    if
        [email protected] > 0
    then
        0A8E: [email protected] = [email protected] + 0x1A
        0A8D: [email protected] = read_memory [email protected] size 2 virtual_protect 0
        [email protected] *= 0x10000
        0A8F: [email protected] = [email protected] - 0x9788C0
        [email protected] /= 0x20
        005A: [email protected] += [email protected]

        //[email protected] = pickup
    end
end
Resolvido.
por Junior_Djjr
04 Mai 2018, 02:52
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

Caramba tudo isso só pra pegar um pickup? :pokerface: 

Eu tinha dado uma dica mas não funcionaria.

Onde você encontrou essa função acima?
por Junior_Djjr
03 Mai 2018, 22:14
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

Essa função que você mandou devia cuidar disso, deve ser tudo oque você precisa mesmo.
Também poderia pegar a posição do pickup diretamente sem converter pra objeto (tem que ver como fazer isso), mas se converter pra objeto também tá ok, e é isso que ela faz.
por Junior_Djjr
03 Mai 2018, 20:27
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

Caso tiver algum pickup de dinheiro próximo, e naquele local do pickup não tiver nenhuma pessoa próxima, vá até ele, olhe para os lados e pegue.
Logo após pegar, checar por outros próximos, igual acima, mas agora sem fazer a animação olhando.
Melhor pegar uns 3 pickups próximos em vez de só 1, senão vai ficar fazendo animação abaixando toda hora e não será natural.
Após pegar tudo próximo, volta pro primeiro caso, onde caso encontrar de novo, olhe para os lados.
por Junior_Djjr
03 Mai 2018, 20:02
Fórum: Ideias de mods & Procura
Tópico: Pedestres pegam dinheiro
Respostas: 24
Exibições: 1216
Gênero:

Pedestres pegam dinheiro

É realmente algo que demorou para alguém fazer...
É estranho ter dinheiro no chão e só você pegar.
Seria legal se ele antes fizesse animação de olhar pros lados para atravessar a rua, rapidamente, daí ele faz uma animação agachando para pegar algo (não sei qual, mas há mods que pegam armas do chão que usam alguma)

Voltar para “Pedestres pegam dinheiro”