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

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

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

  1. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Предложение: Добавить действие для вывода сообщений в title и subtitle бары.
     
  2. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
  3. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Предложение:
    • Добавить действие очистки указаных entity в загруженых чанках, исключая области WG регионов.
    • Добавить флаг, проверяющий кол-во entity в загруженых чанках.
     
  4. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Тогда загляни на dev.bukkit, в тикеты. Я там сотню как создал предложений, так она там и лежит бесхозная :D
     
  5. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Надо придумать какие-то активаторы и действия, которые можна подключать к почтовым SMTP и сервисам для рассылки СмС сообщений. Вот круто будет...
    Кто-то пересёк твой регион, и сразу СМСка на телефон: ATTENTION! У ВАС ВТОРЖЕНИЕ!
     
  6. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    "Никогда не думай, что твой код работает, не проверив" (с) Lyosha12.

    Так как мне нужно подставить не развёрнутое выражение при создании активатора, то с обычной переменной, которая и так может не существовать, я поступаю просто:
    Код:
    - VAR_SET=id:temp_var value:%var:var%
    - VAR_CLEAR=id:var
    # ...
    -VAR_SET=id:var value:temp_var
    - VAR_CLEAR=id:temp_var
    А если я хочу подставить существующую переменную, которую просто так не удалишь? Конечно, у меня не получится:
    Код:
    - VAR_SET=id:temp_player value:%var:player%
    - VAR_CLEAR=id:player
    # ...
    -VAR_SET=id:var value:temp_player
    - VAR_CLEAR=id:temp_player
    В переменной player будет находится %player%, что логично. При подстановке получим имя текущего игрока:
    Код:
     %var:player% => %player% => Lyosha12
    А я хотел именно текст "%player%". Нужно добавить хоть что-нибудь, что позволит запретить разворачивание плейсхолдера.
     
  7. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
  8. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    А за рассылку платишь ты)
    О, сколько же я алиасов позапрещал без этого активатора :D
    Как насчёт элитры? Она же как бы "почти" режим полёта? :D
    "... на указанный в аргументе" добавить бы.
    Интересно: добавив запрет на разворачивание плейсхолдера, мы сможем сделать ReActions чуточку более рефлексивным: https://ru.wikipedia.org/wiki/Рефлексия_(программирование)
     
  9. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Как вариант, элитру можно запретить вставлять в слот ARMOR с помощью INVENTORY_CLICK.
     
  10. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Я ПРЯМ ТОЛЬКО ЧТО СОБИРАЛСЯ НАБИРАТЬ ТЕКСТ ЧТО БЫ ПРЕДЛОЖИТЬ ЭТОТ АКТИВАТОР!
    ТЫ ЧТО ВАНГА ???
     
  11. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Допустим, строю я триатлон. Бег, полёт, плаванье. Или что-то в этом роде. Игрок просто положит элитру один раз и забудет про неё. В зоне полёта она пригодится, а в других её нужно отрубать. Но не перемещать же её из слота в слот? Костыли же :D
     
  12. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Ну не знаю как на счет СмС, но SendMailTransferProtocol вполне бесплатный! Достаточно просто зарегать ящик, даже на G-mail, затем активировать там какую-то функцию и всё. Пользуйся!
    такая же штука в AuthMe есть, для восстановления пароля
    А можна ли добавить флаг, проверяющий эти же состояние??

    Что бы запустить активатор, имеющий флаг проверки активности флая, и зациклить его. И в каждом цикле, пока флай активен, снимать плату или что-то вроде...
     
  13. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Это я про SMS. Если, конечно, у тебя позволяют ресурсы рассылать SMS'ки, то, будь я ярым задротом с крутым регионом в полмиллиона блоков, на котором куча всего понастроено без привата, я был бы очень рад таким оповещениям :D
     
  14. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Ну это же просто пример! Возможности бесграничны... Можна понадобавлять флагов, реагирующих на падение ОЗУ, нагрузки на CPU, ДДосы.... Можна добавить флаг, срабатывающий в последний момент при выключении сервера и соединить это действие в рассылкой, что бы всегда сразу же быть вкурсе когда твой сервер упал... Что угодно.
    Или платная команда для донатеров: /ПРИЗЫВ АДМИНА ПО СМС! ^^
     
  15. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Зачёт.
    Поэтому, когда держал сервер, переименовывал ReActions им же в списке плагинов на "MultiPlugin" :D
     
  16. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    acolytes_farm_gold.png
    На сколько безопасно создавать отложенные активаторы, термином на 3-4 месяца ?? С ними ничего не случится? А если их будет много, 400+... ??
    Из за этого скорее всего притупится скорость чтения файла с отложенными активаторами, в следствии чего, установленная задержка на 0.5 секунд может превратится в задержку 0.7-0.8 секунд, правильно ??
     
  17. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Флаг не получиться сделать. Нет такого состояния игрока. Но это и не нужно. Ведь, с помощью этого активатора вы уже будете знать, когда игрок летает, а когда нет. Как только игрок взлетает, то сохраняйте это состояние в переменную и уже её сравнивайте с тем, что вам необходимо, да хоть зацикливайте.
    Есть выход из положения:
    Код:
    EXEC
      test_var:
      actions:
      - cmd_op=react add exec testa
      - cmd_op=react group testa test2
      - cmd_op=react add testa a REGEX input:{%_player%} regex:{(^\%)_(.*)(\%)}
      - cmd_op=react add testa a message %%group02%%
    
    результат будет следующим:
    Код:
    EXEC:
      testa:
        actions:
        - REGEX=input:{%_player%} regex:{(^\%)_(.*)(\%)}
        - message=%%group02%%
    
    Единственное, что быстро не поборол, так это то, что при создании активатора (cmd_op=react add exec testa) вылазит в логе ошибка (возможно, что это только у меня), но запись нового активатора выполняется.
    ------
    Решил. Чтобы не было ошибки, необходимо установить задержку перед созданием активатора:
    Код:
    - WAIT=time:100ms

    Это много мелких действий, поэтому необходимо добавлять их по отдельности, чтобы выполнить это. Вот список действий, которые необходимо добавить в плагин:
    1. CHUNK: По координатам определяем чанк и список всех его сущностей
    2. CHUNK_REGION: Определяем, находится ли чанк в каком-либо регионе. Получаем временную переменную, например true/false и ID чанка. Если получаем false, то переходим к активатору с действием ниже.
    3. CHUNK_REMOVE: Сравниваем список сущностей со списком, которых необходимо удалить и удаляем.
    А затем, уже своими силами создаём активатор по этим трём действиям и пускаем его по циклу, пока не переберём все загруженые чанки.
    Это приблизительно, что нужно сделать.
    Можно сделать флаг, проверяющий кол-во entity в чанке, где расположен игрок.
     
    Последнее редактирование: 3 май 2017
  18. Kixot14

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

    Баллы:
    88
    Skype:
    Kixot14
    Имя в Minecraft:
    F1xer
    Я не совсем прослеживаю логику...

    Должно быть примерно так ??

    Код:
    FLIGHT
      qwerty1
        flight: TRUE
        actions:
        - VAR_PLAYER_SET=id:123  value:%flight%
        - EXECUTE=qwerty2
    
      qwerty2
        flight: FALSE
        actions:
        - VAR_PLAYER_SET=id:123  value:%flight%
    
    EXEC
      qwerty3
        flags
        - VAR_COMPARE=id:123  value:true
        actions:
        - MONEY_PAY
        - WAIT=60s
        - EXECUTE=qwerty3
     
    Последнее редактирование: 3 май 2017
  19. Lyosha12

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

    Баллы:
    98
    Skype:
    alexey_zyuz
    Имя в Minecraft:
    Lyosha12
    Как раз придумал этот вариант через час после того, как лёг спать. Действительно же: если активатор ни для кого не выполняется, то и временной переменной %player% не будет!
    Костылиииии :mad:
    Костылииии. Там что-то с параллельностью:
    Код:
    Could not pass event CommandEvent to ReActions v0.9.11
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at me.fromgate.reactions.event.EventManager.raiseCommandEvent(EventManager.java:216) [ReActions.jar:?]
        at me.fromgate.reactions.RAListener.onPlayerCommand(RAListener.java:321) [ReActions.jar:?]
        at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1346) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1189) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_131]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_131]
        at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:399) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
    Caused by: java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(Unknown Source) ~[?:1.8.0_131]
        at java.util.ArrayList$Itr.next(Unknown Source) ~[?:1.8.0_131]
        at me.fromgate.reactions.activators.Activators.activate(Activators.java:285) ~[?:?]
        at me.fromgate.reactions.RAListener.onCommandActivator(RAListener.java:421) ~[?:?]
        at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_131]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_131]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.11.2.jar:git-Spigot-38ddb34-c19c293]
        ... 25 more
    
     
  20. maxdikiy

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

    Баллы:
    76
    Имя в Minecraft:
    maxdikiy
    Задержка не помогает?
    Так немного лучше будет:
    Код:
    FLIGHT:
      qwerty:
        flight: ANY
        actions:
        - VAR_PLAYER_SET=id:123  value:%flight%
    EXEC:
      qwerty3:
        flags:
        - VAR_COMPARE=id:123  value:true
        actions:
        - MONEY_PAY
        - WAIT=60s
        - EXECUTE=qwerty3
    Здесь лучше не делать задержку, а вынести в отдельный таймер.
     
    Последнее редактирование: 3 май 2017

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