Кио
Пользователи-
Постов
86 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Тип контента
Профили
Форумы
События
Весь контент Кио
-
Обращаюсь к профи. Я ищу способ заставить моба автоматически прокладывать маршрут. Например, я призываю метку на нужных координатах и зомби туда отправляется, обходит все углы, проходит лабиринты и.т.д. Пользуясь тем ИИ, который в него уже заложен. Два способа я уже придумал, но они так себе. Первый - призвать невидимую беременую черепаху, дать ей скорость и назначить ей точкой дома нужные координаты. Она побежит туда откладывать яйца. А я буду телепортировать вслед за ней нужного моба. Но есть проблема - черепаха жирная и пролезает только в проём в 2 блока. А значит и моб, который за ней следует, будет игнорировать проходы в один блок. Мелкая черепаха не выход. Её тоже можно сделать беременой, но она от этого никуда не побежит. А ещё черепаха низкая и может заползти в проход в один блок, где следующий за ней моб благополучно удавится. Второй способ - взять условного зомби, дать ему радиус зрения в дофигалирад блоков, в целевой точке заспавнить другого моба, от его имени призвать стрелу, которая попадёт в этого зомби, спровоцировав его бежать к обидчику. А затем за этим зомби уже телепортировать целевого моба. Проблема в том, что работает это фигово. Во-первых, когда мобы отдаляются от игрока больше, чем на 50 блоков, их ИИ отключается. И при возвращении игрока они начинают тупить и забывают обидчика, нужно как-то детектировать этот затуп и опять призывать стрелу. А ещё этого моба запросто могут переагрить другие мобы, игрок или вообще случайное получение урона. Оно тоже может сбить агр. В общем так себе решение. Поэтому вопрос знатокам: как можно менее костыльно решить этот вопрос? Цель не просто заставить идти по проложенному маршруту. Цель - заставить моба самостоятельно прокладывать этот маршрут в любой обстановке.
-
Не прочитал про 1.12.2. Там у /execute не было такого функционала, а нормальны тэгов и вовсе не завезли. Команды /team тоже не было. Приходилось на игроков надевать кнопки с тэгами и так их отличать. Тебе придётся либо так, либо через команду /scoreboard что-то мутить.
-
Дам очень полезный совет на будущее. Что бы не искать нужную команду тысячу лет и точно не ошибиться, спроси у самого майнкрафта, как он записывает даннные сущностей. Команда /data get entity Тот формат, который выводится, точно будут работать при выполнении любых команд. И не ориентируйся на то, что если сам майнкрафт не ругается на тэг, то он правильный. В данные моба можно что угодно записать, и он будет эти данные хранить. Например, можно сделать так: /summon minecraft:zombie ~ ~ ~ {Tip:zombak, Owner:Kio, Harakter:Leniviy, Chena:40griven }
-
Сперва выдаёшь им тэги /tag @a[distance=..10] add R А потом проверяешь, остались ли игроки с этими тэгами. Тэги можно забирать при смерти, выходе за зону и.т.п. /execute unless entity @e[tag=R] run say @a EndGame! Green win /execute unless entity @e[tag=G] run say @a EndGame! Red win
-
Проще всего нарисовать в блокбенче и вложить в карту текстурпак с этой моделью. Но можно и без текстур, стойка для брони + кожаная броня нужного цвета + голова покрасивее + ещё пара невидимых стоек, которые держат оружие, которым этот труп убили. Топор в голове там, меч в туловище и.т.п. А если хочется сделать такой труп, что бы все ахнули, как такое возможно без текстур, то используй карты, вставленные в рамки. Во-первых, рамки можно сделать невидимыми (EntityTag:{Invisible:1b}). Во-вторых карты тоже поддерживают прозрачность. В-третьих в карты можно загрузить любое изображение, какое пожелаешь, строить его в мире не обязательно. И в-четвёртых, о чём мало кто знает, рамки можно ставить под любым углом. (/tp @e[type=minecraft:item_frame] ~ ~ ~ ~ ~). Правда, есть две проблемы. Им всё ещё нужен твёрдный блок рядом и карты в них отражаются по всем осям, от чего начинают смотреться кривовато и это нужно учитывать. Но потенциально таким способом можно создать абсолютно любую 3D модель без текстур (полигоны и все дела). Даже анимированную модель, ибо ID карты в рамке можно менять командами.
-
Создаёшь скорборд, считающий количество установленных игроком динамитов. Когда скорборд становится равным 1 выполняешь следующие действия: Относительно игрока проверяешь все блоки по направлению его взляда (через ^). Понадобится 7-10 команд, что бы точно захватить все боки, до которых он может дотянутся. Если среди этих блоков обнаружен динамит, призываешь через summon в этой точке динамит. Блок динамита заменяешь на воздух. Обнуляешь скорборд игрока. Через функцию /schedule выполняешь отложеный на 3 секунды запуск функции с выдачей динамита.
-
Создаёшь два скорборда. Первый - счётчик смертей. Второй - счётчик количества игроков. И в циклическом КБ ищешь игрока, имеющего 1 смерть. Если находится - уменьшаешь скорборд количества игроков и выводишь его значениев чат (на minecraft.tools есть генератор сообщений со значениями скорбордов). Потом обнуляешь число смертей этого игрока. И всё.
-
Создаёшь два скорборда. Первый - счётчик смертей. Второй - счётчик количества игроков. И в циклическом КБ ищешь игрока, имеющего 1 смерть. Если находится - уменьшаешь скорборд количества игроков и выводишь его значениев чат (на minecraft.tools есть генератор сообщений со значениями скорбордов). Потом обнуляешь число смертей этого игрока. И всё.
-
Возможно, но через костыли. Нужно отслеживать, когда игрок бросил яйцо, отсчитывать КД скорбордом и если он бросает ещё раз, не дождавшись окончания КД, удалять летящий предмет и выдавать его обратно игроку. Но можно поступить проще - взять эндержемчуг и наложить на него свои текстуры.
-
Ищи этот предмет на земле. Если нашёлся - удаляй с земли и выдавай игроку, у которого его нет. Так же можно привязать предмет к определённому слоту. Удаляешь его из любого другого слота и с земли, а в указанный постоянно выдаёшь. Ещё можно зачаровать предмет на несъёмность и надеть на голову игроку.
-
На версии 1.19 можно по скорборду количества смертей следить, когда кого-то убьют. Брать у него nbt-тэг последнего места смерти и там спавнить труп. До версии 1.19 информации о последнем месте смерти не было, так что нужны костыли. Например, надевать на голову игрокам неснимаемый предмет с особым тэгом и искать его на земле. Если лежит - значит там кого-то убили. Удаляем предмет, призываем труп. Ещё можно каждый тик перемещать вслед за игроком маркер и призывать на месте маркера труп. Сам труп можно сварганить из арморстенда, кожаной брони, головы и редстоун-пыли.
-
Да, это можно сделать при помощи текстур. Рисуешь нужную модельку в блокбэнче и настраиваешь её отображение в слоте головы. Потом накладываешь эту модельку на любой предмет с зачарование несъёмности(по традиции берут каменную кнопку) и при начале раунда надеваешь на голову убийце. Если без текстур, то только искать голову с подходящим скином и надевать её. Ну и кожаную броню нужного цвета как вариант.
-
Можно костылями. Накладываешь модель флейты на удочку с морковью, а потом все подзорные трубы с нужным названием заменяешь на удочку при взятии в руку. Клики ПКМ реализуешь через скорборд. Флейта как труба по идее работать уже и не должна.
-
Такое было ещё на дивёрсити лет пять назад. Выдаёшь предмет с тэгом, допустим так: /give @a minecraft:nether_star{Test:1} А потом ищешь его в руке в цикличном командном блоке и если он есть, ставишь блоки на нужные координаты (цепочкой либо функцией): execute if data entity @p SelectedItem.tag.Test run setblock 0 70 0 minecraft:stone Если предмета нет, аналогично убираешь execute unless data entity @p SelectedItem.tag.Test run setblock 0 70 0 minecraft:air Так же вместо кучи КБ можно использовать метки. В циклические блоки вставляешь только две команды: /execute if data entity @p SelectedItem.tag.Test at @e[type=minecraft:marker,tag=Test] run setblock ~ ~ ~ stone /execute unless data entity @p SelectedItem.tag.Test at @e[type=minecraft:marker,tag=Test] run setblock ~ ~ ~ air А потом по карте ставишь метки командой /summon minecraft:marker ~ ~ ~ {Tags:[Test]} Когда ты держишь в руках предмет, выданный в начале, в тех местах, где метки, будут появляться блоки камня. Когда предмет убираешь, блоки будут пропадать.
-
Делаешь скорборд на количество применений кирки. Потом если игрок держит в руках эту кирку, в цикличной функции вокруг каждого игрока внутри каждого блока, до которого он может дотянутся, если этот блок не равен воздуху и там нет маркера, призываешь маркер с тэгом. Все маркеры, возле которых нет игрока, удаляются. Если игрок убирает кирку из рук, так же удаляются. После этого каждый раз, когда количество применений кирки в скорборде увеличивается на один, ты ищешь ближайший маркер с этим тэгом, который находится в блоке воздуха. Именно этот блок был сломан. И дальше в зависимости от того, куда смотрит игрок, филом разрушаешь территорию 3*3 в соотвтетствующей плоскости с выпадением предметов. Удаляешь маркеры в воздухе, обнуляешь скорборд использований кирки. Думаю, понятно объяснил, сможешь написать сам. Если лень писать самому, за символическую плату могу это для тебя реализовать.
-
Выполняй эти две команды. scoreboard objectives add Timer dummy scoreboard players set Const Timer 20 А эти четыре помещай в функцию. Либо в цикличные КБ, тогда последняя не нужна. scoreboard players add T Timer 1 execute if score T Timer > Const Timer run summon minecraft:zombie execute if score T Timer > Const Timer run scoreboard players add Level Timer 1 execute if score T Timer > Const Timer run scoreboard players set T Timer 0 schedule function <название датапака>\timer 1s
-
Это в цикличный командный блок напиши. /execute at @e[type=!minecraft:player] if block ~ ~ ~ cobweb run effect give @e[distance=0..1] minecraft:wither 1 1 true Ещё парой команд можно сделать так, что бы только некоторая паутина наносила урон.
-
Спасибо за развёрнутый ответ. Те команды с тремя камнями были приведены как пример. Мне была нужна эта функция для постепенной постройки сложных структур, вроде статуй, которые нельзя закодировать в виде функции, поэтому такой способ не подойдёт. Тема старая и я уже придумал подобное рекурсивное решение: допустим если есть 1 000 000 команд setblock, из количества команд извлекается квадратный корень и округляется. Я пронумеровал команды и разделил на 1000 групп по 1000 команд. Затем создал скорборд и 1000 функций формата 1.mcfunction 2.mcfunction и.т.д. В начале первой функции я увеличиваю скорборд на единицу, после чего вызываю 1000 команд execute, которые сверяют значение скорборда с числами 1,2,3...1000. В случае равенства выполняется команда setbloсk с номером, соответствующим значению скорборда. В конце функции если счётчик меньше 1000, вызывается эта же самая функция ещё раз спустя 1 тик при помощи schedule. Если счётчик достиг тысячи, вызывается функция номер 2, в которой так же перебираются значения от 1001 до 2000. Далее третья функция и.т.д. до тысячной функции. Это позволило избежать лагов, которые возникали, когда я засовывал миллион эксекутов был в одну функцию или по одному эксекуту в миллион функций, хотя линейной сложности вычисления я и не добился, но улучшил с O(n^2) до O(n*sqrt(n)). В итоге получилось это. Я штук 5 разных строений создал для видео при помощи такого метода постепенной постройки, пока мне не надоело.
-
Меня интересует возможность сохранить весь чат в текстовый файл, что-то вроде лога, но в одиночной игре. Каким модом это можно реализовать хотя бы на одной версии с 1.12 по 1.15 включительно? Вариант с возможностью скопировать весь чат Ctr+C тоже подойдёт.
-
А каким образом это реализовать с точными координатами? С data storage не работал, поэтому был бы благодарен готовой команде или хотя бы её шаблону.
-
Знаю, что нельзя. Поэтом и предложил перед округлением умножить их на большое число, что бы погрешность была минимальной. Можете подсказать реализацию в виде команды?
-
У меня вот такая проблема - необходимо выводить в чат или в скорборд координаты игрока. Не округлённые, а точные, со всеми знаками и, желательно, направлением взгляда. Вывод каждый тик. Подойдёт вывод в скорборд, допустим, координат, умноженных на 100000, что бы целое число было. Цель этого - записать точные траектории, по которым движется игрок, допустим, когда проходит паркур, что бы создать реалистичного бота на карте, который аналогично игроку паркурил бы и двигался.
