Автор Тема: Части Тела  (Прочитано 380 раз)

Оффлайн Saint

  • Призрак
  • Сообщений: 42
  • Репутация: +1/-0
  • Saint Games
    • saint36rus
    • Просмотр профиля
Части Тела
« : Июнь 23, 2019, 06:07:43 pm »
как определить в какую часть тела я попал?

для определения из какого оружия и кто именно попал я использую оффсеты 0x598 и 0x59C из CPed

возможно ли сделать так: что когда в тебя (игрока) стреляет актёр и попадает в голову, то у нашего героя взрывалась бы голова и он сразу умирал как актёры когда им попадаешь в голову?


Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 616
  • Репутация: +21/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Части Тела
« Ответ #1 : Июнь 23, 2019, 07:26:06 pm »
как определить в какую часть тела я попал?

для определения из какого оружия и кто именно попал я использую оффсеты 0x598 и 0x59C из CPed
Тут я, к сожалению, не силен, но...

возможно ли сделать так: что когда в тебя (игрока) стреляет актёр и попадает в голову, то у нашего героя взрывалась бы голова и он сразу умирал как актёры когда им попадаешь в голову?
Да, но автор не опубликовал сурсы. Если поделится и разрешит - опубликуй тут, пожалуйста.

Ну или вообще если узнаешь что по этому вопросу - тоже буду рад.

Оффлайн Saint

  • Призрак
  • Сообщений: 42
  • Репутация: +1/-0
  • Saint Games
    • saint36rus
    • Просмотр профиля
Re: Части Тела
« Ответ #2 : Июнь 27, 2019, 06:01:03 pm »
для GTA 3 это было написано на CLEO

{$CLEO}
0000: GLIII                                                                                                                                               

REPEAT
    wait 250
UNTIL 0256: player $PLAYER_CHAR defined

gosub @GoreLevel

// standardCrosshairAimFix
05DF: 0x6FAE98 4 0.4499999881 1 // Y pos------------------------------------------------------------> 0.400000006
05DF: 0x6FAE94 4 0.5 1          // X pos------------------------------------------------------------> 0.5299999714

6@ = 0x885B90

