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

@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 подписки.
 
Последнее редактирование:
@fromgate , такой вопрос по поводу добавления команд. Есть ли вариант добавить аргумент, который забирает всю строку текста после набранной команды?
Например, /mycommand какой-то текст, который придумал я сам и хочу его сохранить куда-то.
В итоге я хочу получить плейсхолдером значение в "какой-то текст, который придумал я сам и хочу его сохранить куда-то." и уже проводить с ним операции. Возможно ли добавление этого? Ооочень нужно..
 
@fromgate , такой вопрос по поводу добавления команд. Есть ли вариант добавить аргумент, который забирает всю строку текста после набранной команды?
Например, /mycommand какой-то текст, который придумал я сам и хочу его сохранить куда-то.
В итоге я хочу получить плейсхолдером значение в "какой-то текст, который придумал я сам и хочу его сохранить куда-то." и уже проводить с ним операции. Возможно ли добавление этого? Ооочень нужно..
Если я вас правильно понял, то делается это следующим образом:
Код:
  test_command:
    override: true
    regex: false
    command: test
    actions:
    - MESSAGE=%args%
При вводе команды /test <Hello world!> в чат будет выводиться сообщение: Hello world!
То есть все аргументы команды /test будут выводиться в чат.
 
@vrnRaptor, нет.
С таким форматом он выводит только команду /test (которая считается нулевым аргументом). А если вбивать еще текст после этого - ничего не происходит. Аргументы еще пишутся в строке с командой (взгляд с конфига)
 
@vrnRaptor, нет.
С таким форматом он выводит только команду /test (которая считается нулевым аргументом). А если вбивать еще текст после этого - ничего не происходит. Аргументы еще пишутся в строке с командой (взгляд с конфига)
странно, если судить по документации, то должно бы выводить именно то, что нужно.
 
С таким форматом он выводит только команду /test (которая считается нулевым аргументом). А если вбивать еще текст после этого - ничего не происходит. Аргументы еще пишутся в строке с командой (взгляд с конфига)
Действительно, очень странно. Только что для верности скопировал свой код в конфиг и проверил, все прекрасно работает, выводится только текст без команды.
 
@vrnRaptor, нет.
С таким форматом он выводит только команду /test (которая считается нулевым аргументом). А если вбивать еще текст после этого - ничего не происходит. Аргументы еще пишутся в строке с командой (взгляд с конфига)

Это странно. Проверю сегодня.
 
Это напомнило мне работу с триггерами из редактора карт Warcraft III
И напиши на какие версии)
 
@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 подписки.

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

2. Попробуйте вместо "arg2:.*" - arg2:* (без точки, тут регулярные выражения не поддерживаются)
 
Попробуйте вместо "arg2:.*" - arg2:* (без точки, тут регулярные выражения не поддерживаются)
Спасибо, все работает.
Вы вызываете команду и передаете ей парамет all - естественно она так и работает.
Как вариант - из этого активатора вызывать активатор EXEC и передавать ему в параметрах имя игрока, тогда если там будет указано "all" то он выполнится для каждого игрока.
Сделать так можно, но как тогда передать имя игрока в флаг, ведь тут надо еще и время указывать:
Код:
- DELAY_PLAYER=id:premium_countdown player:%arg2% set-time:%arg3%
Конечно это можно сделать через персональную переменную. Но может есть более простой способ?
 
Спасибо, все работает.

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

При вызове активатора действием EXECUTE (да и из командной строки) надо указать имя player:all и тогда активатор будет выполнет столько раз сколько игроков на сервере, при этом применительно к каждому игроку.
Соответственно имя игрока - уже будет сидеть в плейсхолдере %player%, a %arg2% в этом активаторе уже "потеряет" актуальность.
А вот параметры %arg3% однозначно придётся передавать в виде переменной.
 
При вызове активатора действием EXECUTE (да и из командной строки) надо указать имя player:all и тогда активатор будет выполнет столько раз сколько игроков на сервере, при этом применительно к каждому игроку.
Соответственно имя игрока - уже будет сидеть в плейсхолдере %player%, a %arg2% в этом активаторе уже "потеряет" актуальность.
А вот параметры %arg3% однозначно придётся передавать в виде переменной.
Спасибо за разъяснения, попробую реализовать.
И еще пара вопросов:
1. Cильно ли влияет на производительность наличие нескольких таймеров с интервалом срабатывания 1 сек? А то я решил реализовать добавление времени задержки DELAY_PLAYER используя переменную меняющуюся по таймеру.
2. Можно ли как-то запускать созданные команды от имени сервера, в консоли они не работают?
 
Последнее редактирование:
@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)
 
Последнее редактирование:
В действия DELAY и DELAY_PLAYER добавлен параметр add. При значении add:true значение задержки будет увеличивать на значение указанное в параметре "time".
Новые функции, замечательно, буду избавляться от костылей :good:
Нет, запускать команды созданные посредством ReActions из консоли нельзя. Дело в том, что это не полноценные команды, а обработка события ввода команды.
Но это и не нужно. Можно создавать EXEC активаторы и запускать их при помощи команды /exec (см. тут внизу страницы: http://reactions.fromgate.ru/commandsandpermissions.htm)
Понял, сделаю так, спасибо за поддержку.

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%
 
Последнее редактирование:
Зачем Вы используете регулярку, применяя первый формат описания команды?
Потому что я не вижу большой разницы, с этим параметром и без него все работает одинаково. На использование каких регулярных выражений влияет этот параметр? Может быть я что-то упустил?
 
Потому что я не вижу большой разницы, с этим параметром и без него все работает одинаково. На использование каких регулярных выражений влияет этот параметр? Может быть я что-то упустил?
Регулярки писать и проверять можно здесь: http://regex101.com/
Смотрите сами на требуемый и действительный результат.
Формат "argN:*" применяется без регулярок, так как он был создан первым, иначе выражение будет рассматриваться как синтаксис регулярок.
 
Назад
Верх