#1 31-03-2011 19:14

Sergey81
Registered: 19-12-2008
Posts: 598

[VC] Пикапы

cbbe03cd1b060f850d96a59386043774.jpeg  37e9b5a8118f0ef6bb06562e6754bf5f.jpeg  5e9727a1404914c6fc8d58d44ad9255d.jpeg 

ivwpnpckpsvc.cs

{$CLEO}
0000: //v 0.7.07.04.2011
wait 2000
05DE: create_custom_thread 'pkpbl.s'
05E5: 0@ = game_version
if
0@ == 0
then
9@ = 0x945D5E
10@ = 0x94A13C
else
9@ = 0x945D66
10@ = 0x94A144
end

while true   
    wait 0   
    
for 0@ = 9@ {0x945D5E} to 10@ {0x94A13C} step 0x34 
        05E0: 1@ = read_memory 0@ size 1 virtual_protect 0 
      if or
          0039: 1@ == 8 //money
          //0039: 1@ == 15 //scm
          0039: 1@ == 4 //ped pickups 
      then
          0085: 2@ = 0@ // handles
          2@ -= 0x2A
          05E0: 3@ = read_memory 2@ size 4 virtual_protect 0 //RwV3d x Y z
               if
               3@ <> -801.1
               then
               0085: 4@ = 2@ // handles
               000A: 4@ += 0x0C 
               05E0: 5@ = read_memory 4@ size 4 virtual_protect 0  //5@ - pointer to object 
               000A: 4@ += 0x12 //mdlid
               05E0: 6@ = read_memory 4@ size 2 virtual_protect 0 //6@ - model id

                  05EB: 7@ = object_struct 5@ handle
                        if
                        03CA:   object 7@ exists
                        then
                        01BB: store_object 7@ position_to 12@ 13@ 14@
                        000A: 4@ += -0x1E //RwV3d x Y z
                        05DF: write_memory 4@ size 4 value -801.1 virtual_protect 0
                        000A: 4@ += -0x4 //RwV3d X y z
                        05DF: write_memory 4@ size 4 value -801.1 virtual_protect 0
                        000A: 4@ += 0x8  //RwV3d x y Z
                        05DF: write_memory 4@ size 4 value -801.1 virtual_protect 0
                          if 
                          1@ == 4
                          then
                          14@ -= 0.99
                          else
                          if 
                          1@ == 8
                          then
                          14@ -= 0.90
                          else
                          if
                          1@ == 15
                          then
                          14@ -= 1.2
                          end
                          end
                          end
                        if
                        6@ == 337
                        then
                        6@ = 376
                        end
                        0107: 8@ = create_object 6@ at 12@ 13@ 14@ //8@ - landed pickup
                        0382: set_object 8@ collision_detection 0
                        0208: 11@ = random_float 0.0 360.0
                        if
                        not 6@ == 376
                        then
                        0453: object 8@ set_rotation 90.0 0.0 11@
                        else
                        0453: object 8@ set_rotation 0.0 0.0 11@
                        end
                        05E8: 15@ = object 8@ struct
                        15@ += 0x174
                        05F5: call_scm_func @model2wpnid params_count 1 6@ 6@
                        05DF: write_memory 15@ size 4 value 6@ virtual_protect 0  //wpn id
                        15@ += 0x4
                        05DF: write_memory 15@ size 4 value 13 virtual_protect 0  //flag for .s
                        01C4: remove_references_to_object 8@  
                        end 
               
               end



      end

end    

end

:model2wpnid
for 1@ = 1 to 36 
05E2: call_function 0x4418B0 num_params 1 pop 1 1@ 2@    //weapon id to model id
if
003B:   2@ == 0@  // (int)
then
05F6: ret 1 1@   //model id to weapon id
end

end
05F6: ret 1 40

pkpbl.s

{$CLEO .s}
0000:

while true
wait 0
 if and
 84A8:  not player $player_char driving_boat
 84C9:  not player $player_char driving_flying_vehicle
 80E0:  not player $player_char driving
 then