WHILE TRUE
    wait 0   
    gosub @WeaponIndex
    IF OR
        1@ == 0xAD // #COLT45
        1@ == 0xB2 // #UZI
    THEN
        05E0: 1@ = read_memory 0x4EAE30 size 4 virtual_protect 0
        IF  1@ <> 0x90909090
        THEN     
        05DF: write_memory 0x4EAE30 size 4 value 0x90909090 virtual_protect 1   // componentVisibility
        05DF: write_memory 0x4EAE34 size 1 value 0x90 virtual_protect 1
        05DF: write_memory 0x4EB075 size 2 value 0x9090 virtual_protect 1       // componentVisibility     
        END
    ELSE   
        05E0: 1@ = read_memory 0x4EAE30 size 4 virtual_protect 0                                   
        IF  1@ == 0x90909090
        THEN     
        05DF: write_memory 0x4EAE30 size 4 value 0x0B750BE8 virtual_protect 1   // componentVisibility
        05DF: write_memory 0x4EAE34 size 1 value 0x00 virtual_protect 1
        05DF: write_memory 0x4EB075 size 2 value 0x0A72 virtual_protect 1       // componentVisibility
        END

        gosub @WeaponIndex
        IF  1@ == 0xB4 // #M16
        THEN
            05E0: 1@ = read_memory 0x4EA7EC size 1 virtual_protect 0
            IF  1@ <> 0x19
            THEN
            // M16 deathAnimIDs
            05DF: write_memory 0x4EA7EC size 1 value 0x19 virtual_protect 1         // headshot---------------------------------------------------------> 0x11   
            05DF: write_memory 0x4EA81B size 1 value 0x12 virtual_protect 1         // stomack----------------------------------------------------------> 0x12   
            05DF: write_memory 0x4EA82C size 1 value 0x1A virtual_protect 1         // LeftArm----------------------------------------------------------> 0x13   
            05DF: write_memory 0x4EA849 size 1 value 0x18 virtual_protect 1         // RightArm---------------------------------------------------------> 0x14   
           
            05DF: write_memory 0x4EA866 size 1 value 0x1B virtual_protect 1         // LeftLeg----------------------------------------------------------> 0x15   
            05DF: write_memory 0x4EA883 size 1 value 0x1B virtual_protect 1         // RightLeg---------------------------------------------------------> 0x16   
            05DF: write_memory 0x4EA876 size 4 value 0x90909090 virtual_protect 1   // LeftLeg jumpTo RightLeg------------------------------------------> 0x0380E9
            05DF: write_memory 0x4EA87A size 1 value 0x90 virtual_protect 1         // -----------------------------------------------------------------> 0x00
            05DF: write_memory 0x5F9E80 size 4 value 0x4EA85E virtual_protect 1     // LeftLegToRightLegSwitch------------------------------------------> 0x7B
            END
           
            IF 4@ <> 240.0
            THEN
            0006: 3@ = 0
            0007: 4@ = 240.0
            gosub @setNewCrosshair
            05DF: write_memory 0x4F1F74 size 1 value 6 virtual_protect 1 // instantHit
            END   
        ELSE
            IF 4@ <> 210.0
            THEN
            0006: 3@ = 255
            0007: 4@ = 210.0
            gosub @setNewCrosshair
            END 
                   
            05E0: 1@ = read_memory 0x4EA7EC size 1 virtual_protect 0
            IF  1@ <> 0x11
            THEN
            // M16 deathAnimIDs
            05DF: write_memory 0x4EA7EC size 1 value 0x11 virtual_protect 1         // headshot---------------------------------------------------------> 0x11   
            05DF: write_memory 0x4EA81B size 1 value 0x12 virtual_protect 1         // stomack----------------------------------------------------------> 0x12   
            05DF: write_memory 0x4EA82C size 1 value 0x13 virtual_protect 1         // LeftArm----------------------------------------------------------> 0x13   
            05DF: write_memory 0x4EA849 size 1 value 0x14 virtual_protect 1         // RightArm---------------------------------------------------------> 0x14   
           
            05DF: write_memory 0x4EA866 size 1 value 0x15 virtual_protect 1         // LeftLeg----------------------------------------------------------> 0x15   
            05DF: write_memory 0x4EA883 size 1 value 0x16 virtual_protect 1         // RightLeg---------------------------------------------------------> 0x16   
            05DF: write_memory 0x4EA876 size 4 value 0x0380E9 virtual_protect 1     // LeftLeg jumpTo RightLeg------------------------------------------> 0x0380E9
            05DF: write_memory 0x4EA87A size 1 value 0x00 virtual_protect 1         // -----------------------------------------------------------------> 0x00
            05DF: write_memory 0x5F9E80 size 4 value 0x4EA87B virtual_protect 1     // LeftLegToRightLegSwitch------------------------------------------> 0x7B
            END
        END
    END
   
    // crosshair 
    05E0: 0@ = read_memory 0x8472A1 size 1 virtual_protect 0 // RMB     
    IF  0@ <> 0
    THEN 
        gosub @WeaponIndex
        IF 1@ == 0xB4 // #M16                                                                               
        THEN
            gosub @CurrentStatus                                                                                       
            IF                                                                                       
                5@ <> 7                                                                             
            THEN                                                                                     
            05DF: write_memory 0x48E18D size 1 value 6 virtual_protect 1 // sniperBacgroundActivated
            05DF: write_memory 0x4F0149 size 1 value 6 virtual_protect 1                             
            0157: camera_on_player $PLAYER_CHAR 7 2                                                 
            0006: 5@ = 7                                                                             
            END
        END
    ELSE                                                               
        05E0: 0@ = read_memory 0x48E18D size 1 virtual_protect 0
        IF 0@ <> 7
        THEN                                                 
        05DF: write_memory 0x48E18D size 1 value 7 virtual_protect 1     
        05DF: write_memory 0x4F0149 size 1 value 6 virtual_protect 1     
        // 05DF: write_memory 0x4F1F74 size 1 value 6 virtual_protect 1 
            IF 82E9:   NOT  cutscene_reached_end
            THEN
            015A: restore_camera                                             
            END
            0006: 5@ = 1
        END
    END

    gosub @WeaponIndex
    IF OR
        1@ == 0xAA // #GRENADE
        1@ == 0xAF // #ROCKET
    THEN
        05E0: 1@ = read_memory 0x4C476C size 1 virtual_protect 0 
        IF  1@ <> 0x4E
        THEN
        05DF: write_memory 0x43E298 size 1 value 0x4E virtual_protect 1     
        05DF: write_memory 0x4D38A0 size 1 value 0x4E virtual_protect 1
        05DF: write_memory 0x4C476C size 4 value 35.0 virtual_protect 1   // CPed.physical.fMass, 70.0
        05DF: write_memory 0x4C477A size 4 value 35.0 virtual_protect 1   // CPed.physical.fTurnMass, 100.0
        05DF: write_memory 0x4C47A0 size 4 value 0.00625 virtual_protect 1 // CPed.physical.Elasticy, 0.050000001
        END
    ELSE
        05E0: 1@ = read_memory 0x4D38A0 size 1 virtual_protect 0 
        IF  1@ <> 0x30
        THEN
        05DF: write_memory 0x43E298 size 1 value 0x30 virtual_protect 1     
        05DF: write_memory 0x4D38A0 size 1 value 0x30 virtual_protect 1
        05DF: write_memory 0x4C476C size 4 value 70.0 virtual_protect 1   // CPed.physical.fMass, 70.0
        05DF: write_memory 0x4C477A size 4 value 100.0 virtual_protect 1   // CPed.physical.fTurnMass, 100.0
        05DF: write_memory 0x4C47A0 size 4 value 0.050000001 virtual_protect 1 // CPed.physical.Elasticy, 0.050000001   
        END
    END   
   
    05E6: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x4F2 // componentID
    05E0: 1@ = read_memory 0@ size 1 virtual_protect 0
    IF  1@ <> 0xFF // componentLost?
    THEN
        05DF: write_memory 0x4D38A0 size 1 value 0x30 virtual_protect 1
        05E6: 0@ = actor $PLAYER_ACTOR struct
        0@ += 0x224 //
        05E0: 1@ = read_memory 0@ size 1 virtual_protect 1
        IF  1@ <> 0x31
        THEN
        05DF: write_memory 0@ size 1 value 0x31 virtual_protect 1
        END

        05E0: 1@ = read_memory 0x5F6AA0 size 4 virtual_protect 1
        IF  1@ <> 0x31303038
        THEN
        05DF: write_memory 0x5F6AA0 size 4 value 0x31303038 virtual_protect 1 // wasted GXT ID
        // fadeIn                                   
        05DF: write_memory 0x4214AB size 1 value 0x80 virtual_protect 1 // R
        05DF: write_memory 0x4214A6 size 1 value 0x20 virtual_protect 1 // G
        05DF: write_memory 0x4214A1 size 1 value 0x20 virtual_protect 1 // B
        // fadeOut                                   
        05DF: write_memory 0x421649 size 1 value 0x80 virtual_protect 1 // R
        05DF: write_memory 0x421644 size 1 value 0x20 virtual_protect 1 // G
        05DF: write_memory 0x42163F size 1 value 0x20 virtual_protect 1 // B
        END
    ELSE
    05DF: write_memory 0x5F6AA0 size 4 value 0x44414544 virtual_protect 1 // wasted GXT ID 
    // fadeIn                                   
    05DF: write_memory 0x4214AB size 1 value 0xC8 virtual_protect 1 // R
    05DF: write_memory 0x4214A6 size 1 value 0xC8 virtual_protect 1 // G
    05DF: write_memory 0x4214A1 size 1 value 0xC8 virtual_protect 1 // B
    // fadeOut                                   
    05DF: write_memory 0x421649 size 1 value 0xC8 virtual_protect 1 // R
    05DF: write_memory 0x421644 size 1 value 0xC8 virtual_protect 1 // G
    05DF: write_memory 0x42163F size 1 value 0xC8 virtual_protect 1 // B 
    END
       
    IF  0117:   player $PLAYER_CHAR wasted
    THEN
    05E0: 1@ = read_memory 0x4214C8 size 2 virtual_protect 0 // fadeTime
    wait 1@
    0054: store_player $PLAYER_CHAR position_to 12@ 13@ 14@
    000F: 14@ -= 1.0
    009B: destroy_actor_instantly $PLAYER_ACTOR
    0053: $PLAYER_CHAR = create_player #NULL at 12@ 13@ 14@
    01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR
    05E6: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0x4F2
    05DF: write_memory 0@ size 1 value 0xFF virtual_protect 0
   
    05E6: 0@ = actor $PLAYER_ACTOR struct
    0@ += 0xC0
    05DF: write_memory 0@ size 4 value 70.0 virtual_protect 0
    0@ += 0x04 // 0xC4
    05DF: write_memory 0@ size 4 value 100.0 virtual_protect 0
    0@ += 0x0C // 0xD0
    05DF: write_memory 0@ size 4 value 0.050000001 virtual_protect 0
    // 0222: set_player $PLAYER_CHAR health_to 3@
    ELSE
        // 0ADC: test_cheat 'ENABLEGORE'   
        // 0ADC: test_cheat 'DISABLEGORE'
        05E0: 0@ = read_memory 6@ size 4 virtual_protect 0       
        6@ += 0x04                                                   
        05E0: 1@ = read_memory 6@ size 4 virtual_protect 0       
        6@ -= 0x04                                                   
        IF AND                                                   
            0@ == 0x474F5245 // GORE                             
            1@ == 0x41424C45 // ABLE                             
        THEN                                                     
            6@ += 0x08                                               
            05E0: 0@ = read_memory 6@ size 2 virtual_protect 0   
            6@ += 0x02                                               
            05E0: 1@ = read_memory 6@ size 1 virtual_protect 0   
            6@ -= 0x0A                                             
            IF AND                                               
                0@ == 0x4953 // IS
                1@ == 0x44 // D                                                 
            THEN
                IF 0351:   gore_enabled
                THEN
                03E5: text_box 'CHEAT1'
                gosub @DisableGore
                END
            ELSE
                6@ += 0x08                                               
                05E0: 0@ = read_memory 6@ size 2 virtual_protect 0       
                6@ -= 0x08                                                                                 
                IF 0@ == 0x454E // EN                                                                   
                THEN
                    IF 8351:   NOT   gore_enabled
                    THEN
                    03E5: text_box 'GORLEV'
                    gosub @GoreLevel // 
                    END                                                           
                END
            END
        END
    END
