Скрипт создаёт полицейский броневик (Swatvan), который будет припаркован у здания вокзала на станции Клюквы. К автомобилю будет прицеплен пулемёт (minigun), который, как и водяная пушка, может вращаться в горизонтальной и вертикальной плоскостях - в зависимости от направления обзора камеры. Огонь из пулемёта осуществляется правой кнопкой мыши.
Кроме того, автомобиль будет полностью неуязвимым, а колёса - пуленепробиваемыми.
Также есть возможность заблокировать двери на данном автомобиле - для этого нужно нажать [ (после того, как игрок войдёт в машину). Блокировка снимается автоматически, сразу после выхода игрока из автомобиля.
Если на обозначенном месте автомобиль не появился, то следует отъехать на какое-то расстояние, а затем вернуться.{$CLEO}
0A95: enable_thread_saving
014B: 9@ = init_parked_car_generator 601 1 1 0 alarm 0 door_lock 0 1 40000 at -1968.4062 100.8711 27.6875 angle 90.0
014C: set_parked_car_generator 9@ cars_to_generate_to 101
while true
wait 0
if
player.Defined($player_char)
then
if
856E: not car 30@ defined
then
if
03CA: object 31@ exists
then
object.Destroy(31@)
end
if
00EC: actor $PLAYER_ACTOR 0 near_point -1968.4062 100.8711 radius 200.0 200.0
then
073E: get_car_in_sphere -1968.4062 100.8711 26.6875 radius 10.0 model 601 handle_as 30@
end
else
if
83CA: not object 31@ exists
then
model.Load(362)
repeat
wait 0
until model.Available(362)
object.Create(31@ 362 0.0 0.0 -100.0)
model.Destroy(362)
if and
056E: car 30@ defined
03CA: object 31@ exists
then
0681: attach_object 31@ to_car 30@ with_offset 0.3 0.0 2.0 rotation 0.0 30.0 94.0
car.SetImmunities(30@ 1 1 1 1 1)
053F: set_car 30@ tires_vulnerability 0
end
else
if
056E: car 30@ defined
then
if
actor.InCar($PLAYER_ACTOR 30@)
then
if
0AB0: key_pressed 219 // [ button - lock doors
then
020A: set_car 30@ door_status_to 2
end
if
82BF: not car 30@ sunk
then
068D: get_camera_position_to 0@ 1@ 2@
068E: get_camera_target_point_to 3@ 4@ 5@
0174: 17@ = car 30@ Z_angle
//-----------------------------------------------------------вычисляем угол по X
050A: 6@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@
0087: 10@ = 5@ // (float)
0063: 10@ -= 2@ // (float)
0073: 10@ /= 6@ // (float) = sin
0087: 7@ = 10@ // (float)
0087: 8@ = 10@ // (float)
006B: 10@ *= 7@ // (float)
006B: 10@ *= 7@ // (float)
10@ /= 6.0
005B: 8@ += 10@ // (float)
10@ *= 6.0
006B: 10@ *= 7@ // (float)
006B: 10@ *= 7@ // (float)
10@ *= 0.075
005B: 8@ += 10@ // (float)
10@ /= 0.075
006B: 10@ *= 7@ // (float)
006B: 10@ *= 7@ // (float)
10@ *= 0.0446
005B: 8@ += 10@ // (float) arcsinX = X + (X^3)/6 + (X^5)*3/40 + (X^7)*15/336
8@ *= -57.296 // переводим радианы в градусы
8@ += 360.0
//-----------------------------------------------------------вычисляем угол по Z
0063: 3@ -= 0@ // (float)
0063: 4@ -= 1@ // (float)
0604: get_Z_angle_for_point 3@ 4@ store_to 2@ // 1 параметр - x2-x1 2 параметр - y2-y1
//-----------------------------------------------------------вычисляем смещения по осям X и Y
0063: 2@ -= 17@ // (float)
2@ += 270.0 // пусть миниган будет располагаться справа от водяной пушки
02F6: 3@ = cosine 2@ // (float) синус
02F7: 4@ = sine 2@ // (float) косинус
3@ *= -0.3
4@ *= 0.3
//-----------------------------------------------------------прикрепляем миниган
2@ -= 176.0 // 94 градуса - поправка на расположение опорной точки минигана
if
8@ < 320.0
then
8@ = 320.0
end
if
8@ > 395.0
then
8@ = 395.0
end
if and
056E: car 30@ defined
03CA: object 31@ exists
then
0681: attach_object 31@ to_car 30@ with_offset 3@ 4@ 2.0 rotation 0.0 8@ 2@
if
0AB0: key_pressed 2 // ПКМ - огонь
then
0400: store_coords_to 11@ 12@ 13@ from_object 31@ with_offset 1.17 0.0 0.42
0400: store_coords_to 14@ 15@ 16@ from_object 31@ with_offset 1150.0 -100.0 550.0
06BC: create_M4_shoot_from 11@ 12@ 13@ target 14@ 15@ 16@ energy 1000
066E: create_particle "GUNFLASH" attached_to_object 31@ with_offset 1.17 0.0 0.42 rotation 0.866024961519 0 0.500000766025 flag 1 handle_as 18@
064C: make_particle 18@ visible
064F: remove_references_to_particle 18@
end
end
end // not car sunk
else
020A: set_car 30@ door_status_to 0 // door unlock
if or
8202: not actor $PLAYER_ACTOR near_car 30@ radius 200.0 200.0 flag 0
02BF: car 30@ sunk
then
car.RemoveReferences(30@)
end
end // actor in car
end // car defined
end // object 31@ exists
end
end
end
Скрины:
]]>