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