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

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

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

  1. vrnRaptor

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

    Баллы:
    68
    @fromgate, помогите пожалуйста.
    1. Команда premium_add работает правильно, но при указании ALL в качестве второго аргумента, в группу добавляется игрок с ником ALL, а не каждый игрок на сервере. Так должно быть или можно что-то исправить?
    2. Никак не пойму как добавить второй аргумент команды premium_info_admin, который будет определять имя игрока (arg2:.* - не работает)?
    Код:
    COMMAND:
      premium_add:
        override: true
        regex: false
        command: premium add
        flags:
        - DELAY_PLAYER=id:premium_countdown player:%arg2% set-time:%arg3%
        actions:
        - CMD_CONSOLE=pex group Premium user add %arg2%
        - MESSAGE=&2Спасибо за активацию Premium подписки. player:%arg2%
        - MESSAGE=&2Теперь вы являетесь членом группы Premium. player:%arg2%
        - MESSAGE=&2До окончания времени действия Premium подписки осталось %delay-left%. player:%arg2%
      premium_info:
        override: true
        regex: false
        command: cmd:premium arg1:info
        flags:
        - '!GROUP=Premium'
        - DELAY_PLAYER=id:premium_countdown player:%player%
        actions:
        - MESSAGE=&2Вы не являетесь членом группы Premium.
        reactions:
        - MESSAGE=&2До окончания времени действия Premium подписки осталось %delay-left%.
      premium_info_admin:
        override: true
        regex: true
        command: cmd:premium arg1:info arg2:.*
        flags:
        - FLAG_SET=GROUP:Admin GROUP:Moder
        - '!DELAY_PLAYER=id:premium_countdown player:%arg2%'
        actions:
        - MESSAGE=&2До окончания времени действия Premium подписки игрока %arg2% осталось %delay-left%.
        reactions:
        - MESSAGE=&2Игрок %arg2% не имеет Premium подписки.
     
    Последнее редактирование: 8 сен 2015
  2. Sanya007vuch

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

    Баллы:
    68
    @fromgate , такой вопрос по поводу добавления команд. Есть ли вариант добавить аргумент, который забирает всю строку текста после набранной команды?
    Например, /mycommand какой-то текст, который придумал я сам и хочу его сохранить куда-то.
    В итоге я хочу получить плейсхолдером значение в "какой-то текст, который придумал я сам и хочу его сохранить куда-то." и уже проводить с ним операции. Возможно ли добавление этого? Ооочень нужно..
     
  3. vrnRaptor

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

    Баллы:
    68
    Если я вас правильно понял, то делается это следующим образом:
    Код:
      test_command:
        override: true
        regex: false
        command: test
        actions:
        - MESSAGE=%args%
    
    При вводе команды /test <Hello world!> в чат будет выводиться сообщение: Hello world!
    То есть все аргументы команды /test будут выводиться в чат.
     
  4. Sanya007vuch

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

    Баллы:
    68
    @vrnRaptor, нет.
    С таким форматом он выводит только команду /test (которая считается нулевым аргументом). А если вбивать еще текст после этого - ничего не происходит. Аргументы еще пишутся в строке с командой (взгляд с конфига)
     
  5. Korvinius

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

    Баллы:
    88
    странно, если судить по документации, то должно бы выводить именно то, что нужно.
     
  6. vrnRaptor

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

    Баллы:
    68
    Действительно, очень странно. Только что для верности скопировал свой код в конфиг и проверил, все прекрасно работает, выводится только текст без команды.
     
  7. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Это странно. Проверю сегодня.
     
  8. vrnRaptor

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

    Баллы:
    68
    @fromgate, помогите пожалуйста с моими вопросами.
    И еще подскажите как тут лайк ставить?
     
  9. Korvinius

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

    Баллы:
    88
    уже давно здесь отключили возможность лайкать:(
     
  10. STRANNIK999

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

    Баллы:
    61
    Это напомнило мне работу с триггерами из редактора карт Warcraft III
    И напиши на какие версии)
     
  11. Pasha4444

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

    Баллы:
    78
    Имя в Minecraft:
    Pasha4444
    как удалить 3 разные написанные книги из инвентаря

    так не работает
     
  12. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    1. Вы вызываете команду и передаете ей парамет all - естественно она так и работает.
    Как вариант - из этого активатора вызывать активатор EXEC и передавать ему в параметрах имя игрока, тогда если там будет указано "all" то он выполнится для каждого игрока.

    2. Попробуйте вместо "arg2:.*" - arg2:* (без точки, тут регулярные выражения не поддерживаются)
     
  13. vrnRaptor

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

    Баллы:
    68
    Спасибо, все работает.
    Сделать так можно, но как тогда передать имя игрока в флаг, ведь тут надо еще и время указывать:
    Код:
    - DELAY_PLAYER=id:premium_countdown player:%arg2% set-time:%arg3%
    Конечно это можно сделать через персональную переменную. Но может есть более простой способ?
     
  14. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    При вызове активатора действием EXECUTE (да и из командной строки) надо указать имя player:all и тогда активатор будет выполнет столько раз сколько игроков на сервере, при этом применительно к каждому игроку.
    Соответственно имя игрока - уже будет сидеть в плейсхолдере %player%, a %arg2% в этом активаторе уже "потеряет" актуальность.
    А вот параметры %arg3% однозначно придётся передавать в виде переменной.
     
  15. vrnRaptor

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

    Баллы:
    68
    Спасибо за разъяснения, попробую реализовать.
    И еще пара вопросов:
    1. Cильно ли влияет на производительность наличие нескольких таймеров с интервалом срабатывания 1 сек? А то я решил реализовать добавление времени задержки DELAY_PLAYER используя переменную меняющуюся по таймеру.
    2. Можно ли как-то запускать созданные команды от имени сервера, в консоли они не работают?
     
    Последнее редактирование: 13 сен 2015
  16. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @vrnRaptor
    1. Важно не наличие таймеров, а что они выполняют. Если каждую секунду происходит заливка огромных площадей посредством BLOCK_FILL, то это одна история. А если это работа с переменными - другая. В данном случае - всё будет ок.

    Но в любом случае, будем упрощать жизнь ;)
    0.9.9/3
    http://adf.ly/1K0nlW
    • В действия DELAY и DELAY_PLAYER добавлен параметр add. При значении add:true значение задержки будет увеличивать на значение указанное в параметре "time".

    2. Нет, запускать команды созданные посредством ReActions из консоли нельзя. Дело в том, что это не полноценные команды, а обработка события ввода команды.
    Но это и не нужно. Можно создавать EXEC активаторы и запускать их при помощи команды /exec (см. тут внизу страницы: http://reactions.fromgate.ru/commandsandpermissions.htm)
     
    Последнее редактирование: 13 сен 2015
  17. vrnRaptor

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

    Баллы:
    68
    Новые функции, замечательно, буду избавляться от костылей :good:
    Понял, сделаю так, спасибо за поддержку.

    upd.
    При такой конструкции DELAY_PLAYER с параметром add:true меняет значение задержки на немыслимо большое, независимо от вводимого параметра.
    Код:
    COMMAND:
      test:
      override: true
      regex: true
      command: cmd:test arg1:add arg2:* arg3:*
      flags:
      - DELAY_PLAYER=id:premium_countdown player:%arg2%
      actions:
      - DELAY_PLAYER=id:premium_countdown player:%arg2% time:%arg3%
      - CMD_CONSOLE=pex group Premium user add %arg2%
      - MESSAGE=&2Спасибо за активацию Premium подписки. player:%arg2%
      - MESSAGE=&2Теперь вы являетесь членом группы Premium. player:%arg2%
      - MESSAGE=&2До окончания времени действия Premium подписки осталось %delay-left%. player:%arg2%
      reactions:
      - DELAY_PLAYER=id:premium_countdown add:true player:%arg2% time:%arg3%
      - MESSAGE=&2Время действия Premium подписки изменено. player:%arg2%
      - MESSAGE=&2До окончания времени действия Premium подписки осталось %delay-left%. player:%arg2%
    
     
    Последнее редактирование: 13 сен 2015
  18. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Зачем Вы используете регулярку, применяя первый формат описания команды?
     
    Последнее редактирование: 13 сен 2015
  19. vrnRaptor

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

    Баллы:
    68
    Потому что я не вижу большой разницы, с этим параметром и без него все работает одинаково. На использование каких регулярных выражений влияет этот параметр? Может быть я что-то упустил?
     
  20. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Регулярки писать и проверять можно здесь: http://regex101.com/
    Смотрите сами на требуемый и действительный результат.
    Формат "argN:*" применяется без регулярок, так как он был создан первым, иначе выражение будет рассматриваться как синтаксис регулярок.
     

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