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

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

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

  1. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Всё верно, так и должно быть.
    Если бы вы поставили пробел после цифры 14 ( input:{12 13 14 }), тогда бы %group30% =="14"
    В общем, я тоже не силён в регулярных выражениях, но действие REGEX я испытывал на этом сайте:
    https://regex101.com/
    и всё совпадало.

    %groupNM%,
    N - количество совпадений по маске
    M- порядковый номер группы в одном совпадении (индекс группы начинается с 1). Проще говоря, сколько скобок "( )" в маске столько и групп.

    Даю маленький пример, как быстро разобраться в REGEX
    Допустим, нам необходимо отфильтровать
    "a12 b13 c14 a21 b22 c23" по маске: [\d]+
    В маске скобок нет, значит и групп тоже нет, т.е результат будет между %group00%...%group50%
    Код:
    EXEC:
      regex0:
        actions:
        - REGEX=input:{a12 b13 c14 a21 b22 c23} regex:{[\d]+}
        - 'log=group00: %group00%'
        - 'log=group10: %group10%'
        - 'log=group20: %group20%'
        - 'log=group30: %group30%'
        - 'log=group40: %group40%'
        - 'log=group50: %group50%'
    
    Теперь попробуем отфильтровать ту же строку, но так, чтобы мы получили отдельно буквы, как группу. Маска будет следющая: ([^\d+])[\d]+. Как видим, буквы мы загоняем в отдельную группу, тогда результат будет следующим: %groupNM%, N=0..5, M=0..1
    Код:
    EXEC:
      regex1:
        actions:
        - REGEX=input:{a12 b13 c14 a21 b22 c23} regex:{([^\d+])[\d]+}
        - 'log=group00: %group00%'
        - 'log=group01: %group01%'
        - 'log=group10: %group10%'
        - 'log=group11: %group11%'
        - 'log=group20: %group20%'
        - 'log=group21: %group21%'
        - 'log=group30: %group30%'
        - 'log=group31: %group31%'
        - 'log=group40: %group40%'
        - 'log=group41: %group41%'
        - 'log=group50: %group50%'
        - 'log=group51: %group51%'
    
    И на конец, нам нужно не только буквы занести в группу, но и числа, тогда маска будет следующей:
    ([^\d])([\d]+) , а результат будет таким: %groupNM%, N=0..5, M=0..2
    Код:
    EXEC:
      regex2:
        actions:
        - REGEX=input:{a12 b13 c14 a21 b22 c23} regex:{([^\d])([\d]+)}
        - 'log=group00: %group00%'
        - 'log=group01: %group01%'
        - 'log=group02: %group02%'
        - 'log=group10: %group10%'
        - 'log=group11: %group11%'
        - 'log=group12: %group12%'
        - 'log=group20: %group20%'
        - 'log=group21: %group21%'
        - 'log=group22: %group22%'
        - 'log=group30: %group30%'
        - 'log=group31: %group31%'
        - 'log=group32: %group32%'
        - 'log=group40: %group40%'
        - 'log=group41: %group41%'
        - 'log=group42: %group42%'
        - 'log=group50: %group50%'
        - 'log=group51: %group51%'
        - 'log=group52: %group52%'
    
    Надеюсь, тепер вам, да и мне тоже, будет проще разобраться в этом.
    P.S. Эти примеры можно испытывать в консоли:
    /exec regex0
    /exec regex1
    /exec regex2
     
  2. OneDisik

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

    Баллы:
    66
    Может. Что-то не так с %player_display%?
     
    Последнее редактирование: 11 май 2017
  3. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    С этим плейсхолдером всё в порядке, просто у вас, нет плагина, который меняет эту переменную или не настроен. Например, у меня этим занимается essentials. Я не использую Chat Manager, по причине того, что с чатом замечательно справляется Essentials+EssentialsChat. И не утверждаю, что Chat Manager хуже, просто для решения вашей проблемы, необходимо искать другой путь.
    Предлагаю ещё одну схему:
    1. Определяем группу игрока%GROUP_FLAG%, используя флаги FLAG_SET и GROUP
    2. Запускаем команду: - cmd_console=pex group %GROUP_FLAG%
    Это выведет в консоль сообщение типа:
    Код:
    [08:40:56 INFO]: 'owner' inherits the following groups:
    [08:40:56 INFO]: Group "owner"'s permissions:
    [08:40:56 INFO]: 1) * (own)
    [08:40:56 INFO]: Group "owner"'s Options:
    [08:40:56 INFO]:   suffix = "&9"
    [08:40:56 INFO]:   prefix = "&6&l[&b&lВладелец&6&l] &9&l"
    
    3. С помощью активатора MESSAGE отловим строку, где указан префикс
    (prefix =....).
    4. В этом активаторе воспользуемся действием REGEX, где выловим, то что нам нужно

    Есть ещё вариант.
    1. Импортируем базу PEX в MySQL
    2. С помощью действия SQL_SELECT вытащим нужный нам префикс

    Есть ещё вариант.
    Зная все префиксы, вы просто можете записать их в переменные:
    - default: [Игрок]
    - vip: [VIP]
    ...
    - owner: &6&l[&b&lВладелец&6&l] &9&l
    где default, vip, ...,owner - ваши группы, которые записаны в PEX
    [Игрок], [VIP], ... префиксы.
    Чтобы получить префикс, достаточно узнать группу игрока и получить по ней уже известную переменную.
     
  4. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Да, вот теперь понятно. Действительно удобно, если нужно сделать что-то и с содержанием вхождения.
     
  5. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    build #77
    • Добавлен плейсхолдер %raw:<%ДругойПлейсхолдер%>%. Он позволяет предотвратить подстановку значения вложенного плейсхолдера. После обработки этого плейхсолдера он заменится на вложенный (а не на его значений).
     
  6. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    build #78
    • Добавлен новый флаг REGION_STATE. Проверяет значение флага в регионе
      REGION_STATE = [<Мир>.]<Регион.ИмяФлага.ЗначениеФлага>
    • список WorldGuard флагов: <ИмяФлага>
    Пример установки флагов в активаторе:
    Код:
    - REGION_STATE=world.spawn.use.deny
    - REGION_STATE=world.spawn.gamemode.creative
    - '!REGION_STATE=world.spawn.game-mode.survival'
    - REGION_STATE=spawn.tnt.allow
     
    Последнее редактирование: 12 май 2017
  7. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Отличный флаг!

    А возможно ли добавить аргумент для подгруппы игроков, на которых WG флаг ориентирован??
    - REGION_STATE=world.spawn.gamemode.creative flagGroup:{NONMEMBERS, NONOWNERS}

    У меня есть одна идея, которую я очень давно хотел реализовать. Но не получалось т.к. небыло возможности проверить состояние WG флага и подгруппы игроков.
     
  8. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    build #81
    • Добавлена проверка групп игроков установленного флага в регионе
    REGION_STATE = [<Мир>.]<Регион.ИмяФлага.ЗначениеФлага>[/<GroupName>]
    <GroupName> : all | members | owners | nonmembers | nonowners
     
    Последнее редактирование: 13 май 2017
  9. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Отлично! Благодарю!
     
  10. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Чуть-чуть не дотянул до полугода ;) Действительно была ошибка. Вроде бы исправил.

    build #85
     
  11. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Вот... Теперь это топовый флаг!
    Но разницы между тактами и секундами в РеАкшнс по сути нет?? Оно всё равно будет переганять их в таймштампы и исполнять, операясь на время системы ? Или оно будет учитывать длительность такта сервера ?? Если к примеру на сервере TPS упал в 2 раза (=10) то и указанные 20 тактов в формате будут интерпретироватся не как 1, а как 2 секунды ?
     
  12. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Там где на уровне баккита используются такты, т.е. "выполнить через 5 тактов" - то будут использоваться такты и и скажем, WAIT в случае указания времени в мс может выполниться позднее, потому что задержка выставляется в тактах. Т.е., 1 секунда действительно превратится в 2, если TPS равен 10 на протяжении этих двух секунд.
     
  13. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Чтоже, это хорошо, да!
     
  14. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    build #95
    Этот активатор инициируется, когда игрок выполняет щелчок правой кнопкой мыши по сущности (Entity). С этим активатором вы сможете запретить вставлять в рамку предметы или вращать предметы в рамке. Можно запретить садиться в лодку, minecart и на лошадь.
     
  15. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Вопрос: Если в действии SOUND пропустить аргумент [location], то по дефолту там подставятся координаты поточного местонахождения игрока, или же 0, 0, 0 ??

    Просто в дефолтной команде /playSound, что бы игрок услишал воспроизводимый звук, он должен либо находится возле координат, на которых воспроизводится звук, либо радиус сферы этого звука должен быть достаточно огромным (999999+) что бы игрок услишал звук в любой точке, даже если он воспроизведен на координатах 0,0,0, а игрок где то на 20000+
    /playSound block.anvil.use master @a ~ ~ ~ 9999999999


    Ну тоесть каким образом реАкшнс делает так, что бы игрок всегда слишал воспроизводимый звук ??
    И ещё: из какиго источника исходит этот звук ??





    Что я делаю не так??
    Хотел отловить и отменить этот меседж http://prnt.sc/f7x603
    с помощью активатора MESSAGE...

    И если ловить его так
    Код:
      Vanilla-cancelMsg-1:
        source: CHAT_OUTPUT
        type: CONTAINS
        mask: 'sound'
        actions:
        - 'CANCEL_EVENT=true'
    то всё ок!


    Но если я хочу применить REGEX, что бы уточнить параметры
    Код:
      Vanilla-cancelMsg-1:
        source: CHAT_OUTPUT
        type: REGEX
        mask: '^.*Played sound.*$'
        actions:
        - 'CANCEL_EVENT=true'
    отловить невозможно...
     
  16. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Скорее всего это сообщение шлётся не текстом, а кодом сообщения — это сделано для локализации. Попробуйте фильтровать по подстроке: commands.playsound.success

    Не получится, попробуйте отловить сообщение и посмотреть как оно выглядит на самом деле (выведите в этом активаторе значение переменной %message%)
     
  17. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Понял, дело в том что в маске нельзя указывать 2 слова через пробел. Но что делать если надо указать ??
     
  18. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Как правило, если в активаторе не указаны какие-то конкретные координаты, то подставляются координаты игрока.
     
  19. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    вот только что попробывал урезать до одного слова в маске (mask: '^.*sound.*$')
    и сработало... Но мне надо 2 слова
     
  20. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    В пакете отправляется сообщение "commands.playsound.success". То есть там нет текст Successfully played sound 'sdhfsj" for 'sakfskf'.
    Там отправляется JSON конструкция одним из элементов которой является ключ сообщения commands.playsound.success (возможно другой) и параметры.
    Отлавливайте именно этот ключ и всё. Пробелы там не причем. Их там просто нет.
     

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