[BÁSICO] Attachar objeto ao bone (osso) do ator

    Compartilhe
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : WAIT -1
    Mensagens : 21094
    Reputação : 605
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Junior_Djjr em Dom 06 Jul 2014, 09:32

    Primeiramente, por que usar isso ao invés do opcode 09A0:? POIS USANDO ESSA FUNÇÃO VOCÊ TERÁ ATÉ 6 MIL OBJETOS!
    Já usando aquele opcode você poderá ter somente 2, além de vários bugs

    Veja como é simples o usar essa função:

    Uso:
    Código:
    0AB1: call_scm_func @attachObjectToActorOnBone 6 actor $player_actor attach_to_object 0@ offset 0.0 0.0 0.0 on_bone 24


    Função:
    Código:
    :attachObjectToActorOnBone
    {
    0AB1: call_scm_func @attachObjectToActorOnBone 6 actor $player_actor attach_to_object 0@ offset 0.0 0.0 0.0 on_bone 24
    }
    0A96: 0@ = actor 0@ struct
    0AA6: call_method 0x532B20 struct 0@ num_params 0 pop 0 // sub_532B20
    0@ += 0x18
    0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
    0AA7: call_function 0x734A40 num_params 1 pop 1 0@ 0@ // _clumpGetFirstSkinAtomicHAnimHierarchy
    if
       0@ <> 0
    then
       0AA7: call_function 0x7C51A0 num_params 2 pop 2 5@ 0@ 5@ // _RpHAnimIDGetIndex
       0AA7: call_function 0x7C5120 num_params 1 pop 1 0@ 0@ // _RpHAnimHierarchyGetMatrixArray
       5@ *= 0x40
       005A: 5@ += 0@
       0AC7: 6@ = var 2@ offset
       0AA5: call 0x54EEF0 num_params 4 pop 4 6@ 5@ 1 6@ // _transformPoints
       0177: set_object 1@ Z_angle_to 0.0
       0A98: 1@ = object 1@ struct
       1@ += 0x14
       0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
       1@ -= 0x14
       0AA6: call_method 0x411990 struct 1@ num_params 0 pop 0 // sub_411990
       0AA6: call_method 0x59AD20 struct 0@ num_params 1 pop 0 5@ // CMatrix__copyTo
       0AA6: call_method 0x4241C0 struct 1@ num_params 1 pop 0 6@ // CPlaceable__setPosition
       1@ += 0x18
       0A8D: 7@ = read_memory 1@ size 4 virtual_protect 0
       if
           7@ <> 0
       then
           7@ += 0x4
           0A8D: 7@ = read_memory 7@ size 4 virtual_protect 0
           7@ += 0x10
           0AA6: call_method 0x59AD70 struct 0@ num_params 1 pop 0 7@ // CMatrix__copyTo
           1@ -= 0x18
           0AA6: call_method 0x532B00 struct 1@ num_params 0 pop 0 // _RwFrameUpdateObject
       else
           1@ -= 0x18
           0AA6: call_method 0x532B00 struct 1@ num_params 0 pop 0 // _RwFrameUpdateObject
       end
    else
       0AB2: ret 0
    end
    0AB2: ret 0


    Exemplo:
    Código:
    {$cleo}
    0000:

    while true
        wait 0
        0ADC:   test_cheat "OBJ"
        jf continue
        
        model.Load(1575) //1575 = drug_white.dff (data/maps/generic/multiobj.ide)
        038B: load_requested_models
        
        object.Create(0@,1575,0.0,0.0,0.0)
        object.CollisionDetection(0@,false) //tire a colisao do objeto senão vai bugar no CJ
        
        
        while 8ADC:   not test_cheat "OBJ"
            wait 0
            0AB1: call_scm_func @attachObjectToActorOnBone 6 actor $player_actor attach_to_object 0@ offset 0.0 0.0 0.0 on_bone 24
        end
    end




    //-- Função criada por Ryosuke839 e atualizada por DK

    :attachObjectToActorOnBone
    {
    0AB1: call_scm_func @attachObjectToActorOnBone 6 actor $3 attach_to_object 0@ offset 0.0 0.0 0.0 on_bone 24
    }
    0A96: 0@ = actor 0@ struct
    0AA6: call_method 0x532B20 struct 0@ num_params 0 pop 0 // sub_532B20
    0@ += 0x18
    0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
    0AA7: call_function 0x734A40 num_params 1 pop 1 0@ 0@ // _clumpGetFirstSkinAtomicHAnimHierarchy
    if
       0@ <> 0
    then
       0AA7: call_function 0x7C51A0 num_params 2 pop 2 5@ 0@ 5@ // _RpHAnimIDGetIndex
       0AA7: call_function 0x7C5120 num_params 1 pop 1 0@ 0@ // _RpHAnimHierarchyGetMatrixArray
       5@ *= 0x40
       005A: 5@ += 0@
       0AC7: 6@ = var 2@ offset
       0AA5: call 0x54EEF0 num_params 4 pop 4 6@ 5@ 1 6@ // _transformPoints
       0177: set_object 1@ Z_angle_to 0.0
       0A98: 1@ = object 1@ struct
       1@ += 0x14
       0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
       1@ -= 0x14
       0AA6: call_method 0x411990 struct 1@ num_params 0 pop 0 // sub_411990
       0AA6: call_method 0x59AD20 struct 0@ num_params 1 pop 0 5@ // CMatrix__copyTo
       0AA6: call_method 0x4241C0 struct 1@ num_params 1 pop 0 6@ // CPlaceable__setPosition
       1@ += 0x18
       0A8D: 7@ = read_memory 1@ size 4 virtual_protect 0
       if
           7@ <> 0
       then
           7@ += 0x4
           0A8D: 7@ = read_memory 7@ size 4 virtual_protect 0
           7@ += 0x10
           0AA6: call_method 0x59AD70 struct 0@ num_params 1 pop 0 7@ // CMatrix__copyTo
           1@ -= 0x18
           0AA6: call_method 0x532B00 struct 1@ num_params 0 pop 0 // _RwFrameUpdateObject
       else
           1@ -= 0x18
           0AA6: call_method 0x532B00 struct 1@ num_params 0 pop 0 // _RwFrameUpdateObject
       end
    else
       0AB2: ret 0
    end
    0AB2: ret 0
    Basta digitar "OBJ" para ver a mágica


    Na linha pra chamar a função, em "on_bone 24", você pode mudar para o número do bone que você quer


    Última edição por Junior_Djjr em Dom 06 Jul 2014, 09:56, editado 1 vez(es)


    ____________________
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : WAIT -1
    Mensagens : 21094
    Reputação : 605
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Junior_Djjr em Dom 06 Jul 2014, 09:38

    Pessoas olham pra esse tópico e pensam "wtf q porra de script gigante, nunca vou entender isso", serio vei, até eu tenho dificuldade de entender oq tudo oq essa função faz, nao importa se vc nao entende, a função está ai aberta para o uso, unica coisa q vc irá fazer no seu script eh criar um objeto, colar essa função em algum lugar do script (lah embaixo etc), e usar a linha pra chamar a função:
    Código:
    0AB1: call_scm_func @attachObjectToActorOnBone 6 actor $player_actor attach_to_object 0@ offset 0.0 0.0 0.0 on_bone 24
    no caso, attachar o objeto da variavel 0@ no ator $player_actor (pode qualquer em qualquer pessoa) no offset 0.0 0.0 0.0 (por exemplo, deixe 0.0 0.5 0.0 para o objeto ficar mais pra "frente"), e no osso 24

    muito simples... as pessoas q se assustam e dificultam, na verdade qualquer um consegue fazer isso :)


    ____________________
    avatar
    Mak47
    Modelador - Básico
    Modelador - Básico

    Mensagens : 311
    Reputação : 6
    Desde : 16/08/2016
    Idade : 13
    Localização : West-Side

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Mak47 em Qua 04 Jan 2017, 17:33

    Tem como attachar a qualquer ped?
    avatar
    AguiaX2
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 548
    Reputação : 37
    Desde : 19/08/2015
    Idade : 14
    Localização : Em algum lugar do brasil

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por AguiaX2 em Qua 04 Jan 2017, 18:47

    tem


    ____________________


    avatar
    Mak47
    Modelador - Básico
    Modelador - Básico

    Mensagens : 311
    Reputação : 6
    Desde : 16/08/2016
    Idade : 13
    Localização : West-Side

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Mak47 em Qua 04 Jan 2017, 20:15

    Como?
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : WAIT -1
    Mensagens : 21094
    Reputação : 605
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Junior_Djjr em Qua 04 Jan 2017, 20:49

    É a mesma coisa, na linha da função pede o ator (no $player_actor), é só colocar qual você quer.


    ____________________
    avatar
    Mak47
    Modelador - Básico
    Modelador - Básico

    Mensagens : 311
    Reputação : 6
    Desde : 16/08/2016
    Idade : 13
    Localização : West-Side

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Mak47 em Qua 04 Jan 2017, 21:39

    @Junior_Djjr escreveu:É a mesma coisa, na linha da função pede o ator (no $player_actor), é só colocar qual você quer.
    Valew, vai me ajuda bastante
    avatar
    Mak47
    Modelador - Básico
    Modelador - Básico

    Mensagens : 311
    Reputação : 6
    Desde : 16/08/2016
    Idade : 13
    Localização : West-Side

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Mak47 em Sab 07 Jan 2017, 19:37

    Desculpa o double post.
    Eu testei em um ped e crashou
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : WAIT -1
    Mensagens : 21094
    Reputação : 605
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Junior_Djjr em Sab 07 Jan 2017, 19:53



    ____________________
    avatar
    Mak47
    Modelador - Básico
    Modelador - Básico

    Mensagens : 311
    Reputação : 6
    Desde : 16/08/2016
    Idade : 13
    Localização : West-Side

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Mak47 em Dom 08 Jan 2017, 10:33

    Tá assim no scrlog(No final)

    00000075&1: [0AB1] CALL -122 6 1129126403 37890 0.0 0.0 0.0 25
    00000122&1: [0A96] GET_CHAR_POINTER 1129126403 -> 0x0
    00000130&1: [0AA6] CALL_METHOD 0x532B20 0x0 0 0
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : WAIT -1
    Mensagens : 21094
    Reputação : 605
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Junior_Djjr em Dom 08 Jan 2017, 21:26

    [0A96] GET_CHAR_POINTER 1129126403 -> 0x0
    [0AA6] CALL_METHOD 0x532B20 0x0 0 0
    "0x0"
    Simples, retornou "0" quando tentou pegar o ponteiro do actor. Possivelmente o actor não existia, ou você enviou errado etc.


    ____________________
    avatar
    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 423
    Reputação : 24
    Desde : 08/02/2016
    Localização : São Paulo

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Deadstroke em Seg 27 Fev 2017, 16:27

    Passei o opcode pro GTA3Script (ver abaixo) e testei na função.

    GTA3Script:
    Código:
    SCRIPT_START
    {
        NOP
       
        LVAR_INT scplayer
        LVAR_INT object

        GET_PLAYER_CHAR 0 scplayer

        loop1:
            WAIT 0
            IF NOT TEST_CHEAT "OBJ"
                GOTO loop1
            ENDIF

            REQUEST_MODEL 1575
            LOAD_ALL_MODELS_NOW
            CREATE_OBJECT 1575 0.0 0.0 0.0 object
            SET_OBJECT_COLLISION object FALSE

            WAIT 0
            WHILE NOT TEST_CHEAT "OBJ"
                CLEO_CALL attachObjectToActorOnBone 0 scplayer object 0.0 0.0 0.0 24
                WAIT 0
            ENDWHILE

        GOTO loop1
    }
    SCRIPT_END

    {
       
        LVAR_INT char_handle object_attached
        LVAR_FLOAT offset_x offset_y offset_z
        LVAR_INT bone
        LVAR_INT tempi_1 tempi_2

        //CLEO_CALL attachObjectToActorOnBone 0 char_handle object_attached offset_x offset_y offset_z bone
        attachObjectToActorOnBone:
            GET_PED_POINTER char_handle char_handle
            CALL_METHOD 0x532B20 char_handle 0 0 // sub_532B20
            char_handle += 0x18
            READ_MEMORY char_handle 4 0 char_handle
            CALL_FUNCTION_RETURN 0x734A40 1 1 char_handle char_handle // _clumpGetFirstSkinAtomicHAnimHierarchy

            IF NOT char_handle = 0
                CALL_FUNCTION_RETURN 0x7C51A0 2 2 bone char_handle bone // _RpHAnimIDGetIndex
                CALL_FUNCTION_RETURN 0x7C5120 1 1 char_handle char_handle // _RpHAnimHierarchyGetMatrixArray
                bone *= 0x40
                bone += char_handle
                GET_VAR_POINTER offset_x tempi_1
                CALL_FUNCTION 0x54EEF0 4 4 tempi_1 bone 1 tempi_1 // _transformPoints
                SET_OBJECT_HEADING object_attached 0.0
                GET_OBJECT_POINTER object_attached object_attached
                object_attached += 0x14
                READ_MEMORY object_attached 4 0 char_handle
                object_attached -= 0x14
                CALL_METHOD 0x411990 object_attached 0 0 // sub_411990
                CALL_METHOD 0x59AD20 char_handle 1 0 bone // CMatrix__copyTo
                CALL_METHOD 0x4241C0 object_attached 1 0 tempi_1 // CPlaceable__setPosition
                object_attached += 0x18
                READ_MEMORY object_attached 4 0 tempi_2
                IF NOT tempi_2 = 0
                    tempi_2 += 0x4
                    READ_MEMORY tempi_2 4 0 tempi_2
                    tempi_2 += 0x10
                    CALL_METHOD 0x59AD70 char_handle 1 0 tempi_2 // CMatrix__copyTo
                    object_attached -= 0x18
                    CALL_METHOD 0x532B00 object_attached 0 0 // _RwFrameUpdateObject
                ELSE
                    object_attached -= 0x18
                    CALL_METHOD 0x532B00 object_attached 0 0 // _RwFrameUpdateObject       
                ENDIF
            ELSE
                CLEO_RETURN 0
            ENDIF
        CLEO_RETURN 0
    }

    Está certo o objeto não acompanhar o player em tempo real? Pois tem-se que o opcode 09A0 faz isso direitinho, já o script (ao menos o que fiz acima) não faz...
    avatar
    Deadstroke
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 423
    Reputação : 24
    Desde : 08/02/2016
    Localização : São Paulo

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Deadstroke em Sab 25 Mar 2017, 14:49

    Dei uma olhada de novo nos scripts acima, realmente o objeto não fica atachado em tempo real com o player, precisa verificar se esse script é o que realmente fizeram, pois do jeito que está é inutilizável...

    Conteúdo patrocinado

    Re: [BÁSICO] Attachar objeto ao bone (osso) do ator

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qua 29 Mar 2017, 12:20