( +4.51 4,51 0.00 )

[Гайд][1.5+] Ограничение времени на прохождение уровня

Автор: TDEDETD
Всем привет! Сегодня я хочу показать вам механизм, предназначенный для испытаний, связанных с ограничением времени на прохождение каких-либо отрезков карты. Суть его заключается в том, что он отсчитывает время в обратную сторону, а по достижении нуля перемещает вас обратно, если вы не успеете добраться до финиша. Я являюсь создателем двух карт под названием Speed, и там как раз возникла необходимость в данном механизме. Итак, я предлагаю вам гайд по созданию механизма, ограничивающего время перемещения из точки A в точку B.

Вы можете посмотреть действие этого механизма.


Создание механизма требует некоторый опыт работы с редстоуном и системой счета игровых событий (scoreboard), хотя я попытался как можно более подробно и понятно описать весь цикл разработки.

Давайте разберем его создание на самом простом примере. Предположим, у нас есть полоса препятствий, и мы хотим сделать из нее полосу препятствий на время. Давайте полюбуемся на созданную мной на скорую руку трассу (скриншот ниже). Регистрировать старт и финиширование уровня мы будем с помощью натяжного датчика.

[Гайд][1.5+] Ограничение времени на прохождение уровня

Ну а теперь, непосредственно, сам механизм. Чтобы было проще разобраться, я его условно поделил на три части: инициализация, работа и завершение.

Этап 1. Инициализация

Инициализация механизма сопровождается чередой событий. Для каждого поставим командный блок. То, чем будем заполнять командные блоки:
- Создадим scoreboard с названием “time”: /scoreboard objectives add time dummy Time. Он будет отвечать за оставшееся время.
- Создадим scoreboard с названием “finished”: /scoreboard objectives add finished dummy. Он будет отвечать за обработку события в случае успешного финиширования уровня.
- Дадим эффект скорости: /effect @a 1 1000 5. В своем примере я выбрал пятый уровень скорости длительностью в 1000 секунд. Продолжительность эффекта особого значения не имеет. Главное, чтобы хватило времени на прохождение отрезка карты. В принципе, использование эффекта скорости необязательно.
- Выведем scoreboard “time” на экран: /scoreboard objectives setdisplay sidebar time, чтобы мы видели время.
- Присвоим значение нашего времени: /scoreboard players set @a time 15. Количество секунд подбирается и подгоняется экспериментальным путем.
По желанию можно вставить абсолютно любые дополнительные команды (время суток, эффекты зелий, точку спавна и т.д.).
Сразу же подключим наш механизм. Результаты на скриншоте ниже.

[Гайд][1.5+] Ограничение времени на прохождение уровня
Обратите внимание: командные блоки с выводом и установкой времени отделены повторителем, чтобы избежать конфликтов. В ином случае команды с выводом времени или присваиванием значения могут не сработать.

Далее подключим простейший из триггеров (RS NOR) так, как показано на скриншоте. Именно он будет хранить состояние механизма (вкл/выкл).

[Гайд][1.5+] Ограничение времени на прохождение уровня

Этап 2. Работа

На этом этапе будет происходить непосредственно работа механизма: вычитывание времени, проверка на достижение нуля, а также проверка на завершение уровня.
Создадим таймер. Введем в командный блок команду: /scoreboard players remove @a time 1. Эта команда будет убавлять по одной секунде за такт.

[Гайд][1.5+] Ограничение времени на прохождение уровня
Как видите, таймер должен быть деактивирован по умолчанию.

Теперь создадим условие завершения работы механизма: достижение нуля. Вводим команду в командный блок: testfor @p[score_time=0]. Также добавим командный блок с командой: testfor @p[score_finished_min=1], которая будет проверять возникновение события успешного финиширования. Scoreboard “finished” здесь играет роль логической (булевой) переменной. 0 – если финиширования не было и 1 – если финиширование произошло.

[Гайд][1.5+] Ограничение времени на прохождение уровня
[Гайд][1.5+] Ограничение времени на прохождение уровня
Обратите внимание на наличие генераторов коротких импульсов. Они нужны обязательно! К ним мы вернемся чуть позже.

Этап 3. Завершение