END

:GoreLevel
05DF: write_memory 0x5FE408 size 4 value -100.0 virtual_protect 1
   // ADDRESS                      [DESCRIPTION]                                                      [DEFAULT]                 
05DF: 0x5F4DD4 4 1 1            // nastyGame--------------------------------------------------------> 0x00         
05DF: 0x4A1310 1 1 1            // wasted Style-----------------------------------------------------> 0x02         
05DF: 0x4D39F9 2 0x9090 1       // Player DropsWeaponsAfterDeath------------------------------------> 0x0E74       
05DF: 0x42148E 2 0x1200 1        // wastedFadeIn-----------------------------------------------------> 0x800       
05DF: 0x421495 2 0x1200 1        // wastedFadeOut----------------------------------------------------> 0x800       
05DF: 0x4214C8 2 0x1500 1       // wastedFadeTotal--------------------------------------------------> 0x1000       
                                                                                                                                 
// meny seetings                                                                                                                 
05DF: 0x47A983 4 0x90909090 1   // -----------------------------------------------------------------> 0x9B850F     
05DF: 0x47A987 2 0x9090 1       // -----------------------------------------------------------------> 0x00         
                                                                                                                                 
// NOP jump to loc_4EA99F [Player recieves the same type of damage as an NPC]                                                   
05DF: 0x4EA4FF 2 0x9090 1       // -----------------------------------------------------------------> 0x0F74       
05DF: 0x4EA739 2 0x9090 1       // -----------------------------------------------------------------> 0x0C75       
05DF: 0x4EA8D7 4 0x90909090 1   // -----------------------------------------------------------------> 0xC2840F     
05DF: 0x4EA8DB 2 0x9090 1       // -----------------------------------------------------------------> 0x00                             
05DF: 0x4EA8E6 4 0x90909090 1   // -----------------------------------------------------------------> 0xB3850F     
05DF: 0x4EA8EA 2 0x9090 1       // -----------------------------------------------------------------> 0x00         
05DF: 0x4EA8F3 4 0x90909090 1   // -----------------------------------------------------------------> 0xA6850F     
05DF: 0x4EA8F7 2 0x9090 1       // -----------------------------------------------------------------> 0x00         
05DF: 0x4EA916 4 0x90909090 1   // -----------------------------------------------------------------> 0x83850F     
05DF: 0x4EA91A 2 0x9090 1       // -----------------------------------------------------------------> 0x00         
                                                                                                                                 
                                                                                                                                 
// Particles                                                                                                                     
// 05DF: 0xAFE80000 4 0.0 1       // bloodBrightnessFromBulletHit(crashes)----------------------------> 0xAFE80000 
// 05DF: 0x5FE46C 4 50.0 1      // bloodSplash------------------------------------------------------> -50.0         
05DF: 0x4CFE57 1 0x12 1         // bleedSpeed-------------------------------------------------------> 0x12         
05DF: 0x4CFE3E 4 0x02A7840F 1   // constant bleed from fatal wounds---------------------------------> 0x02A7840F   
05DF: 0x4CFE42 2 0x0000 1       //  -II-------------------------------------------------------------> 0x0000       
05DF: 0x55FE07 4 0x06EF840F 1   //  enablesBlood while nastyGame is set to 0------------------------> 0x06EF840F   
05DF: 0x55FE0B 2 0x0000 1       //  -II-------------------------------------------------------------> 0x0000       
                                                                                                                                 
