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

Вообще селектор игроков как раз работает по принципу "и".
Т.е. если указать:
player:{player:fromgate loc:world,20,20,20 radius:10 region:rg-test}
то это список будет включать игрока fromgate и всех остальных которые описаны названием региона и локацией с радиусом.
Но этот работает как и в регионе, как и в локации отдельно:
ra run activator:Activator-Exec-7-Test player:{loc:{loc:Activator-Exec-7-Test radius:3} region:rg-test}

И, если нельзя указать пересечение локаций, то как это сделать?
Как насчёт действия ITEM_INVENTORY_DROP? Используя его вместе с активатором выхода игрока из игры, можно было бы сделать улучшенную копию плагина на выброс вещей при выходе из PvP. При чём, куда более удобную и масштабируемую :)
 
@Lyosha12
Не совсем поняли друг друга. Текущий селектор работает не как фильтр, а просто собирает единый список из всех игроков. Т.е. если указать регион и пермишен - то это будут игроки в регионе (у которых может и не быть пермишена) и игроки у которых есть пермишен (но которые при этом находятся вне этого региона).
Итак, фиксируем версию.

v0.9.6
  • Добавлен активатор MOB_DAMAGE
  • Теперь все сообщения (включая сообщения от действия MESSAGE) ограничены 55 символами (в связи с выявлением бага в майнкрафте связанного с различием длины строк с использованием unicode-шрифта). Это значение меняется в файле config.yml
  • Селектор игроков теперь поддерживает дополнительные параметры: loc, radius.
  • Действие MESSAGE теперь поддерживает дополнительный параметр "hide" - для того чтобы отображать "надоедливые", повторяющиеся сообщения реже.
  • Активаторы PVP_DEATH и PVP_RESPAWN модифицированы и переименованы в PLAYER_DEATH и PLAYER_RESPAWN. Новый активатор поддерживает различные причины смерти: PVE (игрок убит мобом), PVP (игрок убит другим игроком) и OTHER (другие причины).
  • Новая команда /exec <ИмяАктиватора> [player:<СписокИгроков>] [delay:<Время>]. Эта команда - это краткая альтернатива для команды /react run.
  • Оптимизация кода, исправление выявленных ошибок.
Просьба качать со спигота (и после закачки ставить "звездочки") -- может так о плагине узнает чуть больше народу.

https://www.spigotmc.org/resources/reactions.8754/
 
Уникальный, идейный, отличный плагин, а самое главное от реально крутого чювака! Всегда буду пользоваться твоими шедеврами! :good:
 
Активаторы PVP_DEATH и PVP_RESPAWN модифицированы и переименованы в PLAYER_DEATH и PLAYER_RESPAWN. Новый активатор поддерживает различные причины смерти: PVE (игрок убит мобом), PVP (игрок убит другим игроком) и OTHER (другие причины).
Про ANY не забыли? :D
Не совсем поняли друг друга. Текущий селектор работает не как фильтр, а просто собирает единый список из всех игроков. Т.е. если указать регион и пермишен - то это будут игроки в регионе (у которых может и не быть пермишена) и игроки у которых есть пермишен (но которые при этом находятся вне этого региона).
Тогда как можно написать ситуацию, где что-то проверяет пересечение двух радиусов от сущностей?
Почему предмет не преобразовывается в строку?
/ra add ITEM_CLICK Activator-ITEM_CLICK-2 %PLAYER_ITEM_HAND%
Не работает действие
- ITEM_REMOVE_INVENTORY=type:267 amount:3
Хотя выдача с теми же аргументами работает нормально... Если это сделано исключительно по тому, что ID больше не поддерживаются в высших версиях, то организация этой поддержки может поставить ReActions на одну ступень с самыми популярными и нужными плагинами. Ведь, все привыкли к ID... :D

И ничего про этот плейсхолдер в документации я не нашёл. Или плохо искал?
Конечно, я не прошу придумывать ID и для новых предметов. Такой аналог был бы очень хорош в плане простоты использования.
Интересно... Когда я указываю ссылку, иногда, чтобы перейти по ней, нужно нажать на строку ниже, чем сама ссылка. С чем это связано?
Это значение меняется в файле config.yml
Ничего похожего на это значение в конфиге нету...
Код:
general:
  language: english
  check-updates: true
