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

Туториал Denizen [Перевод Tutorial'a]

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Lomu, 14 янв 2016.

?

Был ли полезен этот перевод?

  1. Да

    7 голосов
    70,0%
  2. Нет

    3 голосов
    30,0%
  1. Автор темы
    Lomu

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

    Баллы:
    61
    Перевод Tutorial'a по плагину Denizen
    [​IMG]


    Обозначения:
    п\ - примечание переводчика, дополнение, команда
    синий цвет текста - скрипт


    Привет всем! Спасибо за использование Denizen. Ищете с чего начать? Читайте!

    Итак, что же такое Denizen? Лучше всего это классифицируется, как платформа для создания скриптов. Denizen использует сценариии, и различные другие компоненты, предоставленные Denizen API. Я рекомендую пользователям начать с малого, и медленно двигаться вперед, открывая перед собой новые возможности.

    Denizen взаимодействует с NPC? Да, правда. Denizen наиболее известен как способ создания NPC способных выполнять скрипты написанные вами. Это довольно просто, и для этого есть куча классных спецификаций, команд и тегов, которые можно использовать.

    Вот небольшой пример который я назвал "Печенье". Обычно я комментирую скрипт, но этот представлен без каких-либо пометок.

    Cookies:
    type: assignment
    interact scripts:
    - 100 Cookie Handler

    Cookie Handler:
    type: interact
    steps:
    'Spreading the Word*':
    click trigger:
    script:
    - random 3
    - chat 'I like cookies!'
    - chat 'MMmm.. cookies are favorite!'
    - chat 'Cocoa and wheat me freak!'
    chat trigger:
    'Cookies':
    trigger: 'I love /cookie/s!'
    script:
    - chat 'Me too!'
    - narrate '<npc.name> gives you some cookies.'
    - give i@cookie qty:6
    - zap 'step:Cookies given'
    'Cookies given':
    click trigger:
    script:
    - chat 'How were the cookies?'
    - zap 'step:Spreading the Word'



    Это простой сценарий, который создает NPC любящего печенья. Назвать его можно как угодно, но я считаю, что смешно будет назвать его 'Notch'. Создать NPC, который будет использовать этот сценарий, невероятно просто.

    п\ /npc create <name>
    п\ /npc select (если NPC не выбран)


    Теперь привязываем скрипт к NPC следующей командой:

    /npc assigment --set cookies

    п\ после --set идет название вашего скрипта

    При нажатии на NPC скрипт будет активирован. Печенья конечно крутая вещь, но не приносят никакой пользы, это лично мое мнение. Что насчет лекаря? Следующий скрипт будет лечить вас, если ваше здоровье на низком уровне.

    Basic Healer:
    type: assignment
    interact scripts:
    - 100 heal me, bro!

    Heal me, bro!:
    type: interact
    steps:
    "Need a heal?*":
    click trigger:
    script:
    - if '<player.health>' < '<m:<player.health.max> / 2>' {
    - look <player.location>
    - chat 'Woah dude, you are <player.health.formatted>! You could use a heal!'
    - chat 'Just give me another click to get some power!'
    - zap "Healin'" duration:30s
    } else {
    - look <player.location>
    - chat 'Nice an healthy. Keep it up!'
    }
    "Healin'":
    click trigger:
    script:
    - ^zap 'need a heal?'
    - ^engage
    - chat "Here goes nothin'!"
    - playeffect instant_spell <npc.location> qty:25
    - playeffect heart <player.location> qty:25 offset:1
    - heal <player>
    - disengage


    Как привязать скрипт к NPC? Выбираем NPC и вводим команду:

    /npc assigment --set 'basic healer'

    п\ если название скрипта состоит более чем из двух слов,выделяйте их кавычками

    Скрипты можно использовать не только для NPC. Наверное я говорил вам уже это, но Denizen имеет и некоторые другие типы сценариев, которые выходят далеко за рамки основного функционала, не используя NPC.

    Один из моих любимых простых сценариев, который делает игрока невидимым, когда он крадется. Это простой скрипт, но при этом он прекрасно показывает возможности Denizen.

    Rogue:
    type: world
    debug: false
    events:
    on player starts sneaking:
    - playeffect <p.location> magic_crit qty:10
    - invisible <player> state:true

    on player stops sneaking:
    - invisible <player> state:false


    Даже маленькие скрипты могут полезны для вашего сервера. Иногда скрипты Denizen могут заменить Bukkit-плагины, оператор который поможет нам в этом выполняет команды от имени сервера. У вас есть плагин который выполняет команды каждый раз в определенное время? Замените его скриптом Denizen.

    Auto Save Event Handler:
    type: world
    debug: false
    events:
    on 5:00 in world:
    - announce 'Autosaving...'
    - execute as_server 'denizen save'
    - execute as_server 'citizens save'
    - execute as_server 'save-all'


    Используйте Denizen для простого решения сложных задач. Если вы знакомы и используете Citizens, то скорее всего знаете о команде /butcher которая плохо относится к мобам типа NPC.Она убирает их тоже, что не очень хорошо. Давайте напишем свою '/butcher' команду.

    Safer Butcher Handler:
    type: world
    debug: false
    events:
    on sbutcher command:
    - narrate 'Removing all mob entities within 15 blocks... your NPCs are safe!'
    - foreach <player.location.find.entities.within[15]> {
    - if <%value%.is_mob>
    remove %value%
    }


    п\ Являясь владельцем сервера Minecraft я ни разу не встречался с подобной командой. Но всем известна команда которая убирает мобов в определенной области. В таком случае она заменяет ее.

    п\ Также хочу отметить, что скрипты с типом 'world' не надо ни к чему привязывать. Вы просто отправляете их в папку scripts.

    СС
    Ссылка на оригинал: http://dev.bukkit.org/bukkit-plugins/denizen/

    На этом перевод значимой части туториала заканчивается. Некоторые слова были заменены синонимами, также некоторые 'фразочки' автора туториала были убраны за ненадобностью. Смысловая нагрузка не потеряна, а объем текста уменьшен.

    Если вы хотите, чтобы я разобрал детально некоторые скрипты пишите в комментарии. Если требуется разъяснение каких либо команд, я жду вас там же. Личные просьбы - в лс.

    Спасибо за внимание, ваш Lomu.
     
    Последнее редактирование: 14 янв 2016
  2. snr93

    snr93 Активный участник Пользователь

    Баллы:
    88
    буду признателен за разбор и объяснение, почему после того, как собрали сахарный тростник дальше квест не идет
    Код:
    questGarden:
        type: assignment
        interact scripts:
        - 10 FarmingQuest
      
    FarmingQuest:
        type: interact
        steps:
            1:
                click trigger:
                    script:
                    - if <player.flag[FarmingQuestTaskCount]> == 3 {
                      - chat "Great Work! I hope you're excited to see the fruit of your labor!"
                      - wait 2
                      - narrate "============ @ @ @ ============"
                      - ^narrate "Quest Complete: Intro to Farming Pt. I"
                      - ^narrate "<npc.name> hands you $25."
                      - ^execute as_server "addxp <player.name> herbalism 2500"
                      - ^narrate "Unlocked Quest: Intro to Farming Pt. II"
                      - ^narrate "============ @ @ @ ============"
                      - give money qty:25
                      - flag player FarmingQuestTaskCount:!
                      - zap step:2
                      - queue clear
                    } else if <player.has_flag[FarmingQuestTask]> {
                      - chat "Have you planted the seeds yet? Come back when you've finished."
                      - queue clear
                    }
                    - chat "Hello, <player.name>!"
                    - wait 1
                    - chat "I'm the guide for Herbalism. I'll be showing you how to farm all kinds of crops and animals."
                    - wait 3
                    - chat "Would you like to learn?"
                    - wait 1
                    - narrate "Would you like to accept this quest? [Yes/No]"
                chat trigger:
                    1:
                        trigger: /Yes/!
                        script:
                        - flag player FarmingQuestTask
                        - narrate "============ @ @ @ ============"
                        - ^narrate "Quest Started: Intro to Farming Pt. I"
                        - ^narrate "============ @ @ @ ============"
                        - ^chat "Great!"
                        - wait 1
                        - chat "The first lesson is pretty simple. Take these seeds and plant them outside."
                        - wait 2
                        - chat "Eventually they'll become delicious wheat!"
                        - give item:seeds qty:3
                        - wait 2
                        - chat "I've given you some seeds to get you started."
                        - flag player FarmingQuestTaskCount:0
                    2:
                        trigger: /No/, I am busy.
                        script:
                        - chat "Oh, come back when you have some time."
            2:
                click trigger:
                    script:
                    - if <player.flag[FarmingQuestTaskCount]> == 6 && <player.inventory.contains[338].qty[6]> {
                      - ^take item:sugar_cane qty:6
                      - chat "If you keep planting them, you could have chests full of the stuff in no time!"
                      - wait 2
                      - narrate "============ @ @ @ ============"
                      - ^narrate "Quest Complete: Intro to Farming Pt. II"
                      - ^narrate "<npc.name> hands you $50."
                      - ^execute as_server "addxp <player.name> herbalism 5000"
                      - ^narrate "Unlocked Quest: Intro to Farming Pt. III"
                      - ^narrate "============ @ @ @ ============"
                      - give money qty:50
                      - flag player FarmingQuestTaskCount:!
                      - flag player FarmingQuestTask:!
                      - zap step:3
                      - queue clear
                    } else if <player.has_flag[FarmingQuestTask]> || <player.flag[FarmingQuestTaskCount].round> < 6 {
                      - chat "Не забывай, тебе нужно собрать и принести мне 6 сахарного тростника!"
                      - queue clear
                    }
                    - chat "Ready for your next lesson?"
                    - narrate "Would you like to accept this quest? [Yes/No]"
                chat trigger:
                    1:
                        trigger: /Yes/.
                        script:
                        - if <player.has_flag[FarmingQuestTask]> queue clear
                        - flag player FarmingQuestTask
                        - ^narrate "============ @ @ @ ============"
                        - ^narrate "Quest Started: Intro to Farming Pt. II"
                        - ^narrate "============ @ @ @ ============"
                        - flag player FarmingQuestTaskCount:0
                        - chat "Wonderful!"
                        - wait 1
                        - chat "This plant is special because it grows even if you harvest it."
                        - wait 2
                        - chat "Take it and plant it next to the river outside next to the bridge."
                        - wait 2
                        - chat "Come back when you have six of them!"
                        - flag player FarmingQuestTask
                        - give item:sugar_cane qty:3
                    2:
                        trigger: /No/, I am busy.
                        script:
                        - if <player.has_flag[FarmingQuestTask]> queue clear
                        - chat "Oh, come back when you have some time."
            3:
                click trigger:
                    script:
                    - if <player.flag[FarmingQuestTaskCount]> == 2 && <player.inventory.contains[363]> {
                      - ^take item:raw_beef qty:1
                      - chat "It's as easy as that!"
                      - wait 2
                      - chat "Steak is also delicious!"
                      - wait 1
                      - chat "Definitely worth the effort."
                      - wait 2
                      - chat "Well, that's all I have for you."
                      - wait 2
                      - chat "Here's a parting gift from me."
                      - wait 3
                      - chat "Good luck with your farming journey!"
                      - narrate "============ @ @ @ ============"
                      - ^narrate "Quest Complete: Intro to Farming Pt. III"
                      - ^narrate "<npc.name> hands you $75."
                      - ^narrate "<npc.name> hands you an Iron Hoe."
                      - ^execute as_server "addxp <player.name> herbalism 7500"
                      - ^narrate "============ @ @ @ ============"
                      - give money qty:75
                      - give "i@iron_hoe[display_name=Farmer Frank's Iron Hoe]" qty:1
                      - flag player FarmingQuestTaskCount:!
                      - zap step:4
                      - queue clear
                    } else if <player.has_flag[FarmingQuestTask]> || <player.has_flag[FarmingQuestTask2] {
                      - chat "Don't forget, you need to breed 2 cows together and bring me back a raw beef!"
                      - queue clear
                    }
                    - chat "I have one more lesson for you."
                    - narrate "Would you like to accept this quest? [Yes/No]"
                chat trigger:
                    1:
                        trigger: /Yes/.
                        script:
                        - if <player.has_flag[FarmingQuestTask]> queue clear
                        - flag player FarmingQuestTask
                        - ^narrate "============ @ @ @ ============"
                        - ^narrate "Quest Started: Intro to Farming Pt. III"
                        - ^narrate "============ @ @ @ ============"
                        - flag player FarmingQuestTaskCount:0
                        - chat "Let's talk about animals."
                        - wait 1
                        - chat "In a way they're a lot like plants."
                        - wait 2
                        - chat "However, they have to be manually regrown.. by breeding."
                        - wait 2
                        - chat "Go into the field next to my barn and feed two cows wheat."
                        - wait 2
                        - chat "You'll see what they do."
                        - wait 1
                        - give item:wheat qty:2
                    2:
                        trigger: /No/, I am busy.
                        script:
                        - if <player.has_flag[FarmingQuestTask]> queue clear
                        - chat "Oh, come back when you have some time."
            4:
                click trigger:
                    script:
                    - RANDOM {
                      - chat "I've helped you all I can, <player.name>."
                      - chat "You've learned all you can from me."
                      - chat "I hope your farming is going well, <player.name>. I had a great time working with you!"
                      - chat "If you ever need any farming help, just remember what I taught you."
                    }
    FarmingQuest1Task:
        type: world
        events:
            on player places seeds:
            - if !<player.has_flag[FarmingQuestTask]> queue clear
            - flag player FarmingQuestTaskCount:++
            - narrate "Plant Wheat [<player.flag[FarmingQuestTaskCount].round>/3]"
            - if <player.flag[FarmingQuestTaskCount]> == 3 {
              - narrate "You have finished. Please return to Farmer Frank"
              - flag player FarmingQuestTask:!
              }
    FarmingQuest2Task:
        type: world
        events:
            on player breaks sugar_cane_block:
            - if !<player.has_flag[FarmingQuestTask]> queue clear
            - flag player FarmingQuestTaskCount:++
            - narrate "Harvest Sugarcane [<player.flag[FarmingQuestTaskCount].round>/6]"
            - if <player.flag[FarmingQuestTaskCount]> == 6 {
              - narrate "You have finished. Please return to Farmer Frank"
              }
    FarmingQuest3Task:
        type: world
        events:
            on player right clicks at cow with wheat:
            - if !<player.has_flag[FarmingQuestTask]> queue clear
            - flag player FarmingQuestTaskCount:++
            - narrate "Breed Cows [<player.flag[FarmingQuestTaskCount].round>/2]"
            - if <player.flag[FarmingQuestTaskCount]> == 2 {
              - narrate "Next Step: Acquire Beef [1]"
              - flag player FarmingQuestTask:!
              - flag player FarmingQuestTask2
              }
    FarmingQuest4Task:
        type: world
        events:
            on player picks up raw_beef:
            - if !<player.has_flag[FarmingQuestTask2]> queue clear
            - if <player.flag[FarmingQuestTaskCount]> < 2 queue clear
            - flag player FarmingQuestKillCount:++
            - narrate "Raw Beef [<player.flag[FarmingQuestKillCount].round>/1]"
            - narrate "You have finished. Please return to Farmer Frank."
            - flag player FarmingQuestTask2:!
            - flag player FarmingQuestKillCount:1

    и почему в некоторых местах используется простой текст, а где то со знаком ^
     
  3. Никотин

    Никотин Активный участник Пользователь

    Баллы:
    76
    там где стоит знак "^" - в этих местах команда выполняется вместе с предыдущей
    Слушай. У меня перекинул на 3 квест. Я не знаю почему у тебя не работает.
    Вообше там стоит проверка для ленивых.
    Чтобы выполнить 2 квест - ты должен и сломать 6 блоков тростника и иметь их в инвентаре
    перед тем, как кликнуть по нпц
    все квесты работают
    получил аж 75$ в конце и железную мотыгу
     
    Последнее редактирование: 27 янв 2016
  4. Lea290

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

    Баллы:
    61
    Как сделать так, чтобы при определённом триггере NPC сначала что-то там сказал, а потом поставил кнопку на определённое место и нажал? буду рада, если кто ответит.
     
  5. alexandrage

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

    Баллы:
    173
    Какой смысл тут спрашивать? Это всего лишь копипастперевод.
     

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