0054: store_player $player_char position_to 0@ 1@ 2@
//0437: scatter_particle 55 size 0.52 at 0@ 1@ 2@ speed_XYZ 0.0 0.0 0.0 
                  //03F0: enable_text_draw 1
                  //045B: draw_text_2numbers 320.0 390.0 GXT 'AMMO' numbers 9@ 9@  // ~1~:~1~
                  
             if    
             05F1: 3@ = random_object_near_point 0@ 1@ 2@ in_radius 1.5 find_next 0 //IF and SET   
             then
             7@ = 1
             05E8: 4@ = object 3@ struct
             4@ += 0x174
             05E0: 5@ = read_memory 4@ size 4 virtual_protect 1 //weapon id
             4@ += 0x4
             05E0: 8@ = read_memory 4@ size 4 virtual_protect 1  //flag
                         if and
                         not 5@ == 0
                         not 5@ == 40
                         8@ == 13
                         0490:   player $player_char has_weapon 5@
                         then
                         03E6: remove_text_box
                         0209: 9@ = random_int_in_ranges 4 40
                         //046F: store_player $player_char currently_armed_weapon_to 6@
                         //01B2: give_actor $PLAYER_ACTOR weapon 5@ ammo 20 // Load the weapon model before using this
                         //01B8: set_player $player_char armed_weapon_to 6@
                         0114: set_actor $PLAYER_ACTOR weapon 5@ add_ammo 9@
                         0108: destroy_object 3@
                         end

                         if and
                         8@ == 13
                         not 5@ == 0
                         not 5@ == 40
                         8490:  not player $player_char has_weapon 5@
                         then
                         0512: show_permanent_text_box 'PU_CF1'
                         if
                         00E1:   key_pressed 0 4
                         then 
                         03E6: remove_text_box
                         0209: 9@ = random_int_in_ranges 10 70
                         046F: store_player $player_char currently_armed_weapon_to 6@ 
                         05E2: call_function 0x4418B0 num_params 1 pop 1 5@ 10@    //weapon id to model id
                         if
                         8248:  not model 10@ available
                         then
                         0247: request_model 10@
                         038B: load_requested_models
                         end
                         01B2: give_actor $PLAYER_ACTOR weapon 5@ ammo 9@ // Load the weapon model before using this
                         if
                         0248:   model 10@ available
                         then
                         0249: release_model 10@
                         end
                         01B8: set_player $player_char armed_weapon_to 6@
                         0108: destroy_object 3@
                         end
                         end
                         
                         if and
                         not 5@ == 0
                         5@ == 40
                         8@ == 13
                         then
                         0209: 9@ = random_int_in_ranges 10 500
                         0109: player $player_char money += 9@
                         0108: destroy_object 3@
                         end  

             else
             if
             7@ == 1
             then
             03E6: remove_text_box
             7@ = 0
             end
             end
 end
end

Видео - http://www.youtube.com/watch?v=0WaoHo7qSQ4
Скачать - http://www.gtagarage.com/mods/show.php?id=15721

Last edited by Sergey81 (07-04-2011 15:12)

Offline

#2 02-04-2011 02:51

Sergey81
Registered: 19-12-2008
Posts: 598

Re: [VC] Пикапы

В принципе, я переделал код до работающего состояния, правда есть вылеты иногда, надо дальше разбираться. Просьба перенести тему в форум модификаций. Также добавил небольшую видео демонстрацию.

Offline

#3 02-04-2011 12:30

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 177

Re: [VC] Пикапы

А почему два скрипта? Чёта по коду не пойму, в одном пикапы рядом с ГГ изображаются лежащими на земле, а в другом их можно подобрать?

Offline

#4 02-04-2011 13:42

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

Re: [VC] Пикапы

for 0@ = 0x945D5E to 0x94A13C step 0x34 
        05E0: 1@ = read_memory 0@ size 1 virtual_protect 1 
   if //or
          //0039: 1@ == 8 //money
          //0039: 1@ == 15 //scm
          0039: 1@ == 4 //ped pickups 
   then 
            0085: 8@ = 1@ // integer values and handles
            000A: 0@ += -0x1E 
            05E0: 1@ = read_memory 0@ size 4 virtual_protect 1 
            000A: 0@ += 0x1E   
          if 
                8039: not 1@ == 0 
          then     
            05EB: 2@ = object_struct 1@ handle

Я так понял, здесь ты проверяешь есть-ли по близости игрока пикапы оставленные педами.
А если раскоментировать 1@ == 8 и 15, то каким будет эффект?

Offline

#5 02-04-2011 17:07

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 468
Website

Re: [VC] Пикапы

@Sw[ee]t
Если раскомментировать, то по идее будут проверяться пикапы  денег и труляля. Однако в самом скрипте это не продумано еще. Т.к там все сосредоточено пока на оружии, насколько я понял в скрипте.

Проверил на версии 1.1 не работает
И еще такой косяк, когда у игрока нет оружия, то приходиться нажимать "ответить на звонок".


I know everything and nothing...

Offline

#6 02-04-2011 17:16

Sergey81
Registered: 19-12-2008
Posts: 598

Re: [VC] Пикапы

reute70 wrote:

А почему два скрипта? Чёта по коду не пойму, в одном пикапы рядом с ГГ изображаются лежащими на земле, а в другом их можно подобрать?

