You are not logged in.
К 9 мая написал скрипт, оживляющий модельку, сделанную Du-Mont'ом. Модельку можно скачать, например, здесь.
[large]Краткое описание[/large]
CLEO-скрипт для игры GTA San Andreas. Оживляет модель пусковой установки "Катюша" на шасси ЗИС-6 времен Второй Мировой Войны, сделанной Du-Mont'ом. Скрипт написан только для этой конкретной модели, заменяющей трансопортное средство Packer, и ни для какой другой.
[large]Управление, оно же подробное описание[/large]
Вся установка управляется при помощи одной единственной Левой кнопкой мыши aka ЛКМ aka LMB aka Left Mouse Button (и не надо меня потом спрашивать, что же это за кнопка такая). Думаю, понятно, что делает эта кнопка - запускает ракету. Игрок в этот момент должен находится в кабине машины ЗИС-6 на водительском месте. Не забывайте также, что можете поднимать и опускать пусковую установку при помощи внутреигровых клавиш управления авто VEHICLE_TURRETUP и VEHICLE_TURRETDOWN, регулируя тем самым дальность стрельбы.
[large]Сырцы[/large] (откомментированные)
{$CLEO} {$I VK.inc} //Здесь зарезервированные константые имена Virtual Key Codes для 0AB0 (VK_*) const rocket = 0@ //массив ракет, 8 штук col_model = 8@ //массив объектов, имеющих коллизию - она нужна чтобы зарегистрировать касание ракеты, 8 штук rocket_timer = 16@ //не совем таймер, но нужен для расчета времени (массив - 8 штук). stopsnd = 26@ playsnd = 27@ last_index = 28@ index = 29@ //индекс для всех массивов zis6 = 30@ //машина KeyTime = 31@ //время нажимания клавиши запуска; не используется - может понадобится для расширения режимов... end MODEL.Load(1582) //модель объектов col_model model.load(#MISSILE) //модель объектов rocket REPEAT WAIT 0 until model.Available(1582) REPEAT WAIT 0 until model.Available(#MISSILE) 03CF: load_wav 14401 as 1 //звук LONG_EXPLOSION repeat wait 0 until 03D0: wav 1 loaded last_index = -1 if 0AA2: 25@ = load_library "Missile.dll" // IF and SET then if 0AA4: playsnd = get_proc_address "PlaySND" library 25@ // IF and SET then if 0AA4: stopsnd = get_proc_address "StopSND" library 25@ // IF and SET then 25@ = 1 end end end //----------------TELO-------------------------------- while true wait 10 if player.Defined($player_char) then if actor.Drivingvehicletype($player_actor,#PACKER) then if 0AB1: call_scm_func @KEY_PRESS 1 VK_LBUTTON KeyTime //нажата ли VK_LBUTTON и как долго then gosub @launch_single //запуск ракеты end end end gosub @rocket_control //управление всеми ракетами end //-----------------TELO_END =)------------------------- :launch_single if 83D2: not wav 1 ended then return end 03C0: zis6 = actor $PLAYER_ACTOR car 0A8E: index = last_index + 1 //запускаем ракеты по порядку if index >= 8 then index = 0 last_index = -1 end if 03CA: object rocket(index,8i) exists //если порядок нарушен then for index = 0 to 7 //ищем индекс первой свободной ракеты if 83CA: not object rocket(index,8i) exists then break end end end if and 03CA: object rocket(index,8i) exists index == 7 //если же таковой не нашелся then return //возврат end 0085: last_index = index 0AB1: call_scm_func @create_rocket 2 zis6 index col_model(index,8i) rocket(index,8i) //создаем ракету, прикрепленную к машине 097C: attach_wav 1 to_object col_model(index,8i) 03D1: play_wav 1 //проигрываем звук запуска 0A8E: rocket_timer(index,8i) = 33@ + 300 //устанавливаем таймеру значение, отличающиеся от потокового таймера на 300 return :rocket_control for index = 0 to 7 if and 03CA: object rocket(index,8i) exists //существует ли ракета 03CA: object col_model(index,8i) exists then if and //если прикрепленная ракета висит на ней уже 300 милллисекунд 001d: 33@ >= rocket_timer(index,8i) 0685: object col_model(index,8i) attached then 0682: detach_object col_model(index,8i) 0.0 0.0 0.0 collision_detection 0 //отцепляем (передаем управление другому обработчику) gosub @Play_SND //Воспроизводим звук летящей ракеты 0A8E: rocket_timer(index,8i) = 33@ + 5000 //таймер до "искусственного" взрыва ракеты с момента запуска. if 80E1: not player 0 pressed_key 6 //эффект отбрасывания машины назад, если не на ручнике then 02E3: $TEMPVAR_FLOAT_1 = car zis6 speed $TEMPVAR_FLOAT_1 += -1.0 car.SetSpeedInstantly(zis6,$TEMPVAR_FLOAT_1) end end if 8685: not object col_model(index,8i) attached //обработчик запущенной ракеты then if 0AB1: call_scm_func @rocket_trajectory 3 col_model(index,8i) zis6 rocket(index,8i) //управляем траекторией ракеты then //если ракета взорвана gosub @Stop_SND //останавливаем звук end if 001d:33@ >= rocket_timer(index,8i) //ракета заблудилась - взрываем then 0AB1: call_scm_func @explode 2 col_model(index,8i) rocket(index,8i) gosub @Stop_SND //останавливаем звук end end end end return :create_rocket object.Create(2@,1582,0.0,0.0,0.0) 098D: get_car 0@ extra_parts_angle 5@ //регулирует дальность полета 5@ *= 65.0 //коэффициент 6@ = 205.0 005b: 6@ += 5@ //линейное смещение 06BE: 7@ = car 0@ y_angle //наклон машины (влево/вправо) 7@ *= -1.0 //Правильное ориентирование ракеты в момент прикрепления гарантирует правильную траекторию полета 10@ = 2.2 10@ /= 7.0 0093: 1@ = integer 1@ to_float 006b: 10@ *= 1@ 12@ = -1.1 005b:12@ += 10@ 0681: attach_object 2@ to_car 0@ with_offset 12@ -3.0 0.8 rotation 6@ 7@ 0.0 object.Create(3@,#MISSILE,0.0,0.0,0.0) 069A: attach_object 3@ to_object 2@ with_offset 0.0 0.0 0.0 rotation 180.0 0.0 0.0 Object.ToggleInMovingList(2@) = True Object.SetImmunities(2@, 1, 1, 1, 1, 1) 04D9: object 2@ set_scripted_collision_check 1 0906: set_object 2@ mass_to 100.0 // float //масса 0908: set_object 2@ turn_mass_to 750.0 // float //инертность (качественное отличие?) Object.SetImmunities(3@, 1, 1, 1, 1, 1) 08D2: object 2@ scale_model 0.0001 08D2: object 3@ scale_model 2.0 066D: 4@ = attach_particle "tank_fire" to_object 2@ offset 0.0 0.8 0.0 1 064C: make_particle 4@ visible 0400: store_coords_to 6@ 7@ 8@ from_object 2@ with_offset 0.0 2.0 0.0 073F: get_actor_in_sphere 6@ 7@ 8@ radius 2.0 with_pedtype_civilian 1 gang 1 criminal/prostitute 1 handle_as 9@ if actor.Defined(9@) then 0326: 10@ = create_actor 9@ fire end 0AB2: ret 2 2@ 3@ :rocket_trajectory 0400: store_coords_to 6@ 7@ 8@ from_object 0@ with_offset 0.0 -100.0 0.0 0400: store_coords_to 9@ 10@ 11@ from_object 0@ with_offset 0.0 0.0 0.0 016F: create_particle 3 rotation_factor 0.0 size 12.5 intensity 100 flags 255 255 255 at 9@ 10@ 11@ 04D5: create_corona_at 9@ 10@ 11@ radius 5.0 type 1 flare 2 RGB 255 192 128 09E5: create_flash_light_at 9@ 10@ 11@ RGB_mask 4095 4095 4095 radius 20.0 0063: 6@ -= 9@ // (float) 0063: 7@ -= 10@ // (float) 0063: 8@ -= 11@ // (float) 05A1: set_object 0@ rotation_velocity_about_an_axis -0.05 0.0 0.0 through_center_of_body //поворачиваем объект, чтобы он описывал дугу Object.Throw(0@, 6@, 7@, 8@) 066D: 12@ = attach_particle "tank_fire" to_object 0@ offset 0.0 0.8 0.0 1 064C: make_particle 12@ visible if or 04E7: object 0@ in_water 04DA: is_object 0@ collided //если ракета сколидилась then if // и сколидилась она не с зис6 (в момент запуска)) 0897: car 1@ collided_with_object 0@ then 059A: return_false else 0AB1: call_scm_func @explode 2 0@ 2@ //большой бум 0485: return_true end end 0AB2:ret 0 :explode object.StorePos(0@,3@, 4@, 5@) Object.Destroy(0@) Object.Destroy(1@) 020C: create_explosion_with_radius 6 at 3@ 4@ 5@ 0AB2:ret 0 :KEY_PRESS 32@ = 0 if 0ab0: 0@ then while 0ab0: 0@ wait 0 end 0485: return_true else 059A: return_false end 0AB2:ret 1 32@ :Play_SND if 25@ == 1 then 0AA5: call playsnd num_params 0 pop 0 end return :Stop_SND if 25@ == 1 then 0AA5: call stopsnd num_params 0 pop 0 end return
В скрипте используется самый дурацкий способ воспроизведения звуков. В связи с этим имеется куча багов.С мультимедией работать я так и не научился. Чтобы не воспроизводились эти идиотские звуки, достаточно просто удалить файл missile.dll.
Offline
Пишет, что невозможно загрузить {$I VK.inc} при копиляции. И куда совать файл ZIS-6_Rocket_Launch_BM-13.sami?
Offline
Пишет, что невозможно загрузить {$I VK.inc} при копиляции. И куда совать файл ZIS-6_Rocket_Launch_BM-13.sami?
Нет там никакого sami.
Тупо код скопировать не удастся. Надо инсталлятор скачивать. И на scriptsforgta на данный момент лежит старая версия с багом в коде=)
Offline