Кио Опубликовано 7 января, 2020 Поделиться Опубликовано 7 января, 2020 При строительстве карты возникла необходимость постепенного выполнения функции в 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
GhostoFBU Опубликовано 10 января, 2020 Поделиться Опубликовано 10 января, 2020 Всё очень просто, для этого случая есть команда - /schedule. /schedule function - с помощью ней ты сможешь запустить функцию через 5 тиков, 10 секунд, 27 игровых дней, число можно подставить любые. /schedule clear - убрать запланированную функцию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Кио Опубликовано 10 января, 2020 Автор Поделиться Опубликовано 10 января, 2020 10 часов назад, Bigdan сказал: Всё очень просто, для этого случая есть команда - /schedule. /schedule function - с помощью ней ты сможешь запустить функцию через 5 тиков, 10 секунд, 27 игровых дней, число можно подставить любые. /schedule clear - убрать запланированную функцию. Да, полезная команда, которая избавит от костылей в виде командных блоков в мире, однако для того, что бы с её помощью создать вышеописанный эффект, всё равно понадобится отдельная функция для установки каждого блока, то есть тысячи файлов. Есть идеи, как сократить количество функций? Ссылка на комментарий Поделиться на другие сайты Поделиться
Agenteec Опубликовано 16 сентября, 2020 Поделиться Опубликовано 16 сентября, 2020 Я немного доработал программу которую ты написал, и добавил туда немного интерфейса. https://drive.google.com/file/d/1M_Jy2XjvYLkKBvZVzoOzuWntQdmXflbb/view?usp=sharing Правда при создании больших объёмов файлов, выделяется не стандартные объёмы памяти для простых текстовых файлов. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIMPIX31 Опубликовано 5 декабря, 2020 Поделиться Опубликовано 5 декабря, 2020 10.01.2020 в 22:36, Кио сказал: Да, полезная команда, которая избавит от костылей в виде командных блоков в мире, однако для того, что бы с её помощью создать вышеописанный эффект, всё равно понадобится отдельная функция для установки каждого блока, то есть тысячи файлов. Есть идеи, как сократить количество функций? Сделал прогу которая включает поддержку использовать в датапаках задержку между командами, сама программа и пример использования ниже: 1. Установите python 3.6 (Нужен для работы прогаммы) 2. Перейдите в папку с функцией, в которой вы хотите включить поддержку задержек. 3. Вынесите эту функцию на папку выше и туда же положите программу 4. Откройте файл функции и внесите туда задержки, обратите внимание на то, что вы можете сразу создавать функцию с задержками рядом с папкой функций Вот пример задержек в функции: my_func.mcfunction 5s - 5 секунд (s - секунды) Вы также можете использовать t (ticks - тики): 1t - 1тик (1 тик = 0.05 секунд | 1 секунда = 20 тиков) 5. Запустите программу, через командную строку, указав файл функции с задержками Нажмите ENTER и перейдите в папку functions Вы увидите там примерно такое: Файлы с окончанием split запускать не надо, после загрузке датапака, запускайте так: /function my_datapack:my_func или /function my_func Если захотите добавить ещё команд в функцию, то просто удалите фсе файлы начинающиеся на название функции, которую потребовалось изменить в папке functions, и запустите программу снова, уже с новым файлом. Ссылка на программу: https://mega.nz/file/66QEiZRT#NJ6oZU5fnzamE8YGD7nBd6HJ-k1vPAPTaX-Uyjhu2oY Программа только на версии Маинкрафт 1.14+ Ссылка на комментарий Поделиться на другие сайты Поделиться
CIHIU_KOT Опубликовано 25 марта, 2021 Поделиться Опубликовано 25 марта, 2021 10.01.2020 в 11:31, GhostoFBU сказал: Всё очень просто, для этого случая есть команда - /schedule. /schedule function - с помощью ней ты сможешь запустить функцию через 5 тиков, 10 секунд, 27 игровых дней, число можно подставить любые. /schedule clear - убрать запланированную функцию. Я вот щас делаю карту бед варс чтоб поиграть с другом и как минимум там должно быть 8 командных блоков что будут давать ресурсы так как зделать для них разное количество тиков Ссылка на комментарий Поделиться на другие сайты Поделиться
rustamchik3 Опубликовано 22 июля, 2022 Поделиться Опубликовано 22 июля, 2022 Сделал как ты все написал все работает но команда schedule почему то не выполняет свою задачу и вторая функция не выполняется версия java 1.17.1 А нет поправочка все получилось спасибо большое! Ссылка на комментарий Поделиться на другие сайты Поделиться
rustamchik3 Опубликовано 22 июля, 2022 Поделиться Опубликовано 22 июля, 2022 Оказалось нужно было просто убрать ddk: в коде и все заработало (Это если что для тех у кого не получилось) Ссылка на комментарий Поделиться на другие сайты Поделиться
Raalb Опубликовано 5 октября, 2023 Поделиться Опубликовано 5 октября, 2023 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
sa1ddh Опубликовано 30 ноября, 2023 Поделиться Опубликовано 30 ноября, 2023 В 05.12.2020 в 13:49, LIMPIX31 сказал: Сделал прогу которая включает поддержку использовать в датапаках задержку между командами, сама программа и пример использования ниже: 1. Установите python 3.6 (Нужен для работы прогаммы) 2. Перейдите в папку с функцией, в которой вы хотите включить поддержку задержек. 3. Вынесите эту функцию на папку выше и туда же положите программу 4. Откройте файл функции и внесите туда задержки, обратите внимание на то, что вы можете сразу создавать функцию с задержками рядом с папкой функций Вот пример задержек в функции: my_func.mcfunction 5s - 5 секунд (s - секунды) Вы также можете использовать t (ticks - тики): 1t - 1тик (1 тик = 0.05 секунд | 1 секунда = 20 тиков) 5. Запустите программу, через командную строку, указав файл функции с задержками Нажмите ENTER и перейдите в папку functions Вы увидите там примерно такое: Файлы с окончанием split запускать не надо, после загрузке датапака, запускайте так: /function my_datapack:my_func или /function my_func Если захотите добавить ещё команд в функцию, то просто удалите фсе файлы начинающиеся на название функции, которую потребовалось изменить в папке functions, и запустите программу снова, уже с новым файлом. Ссылка на программу: https://mega.nz/file/66QEiZRT#NJ6oZU5fnzamE8YGD7nBd6HJ-k1vPAPTaX-Uyjhu2oY Программа только на версии Маинкрафт 1.14+ Хочу спросить.. а где находятся папки с функциями? И куда их пихать. И чтоб активировать их в игре, нужно вписывать /function jopa123 ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
В теме 10 сообщений
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти