Войти или зарегистрироваться

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

Код:
REGION_ENTER:
  region_ps1:
    region: world.ps1
    actions:
    - 'MENU_ITEM=size:9 title:{Собрать пшеницу?} slot1:{106} slot2:{type:106} slot3:{106}
      slot4:{type:160 data:5 name:{&aДа} enchantments:ARROW_DAMAGE:1} exec4:Wheat_1 slot5:{type:106}
      slot6:{type:160 data:14 name:{&4Нет} enchantments:ARROW_DAMAGE:1} slot7:{106} slot8:{106} slot9:{106}'

EXEC:
  Wheat_1:
    flags:
    - REGION=world.ps1
    - DELAY_PLAYER=id:wheatcontrol_1 set-time:3h
    actions:
    - 'MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106}
      slot8:{106} slot9:{106} slot10:{type:295} slot11:{type:295} slot12:{type:295} slot13:{type:295} slot14:{type:295} slot15:{type:295} slot16:{type:295} slot17:{type:295} slot18:{type:295}
      slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}'
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:295} slot12:{type:295} slot13:{type:295} slot14:{type:295} slot15:{type:295} slot16:{type:295} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:295} slot13:{type:295} slot14:{type:295} slot15:{type:295} slot16:{type:295} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:295} slot14:{type:295} slot15:{type:295} slot16:{type:295} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:296} slot14:{type:295} slot15:{type:295} slot16:{type:295} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:296} slot14:{type:296} slot15:{type:295} slot16:{type:295} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:296} slot14:{type:296} slot15:{type:296} slot16:{type:295} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:296} slot14:{type:296} slot15:{type:296} slot16:{type:296} slot17:{type:295} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:296} slot14:{type:296} slot15:{type:296} slot16:{type:296} slot17:{type:296} slot18:{type:295} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - WAIT=1s
    - MENU_ITEM=size:27 title:{§9Сбор урожая} slot1:{106} slot2:{106} slot3:{106} slot4:{106} slot5:{106} slot6:{106} slot7:{106} slot8:{106} slot9:{106} slot10:{type:296} slot11:{type:296} slot12:{type:296} slot13:{type:296} slot14:{type:296} slot15:{type:296} slot16:{type:296} slot17:{type:296} slot18:{type:296} slot19:{106} slot20:{106} slot21:{106} slot22:{106} slot23:{106} slot24:{106} slot25:{106} slot26:{106} slot27:{106}
    - 'ITEM_GIVE=type:296 amount:1'
    reactions:
    - CANCEL_EVENT=true
    - MSG=&cСледующий сбор урожая будет доступен через &7&o%delay-left%
 
Последнее редактирование:
Активатор BLOCK_CLICK модифицировал.
1. Если ввести команду без параметров и смотреть на блок (например, CHEST):

/react add BLOCK_CLICK bc99
получим:
Код:
BLOCK_CLICK:
  bc99:
    block-type: CHEST
    click-type: ANY
    location: world,-1310.0,63.0,-13.0,0.0,0.0
1. Если ввести команду без параметров и смотреть в небо:

/react add BLOCK_CLICK bc100
получим:
Код:
BLOCK_CLICK:
  bc100:
    block-type: ''
    click-type: ANY
2. Если ввести команду с параметрами, где параметр типа материала не совпадает с блоком, на который игрок смотрит (ввели CHEST, а смотрим на DIRT или др. блок) :

/react add BLOCK_CLICK bc102 type:chest loc:world,100,100,100
то получим следующее:
Код:
  bc102:
    block-type: chest
    click-type: ANY
    location: world,100,100,100
3. Если ввести команду с параметрами, где параметр типа материала совпадает с блоком, на который игрок смотрит (ввели CHEST и смотрим на CHEST) :
/react add BLOCK_CLICK bc103 type:chest loc:world,100,100,100
то получим следующее:
Код:
  bc103:
    block-type: chest
    click-type: ANY
    location: world,-1310.0,63.0,-13.0,0.0,0.0
Здесь координаты заменятся на координаты блока, на который смотрит игрок

4. Теперь работает имя локации
/react add BLOCK_CLICK bc104 type:chest loc:chestloc
Код:
  bc104:
    block-type: chest
    click-type: ANY
    location: chestloc
Имейте ввиду, команда /ra add loc chestloc сохраняет в файл координаты блока, на котором стоит игрок
 
Последнее редактирование:
build #63
Переработана система вывода сообщений плагина. В идеале, для пользователя это не должно никак влиять. Но если где-то вылезут непереведённые или пропавшие сообщения — пожалуйста сообщайте.
build #66
Расширены возможности действия SHOOT.
Теперь есть возможность при выстреле в игрока/моба вызывать активатор относительно цели.
Описание действия добавлено в вики: https://github.com/Redolith/ReActions/wiki/Действие-SHOOT
 
а можно ли в активаторе Item_click использовать предметы, в названии которых 2 слова через пробел?
 
