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

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

Обратите внимание на код "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

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

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

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-записи:

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

{$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

суббота

Результат:

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

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

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

Last updated