# 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&#92;MISSION.ini" section "MISSION_OG" key "MISSION_OG_TOTAL" //
0@ += 1 //
0AF1: write_int 0@ to_ini_file "CLEO&#92;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&#92;MISSION.ini" section "MISSION_OG" key "MARKER_X_OG"
0AF3: write_float 1502.4534 to_ini_file "CLEO&#92;MISSION.ini" section "MISSION_OG" key "MARKER_Y_OG"
0AF3: write_float 1.7366 to_ini_file "CLEO&#92;MISSION.ini" section "MISSION_OG" key "MARKER_Z_OG"
//Изменить номер маркера:
0AF1: write_int 37 to_ini_file "CLEO&#92;MISSION.ini" section "MISSION_OG" key "markerID"
```

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

```
{$CLEO}
0000:

:NAME_OG
thread 'NAME_OG'
wait 0
if
0AAB: file_exists "CLEO&#92;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&#92;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&#92;MISSION.ini" section "MISSION_OG" key "markerID"
0AF2: 2@ = get_float_from_ini_file "CLEO&#92;MISSION.ini" section "MISSION_OG" key "MARKER_X_OG"
0AF2: 3@ = get_float_from_ini_file "CLEO&#92;MISSION.ini" section "MISSION_OG" key "MARKER_Y_OG"
0AF2: 4@ = get_float_from_ini_file "CLEO&#92;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&#92;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&#92;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&#92;MISSION.ini" section "MISSION_CJ" key "MISSION_CJ_TOTAL"
if
6@ > 2 // проверяем "количество пройденных миссий CJ больше чем две?". Если нет, то прыгаем на начало потока
jf @NAME_OG

0AF0: 5@ = get_int_from_ini_file "CLEO&#92;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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00200/00065.-rabota-so-starterami-cleo-chast-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