а можно ли в активаторе Item_click использовать предметы, в названии которых 2 слова через пробел?
Да, конечно. Тогда название надо заключать в фигурные скобки:
name:{Слова через пробел}
 
build #71
Добавлено действие GLIDE и флаг состояния игрока: STATE=GLIDE
Описание: https://github.com/Redolith/ReActions/wiki/Действие-GLIDE

Флаг GLIDE проверяет, не летает ли игрок на элитрах. Действие GLIDE может запретить полёт на Элитрах
 
build #71
Добавлено действие GLIDE и флаг состояния игрока: STATE=GLIDE
Описание: https://github.com/Redolith/ReActions/wiki/Действие-GLIDE

Флаг GLIDE проверяет, не летает ли игрок на элитрах. Действие GLIDE может запретить полёт на Элитрах
Прям как раз к моменту, когда закончил строить паркур. Огромное спасибо! :)

Как можно проверить у игрока наличие эффектов? Выполнять команду очистки каждый раз == флудить в консоль, а этого хотелось бы избежать.
 
Не работает отмена записи строки в лог-файл:
Код:
  Remove_LogRemoveEffects:
    source: LOG_OUTPUT
    type: REGEX
    mask: .*Couldn't take any effects from \S+ as they do not have any
    actions:
    - CANCEL_EVENT=true
Строку вызывает активатор REGION:
Код:
  Anti-Effects:
    actions:
    - CMD_CONSOLE=effect %player% clear
Результирующая строка:
upload_2017-5-9_2-52-34.png
Что я делаю не так?
 
Последнее редактирование:
Есть вот такой активатор (кусочек от всего):
Код:
ITEM_CLICK:
  WindStaff:
    item: 'type:STICK data:0 enchantments:LUCK:1 name:{&6Элементальный Посох
    &7- &b&oВетер} lore:{\n&7Элемент: &b&oВетер\n\n&7&eПравый Клик&7, чтобы запустить
    себя вперёд} regex:false'
    flags:
    - DELAY_PLAYER=id:windstaff set-time:2s
    actions:
    - 'CMD_CONSOLE=openaudio play %PLAYER_NAME% https://www.dropbox.com/s/w4pw6fdszc6u34l/air.ogg?dl=1'
Нужно сделать так, чтобы CMD_CONSOLE выполнялось для самого игрока и всех окружающих его игроков в радиусе 7 блоков от него самого. Как это можно реализовать?
 
Есть вот такой активатор (кусочек от всего):
Код:
ITEM_CLICK:
  WindStaff:
    item: 'type:STICK data:0 enchantments:LUCK:1 name:{&6Элементальный Посох
    &7- &b&oВетер} lore:{\n&7Элемент: &b&oВетер\n\n&7&eПравый Клик&7, чтобы запустить
    себя вперёд} regex:false'
    flags:
    - DELAY_PLAYER=id:windstaff set-time:2s
    actions:
    - 'CMD_CONSOLE=openaudio play %PLAYER_NAME% https://www.dropbox.com/s/w4pw6fdszc6u34l/air.ogg?dl=1'
Нужно сделать так, чтобы CMD_CONSOLE выполнялось для самого игрока и всех окружающих его игроков в радиусе 7 блоков от него самого. Как это можно реализовать?
Подобную штуку я тоже хотел сделать. В твоём случае можно прикрутить активатор EXEC с указанием локации и радиуса - сделать не сложно. А в моём случае нужен новый активатор :D
10. Как насчёт активатора, который срабатывает при присутствии другого игрока\игроков в радиусе от третьего игрока, где всем игрокам заданы флаги\переменные? Например:
Хочу я сделать мини-игру на подобии гонок с боссом в NFS Carbon. Очки будут начисляться по времени нахождения одного игрока рядом с другим.

Хотя, если его добавить, то он будет запускаться для каждого игрока, даже если флаги отрабатывать не будут. А уж что говорить, если игроков будет под 50... Видимо, поэтому @fromgate и не добавил его в то время, когда я предлагал)
11. Как насчёт функции сохранения инвентаря, как во многих плагинах? Например:
Действием "SaveInv=%player%/NameSave" инвентарь будет сохранён в БД.
А действием "GiveInv=%player%/NameSave" инвентарь будет выдан игроку в те же слоты, где и был.
Просто, но чертовски экономит время :)
Поднимаю старые, но нужные идеи)
Поднимаю старые, но до сих пор актуальные идейки)
8. Установить поиск текста по регулярным выражениям можно. А можно ли ссылаться на текст по регулярным выражениям? Например, я придумал небольшую идейку: игрок, выполняя действие, создаёт несколько активаторов с динамическим именем "Activator%player%". (cmd_op=ra add ActivatorType Activator%player% данные)