reactions:
  save-empty-actions-and-flags-sections: false
  show-messages-for-actions: tp,grpadd,grprmv,townset,townkick,itemrmv,itemgive,moneypay,moneygive
  center-player-teleport: true
  region-recheck-delay: 2
  item-hold-recheck-delay: 2
  item-wear-recheck-delay: 2
  horizontal-pushback-action: false
actions:
  shoot:
    break-block: GLASS,THIN_GLASS,STAINED_GLASS,STAINED_GLASS_PANE,GLOWSTONE,REDSTONE_LAMP_OFF,REDSTONE_LAMP_ON
    penetrable: FENCE,FENCE_GATE,IRON_BARDING,IRON_FENCE,NETHER_FENCE
MySQL:
  server: localhost
  port: '3306'
  database: ReActions
  username: root
  password: password
  codepage: ''

А как писался плейсхолдер, который генерирует описание предмета в ячейке? И как распределяются ячейки?
@fromgate, а почему невозможна проверка нескольких строк описания одним регулярным выражением? Ведь, если поставить модификаторы gui, то мы получим соответствие выражению в любом регистре, строке и количестве.

А такая проверка очень нужна, если требуемое слово находится в разных предметах на разных строках. Да, создать несколько активаторов с отловом каждой строки можно, но зачем тогда соответствующие модификаторы?
 
Последнее редактирование:
Про ANY не забыли? :D
Нет, это ж краткое описание. На сайте с инструкцией указано.

Тогда как можно написать ситуацию, где что-то проверяет пересечение двух радиусов от сущностей?
Надо подумать. Может потом что-то сотворить можно будет.

Почему предмет не преобразовывается в строку?
/ra add ITEM_CLICK Activator-ITEM_CLICK-2 %PLAYER_ITEM_HAND%
Ну представь надо было добавить такой плейсхолдер для того чтобы его записывать в переменную.
Результат был бы...
Вообще надо подумать. Либо сделать что-то вроде доп.переменной, в которую можно записать любое значение в процессе редактирования и его использовать. Либо ещё что-то придумать. Если есть мысли - предлагай. Главное чтобы это удобно было.

Не работает действие
- ITEM_REMOVE_INVENTORY=type:267 amount:3
Хотя выдача с теми же аргументами работает нормально... Если это сделано исключительно по тому, что ID больше не поддерживаются в высших версиях, то организация этой поддержки может поставить ReActions на одну ступень с самыми популярными и нужными плагинами. Ведь, все привыкли к ID... :D
Нет, это должно работать. Даже в 1.8.7 - там тоже есть ID на уровне баккита. Проверю.

И ничего про этот плейсхолдер в документации я не нашёл. Или плохо искал?
Конечно, я не прошу придумывать ID и для новых предметов. Такой аналог был бы очень хорош в плане простоты использования.
О! Забыл наверное, там же есть ещё несколько плейсхолдеров про которые надо написать. Вечером напишу.


Интересно... Когда я указываю ссылку, иногда, чтобы перейти по ней, нужно нажать на строку ниже, чем сама ссылка. С чем это связано?
Вообще не знаю. Никогда не пользовался. Честно говоря, подозреваю, что при этом майнкрафт пытается (или должен) вывести хинт-подсказку и она должна быть ссылкой, но не выводит. Но это только мои домыслы, которые ничем не подкреплены ;)

Ничего похожего на это значение в конфиге нету...
О! Моя ошибка. Читать значение читаю, а сохранять - не сохраняю. Параметр "reactions.default-chat-line-length" - если его создать, то работать будет. Оставим до следующей версии на моей совести ;)

А как писался плейсхолдер, который генерирует описание предмета в ячейке? И как распределяются ячейки?
%PLAYER_INV:<НомерСлота>%, для брони %PLAYER_INV:helmet%, %PLAYER_INV:chestplate%, %PLAYER_INV:leggings% и %PLAYER_INV:boots%

Вечером, постараюсь внести в инструкцию.

@fromgate, а почему невозможна проверка нескольких строк описания одним регулярным выражением? Ведь, если поставить модификаторы gui, то мы получим соответствие выражению в любом регистре, строке и количестве.

А такая проверка очень нужна, если требуемое слово находится в разных предметах на разных строках. Да, создать несколько активаторов с отловом каждой строки можно, но зачем тогда соответствующие модификаторы?

