Перейти к основному содержимому

Создание NPC

webapp_banner.jpg

Настройки конфигурации

isEnabled

Задаёт, включён ли NPC.

KeyValuesDefault
isEnabledBooleantrue
Пример
isEnabled: true

name

Задаёт отображаемое имя NPC. Поддерживает Цветовые коды и ключи перевода для многоязычных серверов.

KeyValuesDefault
nameStringnone
Пример
name: "&aEnn Peecee"

create_npc_name.jpg


scale

Задаёт масштаб (размер) NPC. Это применяется через ванильный атрибут generic_scale на стоящей за NPC сущности.

KeyValuesDefault
scaleMultiplier1.0

При масштабировании 1.0 представляет размер по умолчанию. Чтобы сделать сущность больше, увеличьте значение (например, 1.2). Чтобы сделать сущность меньше, уменьшите значение (например, 0.8).

Пример
scale: 1.2

role

Задаёт роль NPC под именем. Только визуальная. Поддерживает Цветовые коды и ключи перевода для многоязычных серверов.

KeyValuesDefault
roleStringnone
Пример
role: "&c<Red Fellow>"

create_npc_role.jpg


profession

Задаёт профессию NPC, которая задаёт его скин, когда не используется маскировка.

KeyValuesDefault
professionProfessionNITWIT
Пример
profession: NITWIT

create_npc_profession.jpg


greetings

Задаёт список приветствий, которые NPC может произнести, когда игрок впервые входит в его activationRadius. Одна запись выбирается случайно и показывается как всплывающий пузырь чата над NPC (видимый только этому игроку, примерно 5 секунд). Поддерживает ключи перевода для многоязычных серверов.

KeyValuesDefault
greetingsString Listnone

Приветствие срабатывает только при входе в радиус, а не многократно, пока игрок остаётся внутри него.

Пример
greetings:
- Hi there!
- Good day.

create_npc_greetings.jpg


dialog

Задаёт реплики, которые NPC может произнести в виде всплывающего пузыря чата. Каждый раз одна запись выбирается случайно (список читается не по порядку). Поддерживает ключи перевода для многоязычных серверов.

Когда это срабатывает, зависит от interactionType:

  • NPC с CHAT произносят реплику диалога, когда игрок кликает по ним правой кнопкой.
  • Все остальные interactionType произносят реплику диалога при каждом сканировании близости, пока игрок остаётся внутри activationRadius.

Буквальный внутри реплики разбивает её на несколько строк пузыря.

KeyValuesDefault
dialogString Listnone
Пример
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell

Задаёт прощальные сообщения NPC. Одна запись выбирается случайно и показывается как всплывающий пузырь чата. Поддерживает ключи перевода для многоязычных серверов.

KeyValuesDefault
farewellString Listnone

Прощания срабатывают, когда игрок закрывает меню инвентаря, стоя в пределах 5 блоков от NPC — обычно сразу после закрытия меню магазина, задания или арены. Они не срабатывают, когда игрок просто выходит за пределы activationRadius.

Пример
farewell: 
- Until next time!
- Bye!

create_npc_farewell.jpg


canTalk

Задаёт, может ли NPC разговаривать. Когда установлено в false, NPC никогда не показывает пузырь чата, поэтому greetings, dialog и farewell подавляются все.

KeyValuesDefault
canTalkBooleantrue
Пример
canTalk: true

activationRadius

Задаёт радиус в блоках, в котором NPC может обнаружить приближающегося игрока.

KeyValuesDefault
activationRadiusDouble3.0

Близость сканируется каждые 5 секунд. Пока игрок находится внутри радиуса, NPC поворачивается к нему лицом, показываются индикаторы заданий (для NPC с QUEST_GIVER / CUSTOM_QUEST_GIVER) и срабатывают greetings / dialog. Установка этого значения в 0 (или ниже) полностью отключает обнаружение близости для этого NPC.

Пример
activationRadius: 3.0

scripts

Задаёт Lua-скрипты, привязанные к этому NPC. Файлы скриптов загружаются из plugins/EliteMobs/npc_scripts/. Расширение .lua необязательно — оно добавляется автоматически, если вы его пропустите.

KeyValuesDefault
scriptsString Listnone