05DF: 0x55FED8 1 0x7D 1         // bloodDensity-----------------------------------------------------> 0x08         
05DF: 0x603108 4 0.2 1          // how far will blood fall + spread speed---------------------------> 0.00999999978
05DF: 0x603060 4 0.012 1        // sizeOfBlood&BulletImpact-----------------------------------------> 0.0           
05DF: 0x6E98C8 4 2.5 1          // bloodSpread------------------------------------------------------> -1.0         
                                                                                                                                 
05DF: 0x560210 1 0x7D 1         // bulletDensity----------------------------------------------------> 0x10         
05DF: 0x603070 4 0.5 1          // shotgunBlastSparkSize--------------------------------------------> 0.200000003   
05DF: 0x603074 4 4.0 1          // shotgunPushPedForce, wideness of bullet spread, distance shot----> 1.0           
                                                                                                                                 
// new weapon effect                                                                                                             
05DF: 0x5F9EC0 4 0x4EA605 1     // pistol effect----------------------------------------------------> 0x4EA719     
05DF: 0x5F9EC4 4 0x4EA7D0 1     // uzi effect [M16 style]-------------------------------------------> 0x4EA719     
05DF: 0x5F9EC8 4 0x4EA9EC 1     // shotgun effect---------------------------------------------------> 0x4EA719     
05DF: 0x5F9ECC 4 0x4EA7D0 1     // AK47 effect [M16 style]------------------------------------------> 0x4EA719       
// 05DF: 0x5F9ED0 4 0x4EA8D0 1  // M16 effect [explosion style]-------------------------------------> 0x4EA719     
05DF: 0x5F9ED4 4 0x4EACF3 1     // sniper effect [instant death by a single shot]-------------------> 0x4EA719     
05DF: 0x5F9EDC 4 0x4EA815 1     // flame thrower effect [stomack anim]------------------------------> 0x4EA898     
                                                                                                                                 
// 05DF: 0x4D38A0 1 0x4E 1      // explosion effects dead bodies------------------------------------> 0x30         
// 05DF: 0x43E298 1 0x4E 1      // opcode_0118_(actor dead?)----------------------------------------> 0x30         
05DF: 0x4EAF26 2 0x9090 1       // spawnsHeadComponent----------------------------------------------> 0x1074       
return

:DisableGore
   // ADDRESS                      [DESCRIPTION]                                                      [DEFAULT]
05DF: write_memory 0x5FE408 size 4 value 100.0 virtual_protect 1
05DF: 0x5F4DD4 4 0 1            // nastyGame--------------------------------------------------------> 0x00                     
05DF: 0x4A1310 1 0x02 1            // wasted Style-----------------------------------------------------> 0x02                   
05DF: 0x4D39F9 2 0x0E74 1       // Player DropsWeaponsAfterDeath------------------------------------> 0x0E74                   
05DF: 0x42148E 2 0x800 1        // wastedFadeIn-----------------------------------------------------> 0x800                     
05DF: 0x421495 2 0x800 1        // wastedFadeOut----------------------------------------------------> 0x800                     
05DF: 0x4214C8 2 0x1000 1       // wastedFadeTotal--------------------------------------------------> 0x1000                   
                                                                                                                               
