#1 11-06-2008 18:42

Seemann
Registered: 07-08-2006
Posts: 2,155

[SA|REL] Империя наносит ответный удар!

Вас обидели в игре? Какой-то негрила "задел" вашу челюсть кулаком? Кто-то сломал кий о вашу спину? Менты не успевают перезаряжать обоймы? Есть выход!

В общем скрипт до банальности прост. Если вам кто-то наносит повреждение оружием (ручным или огнестрельным), просто делаем с обидчиком все, что захотим. Я например решил поджигать хулиганов smile

Работает только на v1.0

{$CLEO}

0000:
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        if
            031D:   actor $PLAYER_ACTOR hit_by_weapon 57
        then
            0A96: 1@ = actor $PLAYER_ACTOR struct
            1@ += 0x764
            0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
            if
                0@ > 0
            then
                0A8D: 8@ = read_memory 0x00B74490 size 4 virtual_protect 0
                0AA8: call_function_method 0x4442D0 struct 8@ num_params 1 pop 0 0@ 1@
                if
                    056D:   actor 1@ defined
                then                   
                    0467: clear_actor $PLAYER_ACTOR last_weapon_damage
                    
                    // здесь с актером, который в вас стрелял, можно делать что угодно. его хендл в 1@
                    
                    // например, подожжем!!!!
                    055D: make_player $PLAYER_CHAR fireproof 1 // это на всякий случай, можно убрать
                    
                    0326: 9@ = create_actor 1@ fire
                    
                                         
                end
            end
        end
    end 
end

Если у вас есть более интересные идеи насчет этого скрипта, не стесняйтесь высказывать их.

Offline

#2 11-06-2008 18:58

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: [SA|REL] Империя наносит ответный удар!

Взрывать их к чертовой быбушке!:crazy: Жалко, что в СА педы не разрываются, как в Тройке.(А кстати, это никак нельзя включить?)
А что означают адреса памяти?

Offline

#3 12-06-2008 07:54

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Империя наносит ответный удар!

Доработал скрипт. Написал 4 возможных случая нанесение повреждений актеру или машине. Эти примеры можно использовать в аналогичных скриптах, например, для получения хендла машины, сбившей вас или толкнувшей вашу машину. Написанные функции можно использовать для любого актера/машины, не обязательно игрока.

{$CLEO}

0000:
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then

        {**********************************************

            если актера $PLAYER_ACTOR ранил другой актер,
            получаем хендл атаковавшего актера в 1@       
        
        **********************************************}                
        
        if
            031D:   actor $PLAYER_ACTOR hit_by_weapon 57  // 57 by any weapon
        then            
            if
                0AB1: call_scm_func @GetActorDamagingPed 1 $PLAYER_ACTOR 1@
            then
                0467: clear_actor $PLAYER_ACTOR last_weapon_damage
                // здесь с актером, который в вас стрелял, можно делать что угодно. его хендл в 1@
                
                // например, подожжем!!!!
                055D: make_player $PLAYER_CHAR fireproof 1 // это на всякий случай, можно убрать
                
                0326: 9@ = create_actor 1@ fire                                
            end
        end


        {**********************************************

            если актера $PLAYER_ACTOR сбили машиной,
            получаем хендл сбившей машины в 1@       
        
        **********************************************}                

        if
            031D:   actor $PLAYER_ACTOR hit_by_weapon 49  // 49 by vehicle
        then            
            if
                0AB1: call_scm_func @GetActorDamagingVehicle 1 $PLAYER_ACTOR 1@
            then
                0467: clear_actor $PLAYER_ACTOR last_weapon_damage
                // здесь с машиной, которая вас сбила, можно делать что угодно. ее хендл в 1@
                
                // например, подожжем!!!!
                055D: make_player $PLAYER_CHAR fireproof 1 // это на всякий случай, можно убрать
                
                0325: 9@ = create_car 1@ fire 
                                                
            end
        end



        
        if
            Actor.Driving($PLAYER_ACTOR)
        then
            03C0: 0@ = actor $PLAYER_ACTOR car

            {**********************************************
    
                если машину 0@ повредили из оружия,
                получаем хендл атаковавшего актера в 1@       
            
            **********************************************}                
            
            if
                031E:   car 0@ hit_by_weapon 57
            then
                if
                    0AB1: call_scm_func @GetVehicleDamagingPed 1 0@ 1@
                then
                    0468: clear_car 0@ last_weapon_damage 
                    // здесь с актером, который повредил машину, можно делать что угодно. его хендл в 1@
                    
                    // например, подожжем!!!!
                   
                    0326: 9@ = create_actor 1@ fire                                
                end
            
            end


            {**********************************************
    
                если машину 0@ толкнули другой машиной,
                получаем хендл толкнувшей машины в 1@       
            
            **********************************************}                
            
            if
                031E:   car 0@ hit_by_weapon 49
            then
                if
                    0AB1: call_scm_func @GetVehicleDamagingVehicle 1 0@ 1@
                then
                    0468: clear_car 0@ last_weapon_damage 
                    // здесь с актером, который повредил машину, можно делать что угодно. его хендл в 1@
                    
                    // например, подожжем!!!!
                   
                    0325: 9@ = create_car 1@ fire                                
                end
            
            end

            {**********************************************}        
        
        end


    end 
end

:GetActorDamagingPed
0A96: 1@ = actor 0@ struct
1@ += 0x764

:TestPed
0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
if
    0@ > 0
then
    0A8D: 8@ = read_memory 0x00B74490 size 4 virtual_protect 0
    0AA8: call_function_method 0x4442D0 struct 8@ num_params 1 pop 0 0@ 1@
    if
        056D:   actor 1@ defined
    then
        0AB2: ret 1 1@
    end
