1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал Denizen 0.7 для Citizens2

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем ExiD, 1 окт 2012.

?

Нужен ли продолжать этот мануал и стоит ли делать видеоуроки?

  1. Нет, никому это не нужно

    3 голосов
    2,4%
  2. Да, но нужны только текстовые мануалы

    15 голосов
    12,2%
  3. Да, но нужны только Видеоуроки

    15 голосов
    12,2%
  4. Да, нужно и то и то

    90 голосов
    73,2%
  1. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    [​IMG]
    Denizen– NPCкоторые используют сценарии и события для взаимодействия с игроком или миром. Например хранители порталов, Маги, Банкиры, тренера, говорящие горожане, кузнец. Их можно использовать в любых целях: давать подсказки игрокам, квесты или администрирование. Denizenиспользуют собственный скриптовый язык, базирующийся на YAML.

    Denizenэто, по сути, продолжение Citizens2, которое добавляет невероятное количество автоматизации НПС и игроков. Некоторые основные функции:
    • Скриптовый движок (The Script Engine) отправляет все команды, которые выполняются упорядоченно, это основа Denizen. В настоящее время имеется 3 очереди, для игрока, для Denizens и для задачи.
    • Скрипты для взаимодействия (Interact Scripts) это основа Dezizen, которая позволяет игрокам и НПС взаимодействовать друг с другом и с миром. Такие скрипты очень гибко настраиваются. Подробнее о таких скриптах будет ниже.
    • Скрипты действий (Activity Scripts) позволяют Denizen быть как обычные игроки. То есть они смогут ходить, общаться друг с другом, сажать деревья, строить дома и еще много чего.
    • Планировщик действий (Activity Scheduler) позволяет создавать «график» из скриптов для Denizenоснованный на одном игровом дне в minecraft.
    • Скрипты заданий (Task Scripts) это простые скрипты которые могут использоваться как «скрипты действий» и как «скрипты взаимодействия».
    • Листнер (Listeners) в настоящее время находятся в «экспериментальной фазе», но уже позволяют контролировать события Minecraft bukkit. Например если вы хотите создать квест на убийство.
    • Система флагов (Flag System) позволяет более динамичное использование Denizen. Сложная, но легко воспринимаемая система флагов была внедрена в Denizen, чтобы помочь отслеживать события, предметы, цифры, игроков и многое другое.
    Файловая структура
    Важно понять файловую структуру Denizen прежде чем начинать писать скрипты. Ниже распишем для чего нужен каждый файл. Это может показаться вам бесполезным, но стоит все таки вникнуть до того как начнете использовать.



    [​IMG]

    denizen.jar
    Очень часто встречается вопрос, куда же поместить этот файл? Если в прошлом, для Citizens 1.2 все типы граждан помещались в специальную папку, то для нашего случая стоит рассматривать как любой другой плагин и помещать в папку плагинов /plugins. Единственное отличие Denizen от других плагинов это то, что Denizen не создает все папки и файлы сам. Вам придется вручную создавать некоторые файлы и папки. Но есть другой выход! Скачать СТАРТОВЫЙ НАБОР и закинуть в папку плагина.



    config.yml
    Содержит некоторые параметры для изменения поведения Denizen. Вы можете использовать все значения по умолчанию, плохо от этого не станет)
    Изменения в этот файл можно вносить и при работающем сервере, только потом может потребоваться перезагрузка плагина командой /denizen reload .

    assignments.yml
    В этом файле описываются все варианты действия для вашего NPC. Каким образом его редактировать будет объяснено дальше.
    Изменения в этот файл можно вносить и при работающем сервере, только потом может потребоваться перезагрузка плагина командой /denizen reload .

    saves.yml
    Ни в коем случае не редактируйте вручную этот файл при включенном сервере. Он будет заполняться автоматически. Тут содержится информация о профессии НПС, флагах игроков, расположении НПС, активные сценарии, действия и другое.

    read-only-scripts.yml
    Еще один файл, который нельзя редактировать вручную. Сюда пишутся все скрипты которые плагин смог прочитать.

    /scripts/ папка
    Это папка из которой плагин будет читать скрипты при загрузке и заносить их в файл read-only-scripts.yml . Такая организация скриптов очень удобна, так как количество скриптов может быть очень велико и ориентироваться по ним будет сложно.Файлы в этой директории можно называть как угодно, но формать долен быть всегла .yml .

    Config.yml


    # Операторы могут получать информацию о НПС с помощью правого клика.
    # Если falseто команда '/denizeninfo' делает то же самое.
    right_click_and_sneak_info_mode_enabled: true

    # Стандартное время отката триггеров в секундах.
    default_click_cooldown_in_seconds: 2.0
    default_location_cooldown_in_seconds: 30.0
    default_proximity_cooldown_in_seconds: 15.0
    default_death_cooldown_in_seconds: 0.0
    default_damage_cooldown_in_seconds: 0.5
    default_chat_cooldown_in_seconds: 2.0

    # Если триггер атаки (damagetrigger) (левый клик) деактивирован. Выберите falseесли хотите
    # чтобы был активен только правый клик.
    disabled_damage_trigger_instead_triggers_click: false

    # Ожидания действия.
    engage_timeout_in_seconds: 150

    # Задержка взпимодействия задает темп для очереди игрока и очереди НПС.
    # рекомендуется ставить значения 10-20.
    interact_delay_in_ticks: 10

    # Максимальная длина строки диалога
    multi_line_text_maximum_length: 55

    # обычно, игроки могут говорить с НПС даже если нет триггера чата.
    # Измените на trueесли вы хотите чтобы чат с НПС был виден для всех
    chat_globally_if_no_chat_triggers: false

    # Если триггер чата включен, и игрок вызывает недоступный триггер
    # который не соответствует ни одному описанному в скрипте,
    # Должен ли игрок продолжать чат с НПС и получать ответы или должен
    # возвращаться в глобальный чат игнорируя НПС
    # Измените на trueесли хотите
    # чтобы чат у НПС был глобальный если триггер чата есть,
    # ноненайденысоответствия
    chat_globally_if_failed_chat_triggers: false

     
    Pereloma, SkyBlack2, Dimonskiu и 4 другим нравится это.
  2. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    Все не уместилось в 1 пост, поэтому продолжение конфига:
    # также.. если НПС не взаиможействует с игроком(нет скрипта взаимодействия)
    # по умолчанию чат по прежнему ориентирован на НПС
    # Вы можете отключить эту опцию поставив true
    chat_globally_if_not_interactable: false

    # Должны ли игроки, взаимодействующие с Denizenслышать разговор другого игрока
    bystanders_hear_player_to_npc_chat: true
    bystanders_hear_npc_to_player_chat: true

    # Определяет диапазоны в блоках для взаимодействия с нпс
    player_to_npc_chat_range_in_blocks: 2
    npc_to_player_chat_range_in_blocks: 7
    npc_emote_range_in_blocks: 7
    player_to_npc_shout_range_in_blocks: 15
    npc_to_player_shout_range_in_blocks: 15
    player_to_npc_whisper_range_in_blocks: 2
    npc_to_player_whisper_range_in_blocks: 3
    proximity_trigger_range_in_blocks: 3
    location_trigger_range_in_blocks: 1

    # Определяет как следует «разговаривать» НПС с игроком.
    # <PLAYER>, <NPC> и <TEXT> стандартные теги
    player_chat_to_npc: "Высказали <NPC>y, '<TEXT>'"
    player_chat_to_npc_bystander: "<PLAYER> сказал <NPC>y, '<TEXT>'"
    npc_chat_to_bystanders: "<NPC> говорит, '<TEXT>'"
    npc_chat_to_player: "<NPC> сказалтебе, '<TEXT>'"
    npc_chat_to_player_bystander: "<NPC> сказал <PLAYER>y, '<TEXT>'"

    player_whisper_to_npc: "Выпрошептали <NPC>y, '<TEXT>'"
    player_whisper_to_npc_bystander: "<PLAYER> прошепталчтото <NPC>у."
    npc_whisper_to_bystanders: "<NPC> прошептал, '<TEXT>'"
    npc_whisper_to_player: "<NPC> прошепталвам, '<TEXT>'"
    npc_whisper_to_player_bystander: "<NPC> прошепталчтото <PLAYER>у."

    player_shout_to_bystanders: "Выкрикнули, '<TEXT>'"
    player_shout_to_bystanders_bystander: "<PLAYER> коикнул, '<TEXT>'"
    npc_shout_to_bystanders: "<NPC> крикнул, '<TEXT>'"
    npc_shout_to_player: "<NPC> крикнулвам, '<TEXT>'"
    npc_shout_to_player_bystander: "<NPC> крикнул <PLAYER>у, '<TEXT>'"

    npc_hint_prefix: "[HINT] Вы можете сказать: "

    # Стандартные тексты, которые используются для взаимодейсвия.
    default_denizen_unavailable_text: "Ты не видишь, я занят!"
    default_no_click_trigger_text: "Мне пока нечего тебе сказать."
    default_no_damage_trigger_text: "Эй!Этобольно!"
    default_no_chat_trigger_text: "Извини, я тебя не понимаю."

    Скрипты взаимодействия (Interact scripts)
    Для начала рассмотрим общую структуру скрипта. ВАЖНО помнить что пробелы играют важную роль в YАML, из за этого, или из за пропущенного двоеточия, возникает большинство ошибок. (для общего ознакомления советую посмотреть короткий мануал по YAML на английском, при необходимости могу его перевести).
    Так вот, каркас скрипта:


    Код:
    'Name of script': # Имя скрипта
     
        Type: Interact # Описание типа
     
        Requirements: # Описание требований (внутриигровых) для скрипта
     
            Mode: ... # "Режим" требований (об этом далее)
     
            List: # Список требований
     
              - требование1
     
              - ...
     
        Steps: # Шаги(циклы) скрипта
     
          1: # Описание шага
     
              Some Trigger: # Какой-нибудь триггер (об этом далее)
     
                Trigger: ...
     
                Script: # Тело скрипта
     
                    - ...
     
                    - ...
     
    
    Вроде ничего не понятно, и вообще "какого черта тут происходит?!"
    Ничего страшного, сейчас рассмотрим пример:
    Код:
    "A Hint in the Sky":  #Название скрипта, тут все понятно
      Type: Interact          #тип, окей, дальше
      Requirements:        #требования
        Mode: None
      Steps:                        #первый и единственный шаг скрипта
        1:
          Proximity Trigger:  #какой то триггер…
            Script:                      #какие то команды далее
            - ^COOLDOWN 15
            - LOOK CLOSE
            - ^CHAT "Look up there! What could that possibly be used for?"
            - LOOK BOOKMARK:upthere DURATION:10
            - WAIT 1
            - CHAT "If only I could figure out how to make it, I can't find any stairs!"
    
    Вроде что-то стало более понятно, но не совсем. Значит начинаем разбирать скрипт по байтам словам.

    Требования к имени скрипта:
    Имя скрипта может быть абсолютно любым, однако стоит помнить некоторые вещи:
    • Имя скрипта полностью зависит от регистра. Например 'script name' и 'SCRIPT NAME' абсолютно разные скрипты
    • Имена, содержащие пробелы, должны быть заключены в одинарные или двойные кавычки ( " ; ' )
    • Если внутри названия имеется одинарная кавычка, то все название необходимо заключить в ДВОЙНЫЕ кавычки например "John's Script"
    Требования к типу:
    В данном подразделе мы будем использовать только interact, но стоит знать что есть еще TASK и ACTIVITY


    Формат требований:
    какие есть моды (режимы) требований:
    • ALL - все без исключения из списка ниже
    • ANY [#] - определенное вместо [#] кол-во требований из списка
    • NONE - ничего. Используется при пустом листе
     
    Оригинало_о, Pereloma, Mpa3oTa и 2 другим нравится это.
  3. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    Теперь что может быть включено в СПИСОК list

    Требования, связанные с игроком:
    HUNGER [Full или Hungry или Starving]
    Проверка индикатора голода. Full - полный, Hungry - полностью голодный, Starving чуть голодающий.

    ITEM [Название_предмета или #:#] (количество)
    Проверка наличия предмета в инвентаре

    LEVEL [# or higher] или [At least this Level #] или [No more than this Level #]
    проверяет уровень персонажа. Сам я это не проверял так что в работоспособности не уверен

    NAME [Имя_игрока] ( Имя_игрока ) ( Имя_игрока ) ...
    Позволяет сделать скрипт только под определенных игроков

    POTIONEFFECT [Тип_зелья]
    проверяет есть ли эффект от определенного зелья на персонаже

    WEARING [Название_предмета или #:#]
    Проверяет надет ли на игроке предмет по названию или ID

    Требования, связанные с миром:
    STORMY
    Проверяет дождь в мире

    SUNNY
    Проверяет солнце в мире

    TIME [Day или Night или Dusk или Dawn или 0-23999]
    Время в мире. День или ночь или рассвет или закат или цифровое значение.

    WORLD [Имя мира] ( Имя мира ) ( Имя мира ) ...
    Позволяет сделать скрипт доступным только в определенных мирах

    Требования, связанные с другими скриптами
    ACTIVITY [имя активного скрипта]
    проверяет активен ли скрипт у игрока сейчас. Полезно при параллельных квестах.

    FAILED (#) [Имя скрипта]
    проверяет завален ли другой скрипт (не выполнен) # раз

    FINISHED (#) [Имя скрипта]
    проверяет закончен ли другой скрипт # раз

    FLAGGED [FlagName:FlagValue or FlagName] (EXACTLY) (PLAYER or DENIZEN)
    Проверка на флаг. В официальной вики о системе флагов ни слова, но позже я попытаюсь изложить свое понимание.

    Требования, связанные с экономикой или пермишнами
    GROUP [Название группы] ( Название группы) (Название группы) ...
    позволяет сделать скрипт активным только для определенной группы в пермах

    MONEY [количество]
    для начала работы скрипта требует денег.

    PERMISSION [permission.node]
    проверяет определенный перм у игрока


    Разработчики так же позаботились о отрицании требования. для этого перед требованием нужно поставить еще один "-"
    например: - -STORMY означает -SUNNY

    Описание шагов (steps) скрипта
    Каждый скрипт может иметь несколько шагов, каждый из шагов, в свою очередь, может иметь несколько триггеров. Игрок за раз может вызвать только 1 шаг скрипта. При запуске скрипта проверяется закончил ли игрок предыдущие шаги, если нет, то скрипт начинается с 1го шага.
    Рассмотрим пример.
    ПРИМЕЧАНИЕ: команда ZAP перекидывает игрока на следующий шаг. Обязательно ставьте в конце каждого шага, автоматически перекидывание не происходит.
    'Welcome to Harbortown':
    Type: Interact​
    Requirements:​
    Mode: NONE​
    Steps:​
    '1':​
    Click Trigger:​
    Script:​
    - CHAT 'What's your name, stranger?'​
    Chat Trigger:​
    '1':​
    Trigger: My name is /<PLAYER>/.​
    Script:​
    - CHAT 'Ah ha, your name sounds familiar! '​
    - CHAT 'Are you from around this area?'​
    - ZAP​
    '2':​
    Click Trigger:​
    Script:​
    - HINT​
    Chat Trigger:​
    '1':​
    Trigger: /Yes/, I grew up in Harbortown!​
    Script:​
    - CHAT 'I thought so, welcome back!​
    Have you heard about Tom the Taylor?​
    Isn't that just horrible?'​
    - ZAP 3​
    '2':​
    Trigger: /No/, you must be mistaken.​
    Script:​
    - CHAT 'Oh, sorry about that.'​
    - CHAT 'Hey, if you're looking for some work,​
    Bill the Baker is understaffed!​
    This is the bakery's busy season.'​
    - ZAP 4​
    '3':​
    Click Trigger:​
    Script:​
    - CHAT 'I wonder if Tom the Taylor is doing any better.'​
    - NARRATE 'Perhaps you should check on Tom the Taylor.'​
    '4':​
    Click Trigger:​
    Script:​
    - CHAT 'Oh, nice to see you again <PLAYER>!'​
    - CHAT 'Have you stopped by the bakery?'​
     
    Pereloma, Jykk и Wolfys нравится это.
  4. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    Продолжение следует...

    Далее опишу доступные триггеры и команды
    Нашли ошибку? напишите в ЛС!
     
  5. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    Временно приостановлено. Приношу свои извинения. По всем вопросам - в личку.
     
    Оригинало_о нравится это.
  6. 11STRYDER11

    11STRYDER11 Старожил Пользователь

    Баллы:
    173
    А куда столько резерва?
     
  7. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    Там оооочень много всего, даже боюсь что этого не хватит, но если что попрошу модераторов удалить.
     
  8. Besgranichni

    Besgranichni Старожил

    Баллы:
    103
    А можно ли вставить все, что ты описал в config.yml, в свой конфиг? Так сказать "Русифицировать"? Ну конечно, же не забыв вставить пробелы в том месте где тебе не хватило для них места.
     
  9. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    Конечно можно
     
  10. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    ExiD, молодец! Я только подумываю о переходе на Ctitizens2, твоя тема будет очень полезна.

    Скажи, а не попадалось конвертера квестов? Или какого-то механизма позволяющего использовать квесты от 1.2? А то у нас их очень много написано.
     
  11. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    На самом деле натыкался на статью, если еще найду - обязательно скину
     
  12. Автор темы
    ExiD

    ExiD Активный участник

    Баллы:
    88
    Имя в Minecraft:
    bars268
    fromgate нравится это.
  13. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Спасибо огромное!

    UPD: Ээ... это не совсем то. Нужно что-то делать с квестами, это сложнее :(
     
  14. Aqel

    Aqel Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Aqel
    Для версии Denizen 0.8.8 можно помощь
     
  15. Pereloma

    Pereloma Активный участник

    Баллы:
    78
    Осталось куча неизведанного !!!
    Как научить ходить бота, как заставить выполнять серверные команды (например давать разрешения)
    Требую Продолжения ...
    Ещё и про версию 0.8.8 расказать !!!!
     
  16. strelok193

    strelok193 Старожил Пользователь

    Баллы:
    103
    А как взаимодействовать с нпц? Допустим он меня спрашивает "Тебя подлечить? (да/нет)" - как мне ответить "Да"?
     
  17. monk2005

    monk2005 Новичок Пользователь

    Баллы:
    16
    не могу я denizen сделать, на /trait denizen пишет Couldn't change denizen: Trait not found

    уже голову сломал .....

    хотя /trait blacksmith работает отлично
     
  18. Terrychan2003

    Terrychan2003 Новичок

    Баллы:
    6
    Имя в Minecraft:
    TheDeaX
    Кто нибудь может сказать как внедрить item[]() в if
    И мне еще надо команду на забирание предмета из инвентаря.Если поможете спасибо
    Это тебе надо chat trigger как вверху образец или давай в скайп live:aleksandr_h2001 все объясню
     

Поделиться этой страницей