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

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

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

  1. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    ReActions

    Плагин ReActions представляет собой инструмент обработки событий. Он позволяет проверять выполнение условий и, в зависимости от результата проверки, выполнять разные действия.

    Скачать плагин
    BukkitDev

    Последний dev-build

    Подробности о ищите читайте на последних страницах темы

    Инструкция к плагину (на английском)


    О разработке плагина (и участии в проекте)

    В настоящее время в разработке плагина участвуют:
    Исходные коды размещены на GitHub'е и, соответственно, каждый желающий может принять участие в развитии плагина.

    При этом не обязательно программировать — мы будем признательны и за помощь с документацией.


    Что такое ReActions
    ReActions – инструмент добавления новых свойств предметам, кнопкам и... событиям. Можно задать действия, выполняемые при нажатии на кнопку или сундук. Можно изменить положение рычага или телепортировать игрока в другое место. Можно проверить, в каком месте находится игрок, и выдать ему зачарованный предмет в награду за убийство босса. Ах да! И босса-моба тоже можно заспавнить... ReActions может взаимодействовать со сторонними плагинами (Vault, Factions, Town и т.д.), чтобы привнести возможность нестандартного использования их возможностей или дать вам более гибко и полно настраивать параметры игрока. К примеру, можно настроить оплату за проход по территории или открытие сундуков и дёргание рычагов. Можно выполнять какие-то дополнительные действия при смене игроком фракции (из плагина Factions) или установить игроку принадлежность к какому-то городу (из плагина Towny).

    И всё это без необходимости изучения скриптовых языков. Нужно лишь несколько минут, чтобы понять принцип действия ReActions, чтобы затем остаться ограниченным лишь своей фантазией.

    Функционал
    • Возможность проверки множества различных условий (флагов): разрешения (permissions) или группы, количество денег у игрока, наличие предмета в инвентаре, в руке, на игроке и т.п.
    • Выполнение различных действий. Можно применить к игроку эффект зелья, отобразить визуальный эффект, телепортировать игрока куда-то, выполнить команду другого плагина и т.д.
    • Можно подписать активатор на различные виды событий. Нажатие кнопки или использование рычага, вход и выход из региона WorldGuard и т.д.
    • Встроенный планировщик (таймеры), выполняющий активаторы в определённое время по часам сервера или игрового мира однажды или периодически.
    • Поддержка MySQL, благодаря чему вы сможете максимально плотно связать игровой мир с сайтом, приложениями или другими плагинами.
    Что я могу сделать используя ReActions?
    Вот простые примеры:
    • Систему платных телепортов (причем платой могут выступать как предметы так и деньги), поддерживающую время отправления и пермишены игрока. Например, можно сделать телепорт который будет работать только днём и в качестве платы будет принимать алмазы.
    • Простейшие магазины для продажи предметов (или наборов). Например можно продавать полный набор алмазной брони простым нажатием на кнопку.
    • Создание ветвлений в квестах. Например, игрок прошедший через регион с мечом в руках попадает в локацию где ему надо сражаться с монстрами, а без меча телепортируется куда-то в другое место.
    • Выполнение команд других плагинов значительно расширяет возможности. Посмотрите видео с плагином ScLoad: при нажатии а кнопку можно возводить целые строения.
    • Вообще, как всегда главное проявить фантазию. Я уже встречал такое применеие ReActions, о котором просто не мог помыслить.
    Видео-демонстрация
    Видео, которое бы демонстрировало, все возможности ReActions создать невозможно. Поэтому по мере сил я снимаю небольшие ролики, которые демонстрируют те или иные функции.



    Взаимодействие с другими плагинами
    ReActions может взаимодействовать со следующими плагинами:
    • Vault- групповые политики прав и экономика.
    • WorldGuard - необходим для использования регионально привязанных активаторов.
    • Towny - можно перемещать игроков между городами, проверять принадлежность игрока к городу.
    • Factions - можно подписывать активаторы на события изменения фракций, изменять принадлежность игрока к фракциям.
    • RacesAndClasses - можно проверять принадлежность игрока к расам и кланам и изменять её.
    • PlayEffect - воспроизведение эффектов частиц.
    • Craftconomy3 - продвинутые возможности экономики, многовалютность.
    Metrics и проверка обновлений
    ReActions включает в себя две функции, которые предполагают доступ к внешним интернет-узлам.

    Во-первых, это сервис Metrics, который используется для сбора статистики (версия плагина, ОС, Java и т.п.).
    Во-вторых, это проверка обновлений ReActions, которая производится после запуска плагина, и в дальнейшем каждые полчаса. Эта функция основана на стандартном API dev.bukkit.org.
    Обе эти функции можно отключить. Проверка обновлений отключается прямо в файле config.yml - "version-check" (false - для отключения). Узнать больше о Metrics и том, как отключить этот сервис, можно тут.

    Древняя история
    Этот плагин переписывался полностью два раза. Изначально он разрабатывался как замена плагину VoxelPort (был необходим плагин реализующий платную транспортную систему), но в процессе я понял, что расширять функционал плагина можно практически бесконечно.

    Благодарности
    • ValeraSTK — за истинную приверженность к ReActions, за "боевое тестирование" и множество идей, без которых ReActions был бы маленьким и глупым ;)
    • КириллН — за безумно огромную работу по приведению документации в человеческий вид, за свежие и интересные идеи.
    • Разработчикам на RuBukkit и BukkitDev, за советы, идеи и подсказки. Имён называть не буду — их очень много (но Galaran, DPOH-VAR, Ission должны понимать, что это относится в первую очередь к ним).
    • @Lyosha12 — за огромную помощь в тестировании и множество идей (пусть не все удается реализовать ;))


    Плагин понравился?
    По старинной русской традиции принимаю донат шоколодками. Ну или на PayPal ;)

    [​IMG]

    Или посредством Яндекс.Денег или пластиковых карт:

    [​IMG]

    ReActions разрабатывается с использованием Jetbrains IntelliJ IDEA

    [​IMG]
     
    Последнее редактирование: 30 апр 2018
    maxzxwd, MrAnanasik, Alexgrist и 37 другим нравится это.
  2. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Наконец-то у меня дошли руки сделать подробную инструкцию. Возможности форума (и BukkitDev) не позволяют опубликовать её "не отходя от кассы".

    Поэтому я решил сделать отдельную веб-страницу, где можно было бы прочитать как пользоваться ReActions.

    Инструкция на русском (перевод пока ещё не полный):
    http://reactions.fromgate.ru/

    Инструкция на английском:
    http://reactions.fromgate.me/

     
    Последнее редактирование: 27 июн 2015
    syllik, The_Luuzzi, 0bsid1 и 19 другим нравится это.
  3. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Быстрые, невидимые зомби:


    Перезаряжаем TNT-пушку


    Настенные часы:


    Регенерация шахты:
     
    Последнее редактирование: 27 июн 2015
    markuha94, AngryLogic, syllik и 10 другим нравится это.
  4. _DarkShark_

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

    Баллы:
    123
    Skype:
    skillofcrash
    Имя в Minecraft:
    _DarkShark_
    Определенно сей лакомый кодовый тортик попадет на мой нубосервер! По идее, облегчит некоторую работу на сервере в разы. Спасибо.
     
    Jack11398 нравится это.
  5. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Ещё один шедевр от fromgate. Даже название темы как название книги великих писателей, просто невозможно пройти мимо.
    Конечно не varscript от dpohvar, но зато работает.
     
    Official_dizziel нравится это.
  6. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Спасибо, конечно :)

    Небольшое обновление:
    • Добавлено действие снятия эффекта зелья - rmvpotion в качестве параметра указываем через запятую все эффекты которые хотим снять или пишем "all" для снятия всех эффектов.
    • Расширена команда /react remove - теперь можно удалять отдельный флаг, действие или реакцию по номеру в списке. Т.е. /react info <активатор> смотрим, допустим номер действия msg в группе actions. И удаляем его /react remove <активатор> a <номер>

    Ну и небольшая демонстрация региона в пределах которого действуют эффекты blindness и jump. При выходе - эффекты удаляются:


    В файле настроек эти активаторы выглядят так:
    Код:
    rgleave:
      jout:
        region: jumper
        flags: []
        actions:
        - rmvpot=ALL
        - msg=&4OUT!
        reactions: []
    rgenter:
      jin:
        region: jumper
        flags: []
        actions:
        - potion=blindness/100000/10
        - potion=JUMP/100000/10
        - msg=&2IN!
        reactions: []
    
     
    Alexgrist, gogasam и _DarkShark_ нравится это.
  7. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    fromgate О!! Как раз этого мне сейчас не хватает в варскрипте :D
    Охх.. сейчас засыплю идеями)
    Активаторы:
    1. Предмет. чтобы можно было создать некий "кристалл телепортации"
    2. Entity. то есть мы кликаем по NPC и что-то происходит
    3. button, plate ... почему бы не сделать один универсальный? просто block. Или даже leftclickblock, rightclickblock
    Флаги:
    1. inregion (если добавишь предметы)
    Действия:
    1. сброс PotionEffects (опоздал постом)
    2. наоборот, добавить какой-либо
    3. setVelocity (встал на платформу, подбросило вверх или на верхний этаж)
    4. еще супер-огромная куча) Не буду заваливать
    Не будет ли баг при использовании:
    /ra add<название активатора> f item MAP:127
    /ra add<название активатора> f item STONE
    т.е. карту уже забрали за оплату, потом ищем камень... не нашли. %противодействие%


    PS: А в целом - очень даже интересный способ обработки событий (копаюсь в коде ;))
     
    fromgate нравится это.
  8. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Это в TODO уже года полтора ;) У меня была идея написать плагин на свитки - карта с определённой картинкой вызывает действия. Не стал писать плагин, когда понял, что это будет функцией ReActions :)

    Дополнение: Уже реализовано в виде активатора ITEM_HOLD

    Entity - тоже продумывал. Возможно даже буду добавлять отдельные флаги на стукнутого игрока и т.п. ;)
    Я даже приятелю описывал потенциал плагина так: "стукнуть в полночь крипера деревянным мечом в глаз...." ;)

    Button и Plate разные - это временно. Просто всё начиналось c button :)
    А вот клик блока блок добавлять буду однозначно отдельно — хочу потом добавить действие на отмену (или включение) события.

    inregion - про это не думал, но однозначно пригодится :)

    Попытка проверки двух предметов в руке однозначно даст ошибку. Точнее это всегда будет false, т.е. отработает reaction.
    соответственно можно комбинировать. Группа флагов item MAP:127 invitem STONE*64 invitem WOOL:5*20 сработает если есть в руке карта №127, а шерсть (нужного цвета и количества) и камни (стак) - в инвентаре.
     
    Последнее редактирование: 26 апр 2014
    Alexgrist и gogasam нравится это.
  9. colderpilot

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

    Баллы:
    103
    Я гдето видал буржуйский аналог, и очч давно.
    Но надеюсь это тоже достойная работа, буду тестить
     
  10. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Почему плагин ещё не в релизах?
     
    HoShiMin и Сникерсни нравится это.
  11. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    • spawnmob <моб>/<локация>
    вот так неплохо было бы сделать. Моба предлагаю читать из заранее созданной nbt-свертки, или просто по имени
    • setblock <blockdata>/<локация/регион>
    опять же, blockdata можно читать из свертки, чтобы можно было ставить абсолютно кастомные блоки.
    • wait <секунды/тики>
    (если возможно) задержка на выполнение всех последующих действий.
    actions:
    - msg=&4Телепортация через 5 секунд!
    - wait=100t
    - tp=location
     
    gogasam, fromgate и Meowt нравится это.
  12. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @DPOH-VAR,
    Ага, мобов точно буду спавнить. Единственное хочу это сделать после того как немного допилю доп.параметры для локации, чтобы можно было задавать рэндомный радиус вокруг точки.
    Кроме того, хочу команду на "заполнение" региона мобами до заданного количества (хотя возможно для таких целей лучше сделать отдельный плагин и просто вызывать по команде). Т.е. к примеру в регионе ходит 10 криперов, а надо 20 - спавнится только 10. Если регион пуст - спавнятся все 20.

    setblock... возможно.. Мы когда квесты мучали использовали rgfill (начинал плагин я, но там уже наш Galaran много натворил, моего кода наверное и не осталось ;))

    А вот wait - это очень хорошая идея, но не при текущей реализации действий (они у меня ещё слишком топорно сделаны). Как сделаю модульность — вот тогда можно будет сделать отложенные действия. А идея отличная.
    Если вспомните — давайте ссылку или название, с удовольствием опробую.
    Я пока встречал только скриптовые: VariableTriggers ну и VarScript, естественно. А именно скриптовости я хотел избежать. Чтобы всё было просто как на бейсике или паскале: IF THEN ELSE и никаких гвоздей ;) Т.е. я даже не стал пытаться впихнуть в структуру подобие OR, даже NOT (которое можно получить подставив перед именем флага восклицательный знак) изначально не планировалось. Но оказалось, что без этого сложно обойтись.
     
    Alexgrist и gogasam нравится это.
  13. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    fromgate
    Нужно добавить if , while , return , goto , подобие переменных , рефлексии ...
    да будет FromgateScript! :D
    Наверное две самые важные команды:
    • chat=/home
    • command=/kick player
    первая исполняет команду от имени игрока. вторая - от имени сервера.
    Можно еще придумать - от имени игрока, но с наивысшими правами.
    Если добавишь что-нибудь новое, сразу публикуй.
     
    ВремяПриключений нравится это.
  14. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    там уже есть cmdplr, cmdsrv и cmdop :) вообще в ближайшее время особо нового ничего не будет — буду переводить описание плагина на английский.
    v0.1.0
    • Релиз. По сравнению с предыдущим билдом: добавлена проверка версий и Metrics.
    Итак, я решился-таки выложить на BukkitDev
    http://dev.bukkit.org/bukkit-plugins/reactions/
    http://dev.bukkit.org/media/files/719/524/ReActions.jar
     
    ВремяПриключений нравится это.
  15. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Высер при отсутствии Vault:

    2013-07-19 19:19:25 [SEVERE] Error occurred while enabling ReActions v0.1.0 (Is it up to date?)
    java.lang.NoClassDefFoundError: net/milkbowl/vault/permission/Permission
    at me.fromgate.reactions.ReActions.setupPermissions(ReActions.java:122)
    at me.fromgate.reactions.ReActions.onEnable(ReActions.java:99)
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:396)
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:383)
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.loadPlugin(CraftServer.java:314)
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.enablePlugins(CraftServer.java:296)
    at net.minecraft.server.MinecraftServer.func_71243_i(MinecraftServer.java:465)
    at net.minecraft.server.MinecraftServer.func_71222_d(MinecraftServer.java:431)
    at net.minecraft.server.MinecraftServer.func_71247_a(MinecraftServer.java:382)
    at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:214)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:574)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
     
  16. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Sirse, О! Спасибо! Исправлю. Честно говоря, даже не пробовал без Vault'а запускать :)
     
    Sirse нравится это.
  17. FirePoint

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

    Баллы:
    173
    Имя в Minecraft:
    Just_Andrew
    И как всегда fromgate радует нас полезными плагинами
     
    Alexgrist и Jesper нравится это.
  18. Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Ещё порция дебага:
    Происходит при нажатию на кнопку, на которую повешан тп на локацию в другом мире из ModifyWorld.

    2013-07-21 08:06:05 [SEVERE] Could not pass event RAButtonEvent to ReActions v0.1.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:363)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:47)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:479)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:464)
    at me.fromgate.reactions.EventManager.raiseButtonEvent(EventManager.java:53)
    at me.fromgate.reactions.RAListener.onPlayerInteract(RAListener.java:83)
    at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:361)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:47)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:479)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:464)
    at org.bukkit.craftbukkit.v1_5_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:189)
    at net.minecraft.item.ItemInWorldManager.func_73078_a(ItemInWorldManager.java:541)
    at net.minecraft.network.NetServerHandler.func_72472_a(NetServerHandler.java:874)
    at net.minecraft.network.packet.Packet15Place.func_73279_a(SourceFile:58)
    at net.minecraft.network.TcpConnection.func_74428_b(TcpConnection.java:442)
    at net.minecraft.network.NetServerHandler.func_72570_d(NetServerHandler.java:222)
    at net.minecraft.network.NetworkListenThread.func_71747_b(NetworkListenThread.java:53)
    at net.minecraft.server.dedicated.DedicatedServerListenThread.func_71747_b(SourceFile:30)
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:847)
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:716)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:600)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
    Caused by: java.lang.NullPointerException
    at me.fromgate.reactions.RALoc.locactionToStringFormated(RALoc.java:96)
    at me.fromgate.reactions.Actions.performAction(Actions.java:81)
    at me.fromgate.reactions.Actions.executeActivator(Actions.java:62)
    at me.fromgate.reactions.activators.ButtonActivator.activate(ButtonActivator.java:68)
    at me.fromgate.reactions.activators.Activators.activate(Activators.java:272)
    at me.fromgate.reactions.RAListener.onButton(RAListener.java:111)
    at sun.reflect.GeneratedMethodAccessor148.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:361)
    ... 27 more

    Ядро MCPC+ Legacy (1.5.2), тестирую без Vault и прочих зависимостей (WG нет в том числе)

    Так же небольшая проблема в переводе - например, я добавляю сообщение игроку красного цвета. В результате, уведомление выглядит так:
    (Перед закрывающими кавычками пропущен цветовой код)
    Аналогичная проблема и в уведомлений, приходящему цели после выполнения действия:

     
  19. Автор темы
    fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    скорее всего не отрабатывает метод Bukkit.getWorld(имя) вечером скомпилирую версию для теста
    @Sirse, попробуйте пожалуйста эту версию:
    https://dl.dropboxusercontent.com/u/64799811/ReActions/003/ReActions.jar

    - Не должно ругаться на отсутствие Vault
    - По идее должно телепортировать без ошибок (скажите только, что будет писать в чат - как выведутся координаты точки телепортации)
     
  20. Богдан Малышев

    Богдан Малышев Старожил Пользователь

    Баллы:
    103
    Шикарно.
    Переворачивает игровой процесс!
     

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