// meny seetings                                                                                                               
05DF: 0x47A983 4 0x9B850F 1   // -----------------------------------------------------------------> 0x9B850F                   
05DF: 0x47A987 2 0x00 1       // -----------------------------------------------------------------> 0x00                               
                                                                                                                                       
// NOP jump to loc_4EA99F [Player recieves the same type of damage as an NPC]                                                         
05DF: 0x4EA4FF 2 0x0F74 1       // -----------------------------------------------------------------> 0x0F74                           
05DF: 0x4EA739 2 0x0C75 1       // -----------------------------------------------------------------> 0x0C75                           
05DF: 0x4EA8D7 4 0xC2840F 1   // -----------------------------------------------------------------> 0xC2840F                           
05DF: 0x4EA8DB 2 0x00 1       // -----------------------------------------------------------------> 0x00                               
05DF: 0x4EA8E6 4 0xB3850F 1   // -----------------------------------------------------------------> 0xB3850F                           
05DF: 0x4EA8EA 2 0x00 1       // -----------------------------------------------------------------> 0x00                               
05DF: 0x4EA8F3 4 0xA6850F 1   // -----------------------------------------------------------------> 0xA6850F                           
05DF: 0x4EA8F7 2 0x00 1       // -----------------------------------------------------------------> 0x00                               
05DF: 0x4EA916 4 0x83850F 1   // -----------------------------------------------------------------> 0x83850F                           
05DF: 0x4EA91A 2 0x00 1       // -----------------------------------------------------------------> 0x00                               
                                                                                                                               
                                                                                                                               
// Particles                                                                                                                   
// 05DF: 0x4EA91A 4 0xAFE80000 1       // bloodBrightnessFromBulletHit(crashes)----------------------------> 0xAFE80000         
// 05DF: 0x5FE46C 4 -50.0 1      // bloodSplash------------------------------------------------------> -50.0                   
05DF: 0x4CFE57 1 0x12 1         // bleedSpeed-------------------------------------------------------> 0x12                     
05DF: 0x4CFE3E 4 0x02A7840F 1   // constant bleed from fatal wounds---------------------------------> 0x02A7840F               
05DF: 0x4CFE42 2 0x0000 1       //  -II-------------------------------------------------------------> 0x0000                   
05DF: 0x55FE07 4 0x06EF840F 1   //  enablesBlood while nastyGame is set to 0------------------------> 0x06EF840F               
05DF: 0x55FE0B 2 0x0000 1       //  -II-------------------------------------------------------------> 0x0000                   
05DF: 0x55FED8 1 0x08 1         // bloodDensity-----------------------------------------------------> 0x08                     
05DF: 0x603108 4 0.00999999978 1          // how far will blood fall + spread speed---------------------------> 0.00999999978   
05DF: 0x603060 4 0.0 1        // sizeOfBlood&BulletImpact-----------------------------------------> 0.0                         
05DF: 0x6E98C8 4 -1.0 1          // bloodSpread------------------------------------------------------> -1.0                     
                                                                                                                               
05DF: 0x560210 1 0x10 1         // bulletDensity----------------------------------------------------> 0x10                     
05DF: 0x603070 4 0.200000003 1          // shotgunBlastSparkSize--------------------------------------------> 0.200000003       
05DF: 0x603074 4 1.0 1          // shotgunPushPedForce, wideness of bullet spread, distance shot----> 1.0                       
                                                                                                                               
// new weapon effect                                                                                                           
// 05DF: 0x5F9EC0 4 0x4EA719 1     // pistol effect----------------------------------------------------> 0x4EA719                 
// 05DF: 0x5F9EC4 4 0x4EA719 1     // uzi effect [M16 style]-------------------------------------------> 0x4EA719                 
// 05DF: 0x5F9EC8 4 0x4EA719 1     // shotgun effect---------------------------------------------------> 0x4EA719                 
// 05DF: 0x5F9ECC 4 0x4EA719 1     // AK47 effect [M16 style]------------------------------------------> 0x4EA719                 
// 05DF: 0x5F9ED0 4 0x4EA719 1  // M16 effect [explosion style]-------------------------------------> 0x4EA719                 
// 05DF: 0x5F9ED4 4 0x4EA719 1     // sniper effect [instant death by a single shot]-------------------> 0x4EA719                 
// 05DF: 0x5F9EDC 4 0x4EA898 1     // flame thrower effect [stomack anim]------------------------------> 0x4EA898                 
                                                                                                                               
// 05DF: 0x4D38A0 1 0x30 1      // explosion effects dead bodies------------------------------------> 0x30                     
// 05DF: 0x43E298 1 0x30 1      // opcode_0118_(actor dead?)----------------------------------------> 0x30                     
05DF: 0x4EAF26 2 0x1074 1       // spawnsHeadComponent----------------------------------------------> 0x1074                   
return

:setNewCrosshair
// RGBA
// ULC
05DF: write_memory 0x505AB7 size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505AB2 size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505AAD size 1 value 3@ virtual_protect 1
// URC
05DF: write_memory 0x505BA6 size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505BA1 size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505B9C size 1 value 3@ virtual_protect 1
// LLC
05DF: write_memory 0x505C8E size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505C89 size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505C84 size 1 value 3@ virtual_protect 1
// LRC
05DF: write_memory 0x505D6C size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505D71 size 1 value 3@ virtual_protect 1
05DF: write_memory 0x505D76 size 1 value 3@ virtual_protect 1
// shape
05DF: write_memory 0x5FDB78 size 4 value 4@ virtual_protect 1
return

