Перейти к содержанию
Если у вас техническая проблема с модом или их сборкой, то создавайте тему в разделе "Технические проблемы".
В разделе "Моды" запрещено набирать игроков на свой сервер и искать друзей для игры.

Помощь CustomNPC


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

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

Я делаю карту в майнкрафт на версии 1.20.1, мне очень нужен был мод CustomNPC, поэтому скачал неофиц.порт на него. Мне нужно сделать нпс, который будет лечить только те нпс, которые находятся с ним в одной фракции(ну или просто хилил всех, кроме агрессивных фракций и самого игрока). Я попытался настроить через работу Healer, но нпс хилит абсолютно всех(пока я пытался решить, он у меня даже лечил агрессивных нпс и игрока, но не лечил своих союзников). У меня вопрос как сделать такого нпс?

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

В 10.06.2026 в 20:06, xxdominator сказал:

Я делаю карту в майнкрафт на версии 1.20.1, мне очень нужен был мод CustomNPC, поэтому скачал неофиц.порт на него. Мне нужно сделать нпс, который будет лечить только те нпс, которые находятся с ним в одной фракции(ну или просто хилил всех, кроме агрессивных фракций и самого игрока). Я попытался настроить через работу Healer, но нпс хилит абсолютно всех(пока я пытался решить, он у меня даже лечил агрессивных нпс и игрока, но не лечил своих союзников). У меня вопрос как сделать такого нпс?

Нашел способ сделать такого нпс через похожего целителя, однако я не уверен в том, что это именно то что нужно, такое лучше делать через скрипты.

Для этого зайди в своего нпс мотыгой, зайди в "Продвинутые" и в целителя, и выставь возле кнопки "Эмоции" (на английском Affect) и выставь "Враждебны".

Теперь создай для этого целителя отдельную фракцию. Зайди в глобальные, фракции, в ней создай новую фракцию. Желательно скрой, нажав "Скрытый" на да. Цвет выбирай любой, название тоже ставь любое например Healther. Теперь во враждебные фракции выбери фракцию, которую он будет лечить - это будут его союзники. Для других фракций такое не ставь. Также можешь выставь и другие фракции и он будет лечить еще и их.

Если тебе нужно сделать, чтобы этот нпс также и атаковал игрока, как только найдет его, то выставь в "Очки", значение по умолчанию 0. После можешь зайти в "Данные игрока" в глобальные и удалить игрока, если надо, чтобы сбросить все

Теперь если все сделал правильно, выставь ему фракцию, которую ты ему создал и, если все сделал правильно, то он будет лечить своих союзников, однако способ конечно не особо: нпс будет лечить также всех враждебных мобов (если они у тебя есть), а также могут быть баги, поэтому если тебе этот способ через целителя не подошел, то сделай через скрипт.

Вот скрипт. Версия: 1.20.1, язык программирования: JavaScript (ECMAScript). Берешь сценарист в руки, устанавливаешь да, создаешь вкладку и вставляешь этот код; там, где комментарии помечены заменяешь на свои значения которые тебе нужны:

var radius = 16; //радиус, в котором будет нпс выдавать эффект
var effectId = 6; // айди эффекта
var duration = 100; // длительность
var strength = 0; //уровень эффекта (1 начинается с 0, т.е. если впишешь 0, то уровень при выдаче будет 1, или если впишешь 1, то уровень будет 2)
var hideParticles = false; //показать/скрыть частицы при эффекте

function tick(e) {
    var npc = e.npc
    var npcFaction = npc.getFaction().getId()
    var npcs = npc.world.getNearbyEntities(e.npc.pos, radius, 2)
    var uuid = npc.getUUID()
    for (var i = 0; i < npcs.length; i++) {
        if (npcs.length > 0 && npcs[i].getFaction().getId() == npcFaction && npcs[i].getUUID() != uuid) {    
            npcs[i].addPotionEffect(effectId, duration, strength, hideParticles)
        }
    }
}

Нпс будет лечить всех нпс, но только тех, кто состоит в фракции целителя.

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

var radius = 16; //радиус, в котором будет нпс выдавать эффект
var effectId = 6; // айди эффекта
var duration = 100; // длительность
var strength = 0; //показать/скрыть частицы при эффекте
var hideParticles = false; //уровень эффекта (1 начинается с 0, т.е. если впишешь 0, то уровень при выдаче будет 1, или если впишешь 1, то уровень будет 2)
var entityType = 1; //тип нпс, на которого будет агриться нпс (1 - это игрок, 2 - нпс, -1 - все, 0 - неизвестный)

var a; //это лучше не трогать

