> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00100/00200/00066.-rabota-so-starterami-dopolnitelnye-usloviya.md).

# 00066. Работа со стартерами ( Дополнительные условия )

Работа со стартерами ( Дополнительные условия )|Как вы уже догадались, речь пойдет опять о стартерах. Но на этот раз мы рассмотрим некоторые проверки, что бы разнообразить игру.|wmysterio|wmysterio||||Например проверки, связанные со временем или когда СЖ стоит на маркере, то ему пишет "Приходи с 17:00 до 20:00". Сделать эту проверку не очень сложно, но для начала нам необходимо создать GXT-запись с нужным текстом. Вот я например создал такую:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/44808415.png)

Обратите внимание на код "~~1~~". Такая запись значит, что в тексте будет число, которые указывается в опкоде. Как видите таких кодов у нас два, то есть из опкодов будет взято два числа и выведено их на экран. Числа естественно будут наши :)

Сохраняем нашу GXT-запись и начинаем писать стартер. Я возьму самый простой, на одну миссию, но можете использовать пример в своих "больших стартерах":

```
{$CLEO}
0000:

:NAME_OG
thread 'NAME_OG'
wait 0
if
$ONMISSION == 0
jf @NAME_OG
0@ = marker.CreateIconAndSphere(15, 2486.9573, -1656.5065, 13.3479)

:NAME_OG_2
wait 0
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 2486.9573 -1656.5065 13.3479 radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes
 if AND
 $TIME_HOURS > 16
 21 > $TIME_HOURS
 then 
 00BE: text_clear_all
 03E6: remove_text_box
 fade 0 1000
 00BA: show_text_styled GXT 'MISS_01' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_001"
 jump @NAME_OG
 else
 02FD: show_text_2numbers_lowpriority GXT 'GAM_TIM' numbers 17 20 time 1 flag 1 // Приходи с ~1~:00 по ~1~:00
 end
 end 
end
jump @NAME_OG_2
```

Вот, что в нас вышло:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/88216873.png)

Рассмотрим опкод:

```
00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes
```

Он запиcывает в переменную "$TIME\_HOURS" текущий час а в "$TIME\_MINS" - текущую минуту. Так, как нужен только час, проверяем его: если час больше за 16 и если он меньше за 21, то мы получим диапазон допустимого времени: с 17 до 20. Если условия срабатывают, то запускаем миссию. Иначе пишем, что что нужно придти в нужное время опкодом:

```
02FD: show_text_2numbers_lowpriority GXT 'GAM_TIM' numbers 17 20 time 1 flag 1 // Приходи с ~1~:00 по ~1~:00
```

Здесь:\
GAM\_TIM' - указываем GXT-запись с текстом\
17 20 - указываем номера для кода теста с \~1\~ \~1\~. Как видите опкод выводит на экран 2 числа - те, что мы указали в поле "numbers"\
1 - указываем время. Если мы укажем больше, то когда СЖ выйдет за пределы маркера, текст всё равно будет указывать на нужное время, а это естественно будет раздражать\
1 - флаг так и оставляйте. Я точно не знаю за что он отвечает

Как видите мы можем использовать здесь 2 числа ( **2numbers** ). Максимальное количество выводимых чисел в опкодах я видел **6**:

```
0308: show_text_6numbers GXT 'HJSTAT' numbers 1 2 3 4 5 6 time 5000 flag 5 // Distance: ~1~.~1~m Height: ~1~.~1~m Flips: ~1~ Rotation: ~1~
```

Важно запомнить, что числа мы пишем в опкоде, а GXT-записи указываем код ~~**1**~~. Со временем, думаю, разберётесь. Давайте ещё напишем условие, что бы миссия запускалась в определённый день! Начнем с создании GXT-записи:

![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/0/33970220.png)

То есть, миссия будет запускаться только в воскресенье. Считаем текущий день недели, и пишем условие:

```
{$CLEO}
0000:

:NAME_OG
thread 'NAME_OG'
wait 0
if
$ONMISSION == 0
jf @NAME_OG
0@ = marker.CreateIconAndSphere(15, 2486.9573, -1656.5065, 13.3479)

:NAME_OG_2
wait 0
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 2486.9573 -1656.5065 13.3479 radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 07D0: $WEEKDAY = weekday
 if
 $WEEKDAY == 1
 then 
 00BE: text_clear_all
 03E6: remove_text_box
 fade 0 1000
 00BA: show_text_styled GXT 'MISS_01' time 1000 style 2
 wait 1000
 0A94: start_custom_mission "MIS_001"
 jump @NAME_OG
 else
 00BB: show_text_lowpriority GXT 'GAM_WEE' time 3000 flag 1 // Приходи в воскресенье!
 end
 end 
end
jump @NAME_OG_2
```

Как вы уже догадались, опкод "07D0" заносит переменную текущий день недели. Дальше мы проверяем "День недели == воскресенье?" Если да, то начинаем миссию, иначе пишем, что нужно придти в нужный день. Как видите, номера дней обозначаются номерами. Вот список всех номеров дней:

| ID | День        |
| -- | ----------- |
| 1  | воскресенье |
| 2  | понедельник |
| 3  | вторник     |
| 4  | среда       |
| 5  | четверг     |
| 6  | пятница     |
| 7  | суббота     |

Результат:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/79261097.png)

Эти условие будут действовать как main.scm, так и Cleo. Мы рассмотрели только некоторые условия, но вы можете добавить свои. Я, например, в одном скрипте видел условие: "Если СЖ в танке и находится на высоте больше 300.0 то запустить миссию". Даже такие бывают )))

Думаю цикл по стартерам можно завершать. Я вам дал необходимую информацию по запуску. Возможно я ещё вернусь к стартерам в ближайшем будущем.|944|1|0|88216873`png`600`360`400`240``\|33970220`png`343`192

```
`\|79261097`png`600`375`400`250``\|44808415`png`441`348`400`315``\||rabota_so_starterami_dopolnitelnye_uslovija|1499622692
```