:WeaponIndex 
05E6: 0@ = actor $PLAYER_ACTOR struct   
0@ += 0x4C0 // currentWeaponModelIndex 
05E0: 1@ = read_memory 0@ size 1 virtual_protect 0
return

:CurrentStatus
05E6: 0@ = actor $PLAYER_ACTOR struct   
0@ += 0x224 // CurrentStatus 
05E0: 1@ = read_memory 0@ size 1 virtual_protect 0
return

но базы под gta3 у меня нет, может кто поможет благодаря этому включить хедшоты в вайсе?

Оффлайн kenking

  • Новичок
  • **
  • Сообщений: 227
  • Репутация: +14/-0
    • Просмотр профиля
Re: Части Тела
« Ответ #3 : Июнь 28, 2019, 10:55:35 am »
Цитировать
но базы под gta3 у меня нет

http://public.sannybuilder.com/gtasa_exe_idb/gta_3/

Оффлайн Saint

  • Призрак
  • Сообщений: 42
  • Репутация: +1/-0
  • Saint Games
    • saint36rus
    • Просмотр профиля
Re: Части Тела
« Ответ #4 : Июль 10, 2019, 07:26:30 pm »
Цитировать
но базы под gta3 у меня нет

http://public.sannybuilder.com/gtasa_exe_idb/gta_3/


спасибо

вот что получилось когда я сравнил 2 базы


вот часть кода из того клео, которая как я понимаю именно и отвечает за убийство нашего персонажа с 1 выстрела

// NOP jump to loc_4EA99F [Player recieves the same type of damage as an NPC]                                        // GTA 3   // GTA VC
05DF: 0x4EA4FF 2 0x9090 1       // -----------------------------------------------------------------> 0x0F74         // .text:004EA4FF                 jz      short loc_4EA510 // .text:00525CBB 74 13                                   jz      short loc_525CD0     
05DF: 0x4EA739 2 0x9090 1       // -----------------------------------------------------------------> 0x0C75         // .text:004EA739                 jnz     short loc_4EA747 // .text:00525CEA 75 28                                   jnz     short loc_525D14
05DF: 0x4EA8D7 4 0x90909090 1   // -----------------------------------------------------------------> 0xC2840F                                                                  // .text:0052631B 0F 84 C2 00 00 00                       jz      loc_5263E3
05DF: 0x4EA8DB 2 0x9090 1       // -----------------------------------------------------------------> 0x00                                // .text:0052631B 0F 84 C2 00 00 00                       jz      loc_5263E3
05DF: 0x4EA8E6 4 0x90909090 1   // -----------------------------------------------------------------> 0xB3850F        // .text:0052632A 0F 85 B3 00 00 00                       jnz     loc_5263E3
05DF: 0x4EA8EA 2 0x9090 1       // -----------------------------------------------------------------> 0x00         
05DF: 0x4EA8F3 4 0x90909090 1   // -----------------------------------------------------------------> 0xA6850F              // .text:00526337 0F 85 A6 00 00 00                       jnz     loc_5263E3
05DF: 0x4EA8F7 2 0x9090 1       // -----------------------------------------------------------------> 0x00         
05DF: 0x4EA916 4 0x90909090 1   // -----------------------------------------------------------------> 0x83850F        // .text:0052635A 0F 85 83 00 00 00                       jnz     loc_5263E3
05DF: 0x4EA91A 2 0x9090 1       // -----------------------------------------------------------------> 0x00

