You are not logged in.
Pages: 1
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 40pkpbl.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 12:12)
Offline
В принципе, я переделал код до работающего состояния, правда есть вылеты иногда, надо дальше разбираться. Просьба перенести тему в форум модификаций. Также добавил небольшую видео демонстрацию.
Offline
А почему два скрипта? Чёта по коду не пойму, в одном пикапы рядом с ГГ изображаются лежащими на земле, а в другом их можно подобрать?
Offline
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
@Sw[ee]t
Если раскомментировать, то по идее будут проверяться пикапы  денег и труляля. Однако в самом скрипте это не продумано еще. Т.к там все сосредоточено пока на оружии, насколько я понял в скрипте.
Проверил на версии 1.1 не работает
И еще такой косяк, когда у игрока нет оружия, то приходиться нажимать "ответить на звонок".
I know everything and nothing...
Offline
А почему два скрипта? Чёта по коду не пойму, в одном пикапы рядом с ГГ изображаются лежащими на земле, а в другом их можно подобрать?
Ага, в первом прячем сами пикапы(опкода 0750 нету, так что просто меняю координату Х на -1000.0), создаём на их месте объекты с той же моделью и двумя флагами(model id и и число 0.13 для идентификации во втором скрипте). Во втором скрипте(в SA можно было бы уместить всё в один, но тут всего 16 локальных переменных, поэтому решил разделить) ищем модели, если они рядом с гг, проверяем флаги(чтобы не подбирать пикапы, которые не являются оружием) и либо даём ему оружие и удаляем модель, либо ждём нажатия кнопки Tab.
t]Я так понял, здесь ты проверяешь есть-ли по близости игрока пикапы оставленные педами.
А если раскоментировать 1@ == 8 и 15, то каким будет эффект?
Здесь надо тоже доделывать код, делать проверку на то, что модель оружие, а не бронежилет например.
А ещё у этих пикапов разная высота, т.е. если оружие будет на земле, броня будет невидимая под землёй.
  
  
  
Пря нажатии таб естественно вылет.
У денег вобще какой то странный эффект получается...
Я кстати пробовал оптимизировать метку 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 14:59)
Offline
Проблема в том, что когда, например, у игрока нет пистолетов или оружия ближнего боя итд, т.е. определенного типа. Тогда для того, чтобы подобрать оружие, надо всегда нажимать "ответить на звонок".
Однако, если оружие уже есть, например, colt45, то тогда оно просто подберется.
Скажем у игрока вообще нет пистолетов, то, например, лежит оружие python, подходишь к нему, а вместо того чтоб подобраться, выскакивает сообщение нажмите "ответить на звонок".
I know everything and nothing...
Offline
@mfisto - А, ну да, есть такое, я правда незнаю почему так происходит.
Offline
И кстате еще такое. Ты можешь использовать буфер в качестве переменных, которых не хватает тебе в скрипте. Я так всегда поступаю, т.к. мне даже 34-х то в сане не канает.
05F7: 0@ = label @label offset
I know everything and nothing...
Offline
  
Сделал пикап денег, тем же способом что и DK22Pac, моделька кстати тоже из его мода. Также добавил условий, теперь созданные игрой пикапы тоже лежат на земле, кроме этих:
#ADRENALINE
#info
#health
#bodyarmour
#briefcase
#package1
#BRIBE
#PICKUPSAVE
По прежнему натыкаюсь на рандомные вылеты(хоть и не так часто), по прежнему без понятия почему так происходит.
Last edited by Sergey81 (02-04-2011 19:08)
Offline
@mfisto - возможно, хотя же вроде если пикап существует, его модель уже загружена. Впрочем добавлю на всякий случай.
Ошибка по адресу 0x462197 кстати.
Last edited by Sergey81 (02-04-2011 23:50)
Offline
Бета 7 в первом посте. Убрал воздействие скрипта на скм пикапы, сделал gosub model id to weapon id в виде скм функции, код стал компактнее теперь. Вылеты и прочие глюки вроде не наблюдаются.
То, что оружие, которого нет у игрока нужно поднимать по кнопке, наверно так и оставлю.
Offline
Pages: 1