Я понял. Подумаю. Мне показалось так проще. Я поэкспериментирую (меня смущает, то как будет распознаваться символ "\n")
 
Я понял. Подумаю. Мне показалось так проще. Я поэкспериментирую (меня смущает, то как будет распознаваться символ "\n")
Вообще, новые строки распознавались, когда я включил в конструкцию флаг g. Значит, за перенос строк отвечает какой-то параметр из конструкции регулярок. Следовательно, его и надо применять. Или сделать что-то, чтобы "\n" было равнозначно тому параметру. Или вообще убрать "\n", а оставить только подсказку с тем, как именно использовать модификаторы. Я про "(?...)" - сам на сайте проверки regex не видел такого, но это работает и там.
Ну представь надо было добавить такой плейсхолдер для того чтобы его записывать в переменную.
Результат был бы...
Вообще надо подумать. Либо сделать что-то вроде доп.переменной, в которую можно записать любое значение в процессе редактирования и его использовать. Либо ещё что-то придумать. Если есть мысли - предлагай. Главное чтобы это удобно было.
Может встроить "невидимый активатор" COMMAND? Когда пишется такая команда именно с таким плейсхолдером, она отменяется и выполняется другая: плейсхолдер заносится во временную переменную, а из неё подставляется в команду через действие CMD. Следом за этим, временная переменная удаляется, а пользователь доволен.

Однако, зачем костыли? Почему нельзя сделать парсинг этого плейсхолдера как и в конфиге? Или тут дело в каких-то глубинных противоречиях или совпадениях переменных?
Надо подумать. Может потом что-то сотворить можно будет.
Я бы предложил усложнить параметр вызова EXEC'a - селектор игрока - таким способом: добавить параметры "and" и "or". Что-то вроде этого: player:{and:{... ... ...} or:{... ... ...}}. Что означало бы соответствие всем условиям-аргументам в and или "хотя бы одному" в or. Вложенность этих параметров друг в друга тоже желательна. Как по мне, получается просто шедеврально удобно в плане использования.
 
Последнее редактирование:
@Norfolc-xxxx
Отвечаю на вопрос из соседней темы.

formgate, я вчера сидел и копался на вашем сайте-туториале, нашёл кое-что и попробовал написать. Выглядит это так:
Код:
EXEC:
  test1:
    actions:
    - CMD_CONSOLE=say hello world 1
    - ACTION_DELAYED=time:10 action:{CMD_CONSOLE say hello world 2}

Запускаю командой: /react run activator:test1
Отклик есть, запущено успешно, результата нет.
Запускаю командой: /react run activator:test1 player:ДляСебя
Вижу в чате дважды первое сообщение и через 10 секунд дважды второе.


Это вообще то что мне нужно? Вроде похоже. И как тогда правильно?

Нет, это не совсем то. Активатор EXEC - это активатор, который не привязан ни к какому событию.

А вот для исходной задачи нужен активатор COMMAND - он привязывается к написанию команды в чат.
Т.е. если исходный активатор переделать так:
Код:
COMMAND:
  test1:
    command: test1
    regex: false
    override: true
    actions:
    - CMD_CONSOLE=say hello world 1
    - ACTION_DELAYED=time:10 action:{CMD_CONSOLE say hello world 2}

То действия будут выполнять тогда когда игрок напишет команду /test1

А вообще, непонятно почему сообщения выводились дважды. Я сегодня перепроверю, может в последней версии чего-то сломал ;)
 
Нет, это не совсем то. Активатор EXEC - это активатор, который не привязан ни к какому событию.
Ещё раз поясню то, что мне нужно... Надо чтобы при вводе какой либо (всё равно какой) команды в консоль выполнялся ряд команд из других плагинов в строгой последовательности и с промежутками между ними.
И да, раз уж на то пошло, я не нашёл никаких упоминаний на вашем сайте-туториале про эти параметры:
regex: false
override: true

За что они отвечают в примере выше?
 
v0.9.6/1
Добавил действие WAIT (параметр - time:<Время>). Это действие приостанавливает выполнение действий на указанное время. К примеру, если у вас всего пять действий и третье из них WAIT time:10s то первые действия будут выполнены сразу. А оставшиеся два - через десять секунд.
 
@fromgate
Ну ты чо???
Как теперь работает ITEM_GIVE?????
Я НЕ ПОНИМАЮ!!! Приведи примеры!
 
