Перейти к содержанию

Как создать задержку при выполнении команд в функции?


Кио

Рекомендуемые сообщения

В теме 10 сообщений

При строительстве карты возникла необходимость постепенного выполнения функции в 1.13-1.15. Если, например, создать функцию

setblock 0 0 0 stone

setblock 0 1 0 stone

setblock 0 2 0 stone

все блоки поставятся одновременно. А необходимо сперва поставить первый, спустя несколько тиков второй, затем третий. Нужен аналог функции delay или sleep в ЯП. Это можно реализовать на КБ повторителями, либо на скорбордах, проверяя при установке каждого блока строгое равенство переменной таймера, однако во втором случае игра подвисает из-за проверки всех блоков каждый тик. Так же это можно реализовать отдельной функцией для каждого блока, которые будут вызывать друг друга посредством КБ, но это натуральный костыль. Блоков будет ставиться таким образом очень много, КБ+повторители не вариант. Какие можете предложить способы реализации?

На данный момент есть вот такая реализация через датапак, команда /function test2:1 запускает постройку. Как создать такой же эффект с меньшим числом функций?

https://yadi.sk/d/Ezty3Taqdns0Pg

В сети из материала нашёл только решения, предлагающие использовать проверку какого-либо игрового таймера, но это повышает вычислительную сложность с линейной до квадратичной, лаги при большом количестве блоков неминуемы.

https://www.minecraftforum.net/forums/minecraft-java-edition/redstone-discussion-and/commands-command-blocks-and/2826143-how-to-do-delay-inside-functions

Ссылка на комментарий
Поделиться на другие сайты

Всё очень просто, для этого случая есть команда - /schedule. /schedule function - с помощью ней ты сможешь запустить функцию через 5 тиков, 10 секунд, 27 игровых дней, число можно подставить любые. /schedule clear - убрать запланированную функцию.

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, Bigdan сказал:

Всё очень просто, для этого случая есть команда - /schedule. /schedule function - с помощью ней ты сможешь запустить функцию через 5 тиков, 10 секунд, 27 игровых дней, число можно подставить любые. /schedule clear - убрать запланированную функцию.

Да, полезная команда, которая избавит от костылей в виде командных блоков в мире, однако для того, что бы с её помощью создать вышеописанный эффект, всё равно понадобится отдельная функция для установки каждого блока, то есть тысячи файлов. Есть идеи, как сократить количество функций?

Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

Я немного доработал программу которую ты написал, и добавил туда немного интерфейса.

https://drive.google.com/file/d/1M_Jy2XjvYLkKBvZVzoOzuWntQdmXflbb/view?usp=sharing

Правда при создании больших объёмов файлов, выделяется не стандартные объёмы памяти для простых текстовых файлов.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

 

10.01.2020 в 22:36, Кио сказал:

Да, полезная команда, которая избавит от костылей в виде командных блоков в мире, однако для того, что бы с её помощью создать вышеописанный эффект, всё равно понадобится отдельная функция для установки каждого блока, то есть тысячи файлов. Есть идеи, как сократить количество функций?

Сделал прогу которая включает поддержку использовать в датапаках задержку между командами, сама программа и пример использования ниже:

1. Установите python 3.6 (Нужен для работы прогаммы)

2. Перейдите  в папку с функцией, в которой вы хотите включить поддержку задержек.

45645345.png.e52e041b53d9462e2b585454db1d22f8.png

3. Вынесите эту функцию на папку выше и туда же положите программу

6588686876.png.1c87cb15df8ed938d42da0ab3ee8124a.png

4. Откройте файл функции и внесите туда задержки, обратите внимание на то, что вы можете сразу создавать функцию с задержками рядом с папкой функций

Вот пример задержек в функции:

my_func.mcfunction

79676529569.png.4fb214c6b55a0f6df935a88e0fdf05c9.png

5s - 5 секунд (s - секунды)

Вы также можете использовать t (ticks - тики):

