Если в проекте планируется набор из небольших миссий, то есть смысл сделать группировку миссий (объединить небольшие миссии в одну большую). В этом случае мы можем воспользоваться таблицей переходов, чтобы разделить миссию не отдельные части.
В качестве переменной мы можем использовать счётчик выполненных миссий или использовать отдельную переменную, отвечающею за этап (часть) миссии.
Теперь в зависимости от значения переменной CJ_MISSION_PASSED будет выполнятся только одна конкретная часть миссии (PART_X).
Такой подход требует компактной реализации награды для игрока. Есть две базовые награды за прохождение миссии: уважение и деньги. Иногда они могут быть вместе, иногда награда отсутствует. В этом случае мы можем использовать три переменные, чтобы распределить награду в зависимости от этапа миссии.
Если всё оставить как есть, то при прохождении этапов будет показано сообщение о выполненной миссии. Если этап имеет награду за прохождение, то достаточно указать переменным plus_reward и plus_respect новые значения:
publicclassMYMISS:Mission { //...#regionSUBMISSIONprivatevoidPART_0( LabelCase l ) {plus_temp.value=-1;jump_passed(); }privatevoidPART_1( LabelCase l ) {jump_passed(); } privatevoidPART_2( LabelCase l ) {plus_respect.value=5; jump_passed(); }privatevoidPART_3( LabelCase l ) {plus_reward.value=5000;jump_passed(); }privatevoidPART_4( LabelCase l ) {plus_respect.value=15; plus_reward.value=25000;jump_passed(); }#endregion}
Теперь при прохождении этапа PART_0 никаких сообщений не будет и награды тоже (в том числе и звука). За прохождение PART_1 будет показано сообщение о выполненной миссии. За PART_2 будет повышено уважение, за PART_3 дадут 5000$; а за последний этап будет повышено уважение и дадут 25000$ одновременно.
С успешным выполнением миссии мы разобрались. Давайте теперь рассмотрим код провала. У нас могут быть различные ситуации, которые приводят к провалу. Чаще всего выводится текст с информацией о причине неудачи. Мы можем использовать переменную, которая будет хранить GXT-ключ и написать метод, который будет задавать этой переменной текст провала и с последующим прыжком на метку провала.
Теперь если игрок будет в любой машине, то миссия будет провалена. При этом будет показано сообщение из GXT-ключа GXTNAME. Если игрок не сядет в транспорт в течении 10 секунд, то миссия будет выполнена.
Нам осталось разобраться только с очисткой миссии. В этом блоке идёт не только удаление всех созданных субъектов, но и возврат всех настроек в изначальное состояние. Игра часто самостоятельно делает этот возврат, но лучше принудительно это делать (для страховки).
Ситуацию усложняет то, что в этом примере сразу несколько миссий. Поэтому мы должны делать очистку с учётом всех изменений:
На этапе 0 у нас отключается трафик пешеходов, а на этапе 1 — трафик транспорта. Однако в методе DEFAULT_CLEAR мы должны сделать возврат к стандартным настройкам оба параметра независимо от этапа. Этот принцип должен соблюдаться всегда, чтобы гарантировать полное соответствие настроек до миссии и после неё.