00062. Работа со стартерами ( MAIN.SCM - Часть 1 )
Работа со стартерами ( MAIN.SCM - Часть 1 )|В этом мы рассмотрим примеры запуска нескольких миссий.|wmysterio|wmysterio||||Доброго времени суток, дорогие друзья! Как Вы уже догадались, речь пойдет о стартерах. Когда я был новичком, мне никак не удавалось запускать миссии в нужном порядке. Стартер, что был в учебнике, был для меня плохим примером, так как он был в скомпилированном виде, и с помощью него я смог запустить максимум 3 миссии.
Как я решил данную проблему? Ответ оказался очень простым! Дело было в глобальных переменных, которые были в качестве счетчика, то есть за каждую выполненную миссию мы увеличиваем счетчик на 1. Вот несколько миссий в качестве примера ( Счетчиком будет переменная "$TOTAL_MISSION" ):
//------------- GUN (mission 1) ---------------
:GUN
thread 'GUN'
gosub @GUN_29_57
if
wasted_or_busted
jf @GUN_29_46
gosub @GUN_29_144
:GUN_29_46
$ONMISSION = 0
mission_cleanup
end_thread
:GUN_29_57
increment_mission_attempts
$ONMISSION = 1
fade 1 1000
wait 1000
gosub @GUN_END
00BA: show_text_styled GXT 'M_PASS' time 5000 style 1 // GUN PASSED
0318: set_latest_mission_passed 'MISS_00' // GXT GUN name
$TOTAL_MISSION += 1
create_thread @STARTER
return
:GUN_29_144
wait 0
gosub @GUN_END
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // GUN FAILED
create_thread @STARTER
return
:GUN_END
wait 0
return
//------------- MYS (mission 1) ---------------
:MYS
thread 'MYS'
gosub @MYS_29_57
if
wasted_or_busted
jf @MYS_29_46
gosub @MYS_29_144
:MYS_29_46
$ONMISSION = 0
mission_cleanup
end_thread
:MYS_29_57
increment_mission_attempts
$ONMISSION = 1
fade 1 1000
wait 1000
gosub @MYS_END
00BA: show_text_styled GXT 'M_PASS' time 5000 style 1 // GUN PASSED
0318: set_latest_mission_passed 'MISS_01' // GXT GUN name
$TOTAL_MISSION += 1
create_thread @STARTER
return
:MYS_29_144
wait 0
gosub @MYS_END
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // GUN FAILED
create_thread @STARTER
return
:MYS_END
wait 0
return
//------------- TES (mission 2) ---------------
:TES
thread 'TES'
gosub @TES_29_57
if
wasted_or_busted
jf @TES_29_46
gosub @TES_29_144
:TES_29_46
$ONMISSION = 0
mission_cleanup
end_thread
:TES_29_57
increment_mission_attempts
$ONMISSION = 1
fade 1 1000
wait 1000
gosub @TES_END
00BA: show_text_styled GXT 'M_PASS' time 5000 style 1 // GUN PASSED
0318: set_latest_mission_passed 'MISS_02' // GXT GUN name
$TOTAL_MISSION += 1
create_thread @STARTER
return
:TES_29_144
wait 0
gosub @TES_END
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // GUN FAILED
create_thread @STARTER
return
:TES_END
wait 0
returnВ нашем арсенале есть три миссии. Как видите во всех присутствует команда "create_thread @STARTER". Значит их запускает поток с именем ":STARTER". Давайте напишем условия перехода:
Как видите, мы создаём сферу и маркер, координаты которой "$MISSION_T_COORD_X", "$MISSION_T_COORD_Y", "$MISSION_T_COORD_Z". Значит нам нужно написать их ещё перед запуском стартера. Обычно скриптеры пишут их в первом потоке, то есть в потоке "MAIN" и тамже задают начальное значение "$TOTAL_MISSION". Сделаем это тоже:
Теперь сфера будет появляться в этих координатах. Но очень часто нужно сделать, что бы сфера после прохождения миссии появлялась в другой точке. Не проблема! Мы пишем переменные маркера в самой миссии ( до или после $TOTAL_MISSION += 1 ):
Таким образом, после прохождения миссии "GUN" позиция маркера изменится.
Что делать, если нужно запустить первую миссию в начале игры? То есть нажимаем "Новая игра" и сразу показывается какой то ролик из миссии или сразу идёт миссия. Например, у миссии 0 есть ролик ( просто представим, так как я кинул код без ролика ). Ответ очень прост! Вместо "create_thread @STARTER" в потоке "MAIN" пишем "start_mission 0":
Даже если миссия будет провалена мы всё равно увидим маркер, так как мы указали необходимые данные в коде провала миссии. Поэтому я закомментировал строчку "// create_thread @STARTER в место этого". Если этого не сделать, то после прохождении миссии 0 поток ":STARTER" запустится дважды, а это приведёт к нежелательным последствиям.
Я привел пример только для 3-х миссий. Что Вам нужно сделать, чтоб было больше:
Скопируйте код одной из миссий и в ставьте её в конец скрипта. Переименуйте метки и название потока. Это займет максимум 30 секунд;
Добавьте в стартер код запуска:
Добавьте условие перехода на метку запуска:
Вставляйте этот код в условие:
Так же не забывайте внести их в список миссий ( DEFINE MISSIONS ).
В следующем уроке мы рассмотрим возможность выбора миссий, то есть будет несколько маркеров и в зависимости от того, куда станет игрок запустится та или иная миссия.|853|1|0||rabota_so_starterami_main_scm_chast_1|1499618018
Last updated
Was this helpful?