Ага, в первом прячем сами пикапы(опкода 0750 нету, так что просто меняю координату Х на -1000.0), создаём на их месте объекты с той же моделью и двумя флагами(model id и и число 0.13 для идентификации во втором скрипте). Во втором скрипте(в SA можно было бы уместить всё в один, но тут всего 16 локальных переменных, поэтому решил разделить) ищем модели, если они рядом с гг, проверяем флаги(чтобы не подбирать пикапы, которые не являются оружием) и либо даём ему оружие и удаляем модель, либо ждём нажатия кнопки Tab.

Sw[ee wrote:

t]Я так понял, здесь ты проверяешь есть-ли по близости игрока пикапы оставленные педами.
А если раскоментировать 1@ == 8 и 15, то каким будет эффект?

Здесь надо тоже доделывать код, делать проверку на то, что модель оружие, а не бронежилет например.
А ещё у этих пикапов разная высота, т.е. если оружие будет на земле, броня будет невидимая под землёй.
f9d2f0dac39c8f921b422d300825b669.jpeg  66f18729879f525bca43808e3e8c3b5d.jpeg  5e53daa881b03923536e3377d5b55a45.jpeg 
Пря нажатии таб естественно вылет.
У денег вобще какой то странный эффект получается...


Я кстати пробовал оптимизировать метку model2id,

if or
4@ == ***
4@ == ***
4@ == ***
4@ == ***
***
then
4@ -= ***
end

Правда таким образом вылезали глюки на пустом месте, когда вместо дубинки копов игроку давалась бейсбольная бита(естественно расчёт был правильный), поэтому сделал максимально наглядно чтоб ничего не перепуталось.

@mfisto - Да, пока все адреса от 1.0, возможно сделаю и под 1.1 позже.
Насчёт косяка, что именно имеешь в виду, а то я не совсем понял. Неверный GXT отображается?

UPD. Выложил обновлённую версию с поддержкой версии 1.1 и некоторыми улучшениями.

Last edited by Sergey81 (02-04-2011 17:59)

Offline

#7 02-04-2011 18:01

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 468
Website

Re: [VC] Пикапы

Проблема в том, что когда, например, у игрока нет пистолетов или оружия ближнего боя итд, т.е. определенного типа. Тогда для того, чтобы подобрать оружие, надо всегда нажимать "ответить на звонок".
Однако, если оружие уже есть, например, colt45, то тогда оно просто подберется.
Скажем у игрока вообще нет пистолетов, то, например, лежит оружие python, подходишь к нему, а вместо того чтоб подобраться, выскакивает сообщение нажмите "ответить на звонок".


I know everything and nothing...

Offline

#8 02-04-2011 18:27

Sergey81
Registered: 19-12-2008
Posts: 598

Re: [VC] Пикапы

@mfisto - А, ну да, есть такое, я правда незнаю почему так происходит.

Offline

#9 02-04-2011 18:32

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 468
Website

Re: [VC] Пикапы

И кстате еще такое. Ты можешь использовать буфер в качестве переменных, которых не хватает тебе в скрипте. Я так всегда поступаю, т.к. мне даже 34-х то в сане не канает.

05F7: 0@ = label @label offset

I know everything and nothing...

Offline

#10 02-04-2011 20:32

Sergey81
Registered: 19-12-2008
Posts: 598

Re: [VC] Пикапы

9844ebdb60ab64f0ec7190784808aa2b.jpeg 
Сделал пикап денег, тем же способом что и DK22Pac, моделька кстати тоже из его мода. Также добавил условий, теперь созданные игрой пикапы тоже лежат на земле, кроме этих:
#ADRENALINE
#info
#health
#bodyarmour
#briefcase
#package1
#BRIBE
#PICKUPSAVE
По прежнему натыкаюсь на рандомные вылеты(хоть и не так часто), по прежнему без понятия почему так происходит.

Last edited by Sergey81 (02-04-2011 22:08)

Offline

#11 02-04-2011 22:53

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 468
Website

Re: [VC] Пикапы

Ты, кстате, не делаешь проверку на загруженность модели перед тем, как дать оружие или там деньги игроку, возможно вылеты из-за этого.


I know everything and nothing...

Offline

#12 02-04-2011 23:02

Sergey81
Registered: 19-12-2008
Posts: 598

Re: [VC] Пикапы

@mfisto - возможно, хотя же вроде если пикап существует, его модель уже загружена. Впрочем добавлю на всякий случай.
Ошибка по адресу 0x462197 кстати.

Last edited by Sergey81 (03-04-2011 02:50)

Offline

#13 07-04-2011 15:19

Sergey81
Registered: 19-12-2008
Posts: 598

Re: [VC] Пикапы

Бета 7 в первом посте. Убрал воздействие скрипта на скм пикапы, сделал gosub model id to weapon id в виде скм функции, код стал компактнее теперь. Вылеты и прочие глюки вроде не наблюдаются.
То, что оружие, которого нет у игрока нужно поднимать по кнопке, наверно так и оставлю.

Offline

Board footer

Powered by FluxBB