end
0AB2: ret 1 -1                       

:GetActorDamagingVehicle
0A96: 1@ = actor 0@ struct
1@ += 0x764

:TestVehicle
0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
if
    0@ > 0
then
    0A8D: 8@ = read_memory 0x00B74494 size 4 virtual_protect 0
    0AA8: call_function_method 0x424160 struct 8@ num_params 1 pop 0 0@ 1@
    if
        056E:   car 1@ defined 
    then
        0AB2: ret 1 1@
    end
end
0AB2: ret 1 -1                       


:GetVehicleDamagingPed
0A97: 1@ = car 0@ struct
1@ += 0x50C
jump @TestPed

:GetVehicleDamagingVehicle
0A97: 1@ = car 0@ struct
1@ += 0x50C
jump @TestVehicle

Значения функций:

GetActorDamagingPed

0AB1: call_scm_func @GetActorDamagingPed 1 $PLAYER_ACTOR 1@

функция возвращает в 1@ хендл актера, который атаковал актера $PLAYER_ACTOR.

Если например написать

0AB1: call_scm_func @GetActorDamagingPed 1 10@ 5@(1@,2i)

то функция запишет в 5@(1@,2i) хендл актера, который атаковал актера 10@.

GetActorDamagingVehicle
записывает хендл машины, которая сбила актера.

GetVehicleDamagingPed
записывает хендл актера, который повредил машину

GetVehicleDamagingVehicle
записывает хендл машины, которая толкнула машину


Все функции работают как УСЛОВИЯ. Это значит, проверка на 0AB1: call_scm_func @GetActorDamagingPed будет верна, если правильный хендл актера был получен. Смотрите примеры.

Last edited by Seemann (12-06-2008 08:01)

Offline

#4 12-06-2008 08:35

svetka
Registered: 29-12-2006
Posts: 222

Re: [SA|REL] Империя наносит ответный удар!

Надо, чтобы нарушителей атаковала и преследовала полиция. А то какой-нибудь баллас стреляет в меня и ему за это ничего. Попробуй я в него выстрели, так тут все против меня. Полиция вообще ни на кого толком не реагирует. Пед угоняет машину, а полицейскому хоть бы хны )
Или я уже о другом скрипте говорю? smile

Offline

#5 20-07-2008 19:46

Admiral
Registered: 26-07-2007
Posts: 35

Re: [SA|REL] Империя наносит ответный удар!

svetka wrote:

Надо, чтобы нарушителей атаковала и преследовала полиция. А то какой-нибудь баллас стреляет в меня и ему за это ничего. Попробуй я в него выстрели, так тут все против меня. Полиция вообще ни на кого толком не реагирует. Пед угоняет машину, а полицейскому хоть бы хны )
Или я уже о другом скрипте говорю? smile

Полностью согласеН.:clap:
Ещё копы должны преследовать педов за ношение оружия.

Last edited by Admiral (20-07-2008 19:48)


Моды -   вот что украшает игру!

Offline

#6 21-10-2011 18:38

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: [SA|REL] Империя наносит ответный удар!

svetka wrote:

Надо, чтобы нарушителей атаковала и преследовала полиция. А то какой-нибудь баллас стреляет в меня и ему за это ничего. Попробуй я в него выстрели, так тут все против меня. Полиция вообще ни на кого толком не реагирует. Пед угоняет машину, а полицейскому хоть бы хны )
Или я уже о другом скрипте говорю? smile

ну я потратил минут 10 и вот сделал все таки, вроде работает

{$CLEO}
wait 5000
0000:
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
    01C0: 11@ = player $PLAYER_CHAR wanted_level
       if
       11@ == 0
       then
        if 
            031D:   actor $PLAYER_ACTOR hit_by_weapon 57
        then
            0A96: 1@ = actor $PLAYER_ACTOR struct
            1@ += 0x764
            0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
            if
                0@ > 0
            then
                0A8D: 8@ = read_memory 0x00B74490 size 4 virtual_protect 0
                0AA8: call_function_method 0x4442D0 struct 8@ num_params 1 pop 0 0@ 1@
                if
                    056D:   actor 1@ defined
                then                   
                    0467: clear_actor $PLAYER_ACTOR last_weapon_damage
                  0AE1: 10@ = random_actor_near_point 11@ 12@ 13@ in_radius 20.0 find_next 1 pass_deads 1
                  if  or
                  02F2:   actor 10@ model == #LAPD1
                  02F2:   actor 10@ model == #SFPD1
                  02F2:   actor 10@ model == #LVPD1
                  02F2:   actor 10@ model == #CSHER
                  02F2:   actor 10@ model == #LAPDM1
                  then
                  05E2: AS_actor 10@ kill_actor 1@

               end
                  end    
                                         
           end
        end
    end 
end

Seemann ты не против если я этот скрипт добавлю в свой мультимод?

Offline

#7 22-10-2011 01:40

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Империя наносит ответный удар!

да добавляй мне не жалко

Offline

#8 22-10-2011 09:48

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: [SA|REL] Империя наносит ответный удар!

@444andrei444 - ты молодец что это сделал, только вот теме уже 4 года и боюсь вряд-ли кому-нибудь сейчас это пригодится, особенно svetka.

Offline

#9 22-10-2011 11:02

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: [SA|REL] Империя наносит ответный удар!

Я это себе сделал. Ну и думаю может кому нибудь пригодится, а цитирую сообщение, чтобы не писать тоже самое.
Ой ой ой. Я тут что то намудрил, вообщем он че то не работает. Как будет хорошое расположение души исправлю.

Last edited by 444andrei444 (22-10-2011 19:56)

Offline

Board footer

Powered by FluxBB