# 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
```


---

# 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/00066.-rabota-so-starterami-dopolnitelnye-usloviya.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.