А если мне надо удалить этот активатор с динамическим именем? При чём, этот активатор может запускать и другой игрок, который к предыдущему не имеет ни какого отношения. Как насчёт использования регулярных выражений в действиях? Например:
В данном случае имеется в виду, что регулярное выражение выполняет роль маски типа "полностью соответствует". Фактически, указывая, что имя может быть любым "в пределах регулярного выражения", нужно выполнять семейство действий, где вместо регулярного выражения будет подставлен соответствующий эквивалент уже "константной" строки.

Ну и алгоритм реализации прост: перебрать все активаторы и найти совпадения. Однако, если активаторов будет много, желательно иметь возможность указать конкретную директорию (которых ещё нет, эхх...)\файл, где находятся нужные активаторы.
Код:
EXECUTE=activator:ActivatorName%regex:\S+%
CMD_CONSOLE=ra remove activator ActivatorName%regex:\S+%
 
Последнее редактирование:
В твоём случае можно прикрутить активатор EXEC с указанием локации и радиуса - сделать не сложно.
Умно) Но ReActions не хочет создавать активаторы, если вводить их через чат (создаёт пустой activators.yml и всё). Можно пример EXEC в конфиге с использованием значений player, loc, radius, region...?
 
Умно) Но ReActions не хочет создавать активаторы, если вводить их через чат (создаёт пустой activators.yml и всё). Можно пример EXEC в конфиге с использованием значений player, loc, radius, region...?
Недавно же обсуждалось. Почему-то мне не лень, а даже интересно читать пропущенные 20 страниц этой темы. Почему тебе лень прочитать 5 прошлых страниц?)

Чтобы плейсхолдеры, созданные для текущего активатора, не работали, есть 2 варианта:
1) Запустить EXEC для игрока null. В этом случае никаких локальных плейсхолдеров в принципе не будет, если только их не создать действием. Однако, так как у нас тут нет функций, передачу аргументов в нашу EXEC-функцию нужно осуществлять ручками: создаём переменные в вызывающем активаторе, удаляем переменные в вызванном EXEC.
2) Поставить действие WAIT. @fromgate говорил, что после выполнения этого действия активатор уже "закончил свою жизнь" и локальные плейсхолдеры будут удалены. Относительно %player% не проверял. С передачей значений временных плейсхолдеров и подстановкой самих плейсхолдеров (уже не существующих на момент вызова WAIT), думаю, разберёшься.
3) Дождаться обновления, в котором можно будет экранировать плейсхолдеры от лишнего обрабатывания (уже столкнулся остро с этой проблемой: нужно было создавать около 20 временных переменных, а потом их ещё и удалять. Плюнул, обошёлся без лишнего функционала. Обидно, но красоту кода я всё-таки стараюсь щадить :))
17. Почему бы к плейсхолдеру %player% не приделать флаги? Например: %player; REGION=region GROUP=group PERM=...%. Работа была бы упрощена до невозможности. Не нужно будет ссылаться на левые EXEC'и :)
 
Ничего для работы со списками нет. В теории можно извращаться с переменными, но.... Пока оставлю без коменатария, чтобы не плодить обещания, которые возможно не смогу выполнить ;)
И всё-таки, сортировка, как я понял, учась в универе - одно из ключевых действий в повседневной работе пользователя. А что уж говорить про ивенты? Предлагаю несколько вариантов реализации:
1) Плейсхолдер, сортирующий входную последовательность по критерию. Пример:
Имеется база игроков (файл переменных :D), которая хранится в таком виде: у каждого игрока, который в базе, есть переменная X, установленная, допустим, в true. Нужно отсортировать по убыванию/возрастанию этих игроков по переменной Y, которая так же может быть той самой X. Результатом будет временный список значений в формате "Игрок: Y". Этот список уже можно будет обработать с помощью недавно добавленного действия REGEX.
Код:
%sort_XY:<переменная, необходимая для включения игрока в список сортировки>, <переменная-критерий сортировки>, <по убыванию\возрастанию>%
2) Плейсхолдер сортировки входящего списка значений с заданным разделителем сортируемых объектов. В качестве критерия сортировки будет регулярное выражение, поэтому сортировка будет в алфавитном порядке. Вопрос только в каком: прямом или обратном? В результате - отсортированный список в формате "Объект: %REGEX, по которому сортировали%".
Код:
%sort_list:<{список с запятыми-разделителями объектов сортировки}>, <regex:{критерий сортировки}> <порядок: прямой\обратный>%
Очень хорошая идея для активатора. Добавлю.
Обещанного три года ждут?)
Добавлен флаг BLOCK (параметры: loc:<Локация> block:<ТипБлока>
Если о флаге FLY даже не было заявлено, то этот мы вообще потеряли :D
 
автор говорил когда-то что лучше не использовать CMD_OP
Была такая проблема, но я научился её недопускать. Опка сохранялась, когда во время выполнения команды CMD_OP игрок дисконнектился. При заходе в игру опка оставалась.
Сейчас, проверяю опку с помощью флага OP и таким образом не допускаю её появления.
 
Назад
Верх