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

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

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

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

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
Modelador - Básico
Modelador - Básico
Mensagens : 873
Reputação : 20
Desde : 16/08/2016
Idade : 14
Localização : Mississippi
Ver perfil do usuário

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

em Qua 04 Jan 2017, 17:33
Tem como attachar a qualquer ped?
avatar
Scripter CLEO - Intermediário
Scripter CLEO - Intermediário
Mensagens : 652
Reputação : 38
Desde : 19/08/2015
Idade : 15
Localização : Em algum lugar do brasil
Link : https://www.youtube.com/watch?v=lMB18XPgEWA
Ver perfil do usuário

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

em Qua 04 Jan 2017, 18:47
tem

______________________________


avatar
Modelador - Básico
Modelador - Básico
Mensagens : 873
Reputação : 20
Desde : 16/08/2016
Idade : 14
Localização : Mississippi
Ver perfil do usuário

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

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

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

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
Modelador - Básico
Modelador - Básico
Mensagens : 873
Reputação : 20
Desde : 16/08/2016
Idade : 14
Localização : Mississippi
Ver perfil do usuário

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

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
Modelador - Básico
Modelador - Básico
Mensagens : 873
Reputação : 20
Desde : 16/08/2016
Idade : 14
Localização : Mississippi
Ver perfil do usuário

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

em Sab 07 Jan 2017, 19:37
Desculpa o double post.
Eu testei em um ped e crashou
avatar
Scripter CLEO - Avançado
Scripter CLEO - Avançado
Título : Não quero acreditar, quero saber.
Mensagens : 21884
Reputação : 676
Desde : 03/05/2012
Idade : 22
Localização : Ibitinga - SP
Link : www.MixMods.com.br
Ver perfil do usuáriohttp://MixMods.com.br

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

em Sab 07 Jan 2017, 19:53

______________________________

avatar
Modelador - Básico
Modelador - Básico
Mensagens : 873
Reputação : 20
Desde : 16/08/2016
Idade : 14
Localização : Mississippi
Ver perfil do usuário

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

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

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

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

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

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

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

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

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