с поставил нупы на схожие адресса в вайсе (там отключается проверка на игрока в функции CPed::InflictDamage

а именно на вот эти:

// .text:00525CBB 74 13                                   jz      short loc_525CD0     
// .text:00525CEA 75 28                                   jnz     short loc_525D14

// .text:0052631B 0F 84 C2 00 00 00                       jz      loc_5263E3
// .text:0052632A 0F 85 B3 00 00 00                       jnz     loc_5263E3       
// .text:00526337 0F 85 A6 00 00 00                       jnz     loc_5263E3       
// .text:0052635A 0F 85 83 00 00 00                       jnz     loc_5263E3

но что-то ничего не вышло  :(

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 565
  • Репутация: +84/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Части Тела
« Ответ #5 : Июль 19, 2019, 10:26:15 am »
Нупить многовато, надо убирать все FindPlayerPed() и IsPlayer(), и неизвестно какие будут последствия. Могу предложить такой вариант - вызвать свою функцию, например InflictPlayerDamage вместо этого участка:
Код: ASM
  1. .text:00525C01 6A 00                   push    0               ; a2
  2. .text:00525C03 E8 18 65 F9 FF          call    _Z13FindPlayerPedv ; FindPlayerPed(void)
  3. .text:00525C08 89 C1                   mov     ecx, eax        ; this
  4. .text:00525C0A E8 E1 C0 00 00          call    _ZN10CPlayerPed14AnnoyPlayerPedEb ; CPlayerPed::AnnoyPlayerPed(bool)
  5.  

Сначала нужно передать в свою функцию пострадавшую часть тела, это параметр a5 в функции CPed::InflictDamage. Получить его для своей функции можно, скопировав такую строчку:

Код: ASM
  1. .text:00526215 8B 4C 24 70             mov     ecx, [esp+60h+arg_C]

Пишем ее в заменяемый участок:

Код: C++
  1. Patch(0x525C01, 0x8B);
  2. Patch(0x525C02, 0x4C);
  3. Patch(0x525C03, 0x24);
  4. Patch(0x525C04, 0x70);

Теперь в ecx пострадавшая часть тела. Дальше вызываются команды push ecx и call [адрес функции InflictPlayerDamage]

Код: C++
  1. Patch(0x525C05, 0x51);        // push ecx
  2. Patch(0x525C06, 0xE8);        // call
  3. Patch(0x525C07, (int)InflictPlayerDamage);        // address

Остальные адреса нупятся с 0x525C0B по 0x525C0F

Сама функция InflictPlayerDamage выглядит примерно так:

Код: C++
  1. static void __stdcall InflictPlayerDamage(int part) {
  2.         if ((part > 1) && (part < 7))
  3.                 switch (part) {
  4.                 case 2:
  5.                         PlayerPed->SpawnFlyingComponent(3);
  6.                         PlayerPed->SetDie(19, 10000.0f, 0);
  7.                         break;
  8.                 case 3:
  9.                         PlayerPed->SpawnFlyingComponent(4);
  10.                         PlayerPed->SetDie(20, 10000.0f, 0);
  11.                         break;
  12.                 case 4:
  13.                         PlayerPed->SpawnFlyingComponent(7);
  14.                         PlayerPed->SetDie(21, 10000.0f, 0);
  15.                         break;
  16.                 case 5:
  17.                         PlayerPed->SpawnFlyingComponent(8);
  18.                         PlayerPed->SetDie(22, 10000.0f, 0);
  19.                         break;
  20.                 case 6:
  21.                         PlayerPed->SpawnFlyingComponent(2);
  22.                         PlayerPed->SetDie(17, 10000.0f, 0);
  23.                         break;
  24.                 }
  25.         else
  26.                 PlayerPed->AnnoyPlayerPed();
  27.         }

Из минусов. После восстановления из больницы игрок остается безголовым. С педами такой проблемы нет, потому что они просто исчезают. Второе - бошку можно снести и ударом руки, потому что в моем варианте нет проверки на тип оружия, нужно смотреть остальные параметры InflictDamage.

« Последнее редактирование: Июль 19, 2019, 10:29:49 am от xanser »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 616
  • Репутация: +21/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Части Тела
« Ответ #6 : Июль 19, 2019, 04:11:46 pm »
Вау, крутяк! Кстати, меня всегда еще интересовала возможность скейла частей тела по-отдельности. Видел этот видос, но так и не смог добиться от maxorator какой-нибудь инфы...

Оффлайн xanser

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 565
  • Репутация: +84/-0
  • Есть такая профессия - на работе сидеть
    • Просмотр профиля
Re: Части Тела
« Ответ #7 : Июль 20, 2019, 07:30:13 am »
Shagg_E, как-то раз по по твоему совету я сделал вид от первого лица в машине, поместив камеру в голову игрока, а саму голову и выступающие части тела скрыл, масштабируя их в ноль. Можно масштабировать и любыми другими коэффициентами. Код у меня такой:

Код: C++
  1. class CPedBody {                       
  2. public:
  3.         RwMatrix * Root;
  4.         RwMatrix * Pelvis;      // 1
  5.         RwMatrix * Spine;       // 17
  6.         RwMatrix * Spine1;
  7.         RwMatrix * Neck;
  8.         RwMatrix * Head;        // 2
  9.         RwMatrix * RClavicle;   // 16
  10.         RwMatrix * RUpperArm;   // 4
  11.         RwMatrix * RForeArm;    // 14
  12.         RwMatrix * RHand;       // 6
  13.         RwMatrix * RFinger;
  14.         RwMatrix * LClavicle;   // 15
  15.         RwMatrix * LUpperArm;   // 3
  16.         RwMatrix * LForeArm;    // 13
  17.         RwMatrix * LHand;       // 5
  18.         RwMatrix * LFinger;
  19.         RwMatrix * LThigh;      // 7
  20.         RwMatrix * LCalf;       // 12
  21.         RwMatrix * LFoot;       // 9
  22.         RwMatrix * RThigh;      // 8
  23.         RwMatrix * RCalf;       // 11
  24.         RwMatrix * RFoot;       // 10
  25.         static DWORD * GetAnimHierarchyFromSkinClump(RwObject *);
  26.         static RwMatrix * RpHAnimHierarchyGetMatrixArray(DWORD *);
  27.         static DWORD RpHAnimIDGetIndex(DWORD *, DWORD);
  28.         bool GetComponents(RwObject *);
  29.         void HideComponent(RwMatrix *);
  30. };
  31.  
  32. enum PED_FRAME {
  33.         PED_FRAME_ROOT = 0,
  34.         PED_FRAME_PELVIS = 1,
  35.         PED_FRAME_SPINE = 2,
  36.         PED_FRAME_SPINE1 = 3,
  37.         PED_FRAME_NECK = 4,
  38.         PED_FRAME_HEAD = 5,
  39.         PED_FRAME_RCLAVICLE = 21,
  40.         PED_FRAME_RUPPER_ARM = 22,
  41.         PED_FRAME_RFORE_ARM = 23,
  42.         PED_FRAME_RHAND = 24,
  43.         PED_FRAME_RFINGER = 25,
  44.         PED_FRAME_LCLAVICLE     = 31,
  45.         PED_FRAME_LUPPER_ARM = 32,
  46.         PED_FRAME_LFORE_ARM     = 33,
  47.         PED_FRAME_LHAND = 34,
  48.         PED_FRAME_LFINGER = 35,
  49.         PED_FRAME_LTHIGH = 41,
  50.         PED_FRAME_LCALF = 42,
  51.         PED_FRAME_LFOOT = 43,
  52.         PED_FRAME_RTHIGH = 51,
  53.         PED_FRAME_RCALF = 52,
  54.         PED_FRAME_RFOOT = 53
  55. };
  56.  
  57. void CPed::PreRender() {
  58.         ((void(__thiscall *)(CPed *))0x4FE4C0)(this);
  59. }
  60.  
  61. DWORD * CPedBody::GetAnimHierarchyFromSkinClump(RwObject * object) {
  62.         return ((DWORD *(__cdecl *)(RwObject *))0x57F250)(object);
  63. }
  64. RwMatrix * CPedBody::RpHAnimHierarchyGetMatrixArray(DWORD * _) {
  65.         return ((RwMatrix *(__cdecl *)(DWORD *))0x646370)(_);
  66. }
  67. DWORD CPedBody::RpHAnimIDGetIndex(DWORD * _1, DWORD _2) {
  68.         return ((DWORD(__cdecl *)(DWORD *, DWORD))0x646390)(_1, _2);
  69. }
  70. bool CPedBody::GetComponents(RwObject * object) {
  71.         DWORD * BodyHierarchy = GetAnimHierarchyFromSkinClump(object);
  72.         RwMatrix * BodyMatrix = RpHAnimHierarchyGetMatrixArray(BodyHierarchy);
  73.         this->Root = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_ROOT)];
  74.         this->Pelvis = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_PELVIS)];
  75.         this->Spine = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_SPINE)];
  76.         this->Spine1 = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_SPINE1)];
  77.         this->Neck = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_NECK)];
  78.         this->Head = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_HEAD)];
  79.         this->RClavicle = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RCLAVICLE)];
  80.         this->RUpperArm = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RUPPER_ARM)];
  81.         this->RForeArm = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RFORE_ARM)];
  82.         this->RHand = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RHAND)];
  83.         this->RFinger = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RFINGER)];
  84.         this->LClavicle = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LCLAVICLE)];
  85.         this->LUpperArm = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LUPPER_ARM)];
  86.         this->LForeArm = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LFORE_ARM)];
  87.         this->LHand = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LHAND)];
  88.         this->LFinger = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LFINGER)];
  89.         this->LThigh = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LTHIGH)];
  90.         this->LCalf = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LCALF)];
  91.         this->LFoot = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_LFOOT)];
  92.         this->RThigh = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RTHIGH)];
  93.         this->RCalf = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RCALF)];
  94.         this->RFoot = &BodyMatrix[RpHAnimIDGetIndex(BodyHierarchy, PED_FRAME_RFOOT)];
  95.         return ((this->Head->right.x != 1.0f) || (this->Head->right.y != 0.0f) || (this->Head->right.z != 0.0f) ||
  96.                 (this->Head->up.x != 0.0f) || (this->Head->up.y != 1.0f) || (this->Head->up.z != 0.0f) ||
  97.                 (this->Head->at.x != 0.0f) || (this->Head->at.y != 0.0f) || (this->Head->at.z != 1.0f));
  98. }
  99. void CPedBody::HideComponent(RwMatrix * component) {
  100.         component->right.x = component->right.y = component->right.z = component->up.x = component->up.y = component->up.z = component->at.x = component->at.y = component->at.z = 0.0f;
  101.         component->pos.x = this->Root->pos.x;
  102.         component->pos.y = this->Root->pos.y;
  103.         component->pos.z = this->Root->pos.z;
  104. }

