Pterohost docs

Citizens - создание NPC с квестами

Как создать интерактивных NPC с квестами при помощи Citizens и Denizen

Что такое Citizens?

Citizens — это мощный плагин для создания NPC (Non-Player Characters) на серверах Minecraft. С его помощью можно создавать живых персонажей, которые могут выполнять различные действия: торговать, давать квесты, охранять территорию и многое другое.

Скачать Citizens можно с официальной страницы SpigotMC

Что такое Denizen?

Denizen — это дополнительный плагин для Citizens, который добавляет возможность создания скриптов. С его помощью можно программировать поведение NPC: диалоги, квесты, реакции на действия игроков.

Скачать Denizen можно с официальной страницы SpigotMC

Установка Citizens и Denizen

Шаг 1: Скачайте Citizens.jar и Denizen.jar

Шаг 2: Поместите оба файла в папку plugins

Шаг 3: Перезапустите сервер

Шаг 4: Проверьте установку командой /npc help и /denizen version

Важно! Denizen требует наличия Citizens. Устанавливайте оба плагина вместе.

Создание базового NPC

Основные команды Citizens

Создать NPC:

/npc create [имя] - создать NPC с именем
/npc create Торговец - пример

Удалить NPC:

/npc remove - удалить выбранного NPC

Выбрать NPC:

/npc select - выбрать NPC, на которого вы смотрите

Переместить NPC:

/npc tp - телепортировать NPC к вам
/npc move - переместить NPC на место, куда вы смотрите

Настройка внешнего вида NPC

Изменение скина

/npc skin [ник_игрока] - установить скин игрока
/npc skin Notch - пример

Или использовать URL скина:

/npc skin --url [URL]

Изменение типа NPC

По умолчанию создается человек, но можно создать любого моба:

/npc type [тип]
/npc type zombie - создать зомби
/npc type villager - создать жителя
/npc type cow - создать корову

Экипировка NPC

/npc equipment - открыть меню экипировки

Или через команды:

/npc equip helmet [предмет] - надеть шлем
/npc equip chest [предмет] - надеть нагрудник

Базовое взаимодействие

Текст при клике

Самый простой способ добавить взаимодействие:

/npc text add "Привет, путник!"
/npc text add "Хочешь купить зелье?"

NPC будет говорить эти фразы по очереди при каждом клике.

Удалить текст:

/npc text remove [номер]
/npc text clear - удалить весь текст

Команды при клике

Можно заставить NPC выполнять команды:

/npc command add heal /heal <p>
/npc command add feed /feed <p>

<p> заменяется на имя игрока, который кликнул.

Создание диалогов с Denizen

Теперь самое интересное - создание квестов и диалогов!

Пример простого диалога

Создайте файл в plugins/Denizen/scripts/dialog.yml:

quest_npc_dialog:
  type: assignment
  actions:
    on assignment:
    - trigger name:click state:true
  interact scripts:
  - quest_dialog

quest_dialog:
  type: interact
  steps:
    1:
      click trigger:
        script:
        - narrate "Привет, <player.name>!"
        - narrate "Я торговец из соседнего города."
        - narrate "Не хочешь помочь мне с одним делом?"
        - flag player quest_started
        - zap 2

    2:
      click trigger:
        script:
        - if <player.has_flag[quest_started]>:
          - narrate "Принеси мне 10 пшеницы, и я награжу тебя!"
        - else:
          - narrate "Спасибо за помощь!"

Привязка скрипта к NPC

После создания скрипта:

/ex reload
/npc assignment --set quest_npc_dialog

Пример простого квеста

Создадим квест “Собрать 10 пшеницы”:

wheat_quest:
  type: interact
  steps:
    offer_quest:
      click trigger:
        script:
        - narrate "Мне нужно 10 пшеницы!"
        - narrate "Принесешь?"
        - flag player wheat_quest_active
        - zap check_wheat

    check_wheat:
      click trigger:
        script:
        - if <player.inventory.quantity[wheat]> >= 10:
          - narrate "Отлично! Вот твоя награда!"
          - take item:wheat quantity:10
          - give diamond quantity:5
          - flag player wheat_quest_active:!
          - zap offer_quest
        - else:
          - narrate "У тебя всего <player.inventory.quantity[wheat]> пшеницы."
          - narrate "Нужно еще <[10].sub[<player.inventory.quantity[wheat]>]>!"

Полезные команды

Список всех NPC:

/npc list

Информация о NPC:

/npc info

Сделать NPC неуязвимым:

/npc vulnerable false

Изменить имя NPC:

/npc name [новое_имя]

Разрешить/запретить столкновения:

/npc collidable false

Частые проблемы

1. NPC не реагирует на клики

  • Проверьте, что скрипт загружен: /ex reload
  • Убедитесь, что назначен assignment: /npc assignment

2. Скрипт выдает ошибки

  • Проверьте отступы в YAML (используйте пробелы, не табы!)
  • Посмотрите ошибки в консоли сервера

3. NPC исчезает после перезагрузки

  • Убедитесь, что сохранение включено в config.yml плагина Citizens

4. Несколько игроков не могут одновременно взаимодействовать с NPC

  • Это нормально для некоторых типов скриптов
  • Используйте флаги игроков вместо глобальных переменных

Дополнительные возможности

Citizens поддерживает множество дополнений:

  • Sentinel - боевые NPC и охранники
  • Citizens Trader - торговля с NPC
  • BetonQuest - расширенная система квестов

Полезные ссылки

С Citizens и Denizen вы можете создать уникальный игровой опыт на вашем сервере! От простых торговцев до сложных квестовых цепочек.