@BrainRTP
Описание формата тут: http://reactions.fromgate.ru/item_format.htm
Пример:
ITEM_GIVE type:IRON_SWORD name:{&6Ultra Sword} lore:{Это супер-пупер меч!}


Залил новый девбилд: 0.9.6/2
Изменение - давно запрашиваемая возможность запоминать ACTION_DELAYED при выходе игрока и выполнять когда игрок вернётся. Аналогично запоминаются действия WAIT.

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

Т.е. если, задано время ожидание на 1 час, а игрок ушёл, прогулял 45 минут, то действие выполнится через 15 минут после входа.


В общем прошу, у кого есть возможность погонять, вдруг какие-то ошибки вылезут...
 
@fromgate
Рили? Просто у меня немного припекает) я ввел вот это:
2015-07-15_00.06.09.png
 
@BrainRTP
Версия плагина какая стоит? Сейчас перепроверю у себя.
@BrainRTP
Ну вот такой активатор у меня отлично работает:
Использовать так: /g type:IRON_SWORD name:... и т.д.
Код:
COMMAND:
  gggg:
    override: true
    regex: false
    command: g
    actions:
    - 'MESSAGE=&6Give: %args%'
    - 'ITEM_GIVE=%args%'

Вообще на скрине, явно не версия 0.9.6, а какая-то другая.
 
А можно извлечь слово из предмета, который описывается через регулярку в активаторе ITEM_CLICK?
 
А можно извлечь слово из предмета, который описывается через регулярку в активаторе ITEM_CLICK?

Слово? что имеется в виду?

Ввести нечто вроде сохраненной переменной, - которая хранится в lore.
Т.е. если к примеру в lore написано:
"Супер меч, принадлежащий
пьяному монаху.
Сила: +5
Опыт: +10
Ум: -100"
То у этого предмета будет три переменных:
Сила, Опыт и Ум с соответствующими значениями.

Но это пока только в мыслях.
 
Слово? что имеется в виду?

Ввести нечто вроде сохраненной переменной, - которая хранится в lore.
Т.е. если к примеру в lore написано:
"Супер меч, принадлежащий
пьяному монаху.
Сила: +5
Опыт: +10
Ум: -100"
То у этого предмета будет три переменных:
Сила, Опыт и Ум с соответствующими значениями.

Но это пока только в мыслях.
Допустим, ITEM_CLICK включается для предмета с lore "Test %random:1-5%". Вот это второе слово мне и нужно вывести. Иначе получится, что для каждого значения мне нужно создавать свой активатор.
Боюсь спросить: а в таймере можно указывать что-то кроме ников, all и null?
Нельзя :(
player: region:world_the_end.parkour,world_the_end.dropper
Предлагаю добавить флаг, который бы проверял, не телепортировался ли игрок в ближайшее %время%. При чём, нужен параметр типа "игнорировать ли телепортации от ReActions".
 
@fromgate
Пожалуйста, скажи, что не так?
В timers.yml написано вот это:
mine1:
time: 0 0/720 * * * ?
player: all
paused: 'false'
activator: mine1

720 минут = 12 часов... Но он срабатывает несколько раз за час!
Пожалуйста, приведи наглядный пример с таймером в час и день.

Вот что происходит (это за 1 секунду!)
2015-07-16_06.59.44.png
 
@fromgate
Пожалуйста, скажи, что не так?
В timers.yml написано вот это:
mine1:
time: 0 0/720 * * * ?
player: all
paused: 'false'
activator: mine1

720 минут = 12 часов... Но он срабатывает несколько раз за час!
Пожалуйста, приведи наглядный пример с таймером в час и день.

Вот что происходит (это за 1 секунду!)
Посмотреть вложение 34299
Нужный активатор выполняется для всех игроков отдельно. А сам активатор от каждого игрока выполняет свои действия, которые не зависят друг от друга.
 
@BrainRTP
Поскольку там неважно, чтобы игрок был в наличии, то нужно указать player:null
player:all - это запуск для всех игроков (т.е. сколько игроков на сервере, столько активаторов и запустится).

По поводу 720 минут - честно говоря, никогда такого не пробовал. Может в самой библиотеки по этому поводу происходят какие-то чудеса. Поэтому я бы порекомендовал вот такой вариант: 0 0 0/12 * * ?. Должно отрабатывать в 0:00 и в 12:00
 
Назад
Верх