Уроки моддинга
Основной раздел
Search
K
Links

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