Код: C++
  1. CPedBody PlayerBody;
  2. PlayerBody.GetComponents(PlayerPed->rwObject);  // это в начале и при смене скина

Дальше такой класс:

Код: C++
  1. class PedPreRender {
  2.         static void __fastcall HidePlayerHead(CPed * Ped) {
  3.                 PlayerPed->PreRender();  // восстанавливаем стандартный вызов PedPreRender()
  4.                 if ((Camera->cams[Camera->activeCam].view == CAMERA_VIEW_CAR_1ST_PERSON) && (!GameKeys->PrevWeapon_LookLeft) && (!GameKeys->NextWeapon_LookRight)) {
  5.                         PlayerBody.HideComponent(PlayerBody.Head);
  6.                         PlayerBody.HideComponent(PlayerBody.Neck);
  7.                         PlayerBody.HideComponent(PlayerBody.Spine1);
  8.                         PlayerBody.HideComponent(PlayerBody.LClavicle);
  9.                         PlayerBody.HideComponent(PlayerBody.RClavicle);
  10.                         PlayerBody.HideComponent(PlayerBody.LUpperArm);
  11.                         PlayerBody.HideComponent(PlayerBody.RUpperArm);
  12.                 }
  13.         }
  14. public:
  15.         PedPreRender() {
  16.                 Patch(0x694DA0, (int)HidePlayerHead);
  17.         }
  18. } _PedPreRender;

Восстанавливать скрытые компоненты не нужно, игра сама это делает при следующем кадре

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 616
  • Репутация: +21/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Части Тела
« Ответ #8 : Июль 20, 2019, 03:03:02 pm »
Спасибо, очень пригодится, когда вернусь к этому вопросу!