1t - 1тик (1 тик = 0.05 секунд  |  1 секунда = 20 тиков)

5. Запустите программу, через командную строку, указав файл функции с задержками

8452375964392.png.54befda6b1575167f968f88608c38907.png

Нажмите ENTER и перейдите в папку functions

Вы увидите там примерно такое:

3895639752.png.9ccc801f8da3cf32775b1d298a43e1c3.png

Файлы с окончанием split запускать не надо, после загрузке датапака, запускайте так:

/function my_datapack:my_func

или

/function my_func

Если захотите добавить ещё команд в функцию, то просто удалите фсе файлы начинающиеся на название функции, которую потребовалось изменить в папке functions, и запустите программу снова, уже с новым файлом.

Ссылка на программу: https://mega.nz/file/66QEiZRT#NJ6oZU5fnzamE8YGD7nBd6HJ-k1vPAPTaX-Uyjhu2oY

Программа только на версии Маинкрафт 1.14+

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...
10.01.2020 в 11:31, GhostoFBU сказал:

Всё очень просто, для этого случая есть команда - /schedule. /schedule function - с помощью ней ты сможешь запустить функцию через 5 тиков, 10 секунд, 27 игровых дней, число можно подставить любые. /schedule clear - убрать запланированную функцию.

Я вот щас делаю карту  бед варс чтоб поиграть с другом и как минимум там должно быть 8 командных блоков что будут давать ресурсы так как зделать для них разное количество тиков

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Сделал как ты все написал все работает но команда schedule почему то не выполняет свою задачу и вторая функция не выполняется версия java 1.17.1

А нет поправочка все получилось спасибо большое!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Traceback (most recent call last):
  File "C:\Users\user\AppData\Roaming\.minecraft\versions\The Created\saves\Новый мир (1)\datapacks\Story\data\fstory\mcfunction_delay_support.py", line 15, in <module>
    sui = commands[x].split(' ')[1]
 ~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
В 05.12.2020 в 13:49, LIMPIX31 сказал:

 

Сделал прогу которая включает поддержку использовать в датапаках задержку между командами, сама программа и пример использования ниже:

1. Установите python 3.6 (Нужен для работы прогаммы)

2. Перейдите  в папку с функцией, в которой вы хотите включить поддержку задержек.

45645345.png.e52e041b53d9462e2b585454db1d22f8.png

3. Вынесите эту функцию на папку выше и туда же положите программу

6588686876.png.1c87cb15df8ed938d42da0ab3ee8124a.png

4. Откройте файл функции и внесите туда задержки, обратите внимание на то, что вы можете сразу создавать функцию с задержками рядом с папкой функций

Вот пример задержек в функции:

my_func.mcfunction

79676529569.png.4fb214c6b55a0f6df935a88e0fdf05c9.png

5s - 5 секунд (s - секунды)

Вы также можете использовать t (ticks - тики):

1t - 1тик (1 тик = 0.05 секунд  |  1 секунда = 20 тиков)

5. Запустите программу, через командную строку, указав файл функции с задержками

8452375964392.png.54befda6b1575167f968f88608c38907.png

Нажмите ENTER и перейдите в папку functions

Вы увидите там примерно такое:

3895639752.png.9ccc801f8da3cf32775b1d298a43e1c3.png

Файлы с окончанием split запускать не надо, после загрузке датапака, запускайте так:

/function my_datapack:my_func

или

/function my_func

Если захотите добавить ещё команд в функцию, то просто удалите фсе файлы начинающиеся на название функции, которую потребовалось изменить в папке functions, и запустите программу снова, уже с новым файлом.

Ссылка на программу: https://mega.nz/file/66QEiZRT#NJ6oZU5fnzamE8YGD7nBd6HJ-k1vPAPTaX-Uyjhu2oY

Программа только на версии Маинкрафт 1.14+

Хочу спросить.. а где находятся папки с функциями? И куда их пихать. И чтоб активировать их в игре, нужно вписывать /function jopa123 ?

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...