[Гайд] Ограничение времени на прохождение уровня. Часть 2
Всем привет! Сегодня я хочу представить вам продолжение гайда по созданию механизма для ограничения времени на прохождения. Если вы еще не видели первую часть гайда, то настоятельно рекомендую прочитать (Часть 1), потому что без ознакомления с первой частью читать вторую будет практически бессмысленно. Материала слишком много, поэтому объединять все в одну статью было бы не самой лучшей идеей. Ну чтож, поехали!
Прерывание по нажатию кнопки
Как было сказано в краткой, прерывание механизма требуется для того, чтобы можно было остановить прохождение по желанию, либо когда дальнейшее прохождение заведомо безуспешно (например, если вы провалились в яму). Так можно без всяких промедлений начать прохождение заново.
Для начала создадим scoreboard под названием “break”, с помощью которого мы будем обнаруживать нажатие кнопки. Для этого в том месте, где происходит инициализация механизма, ставим командный блок с командой: “ /scoreboard objectives add break dummy”. К таймеру подключаем командный блок и генератор коротких импульсов к нему для проверки на активацию прерывания (команда “testfor @p[score_break_min=1]”).
Теперь осталось установить кнопку, на которую и будет нажимать игрок. У меня на треке, например, есть провал, из которого не выбраться (если вы не в креативе конечно). Поставим кнопку там! Воспользуемся нажимной плитой, а под нее установим командный блок с командой: “ /scoreboard players set @a break 1”.
Теперь вам не придется сидеть в этой яме и дожидаться, пока закончится время. Удобно, не правда ли! И такие кнопки можно ставить где угодно и сколько угодно!
Прерывание по вхождению в зону
Хоть кнопками и можно обойтись, есть еще один замечательный способ прервать прохождение. Все, что потребуется, это координаты и радиус целевой зоны. Эти зоны, как вы понимаете, будут иметь форму шара. На скриншоте ниже я с помощью железных блоков наглядно показал выбранную место, где мы будем создавать зону прерывания.
Не обращайте внимания на то, что верхняя точка зоны будет чуть выше трека. Просто я хотел сделать как можно больший радиус (в данном случае это 2). При успешном прыжке игрока не заденет, так как если он и попадет в зону, то только краешком и на слишком короткий промежуток времени, чтобы testfor его засек. На такие мелочи я рекомендую обращать внимание.
Теперь запишем координаты центра зоны.
Координаты есть, осталось добавить их в командный блок, к которому мы в свою очередь подключаем к генератору коротких импульсов (testfor @p[-210,9,-1692,2]).
Готово! Если с этим прыжком мы не справимся, механизм прервется автоматически, и нас телепортирует на старт. Таким образом можно создавать столько зон, сколько вам понадобиться. Получается что-то типа полки для книг, на которую мы можем класть новые книги и создавать свои библиотеки!
Частный случай зон прерывания
Теперь пройдемся по частному случаю, например, когда мы имеем дело с пустотой. Конечно, мы можем оставить все, как есть: игрок будет падать в пропасть, а потом возрождаться и снова проходить. Но это так нудно! В этом случае мы можем создать одну огромную зону. Ознакомимся с примером.
Движок уровня абсолютно ничем не отличается, просто по-другому расположены элементы. Все, что осталось сделать, это просто снять координаты примерно центра трассы и вбить в командный блок.
Возьмем какой-нибудь большой радиус, с помощью которого можно обхватить площадь всей трассы. 500, я думаю, сойдет. Теперь получим координату y. Для этого из текущей координаты (62) вычтем радиус зоны (500) и еще парочку блоков для перестраховки. Для моего примера получилось -440. Это все.
Эффект неуязвимости длиной в одну секунду (/effect @a 11 1 5) нужен для того, чтобы нас не размазало в лепешку о старт, когда нас туда телепортирует.
Пример
Ну а теперь самое интересное, разберем один интересный пример. Наверняка многие знают замечательный режим на серверах под названием tnt-run. Кто не знает, сейчас все поймете.
Предположим, мы хотим сделать задание: продержаться 60 секунд на этом поле. Если мы упадем вниз, то проиграем, и мы заспавнимся на старте, а если выиграем – тоже телепортирует на старт, но с поздравительной надписью. Механизм от предыдущих почти ничем не отличается, поэтому я просто приведу список параметров для 3-х этапов работы по отдельности.
1. Инициализация
/spawnpoint @a 493 4 -251
/scoreboard objectives add death deathCount
/scoreboard objectives add time dummy Time
/effect @a 1 1000 2
2. Работа
/scoreboard players remove @a time 1
testfor @p[score_death_min=1]
testfor @p[score_time=0]
3. Завершение
/clone 457 4 -306 488 6 -274 456 2 -268 masked (восстанавливаем игровое поле)
/scoreboard objectives remove time
/effect @a 1 0
/scoreboard objectives remove death
Также выкладываю архив со всеми мирами из гайда, чтобы вы по желанию смогли скачать и изучить механизм еще лучше.
Скачать: Внимание! Гости не имеют прав для просмотра скрытого текста, зарегистрируйтесь.
На этом все! Если у вас есть вопросы по гайду, то добро пожаловать в комментарии! Всем удачи!