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