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

Нужна помощь с диалогами для жителей


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

В теме 4 сообщения

в кратце, я видел на ютубе что можно сделать через команду execute, что когда игрок нажимает на жителя и рядом с ним в каком либо радиусе(к примеру в 5 блоков) есть житель с определенным айди то этот житель что-либо говорил

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

крч нужен интерекшн и скорборд который считаем сколько раз ты на него нажимаешь и в зависимости от поинтов скорборда нужная фраза

 

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

Сначала сделай скорборд

  • /scoreboard objectives add Dialog minecraft.custom:minecraft.talked_to_villager  (пропиши в чат)

Если хочешь ВЕДАТЬ, то пропиши и следующую команду и нажми на жителя (любого)

  • /scoreboard objectives setdisplay sidebar Dialog  (тоже в чат)
  • /scoreboard objectives setdisplay sidebar (чтобы отменить предыдущее)

Теперь когда ты нажимаешь на жителя тебе прибавляется 1 значение в только что созданный скорборд. Далее упомянутым тобой execute, нужно проверить есть ли у игрока это значение. И если оно есть вывести в чат ему желанный текст. Чтобы красиво отформатировать текст можно воспользоваться tellraw генераторами

  • execute as @a[scores={Dialog=1..}] at @s run tellraw @s "текст который житель должен говорить" (цикличный, всегда активный, стрелка должна указывать на следующий)
  • execute as @a[scores={Dialog=1..}] at @s run scorboard scoreboard players set @s Dialog 0 (цепной, всегда активный, стрелка в сторону от предыдущего)

Но все жители при таком варианте будут говорить одно и тоже. По этому тебе нужно распихать им теги или что-то в этом роде, чтобы фильтровать одного жителя от другого. Я предлагаю такой вариант - Первая команда активирует игрока начавшего диалог [scores={Dialog=1..}], имеющего жителя [type=minecraft:villager] на расстоянии 7ми блоков [distance=..7] с уникальным тегом [tag=BrrBrrPatapim] и если находит, то выводит ему текст конкретно для жителя с конкретно этим тегом. Следующая команда отличается только тегом и наверное сообщением для игрока. Последняя команда как и в предыдущем варианте просто чистит скорборд диалога чтобы игроку не спамило в чат.

  • execute as @a[scores={Dialog=1..}] at @s if entity @e[type=minecraft:villager,tag=BrrBrrPatapim,distance=..7] run tellraw @s "я брр брр патапим" (цикличный, всегда активный)
  • execute as @a[scores={Dialog=1..}] at @s if entity @e[type=minecraft:villager,tag=GlorboFrutodrillo,distance=..7] run tellraw @s "я глорбо фрутодрилло" (цикличный, всегда активный)
  • execute as @a[scores={Dialog=1..}] at @s run scorboard scoreboard players set @s Dialog 0 (цепной, всегда активный)

Единственная проблема в том что моя команда не проверяет жителя по которому нажали, она просто ищет жителя рядом с игроком в момент когда игрок получил единицу скорборда, а это значит что механизм может лагать если 2 разных жителя будут рядом в тот момент когда игрок нажмёт по одному из них. Ему просто может выдать не тот текст. Это 100% можно как-то исправить но мне лень думать. Если не узнаешь как, то просто поставь жителей подальше друг от друга

Чтобы дать жителю тег подлети к нему вплотную и впиши в чат эту команду:

  • /tag @e[type=minecraft:villager,distance=..3] add GlorboFrutodrillo (в место GlorboFrutodrillo можешь писать любые нужные тебе теги)

таким образом если тыкнуть по жителю находясь рядом с жителем с тегом "BrrBrrPatapim" в чат тебе напишет "я брр брр патапим", а если рядом будет "GlorboFrutodrillo" то в чат напишет "я глорбо фрутодрилло". А ещё вопросы по командным блокам лучше в эту часть форма задавать, там больше шансов что ответят (ответят лучше чем я)

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

спа

В 22.05.2025 в 01:23, Sench_mp4 сказал:

Сначала сделай скорборд

  • /scoreboard objectives add Dialog minecraft.custom:minecraft.talked_to_villager  (пропиши в чат)

Если хочешь ВЕДАТЬ, то пропиши и следующую команду и нажми на жителя (любого)

  • /scoreboard objectives setdisplay sidebar Dialog  (тоже в чат)
  • /scoreboard objectives setdisplay sidebar (чтобы отменить предыдущее)

Теперь когда ты нажимаешь на жителя тебе прибавляется 1 значение в только что созданный скорборд. Далее упомянутым тобой execute, нужно проверить есть ли у игрока это значение. И если оно есть вывести в чат ему желанный текст. Чтобы красиво отформатировать текст можно воспользоваться tellraw генераторами

  • execute as @a[scores={Dialog=1..}] at @s run tellraw @s "текст который житель должен говорить" (цикличный, всегда активный, стрелка должна указывать на следующий)
  • execute as @a[scores={Dialog=1..}] at @s run scorboard scoreboard players set @s Dialog 0 (цепной, всегда активный, стрелка в сторону от предыдущего)

Но все жители при таком варианте будут говорить одно и тоже. По этому тебе нужно распихать им теги или что-то в этом роде, чтобы фильтровать одного жителя от другого. Я предлагаю такой вариант - Первая команда активирует игрока начавшего диалог [scores={Dialog=1..}], имеющего жителя [type=minecraft:villager] на расстоянии 7ми блоков [distance=..7] с уникальным тегом [tag=BrrBrrPatapim] и если находит, то выводит ему текст конкретно для жителя с конкретно этим тегом. Следующая команда отличается только тегом и наверное сообщением для игрока. Последняя команда как и в предыдущем варианте просто чистит скорборд диалога чтобы игроку не спамило в чат.

  • execute as @a[scores={Dialog=1..}] at @s if entity @e[type=minecraft:villager,tag=BrrBrrPatapim,distance=..7] run tellraw @s "я брр брр патапим" (цикличный, всегда активный)
  • execute as @a[scores={Dialog=1..}] at @s if entity @e[type=minecraft:villager,tag=GlorboFrutodrillo,distance=..7] run tellraw @s "я глорбо фрутодрилло" (цикличный, всегда активный)
  • execute as @a[scores={Dialog=1..}] at @s run scorboard scoreboard players set @s Dialog 0 (цепной, всегда активный)

Единственная проблема в том что моя команда не проверяет жителя по которому нажали, она просто ищет жителя рядом с игроком в момент когда игрок получил единицу скорборда, а это значит что механизм может лагать если 2 разных жителя будут рядом в тот момент когда игрок нажмёт по одному из них. Ему просто может выдать не тот текст. Это 100% можно как-то исправить но мне лень думать. Если не узнаешь как, то просто поставь жителей подальше друг от друга

Чтобы дать жителю тег подлети к нему вплотную и впиши в чат эту команду:

  • /tag @e[type=minecraft:villager,distance=..3] add GlorboFrutodrillo (в место GlorboFrutodrillo можешь писать любые нужные тебе теги)

таким образом если тыкнуть по жителю находясь рядом с жителем с тегом "BrrBrrPatapim" в чат тебе напишет "я брр брр патапим", а если рядом будет "GlorboFrutodrillo" то в чат напишет "я глорбо фрутодрилло". А ещё вопросы по командным блокам лучше в эту часть форма задавать, там больше шансов что ответят (ответят лучше чем я)

спасибо, особенно за то что подсказали куда писать, если что-то мне надо будет

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

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

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

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

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

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

Войти

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

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

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