You are not logged in.
При написании миссии возникла следующая проблема.
Как использовать проверки в роликах?
Пример. Я создал триггер, запустил миссию. Привожу отрывок из нее, самое начало. Чтоб лучше было понятно - написал комментарии.
:RIDE
thread "RIDE"
gosub @MIS_ST
if
wasted_or_busted
then
gosub @MIS_F
end
gosub @MIS_CL
end_thread
:MIS_ST
increment_mission_attempts
//---- Загружаем телефон и мелодию звонка
model.Load(#CELLPHONE)
03CF: load_wav 23000 as 1
038B: load_requested_models
:MIS_Z
if or
not model.Available(#CELLPHONE)
83D0: not wav 1 loaded
jf @Ride1
wait 0
jump @MIS_Z
//-------------------------------------------
:Ride1
//------ Очищаем местность в заданных координатах
0395: clear_area 1 at -358.3962 1179.3182 19.7422 radius 15.0
//-------Ставим туда игрока и камеру.
Actor.PutAt($PLAYER_ACTOR, -358.0858, 1176.1097, 19.7422)
actor.Angle($PLAYER_ACTOR) = 294.475
camera.SetPosition(-348.5866, 1181.1206, 19.7422, 0.0, 0.0, 0.0)
camera.PointAt(-360.9038, 1176.1595, 21.9065, 2)
02A3: enable_widescreen 1
//------- На всякий случай. У игрока оружие - убираем. Игрока преследуют - заставляем их отвязаться.
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1
06AB: set_actor $PLAYER_ACTOR all_weapons_hidden 1
//------- Здесь начинаются непонятки. До начала миссии я затемнил экран. Я хочу чтобы все действие начало показываться через секунду. Пускаю таймер:
32@ = 0
while 32@ <= 1000
wait 0
if
Player.Defined($PLAYER_CHAR)
then
if
not Actor.Dead($PLAYER_ACTOR)
then
Continue
else
jump @Ride5
end
end
end
//-----Первый вопрос: надо ли проверять, что случилось с игроком за эту секунду, как здесь?
0707: start_scene_skip_to @Ride6
0615: define_AS_pack_begin 1@
05D3: AS_actor -1 goto_point -352.5362 1179.427 19.7422 mode 4 3500 ms // versionA
05B9: AS_actor -1 stay_idle 500 ms
0729: AS_actor -1 hold_cellphone 1
0616: define_AS_pack_end 1@
0618: assign_actor $PLAYER_ACTOR to_AS_pack 1@
fade 1 1000
//------Задали действия, теперь показываем их игроку
32@ = 0
while 32@ <= 2500
wait 0
if
Player.Defined($PLAYER_CHAR)
then
if
not Actor.Dead($PLAYER_ACTOR)
then
continue
else
061B: remove_references_to_AS_pack 1@
jump @Ride5
end
end
end
03D1: play_wav 1
00BC: show_text_highpriority GXT 'Ride_1' time 2000 flag 1
//------- Суть та же. Я мог написать просто "wait 2500" и пока актер выполняет действия, таймер отсчитал бы эти 2,5 секунды, и на экране в итоге появился текст.
и т.д.Так нужны ли такие проверки актера каждую секунду? Ведь игрок может ввести чит, и сценка как-нибудь застопорится.
Offline
насколько я понимаю, игра сама проверяет состояние игрока в каждый момент и, если он умер, прерывает миссию. поэтому дополнительные проверки в сценках избыточны.
Offline
насколько я понимаю, игра сама проверяет состояние игрока в каждый момент и, если он умер, прерывает миссию. поэтому дополнительные проверки в сценках избыточны.
Просто мне нужно было, если Си-Джей умрет, вырубить widescreen, сделать так, чтобы игрок опять мог двигаться, и пр., так как в сценке эти команды включаются. Я забыл в вопросе упомянуть об этом.
Но только недавно узнал, что, если ГГ умирает, игра автоматически восстанавливает камеру, убирает черные полосы с экрана, и вообще во многих командах, например как
0489: set_actor $PLAYER_ACTOR muted 1
восстанавливает исходные значения...
И, например, если в блоке Mission Cleanup написать
object.Destroy(4@)
и в самой миссии вообще этот объект не создавать, то игра не вылетит... Так же, если модель удалить, не загрузив... Почему так?
Last edited by oz91 (31-01-2011 09:38)
Offline
Ясно)
@Seemann, @3Doomer, спасибо за ответы)
Offline