Скрипты NPC работают на общем Lua-движке MagmaCore и поддерживают следующие хуки: on_spawn, on_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter и on_zone_leave. См. Lua-скрипты NPC для полного API и примеров.

Имя файла скрипта, которое не разрешается в файл в npc_scripts/, пропускается с предупреждением; NPC всё равно появляется.

Пример
scripts:
- wave.lua

interactionType

Задаёт тип взаимодействия, которое будет выполнять NPC.

KeyValuesDefault
interactionTypeОсобое [1]NONE
Пример
interactionType: TELEPORT_BACK

noPreviousLocationMessage

Когда у NPC-телепортёра нет предыдущего местоположения, куда он может телепортировать игрока, он отобразит это сообщение. Принимает Цветовые коды и ключи перевода для многоязычных серверов.

KeyValuesDefault
noPreviousLocationMessageStringnone
Пример
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

create_npc_noteleportlocation.jpg


timeout

Задаёт количество времени в минутах, прежде чем NPC исчезнет навсегда.

KeyValuesDefault
timeoutDouble0 (никогда)
Пример
timeout: 0

questFileName

Задаёт кастомные задания, которые выдаёт NPC. Требует interactionType равного CUSTOM_QUEST_GIVER. Учтите, что ключ в единственном числе (questFileName), хотя принимает список.

KeyValuesDefault
questFileNameString Listnone
Пример
questFileName:
- my_quest_one.yml
- my_quest_two.yml

disguise

Задаёт маскировку LibsDisguises, которую имеет NPC.

KeyValuesDefault
disguiseФормат LibsDisguisesnone
Пример
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData

Задаёт данные для кастомной маскировки LibsDisguises.

KeyValuesDefault
customDisguiseDataФормат LibsDisguisesnone
Пример
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

create_npc_custom_disguise.jpg


customModel

Задаёт кастомную модель ModelEngine, которую будет использовать NPC.

KeyValuesDefault
customModelStringnone
Пример
customModel: MY_MODEL_ONE

arena

Задаёт имя файла арены, для которой NPC откроет меню (требует interactionType ARENA_MASTER).

KeyValuesDefault
arenaFilenamenone
Пример
arena: my_arena.yml

command

Задаёт команду, которую выполнит NPC (требует interactionType COMMAND). Команды выполняются от имени игрока, а не от имени консоли. Не включайте ведущий слеш (/).

KeyValuesDefault
commandStringnone
Пример
command: say Look at me running a command, how cool!

create_npc_command.jpg


spawnLocation

Задаёт одно местоположение спавна NPC. Это устаревший ключ для одного местоположения: он читается только когда spawnLocations отсутствует или пуст. Новые местоположения, размещённые в игре, записываются в spawnLocations, поэтому предпочитайте этот ключ.

Формат: world,x,y,z,yaw,pitch.

KeyValuesDefault
spawnLocationStringnone
Пример
spawnLocation: my_world,10,50,10,0,0

spawnLocations

Задаёт местоположения спавна NPC. Один и тот же файл NPC можно разместить в нескольких точках; на каждую запись спавнится один NPC. Вам следует задавать это через команду /em place npc <npcfilename.yml>, которая добавляет ваше текущее местоположение (включая направление, куда вы смотрите) в этот список и также устанавливает isEnabled: true.

Формат каждой записи: world,x,y,z,yaw,pitch.

KeyValuesDefault
spawnLocationsString Listnone
Пример
spawnLocations: 
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0

instanced

Задаёт, должен ли NPC быть инстансовым (для использования в инстансовых подземельях). Когда установлено в true, NPC не спавнится в мире-шаблоне; вместо этого он регистрируется как шаблон и клонируется для каждого инстанса подземелья, и каждый клон существует в соответствующем мире инстанса.

KeyValuesDefault
instancedBooleanfalse
Пример
instanced: false

syncMovement

Задаёт, должно ли движение кастомной модели NPC синхронизироваться со стоящей за ним сущностью. Это имеет эффект, только когда задан customModel и модель загружена — для обычных NPC и NPC на LibsDisguises игнорируется.

KeyValuesDefault
syncMovementBooleantrue
Пример
syncMovement: true