function tick(e) {
    var npc = e.npc
    var npcFaction = npc.getFaction().getId()
    var npcs = npc.world.getNearbyEntities(e.npc.pos, radius, 2)
    var uuid = npc.getUUID()
    for (var i = 0; i < npcs.length; i++) {
        if (npcs.length > 0 && npcs[i].getFaction().getId() == npcFaction && npcs[i].getUUID() != uuid && a) {    
            npcs[i].addPotionEffect(effectId, duration, strength, hideParticles)
        }
    }
}
function target(e) {
    if (e.entity.getType() == entityType) a = true
}
function targetLost(e) {
    a = false
}

Надеюсь помог :)

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

11 часов назад, Hibbe сказал:

Нашел способ сделать такого нпс через похожего целителя, однако я не уверен в том, что это именно то что нужно, такое лучше делать через скрипты.

Для этого зайди в своего нпс мотыгой, зайди в "Продвинутые" и в целителя, и выставь возле кнопки "Эмоции" (на английском Affect) и выставь "Враждебны".

Теперь создай для этого целителя отдельную фракцию. Зайди в глобальные, фракции, в ней создай новую фракцию. Желательно скрой, нажав "Скрытый" на да. Цвет выбирай любой, название тоже ставь любое например Healther. Теперь во враждебные фракции выбери фракцию, которую он будет лечить - это будут его союзники. Для других фракций такое не ставь. Также можешь выставь и другие фракции и он будет лечить еще и их.

Если тебе нужно сделать, чтобы этот нпс также и атаковал игрока, как только найдет его, то выставь в "Очки", значение по умолчанию 0. После можешь зайти в "Данные игрока" в глобальные и удалить игрока, если надо, чтобы сбросить все

Теперь если все сделал правильно, выставь ему фракцию, которую ты ему создал и, если все сделал правильно, то он будет лечить своих союзников, однако способ конечно не особо: нпс будет лечить также всех враждебных мобов (если они у тебя есть), а также могут быть баги, поэтому если тебе этот способ через целителя не подошел, то сделай через скрипт.

Вот скрипт. Версия: 1.20.1, язык программирования: JavaScript (ECMAScript). Берешь сценарист в руки, устанавливаешь да, создаешь вкладку и вставляешь этот код; там, где комментарии помечены заменяешь на свои значения которые тебе нужны:

var radius = 16; //радиус, в котором будет нпс выдавать эффект
var effectId = 6; // айди эффекта
var duration = 100; // длительность
var strength = 0; //уровень эффекта (1 начинается с 0, т.е. если впишешь 0, то уровень при выдаче будет 1, или если впишешь 1, то уровень будет 2)
var hideParticles = false; //показать/скрыть частицы при эффекте

function tick(e) {
    var npc = e.npc
    var npcFaction = npc.getFaction().getId()
    var npcs = npc.world.getNearbyEntities(e.npc.pos, radius, 2)
    var uuid = npc.getUUID()
    for (var i = 0; i < npcs.length; i++) {
        if (npcs.length > 0 && npcs[i].getFaction().getId() == npcFaction && npcs[i].getUUID() != uuid) {    
            npcs[i].addPotionEffect(effectId, duration, strength, hideParticles)
        }
    }
}

Нпс будет лечить всех нпс, но только тех, кто состоит в фракции целителя.

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

var radius = 16; //радиус, в котором будет нпс выдавать эффект
var effectId = 6; // айди эффекта
var duration = 100; // длительность
var strength = 0; //показать/скрыть частицы при эффекте
var hideParticles = false; //уровень эффекта (1 начинается с 0, т.е. если впишешь 0, то уровень при выдаче будет 1, или если впишешь 1, то уровень будет 2)
var entityType = 1; //тип нпс, на которого будет агриться нпс (1 - это игрок, 2 - нпс, -1 - все, 0 - неизвестный)

var a; //это лучше не трогать

function tick(e) {
    var npc = e.npc
    var npcFaction = npc.getFaction().getId()
    var npcs = npc.world.getNearbyEntities(e.npc.pos, radius, 2)
    var uuid = npc.getUUID()
    for (var i = 0; i < npcs.length; i++) {
        if (npcs.length > 0 && npcs[i].getFaction().getId() == npcFaction && npcs[i].getUUID() != uuid && a) {    
            npcs[i].addPotionEffect(effectId, duration, strength, hideParticles)
        }
    }
}
function target(e) {
    if (e.entity.getType() == entityType) a = true
}
function targetLost(e) {
    a = false
}

Надеюсь помог :)

чувак я уже везде писал этот пост и только ты ответил рабочим методом и ОЧЕНЬ понятно. я в шоке что такие люди есть, спасибо тебе огромное

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

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

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

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

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

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

Войти

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

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

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