[Гайд][1.5+] Ограничение времени на прохождение уровня
- Автор: TDEDETD
- Дата: 14-04-2015, 11:38
- Категория: Инструкции, гайды Minecraft
Всем привет! Сегодня я хочу показать вам механизм, предназначенный для испытаний, связанных с ограничением времени на прохождение каких-либо отрезков карты. Суть его заключается в том, что он отсчитывает время в обратную сторону, а по достижении нуля перемещает вас обратно, если вы не успеете добраться до финиша. Я являюсь создателем двух карт под названием Speed, и там как раз возникла необходимость в данном механизме. Итак, я предлагаю вам гайд по созданию механизма, ограничивающего время перемещения из точки A в точку B.
Вы можете посмотреть действие этого механизма.
Создание механизма требует некоторый опыт работы с редстоуном и системой счета игровых событий (scoreboard), хотя я попытался как можно более подробно и понятно описать весь цикл разработки.
Давайте разберем его создание на самом простом примере. Предположим, у нас есть полоса препятствий, и мы хотим сделать из нее полосу препятствий на время. Давайте полюбуемся на созданную мной на скорую руку трассу (скриншот ниже). Регистрировать старт и финиширование уровня мы будем с помощью натяжного датчика.
Ну а теперь, непосредственно, сам механизм. Чтобы было проще разобраться, я его условно поделил на три части: инициализация, работа и завершение.
Этап 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. Количество секунд подбирается и подгоняется экспериментальным путем.
По желанию можно вставить абсолютно любые дополнительные команды (время суток, эффекты зелий, точку спавна и т.д.).
Сразу же подключим наш механизм. Результаты на скриншоте ниже.
Обратите внимание: командные блоки с выводом и установкой времени отделены повторителем, чтобы избежать конфликтов. В ином случае команды с выводом времени или присваиванием значения могут не сработать.
Далее подключим простейший из триггеров (RS NOR) так, как показано на скриншоте. Именно он будет хранить состояние механизма (вкл/выкл).
Этап 2. Работа
На этом этапе будет происходить непосредственно работа механизма: вычитывание времени, проверка на достижение нуля, а также проверка на завершение уровня.
Создадим таймер. Введем в командный блок команду: /scoreboard players remove @a time 1. Эта команда будет убавлять по одной секунде за такт.
Как видите, таймер должен быть деактивирован по умолчанию.
Теперь создадим условие завершения работы механизма: достижение нуля. Вводим команду в командный блок: testfor @p[score_time=0]. Также добавим командный блок с командой: testfor @p[score_finished_min=1], которая будет проверять возникновение события успешного финиширования. Scoreboard “finished” здесь играет роль логической (булевой) переменной. 0 – если финиширования не было и 1 – если финиширование произошло.
Обратите внимание на наличие генераторов коротких импульсов. Они нужны обязательно! К ним мы вернемся чуть позже.
Этап 3. Завершение
И, наконец, последний этап, в котором мы производим отключение механизма с предварительным удалением scoreboard’ов и очищением эффектов.
Итак, поставим три командных блока и введем в них команды:
- /scoreboard objectives remove time (удаление scoreboard’а “time”);
- /scoreboard objectives remove finished (удаление scoreboard’а “finished”);
- /effect @a 1 0 (отключение эффекта скорости).
От генератора коротких импульсов, идущего от проверки на финиширование, ведем редстоун к этим блокам, а от них к триггеру. Этот сигнал и будет отключать механизм.
В принципе, механизм уже работает, однако нужно сделать так, чтобы игрока телепортировало на старт в случае, если он не успеет.
Для этого запомним координаты старта (см. на скриншоте) и вставим их в командный блок. В моем случае это команда “/tp @a -224 9 -1702”. Далее проведем сигнал от второго генератора коротких импульсов к предыдущему сигналу, как показано на одном из скриншотов ниже.
Теперь поясню, зачем нужны генераторы коротких импульсов. Дело в том, что от командных блоков исходит постоянный сигнал. При активированном командном блоке сигнал будет блокировать триггер, и вы не сможете начать уровень.
Осталось совсем немного! К финишному натяжному механизму подключим два командных блока с командами:
- /scoreboard players set @a finished 1. Эта команда и является генератором события успешного завершения уровня. После ее выполнения механизм завершит свою работу.
- /scoreboard objectives remove time. Удаление scoreboard’а “time”. Это нужно для того, чтобы не было задержки между пересечением финишной черты и завершением работы, так как для его выполнения потребуется время длиной в целый такт.
Механизм готов! Наверное, вам может это показаться очень сложным, но его достаточно построить всего один раз, а дальше можно просто копировать с помощью mcedit или прочих редакторов и менять необходимые параметры. Однако для его использования нужно понимать его устройство, для этого я и написал эту статью. Как вы понимаете, использовать лимитирование времени можно в каких угодно обстоятельствах. Например, тот же самый скоростной бег:
Speed
Speed: Heart of Desert
Благодарю вас за внимание! Если у вас есть вопросы, то задавайте, и я обязательно постараюсь на них ответить. Если гайд вам понравился, опять же, дайте знать, и я выпущу вторую часть про способы прерывания работы механизма. Удачи!
Вы можете посмотреть действие этого механизма.
Создание механизма требует некоторый опыт работы с редстоуном и системой счета игровых событий (scoreboard), хотя я попытался как можно более подробно и понятно описать весь цикл разработки.
Давайте разберем его создание на самом простом примере. Предположим, у нас есть полоса препятствий, и мы хотим сделать из нее полосу препятствий на время. Давайте полюбуемся на созданную мной на скорую руку трассу (скриншот ниже). Регистрировать старт и финиширование уровня мы будем с помощью натяжного датчика.
Ну а теперь, непосредственно, сам механизм. Чтобы было проще разобраться, я его условно поделил на три части: инициализация, работа и завершение.
Этап 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. Количество секунд подбирается и подгоняется экспериментальным путем.
По желанию можно вставить абсолютно любые дополнительные команды (время суток, эффекты зелий, точку спавна и т.д.).
Сразу же подключим наш механизм. Результаты на скриншоте ниже.
Обратите внимание: командные блоки с выводом и установкой времени отделены повторителем, чтобы избежать конфликтов. В ином случае команды с выводом времени или присваиванием значения могут не сработать.
Далее подключим простейший из триггеров (RS NOR) так, как показано на скриншоте. Именно он будет хранить состояние механизма (вкл/выкл).
Этап 2. Работа
На этом этапе будет происходить непосредственно работа механизма: вычитывание времени, проверка на достижение нуля, а также проверка на завершение уровня.
Создадим таймер. Введем в командный блок команду: /scoreboard players remove @a time 1. Эта команда будет убавлять по одной секунде за такт.
Как видите, таймер должен быть деактивирован по умолчанию.
Теперь создадим условие завершения работы механизма: достижение нуля. Вводим команду в командный блок: testfor @p[score_time=0]. Также добавим командный блок с командой: testfor @p[score_finished_min=1], которая будет проверять возникновение события успешного финиширования. Scoreboard “finished” здесь играет роль логической (булевой) переменной. 0 – если финиширования не было и 1 – если финиширование произошло.
Обратите внимание на наличие генераторов коротких импульсов. Они нужны обязательно! К ним мы вернемся чуть позже.
Этап 3. Завершение
И, наконец, последний этап, в котором мы производим отключение механизма с предварительным удалением scoreboard’ов и очищением эффектов.
Итак, поставим три командных блока и введем в них команды:
- /scoreboard objectives remove time (удаление scoreboard’а “time”);
- /scoreboard objectives remove finished (удаление scoreboard’а “finished”);
- /effect @a 1 0 (отключение эффекта скорости).
От генератора коротких импульсов, идущего от проверки на финиширование, ведем редстоун к этим блокам, а от них к триггеру. Этот сигнал и будет отключать механизм.
В принципе, механизм уже работает, однако нужно сделать так, чтобы игрока телепортировало на старт в случае, если он не успеет.
Для этого запомним координаты старта (см. на скриншоте) и вставим их в командный блок. В моем случае это команда “/tp @a -224 9 -1702”. Далее проведем сигнал от второго генератора коротких импульсов к предыдущему сигналу, как показано на одном из скриншотов ниже.
Теперь поясню, зачем нужны генераторы коротких импульсов. Дело в том, что от командных блоков исходит постоянный сигнал. При активированном командном блоке сигнал будет блокировать триггер, и вы не сможете начать уровень.
Осталось совсем немного! К финишному натяжному механизму подключим два командных блока с командами:
- /scoreboard players set @a finished 1. Эта команда и является генератором события успешного завершения уровня. После ее выполнения механизм завершит свою работу.
- /scoreboard objectives remove time. Удаление scoreboard’а “time”. Это нужно для того, чтобы не было задержки между пересечением финишной черты и завершением работы, так как для его выполнения потребуется время длиной в целый такт.
Механизм готов! Наверное, вам может это показаться очень сложным, но его достаточно построить всего один раз, а дальше можно просто копировать с помощью mcedit или прочих редакторов и менять необходимые параметры. Однако для его использования нужно понимать его устройство, для этого я и написал эту статью. Как вы понимаете, использовать лимитирование времени можно в каких угодно обстоятельствах. Например, тот же самый скоростной бег:
Speed
Speed: Heart of Desert
Благодарю вас за внимание! Если у вас есть вопросы, то задавайте, и я обязательно постараюсь на них ответить. Если гайд вам понравился, опять же, дайте знать, и я выпущу вторую часть про способы прерывания работы механизма. Удачи!
Информация | |
Для написания комментария зарегистрируйся на сайте, это займет всего пару минут, голосуй за новости, зарабатывай репутацию. |
Последние сообщения с форума
Название темы | Автор | Статистика | Последнее сообщение |
---|---|---|---|
Ищу АКТЕРА для съмок ВИДЕО по майнкрафту. Тема в разделе: Новости |
Junkie16 | Просмотров: 51 Ответов: 0 |
Автор: Junkie16 |
Видео/Стримы канал Ritterydam Тема в разделе: Флудильня |
ritterydam | Просмотров: 110881 Ответов: 531 |
Автор: ritterydam |
Загружается мир до 100% и все 1.16.5 Тема в разделе: Техническая поддержка сайта |
Romanov_2 | Просмотров: 62 Ответов: 0 |
Автор: Romanov_2 |
Помогите со сборкой на версии 1.7.10 Тема в разделе: Ваши вопросы по Minecraft |
Zelsovich8321 | Просмотров: 227 Ответов: 5 |
Автор: egg2003 |
Крутой сервер 1.20.4 Тема в разделе: Игры |
Ytenok | Просмотров: 105 Ответов: 0 |
Автор: Ytenok |