И, наконец, последний этап, в котором мы производим отключение механизма с предварительным удалением scoreboard’ов и очищением эффектов.
Итак, поставим три командных блока и введем в них команды:
- /scoreboard objectives remove time (удаление scoreboard’а “time”);
- /scoreboard objectives remove finished (удаление scoreboard’а “finished”);
- /effect @a 1 0 (отключение эффекта скорости).
От генератора коротких импульсов, идущего от проверки на финиширование, ведем редстоун к этим блокам, а от них к триггеру. Этот сигнал и будет отключать механизм.

[Гайд][1.5+] Ограничение времени на прохождение уровня

В принципе, механизм уже работает, однако нужно сделать так, чтобы игрока телепортировало на старт в случае, если он не успеет.
Для этого запомним координаты старта (см. на скриншоте) и вставим их в командный блок. В моем случае это команда “/tp @a -224 9 -1702”. Далее проведем сигнал от второго генератора коротких импульсов к предыдущему сигналу, как показано на одном из скриншотов ниже.

[Гайд][1.5+] Ограничение времени на прохождение уровня
[Гайд][1.5+] Ограничение времени на прохождение уровня

Теперь поясню, зачем нужны генераторы коротких импульсов. Дело в том, что от командных блоков исходит постоянный сигнал. При активированном командном блоке сигнал будет блокировать триггер, и вы не сможете начать уровень.

Осталось совсем немного! К финишному натяжному механизму подключим два командных блока с командами:
- /scoreboard players set @a finished 1. Эта команда и является генератором события успешного завершения уровня. После ее выполнения механизм завершит свою работу.
- /scoreboard objectives remove time. Удаление scoreboard’а “time”. Это нужно для того, чтобы не было задержки между пересечением финишной черты и завершением работы, так как для его выполнения потребуется время длиной в целый такт.

[Гайд][1.5+] Ограничение времени на прохождение уровня

Механизм готов! Наверное, вам может это показаться очень сложным, но его достаточно построить всего один раз, а дальше можно просто копировать с помощью mcedit или прочих редакторов и менять необходимые параметры. Однако для его использования нужно понимать его устройство, для этого я и написал эту статью. Как вы понимаете, использовать лимитирование времени можно в каких угодно обстоятельствах. Например, тот же самый скоростной бег:
Speed
Speed: Heart of Desert

Благодарю вас за внимание! Если у вас есть вопросы, то задавайте, и я обязательно постараюсь на них ответить. Если гайд вам понравился, опять же, дайте знать, и я выпущу вторую часть про способы прерывания работы механизма. Удачи!
  1. Олдфаги

    14 апреля 2015 07:28

    +1

    объяснил всё подробно и доступно даже новичку.
    только вот мне кажется триггеры громоздкие получились, и в одно секунде (если брать секунды) ставить нужно 20 тактов. Хотя тут не принципиально время в секундомере.
    за труды спасибо, пятерка и плюс в репу (обожаю механизмы)
  2. Олдфаги

    14 апреля 2015 08:40

    +1

    5 и плюс в репу, всё отлично.
  3. Олдфаги

    14 апреля 2015 09:17

    0

    5 поставил, до главной недалеко
  4. Посетители

    14 апреля 2015 10:09

    0

    В краткой сократить
    В полной в споилер поместить.
  5. Просто хорошие люди

    14 апреля 2015 16:54

    0

    Команды в тексте никак не выделены. Если бы картинок не было, то читать, а уж тем более пытаться понять, что для чего предназначено было бы неудобно.
    4
  6. Посетители

    14 апреля 2015 17:09

    0

    vitalik891, ну как это не выделены, вообще-то выделены. Картинки являются неотъемлимой частью гайда. Про их отсутствие даже страшно подумать. А что еще нужно в гайде кроме обычного текста, написанному черным по белому, и сопроводительных картинок? Можешь поверить, наличие яркого оформления с разноцветными надписями еще сильней бы ухудшило понимание материала (к слову, я даже на этапы разбил). Поэтому я посчитал здесь эти прибамбасы лишним. А поймет человек или не поймет, это уже зависит от него самого.
  7. ТруЪ Олдфаги-с

    22 апреля 2015 01:54

    0

    Одним словом: гро-моз-дко
  8. Дедушки

    30 апреля 2015 09:57

    +3

    Пять.
Для написания комментария зарегистрируйся на сайте, это займет всего пару минут, голосуй за новости, зарабатывай репутацию.

Последние сообщения с форума

Название темы
Статистика
Последнее сообщение

Просмотров: 6

Ответов: 0

Просмотров: 6927

Ответов: 162

Просмотров: 145306

Ответов: 693

Просмотров: 1211

Ответов: 14