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

Плагин [MECH/FUN] ReActions - Что? Тогда? Иначе! [BukkitDev]

Тема в разделе "Релизы плагинов", создана пользователем fromgate, 16 июл 2013.

  1. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Да я уже сам не знаю ;) Довольно много правок.
    В очередной раз подправил плейсхолдеры. Теперь с переменными работа более точная. Числовые переменные принудительно приводятся к "целому" значению - т.е. без ".0" (если они целые естественно).

    Подправил ошибки в работе с предметами - делал описание и получал каждый предмет, в результате нашёл несколько недочетов, всё исправил.

    Команды теперь регистрируются по аналогии с обычными. Сделано это правда всё через одно место, но цель (чтобы при нажатии на tab - они выводились в списке) достигнута.
    Активатор COMMAND теперь оперирует регулярными выражениями (в случае если не задаются команда и параметры явно). Соответственно везде где было написано command:<НазваниеКоманды> нужно обязательно добавить ".*" если предполагается, что у команды могут быть аргументы.
    Ещё активатору COMMAND добавлен локальный плейсхолдер %args%. Он представляет собой всю введенную пользователем строку за исключением команды.
    Лично для меня это оказалось полезно для реализации команды выдачи предмета:

    Код:
    COMMAND:
      i:
        command: 'i .*'
        flags: []
        actions:
        - item_give=%args%
        reactions: []
    
    Т.е. если я пишу /i type:BANNER data:13 color:MAGENTA patterns:TRIANGLES_TOP:YELLOW;TRIANGLES_BOTTOM:RED;SKULL:ORANGE то получаю в руки соответствующее знамя. Раньше я для этого пользовался небольшим плагином ;)
    https://dl.dropboxusercontent.com/u/64799811/ReActions/ReActions.jar
     
    Последнее редактирование: 18 июн 2015
  2. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    @fromgate, мою благодарность невозможно выразить словами. Наконец-то я пересмотрю все-все-все логические связи у команд, огромное-преогромное спасибо! :)
    ---
    Всё ещё можно применять плейсхолдеры для каждого аргумента в команде?
     
    Последнее редактирование: 19 июн 2015
  3. Max_ASimus

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

    Баллы:
    103
    Skype:
    max-s.company
    Имя в Minecraft:
    Mr_WonderMan
    Спасибо огромное!
     
  4. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    @fromgate, опять начала донимать старая ошибка с двоеточием в тексте. Когда-то можно было взять строку в одинарные кавычки и эта гадость проходила. Или же поставить после двоеточия цветовой код. Однако, при использовании второго варианта идёт так же сравнение с этим "костылём". Соответственно, предмет не распознаётся как надо. Ошибка, собственно, при выдаче\изъятии\проверке:
    Код:
     in "<string>", line 233, column 222:
         ... особности: §6ПКМ\n§5Длительность: §630 секунд\n§5Перезарядка спо ...
                                             ^
    
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.scanner.ScannerImpl.fetchValue(ScannerImpl.java:733)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:305)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:179)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:563)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:146)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:230)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeSequenceNode(Composer.java:204)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:158)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:237)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:123)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:106)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:121)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)
    2015-06-19 07:06:59 [SEVERE]     at org.yaml.snakeyaml.Yaml.load(Yaml.java:399)
    2015-06-19 07:06:59 [SEVERE]     at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:53)
    2015-06-19 07:06:59 [SEVERE]     ... 22 more
    Ждать ли фикса в ближайшее время или всегда использовать после двоеточия в описании цветовой код?
     
  5. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate

    Да, плейсхолдеры arg1 ... argN остались. args - это просто дополнительный плейсхолдер.

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

    И ещё, там же есть параметр override. Если есть необходимость, чтобы команда не работала, если какие-то сторонние плагины это запрещают, то нужно поставить override:false

    @Lyosha12,
    Покажи весь активатор пожалуйста. Попробую побороть.
    Вообще странно. Двоеточия ну очень часто встречаются в тексте. Почему именно на эти он возмущается :(
     
  6. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Один из связки:
    Код:
      Pepel_I_Upgrade_1:
        command: cmd:upgrade arg1:Pepel1
        flags:
        - ITEM=amount:1 name:{§fМеч Пепла §cI} type:DIAMOND_SWORD lore:{§7Меч способен создать психическую\n§7защиту §3I§7. Противник будет наносить\n§7значительно меньше урона.\n§5Активация способности: §6ПКМ\n§5Длительность: §630 секунд\n§5Перезарядка способности: §c2 минуты\n§2Апгрейд: §4$1000 + 40 уровней\n§3Характеристики после апгрейда:\n§bДлительность: §61 минута\n§bПерезарядка: §c4 минуты\n§eНаберите §6/upgrade Pepel1§e,\n§eдержа меч в руках.\n§cАпгрейд снимает все чары\n§cи чинит меч.}
        - MONEY=1000
        - LEVEL=40
        actions: []
        reactions:
        - message=player:%player% &cАпгрейд меча не удался! &3Причины&c:&2
    
     
  7. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Lyosha12
    Ну вот смотри у меня так вгрузилось без ошибки:
    Код:
    COMMAND:
      Pepel_I_Upgrade_1:
        command: cmd:upgrade arg1:Pepel1
        flags:
        - 'ITEM=amount:1 name:{§fМеч Пепла §cI} type:DIAMOND_SWORD lore:{§7Меч способен создать психическую\n§7защиту §3I§7. Противник будет наносить\n§7значительно меньше урона.\n§5Активация способности: §6ПКМ\n§5Длительность: §630 секунд\n§5Перезарядка способности: §c2 минуты\n§2Апгрейд: §4$1000 + 40 уровней\n§3Характеристики после апгрейда:\n§bДлительность: §61 минута\n§bПерезарядка: §c4 минуты\n§eНаберите §6/upgrade Pepel1§e,\n§eдержа меч в руках.\n§cАпгрейд снимает все чары\n§cи чинит меч.}'
        - MONEY=1000
        - LEVEL=40
        actions: []
        reactions:
        - message=player:%player% &cАпгрейд меча не удался! &3Причины&c:&2
    
    Загрузка осуществляется на уровне API баккита, который соответственно использует библиотеку SnakeYAML. Вообще меня всегда выручил одинарные кавычки (надо только брать всю строку за символом "-" до конца)
     
  8. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Действительно... Видимо, не в том месте ставил...
    Но почему-то не работает сравнение...
    Код:
      Pepel_I:
        item: 'amount:1 type:DIAMOND_SWORD lore:{§7Меч способен создать психическую\n§7защиту §3I§7. Противник будет наносить\n§7значительно меньше урона.\n§5Активация способности: §6ПКМ\n§5Длительность: §630 секунд\n§5Перезарядка способности: §c2 минуты\n§2Апгрейд: §4$1000 + 40 уровней\n§3Характеристики после апгрейда:\n§bДлительность: §61 минута\n§bПерезарядка: §c4 минуты\n§eНаберите §6/upgrade Pepel1§e,\n§eдержа меч в руках.\n§cАпгрейд снимает все чары\n§cи чинит меч.}'
        flags: []
        actions:
        - message=1
        reactions:
        - message=2
    
    Сам меч выдаю из Essentials:
    Код:
          - 276 1 name:&fМеч_Пепла_&cI lore:&7Меч_способен_создать_психическую|&7защиту_&3I&7._Противник_будет_наносить|&7значительно_меньше_урона.|&5Активация_способности:_&6ПКМ|&5Длительность:_&630_секунд|&5Перезарядка_способности:_&c2_минуты|&2Апгрейд:_&4$1000_+_40_уровней|&3Характеристики_после_апгрейда:|&bДлительность:_&61_минута|&bПерезарядка:_&c4_минуты|&eНаберите_&6/upgrade_Pepel1&e,|&eдержа_меч_в_руках.|&cАпгрейд_снимает_все_чары|&cи_чинит_меч.
    
     
  9. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @lyosha
    Запиши его в переменную и посмотри текст. Может там что-то отличается.

    Сравнения сегодня ещё дополнительно потестирую
    Вообще если "Меч пепла I" - название уникальное, то опять же в сравнении можно писать только имя - будет достаточно.
     
  10. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Прикол в том, что при зачаровании или переименовании русское имя сбивается. А я хочу, чтобы свойства оставались, то есть только по лорке. Вот в переменной:
    Код:
      test: 'amount:1 name:{§fМеч Пепла §cI} data:0 type:DIAMOND_SWORD lore:{§7Меч способен
        создать психическую\n§7защиту §3I§7. Противник будет наносить\n§7значительно меньше
        урона.\n§5Активация способности: §6ПКМ\n§5Длительность: §630 секунд\n§5Перезарядка
        способности: §c2 минуты\n§2Апгрейд: §4$1000 + 40 уровней\n§3Характеристики после
        апгрейда:\n§bДлительность: §61 минута\n§bПерезарядка: §c4 минуты\n§eНаберите §6/upgrade
        Pepel1§e,\n§eдержа меч в руках.\n§cАпгрейд снимает все чары\n§cи чинит меч.}'
    
    Параграф? Но даже так не работает...
     
    Последнее редактирование: 19 июн 2015
  11. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Странно, что в переменной параграф. Вроде должен на "&" заменяться. Странно.
     
  12. Korvinius

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

    Баллы:
    88
    @Lyosha12, я у себя тупо запретил пихать в наковальню уникальные вещи, правда с помощью другого плагинчика.
     
  13. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Смысл?
     
  14. Korvinius

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

    Баллы:
    88
    ну, у меня уникальные вещи (я их называю артефактами) это редкие предметы, которые или очень трудно найти или можно приобрести только за деньги, ну или выиграть в лотерею. У них усиленные чары, которые невозможно зачаровать в наковальне, чтобы пользоваться некоторыми нужно иметь "особые" права, вот и поэтому запретил их изменять в наковальне и копировать в креативе.
     
  15. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Ясно. С помощью Креатив-контроля и NBT-тэга, выключающего возможность зачарования?
     
  16. Korvinius

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

    Баллы:
    88
    не, свой, самописный плагин
    Здесь уже есть плейсхолдер, ник игрока, по которому кликнули?
    Еще бы добавить плейсхолдер-ник игрока, на которого смотрим во время ПКМ и ЛКМ, но расстояние больше чем нужно для клика :), ну и в продолжение - плейсхолдер-ник игрока, которого ударили, и плейсхолдер-ник игрока, который ударил))), вместе с активатором "ПВП-урон" :oops:
     
  17. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    @fromgate, если я укажу ник игрока, которого нет на сервере, и запущу для него активатор EXEC, то он запустится для меня. Так и должно быть?
    Активаторы команд теперь должны выглядеть так?
    Код:
      12:
        command: 'gift accept'
        override:false
        regex: false
        flags: []
        actions: []
        reactions: []
    
     
  18. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Да, уже есть, позднее распишу.

    Пока нет. Что-то возможно ещё добавлю.



    В общем нашёл ошибку (была путаница с разделителем, помнишь менял "\\n" на "\n" -- вот тут не поменял).
    https://dl.dropboxusercontent.com/u/64799811/ReActions/ReActions.jar

    И хочу оговорить по поводу сравнения.
    В имени и в lore сравнение происходит с использованием регулярных выражений (возможно, позднее я добавлю параметр на выбор режим сравнения - полное соответствие или regex).
    Поэтому, в данном примере ( item: 'amount:1 type:DIAMOND_SWORD lore:{§7Меч способен создать психическую\n§7защиту §3I§7. Противник будет наносить\n§7значительно меньше урона.\n§5Активация способности: §6ПКМ\n§5Длительность: §630 секунд\n§5Перезарядка способности: §c2 минуты\n§2Апгрейд: §4$1000 + 40 уровней\n§3Характеристики после апгрейда:\n§bДлительность: §61 минута\n§bПерезарядка: §c4 минуты\n§eНаберите §6/upgrade Pepel1§e,\n§eдержа меч в руках.\n§cАпгрейд снимает все чары\n§cи чинит меч.}') есть символы, которые могут воспринимать неоднозначно. В первую очередь это "$" - т.е. его или над экранировать \$ или же заменять на какой-то другой символ. Я вообще убрал и поставил в той строке ".*" - и всё сразу заработало.

    Теперь как происходит сравнение lore.
    Во-первых, оно производится построчно.
    Т.е. если у Вас есть такое lore:
    "Ультрамариновый клинок (1)
    Это супер красивый меч,
    который выковал кузнец Василий.
    Данный меч служит для
    выковыривания зубов
    из коров и игроков.
    Стоимость: $1000"

    То сравнивая его с lore:{Ультрамариновый клинок.*Стоимость: \$1000} ничего не выйдет. Нужно будет описать каждую строку. Например так: lore:{Ультрамариновый клинок (\d+)\n.*\n.*\n.*\n.*\n.*\nСтоимость: \$1000}

    Если для определения уникальности предмета достаточно нескольких строк, то последние можно опустить:
    lore:{Ультрамариновый клинок (\d+)\nЭто супер красивый меч,\nкоторый выковал кузнец Василий\.}

    В общем как-то так.
     
  19. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Ммм... Просто отлично! Появилось ещё несколько идей дробления предмета с помощью такого построчного сравнения. Сейчас попробую экранировать. Какие ещё символы могут вызвать такой эффект?
    Какая-то ересь начала происходить с таймерами и Exec'ами после установки 24 версии. Сейчас буду на локалке разбираться...
     
  20. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Не притрагивался к ним очень давно ;) Единственное менялась работа с плейсхолдерами - теоритически что-то могло сломаться по части подстановки (хотя на тестах у меня были вложенные переменные - - VAR_SET=id:effectplay value:%var:effect%var:effect_num%% - работали как надо).
     

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