00052. Пример полноценной миссии "Взрывчатка"
Пример полноценной миссии "Взрывчатка"|Всем привет! Давно не было уроков по скриптингу Санни Билдер, так как все известные моменты мы рассмотрели, я решил писать уже не уроки, а примеры полноценных миссий. Сегодня мы будем "хардкорить" в написании миссии, которую я назвал "Взрывчатка".|wmysterio|wmysterio||||Суть миссии в том, что к CJ обращается Свит и сообщает что его машину заминировали. Допустим, что Свит насколько привязан к этой тачки, что решает разминировать её. Нам необходимо привести сапёра, чтобы тот взялся за это нелёгкое дело. Как оказалось, что для этого дела понадобится неординарное решение - чтобы успешно разминировать её, нужно держать скорость автомобиля примерно на скорости 100 км/час. В противном случаи машину не разминировать. Думаю идея понятна.
Хочу добавить, что данная статья не для новичков, а для тех, что более-менее уже понимает чужой код и может дополнить его.
Давайте приступим к написанию кода. Миссию мы будем делать, используя CLEO. Я сочинил простейший стартер, который запустит нашу миссию.
Приступаем к написанию последовательности скрипта. Прежде всего очищаем местность от всего хлама и рендерим местность для камеры, убрав трафик пешеходов и автомобилей. Создаём неподалёку тачку Свита и садовим его в транспорт. Перемещаем СЖ к нему:
Используется анимация PED, актёры смотрят друг на друга и шевелят губами. По окончанию диалога, как и при нажатии клавиши Пробел` идёт затемнение экрана, СЖ перемещается в транспорт, за руль. Камера сбрасывается в обычный режим.
Далее, по-сюжету, мы должны приехать к сапёру, и подобрать его. Организуем простой цикл, в котором нельзя ехать больше 100 км/час. В нём же не допустим смерти тачки и Свита:
Дальше нужно организовать цикл, в котором будут условия обезвреживания бомбы. Как сказал в диалогах сапёр, нужно проверить на открытия двери, чтобы взорвать транспорт. Это можно осуществить путём проверки к-ва занятых мест. Если такое число превышает 0, то это значит, что кто-то покинул траспорт, тем самым открыв дверь. Цикл будел разделён на три этапа:
Когда игрок не набрал 100 км/час
Когда уже набрал такую скорость, включается таймер
Ожидание времени. Для полного хардкора включим трафик, чтобы игрок попотел :)
5@ = 0
3@ = 1 // etap
02E3: $CAR_SPEED = car 0@ speed
008C: $CAR_SPEED = float $CAR_SPEED to_integer
04F7: status_text $CAR_SPEED type 0 line 1 GXT 'DEF0' // global_variable // Score
$TIMER = 60000
while 5@ == 0
wait 0
if or
02BF: car 0@ sunk
car.Wrecked(0@)
then
5@ = -1
continue
end
if
Actor.Dead(1@)
then
5@ = -2
continue
end
if
Actor.Dead(11@)
then
5@ = -3
continue
end
01E9: 10@ = car 0@ num_passengers
046C: 12@ = car 0@ driver
if OR
87D6: not 12@ == $PLAYER_ACTOR // @ == $ (int)
not 10@ == 2
then
020B: explode_car 0@
continue
end
02E3: $CAR_SPEED = car 0@ speed
$CAR_SPEED *= 3.2
008C: $CAR_SPEED = float $CAR_SPEED to_integer
if AND
3@ == 1
$CAR_SPEED > 100
then
3@ = 2
continue
end
if
3@ == 2
then
03C3: set_timer_to $TIMER type 1 GXT 'DEF1' // global_variable // Time
3@ = 3
end
if AND
3@ == 3
Actor.InCar($PLAYER_ACTOR, 0@)
100 > $CAR_SPEED
then
020B: explode_car 0@
continue
end
if AND
3@ == 3
Actor.InCar($PLAYER_ACTOR, 0@)
$TIMER == 0
then
5@ = 1
end
end
014F: stop_timer $TIMER
0151: remove_status_text $CAR_SPEED
if
5@ == -1
then
jump @BOMB_FINISH_CAR_DEAD
end
if
5@ == -2
then
jump @BOMB_FINISH_SWEET_DEAD
end
if
5@ == -3
then
jump @BOMB_FINISH_SAP_DEAD
end
Нам осталось только написать код, который выгружает из памяти все ненужные объекты:
:BOMB_END
if
056D: actor 1@ defined
then
Actor.RemoveReferences(1@)
Actor.DestroyInstantly(1@)
end
if
056D: actor 11@ defined
then
Actor.RemoveReferences(11@)
Actor.DestroyInstantly(11@)
end
if
056E: car 0@ defined
then
Car.RemoveReferences(0@)
if
not Actor.InCar($PLAYER_ACTOR, 0@)
then
Car.Destroy(0@)
end
end
return
Результат нашей миссии:
Вам задание: Дописать миссию до логического завершения - нужно приехать к дому Свита. На этом урок окончен. С Вами был wmysterio, всего доброго!
P.S Исходники вы можете скачать здесь. Улучшайте миссию на свой вкус.|1238|1|0|12857216png800480400240``\|79472534png800480400240``||primer_polnocennoj_missii_vzryvchatka|1504598907