00065. Работа со стартерами ( Cleo - Часть 2 )

Работа со стартерами ( Cleo - Часть 2 )|Очередная статья о том, как делать стартеры для Cleo-миссий. В ней мы научимся делать несколько стартеров, что бы в игрока был выбор миссий. Отличий от предыдущего урока немного, но всё же рассмотрим подробнее.|wmysterio|wmysterio||||Чтобы создать другой стартер, нам понадобится ini-файл из предыдущего урока. Допустим мы хотим добавить миссии OG-лока, которые можно выполнять параллельно с миссиями CJ. Открываем наш файл "MISSION.ini" и делаем новые сведения ( стартовые данные ):

ini
[MISSION_CJ]
markerID = 15
MARKER_X_CJ = 2498.2966
MARKER_Y_CJ = -1684.5094
MARKER_Z_CJ = 12.41
MISSION_CJ_TOTAL = 0

; Новые данные
[MISSION_OG]
markerID = 28
MARKER_X_OG = 2486.7156
MARKER_Y_OG = -1651.3683
MARKER_Z_OG = 12.4841
MISSION_OG_TOTAL = 0

Дальше мы должны написать сами миссии. Как и в предыдущем уроке мы, рассмотрим код миссии:

{$CLEO .CM}
//------------- mission ---------------
:mission
thread 'mission'
gosub @mission_29_57
if
wasted_or_busted
jf @mission_29_46
gosub @mission_29_144

:mission_29_46
$ONMISSION = 0
mission_cleanup
end_thread

:mission_29_57
increment_mission_attempts
$ONMISSION = 1
fade 1 1000
wait 1000
gosub @mission_END
00BA: show_text_styled GXT 'M_PASS' time 5000 style 1 // MISSION PASSED
0318: set_latest_mission_passed 'MISS_00' // GXT MISSION name

0AF0: 0@ = get_int_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MISSION_OG_TOTAL" //
0@ += 1 //
0AF1: write_int 0@ to_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MISSION_OG_TOTAL" //

return

:mission_29_144
wait 0
gosub @mission_END
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // MISSION FAILED
return

:mission_END
wait 0
return

Пустыми комментариями выделено прибавление единицы к общему количеству пройденных миссий. Думаю вы заметили отличия: в место слова "CJ" написано "OG". Значит запись будет происходить в блок с информацией о "OG" в ini-файле. По-аналогии:

//Изменить положение маркера для миссий OG:
0AF3: write_float -1446.6484 to_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MARKER_X_OG"
0AF3: write_float 1502.4534 to_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MARKER_Y_OG"
0AF3: write_float 1.7366 to_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MARKER_Z_OG"
//Изменить номер маркера:
0AF1: write_int 37 to_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "markerID"

Как видите, команды точно те же, что и для миссий CJ. И для этого стоило только поменять две буквы. Со стартерами точно также! Нам осталось поменять названия миссий:

{$CLEO}
0000:

:NAME_OG
thread 'NAME_OG'
wait 0
if
0AAB: file_exists "CLEO\MISSION.ini"
jf @NAME_OG_END
if
$ONMISSION == 0
jf @NAME_OG
if
075C: marker 0@ enabled
then
marker.Disable(0@)
end
0AF0: 5@ = get_int_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MISSION_OG_TOTAL"
if
5@ > 4
then
jump @NAME_OG_END
end

:NAME_OG_1
wait 0
0AF0: 1@ = get_int_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "markerID"
0AF2: 2@ = get_float_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MARKER_X_OG"
0AF2: 3@ = get_float_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MARKER_Y_OG"
0AF2: 4@ = get_float_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MARKER_Z_OG"
0@ = marker.CreateIconAndSphere(1@, 2@, 3@, 4@)

:NAME_OG_2
wait 0
0AF0: 5@ = get_int_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MISSION_OG_TOTAL"
if AND
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
8A0C: not player $PLAYER_CHAR on_jetpack
8741: not actor $PLAYER_ACTOR busted
then
 if AND
 $ONMISSION == 0
 0102: actor $PLAYER_ACTOR in_sphere 2@ 3@ 4@ radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 00BE: text_clear_all
 03E6: remove_text_box
 fade 0 1000
 if
 5@ == 0
 then
 00BA: show_text_styled GXT 'MISS_06' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_006"
 jump @NAME_OG
 end
 if
 5@ == 1
 then
 00BA: show_text_styled GXT 'MISS_07' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_007"
 jump @NAME_OG
 end 
 if
 5@ == 2
 then
 00BA: show_text_styled GXT 'MISS_08' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_008"
 jump @NAME_OG
 end
 if
 5@ == 3
 then
 00BA: show_text_styled GXT 'MISS_09' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_009"
 jump @NAME_OG
 end
 if
 5@ == 4
 then
 00BA: show_text_styled GXT 'MISS_10' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_010"
 jump @NAME_OG
 end
 end 
end
jump @NAME_OG_2

:NAME_OG_END
wait 0
0A93: end_custom_thread

Естественно стартер рассчитан на 5 миссий ( "MIS_006", "MIS_007", "MIS_008", "MIS_009" и "MIS_010" ). Компилируем код под названием, например, "ST_OG.CS". Скрипт со стартером для СЖ пусть будет "ST_CJ.CS". Что бы появились оба маркера, нужно что бы эти скрипты были в папке "CLEO" вместе. Если всё правильно сделано, то старетры готовы. Можно выбирать миссию! :)

Но что, если нужно сделать так, что бы при прохождении 2-х миссий СЖ открывались миссии ОГ-лока?. Ответ очень просто. Нам нужно в стартере ОГ считать количество пройденных миссий СЖ и проверить больше ли это количество за нужное. Давайте сделаем написанное:

//...
:NAME_OG
thread 'NAME_OG'
wait 0
if
0AAB: file_exists "CLEO\MISSION.ini"
jf @NAME_OG_END
if
$ONMISSION == 0
jf @NAME_OG
if
075C: marker 0@ enabled
then
marker.Disable(0@)
end

0AF0: 6@ = get_int_from_ini_file "CLEO\MISSION.ini" section "MISSION_CJ" key "MISSION_CJ_TOTAL"
if
6@ > 2 // проверяем "количество пройденных миссий CJ больше чем две?". Если нет, то прыгаем на начало потока
jf @NAME_OG

0AF0: 5@ = get_int_from_ini_file "CLEO\MISSION.ini" section "MISSION_OG" key "MISSION_OG_TOTAL"
if
5@ > 4
then
jump @NAME_OG_END
end
//...

Готово! Теперь пока не будут пройдены две миссии СЖ, маркер OG не будет появляться. Если пройденны, то мы свободно можем проходить миссии Джефри. Вот такой не хитроумный способ. :) Как добавить в стартер новые миссии читайте в предыдущем уроке. Я напишу ещё один урок по стартерам, он будет не очень большой, но думаю будет полезен каждому новичку.|976|1|0||rabota_so_starterami_cleo_chast_2|1499621277

Last updated