Пример конфигурации NPC
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
questFileName:
- my_quest.yml #npc interactionType must be set to CUSTOM_QUEST_GIVER
disguise: SKELETON
customDisguiseData: #used when a custom libsdisguise is being set
customModel: MODEL_ONE
arena: my_arena.yml #npc interactionType must be set to ARENA_MASTER
command: say Hello World! #npc interactionType must be set to COMMAND (do not include the leading slash)
spawnLocation: my_world,584,55,127,90,10 #remember that NPCs use pitch and yaw to set where they are looking at. this is also automatically set when running the /em place npc <npcfilename.yml> command, so make sure you pose where you want the NPC to be facing when running the command.

create_npc_npc.jpg


Особое [1]

Ниже приведён список допустимых типов взаимодействия NPC:

TypeDescription
GUILD_GREETERОткрывает меню выбора бонуса навыка оружия
CHATПравый клик произносит случайную реплику из dialog
CUSTOM_SHOPОткрывает меню кастомного магазина
PROCEDURALLY_GENERATED_SHOPОткрывает процедурно сгенерированный магазин
BARНе реализовано. Сообщает игроку, что функция скоро появится.
ARENAНичего не делает. Используйте ARENA_MASTER вместо этого.
QUEST_GIVERОткрывает меню процедурно сгенерированных заданий
CUSTOM_QUEST_GIVERОткрывает меню заданий для конкретного задания, заданного в questFileName
NONEБез взаимодействий
SELLОткрывает меню продажи
TELEPORT_BACKТелепортирует игроков обратно в последнее местоположение в мире, не относящемся к elitemobs, где они были
SCRAPPERОткрывает меню утилизации
REPAIRMANОткрывает меню ремонта
ENCHANTERОткрывает меню зачарования
REFINERЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC
SMELTERЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC
ENHANCERЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC
UNBINDERОткрывает меню развязывания
ARENA_MASTERОткрывает меню арены для арены, заданной в arena
COMMANDВыполняет команду, заданную в command
SCROLL_APPLIERОткрывает меню элитных свитков предметов. NPC вообще не спавнится, пока useEliteItemScrolls отключён
ARROW_SHOPОткрывает меню магазина стрел
GAMBLING_BLACKJACKОткрывает азартную игру в блэкджек
GAMBLING_COINFLIPОткрывает азартную игру в подбрасывание монеты
GAMBLING_SLOTSОткрывает азартную игру в слоты
GAMBLING_HIGHERLOWERОткрывает азартную игру «больше/меньше»

Подробнее о том, что делают SCRAPPER и похожие типы взаимодействия, нажмите здесь.

Примечания о поведении NPC

У NPC есть несколько жёстко заданных вариантов поведения, которые нельзя настроить:

  • ИИ отключён: NPC не могут двигаться или прокладывать путь. Они остаются на своём месте спавна. Но они поворачиваются на месте лицом к игроку, находящемуся внутри activationRadius.
  • Отображение роли: текст role отрисовывается на плавающей сущности text display над NPC. Вертикальное смещение зависит от того, как отрисовывается NPC — 2.52 для обычного NPC, 2.30 для NPC на LibsDisguises и 2.3 для использующего customModel.
  • Метка роли для Bedrock: клиенты Bedrock не могут отрисовывать text display, поэтому замаскированный NPC дополнительно получает невидимую подставку для брони-маркер с текстом роли, показываемую только игрокам Bedrock и скрытую от игроков Java. Её высота задаётся bedrockNPCRoleYOffset в config.yml (по умолчанию 2.2). Этот запасной вариант требует Geyser или Floodgate на бэкенд-сервере; конфигурация только с Geyser на прокси его отключает.
  • Перезарядка диалогов: NPC ждут 3 секунды между событиями речи, чтобы предотвратить наложение сообщений. Пузыри чата — это плавающий текст для каждого игрока, исчезающий примерно через 5 секунд, а не сообщения в чат.
  • Невидимость: NPC под эффектом зелья невидимости не будет показывать пузыри чата.
  • Жизненный цикл чанков: NPC исчезают, когда их чанк выгружается, и снова появляются, когда он перезагружается. Сущности NPC никогда не сохраняются в мир — они пересоздаются из своего конфигурационного файла.
  • Переименование заблокировано: правый клик по NPC с биркой в руке отменяется, и игроку сообщается, что NPC нельзя переименовать.