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

Плагин [ADMIN] Re:ReActions | Простейший скриптовый плагин (1.20.6+)

Тема в разделе "Неподтвержденные плагины", создана пользователем imDaniX, 6 сен 2019.

  1. Jaysers

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

    Баллы:
    66
    Имя в Minecraft:
    Jaysers
    Привет, проблема такая - выключаю сервак, вылетает ошибка[​IMG]

    Ядро сервера Purpur
    Версия 1.19.4
     
  2. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Извиняюсь, пока нет. Нынче слишком много дел. Попробую добавить какое-нибудь временное решение на днях.
    Попробовал поправить в последнем снапшоте, но не уверен - сам не встречался.
     
  3. DiZet

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

    Баллы:
    66
    Всех приветствую! Возникла необходимость использования команды SQL_SELECT, и вот не пойму, то ли лыжи не едут, то ли я криворукий. Суть в том, что в ответ на SQL-запрос приходит... ничего! При этом я знаю, что данные по нужному мне адресу есть.
    Код:
        actions:
        - VAR_SET=id:sqltest value:''
        - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:%var:sqltest%
    
    Проверял запрос в панели phpMyAdmin - запрос составлен верно.
    Может, кто из знатоков SQL что-нибудь подскажет или это все-таки плагин чудит?
     
  4. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Может быть стоит попробовать так:
    Код:
      actions:
        - VAR_SET=id:sqltest value:''
        - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:sqltest
    
    https://web.archive.org/web/20200927232943/http://reactions.fromgate.ru/actions/sql_select/
     
  5. DiZet

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

    Баллы:
    66
    По-разному пробовал, даже SELECT-FROM без фильтрации - ничего. Задал исходной переменной начальный текст, но после отправки запроса, текста в переменной как и не бывало. То есть, в переменную, как я понял, что-то пишется, но что и откуда - не понятно. Может есть способ запарсить ответ на запрос?
     
  6. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Не знаю, почему не указано в документации, но там также требуется указать параметр column - это число, которое определяет, какой столбец выбрать. Если колонка лишь одна, то просто указать 1.

    Но вообще, я крайне не рекомендую пользоваться действиями, связанными с SQL. Все операции проводятся на основном потоке, а выражения никак не защищены от инжектов. В общем, лагов не избежать, а если принимать значения от игроков, то может попасться чего и похуже.
    Когда-нибудь я добавлю альтернативные действия и флаги для нормальной работы с БД, но до тех пор - советую посмотреть в сторону каких-нибудь иных решений в этом плане.
     
  7. FeniksDEV

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

    Баллы:
    76
    Имя в Minecraft:
    Feniksovich
    Указано, как опциональный аргумент. И по дефолту (если брать исходники как оригинального ReActions, так и этого форка) колонка вроде как действительно первая:
    upload_2024-1-10_18-50-19.png
    И еще одна забавная находка: если SQLManager не инициализирован, то метод, использующийся для выполнения SELECT запросов, возвращает пустую строку:
    upload_2024-1-10_18-52-33.png upload_2024-1-10_19-0-58.png
    Присоединяюсь к советам выше, но если так хочется использовать, то может быть стоит как-то удостоверится, что ReActions все таки подключен к БД, возможно воспользовавшись логгированием запросов.
     
    Последнее редактирование: 10 янв 2024
  8. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Как-то проморгал, что в обоих случаях есть значение по умолчанию. Тогда любопытно - проверю у себя позже на всякий случай.
     
  9. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Попробовал исправить в последнем снапшоте. Странно, что раньше работало - возможно, с обновлением библиотек самого ядра что-то поменялось.
    Код:
    FUNCTION:
      sqlcheck:
        actions:
        - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:sqltest
        - response=Value %var:sqltest%
    upload_2024-1-10_16-29-4.png
    upload_2024-1-10_16-29-17.png
    (такая задержка в выполнении из-за того, что использовалась внешняя бесплатная БД)
     
  10. DiZet

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

    Баллы:
    66
    Понял, вечером скачаю, проверю
     
  11. DiZet

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

    Баллы:
    66
    К слову на счет параметра column: на тот момент тщетно пробовал и ему значения подбирать
     
  12. DiZet

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

    Баллы:
    66
    Мне или показалось, или я скачал точно такую же версию, которая стояла до обновления снапа. Качал с гитхаба (вкладка Actions). И, собсно, проблема осталась. Или я не оттуда качал?
     
  13. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Там правка буквально в две строки - вес файла мог не измениться практически.
    Могу лишь посоветовать проверить на наличие ошибок в консоли. Предупрежу, что ReActions может кидать ошибки лишь при первом запуске действия (выпилить эту фичу что ли уже...).
    Ну, и на всякий, проверь, что значение в БД действительно не пустое.
     
  14. DiZet

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

    Баллы:
    66
    Выпадает-таки ошибку, но лишь однажды за сеанс работы сервера (при повторном запуске активатора ошибка не пишется):
    Код:
    [20:41:28 INFO]: [ReActions] Failed to execute query: SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"
     
  15. DiZet

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

    Баллы:
    66
    Логирование запросов phpMyAdmin не дает из-за отсутствия супер-прав. Но то, что плагин правильно подключен к БД это 100% - SQL_INSERT/UPDATE работают
     
  16. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Странно, должно больше выдавать. Добавил больше логирования, и теперь будет показывать каждый раз.
    https://github.com/GlowingInk/ReActions/actions/runs/7479864252
     
  17. DiZet

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

    Баллы:
    66
    Итак! Первое и главное, проблема устранена, все заработало)
    Второе, я в первый раз все-таки тупанул и каким-то образом поставил одну и ту же версию плагина (видимо, забыл, что скачивался архив, а я накатил уже лежавший в загрузке jar)
    На счет логирования ошибок: проверил на "неправильных" запросах, вроде тоже все пашет.
    Большое спасибо!
     
  18. DiZet

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

    Баллы:
    66
    Так-с, теперь нарисовалась новая проблема - не знаю только, по адресу я или кого пинать? Мне нужно, например, получить уровень здоровья другого игрока (%otherplayer_healthe_<player>%). Когда вместо конкретного ника я вписываю во внутренний заменитель %player_name%, то получаю либо сообщение об ошибке (как если бы я вводил такую строку через парсер PlaceholderAPI)
    Код:
    [01:39:17 INFO]: Papi OtherPlayer Expansion: Parsing error occured. Likely due to invalid use of a placeholder
    [01:39:17 INFO]: Identifier string received: health_
    [01:39:17 INFO]: Stacktrace to follow error msg: Index 1 out of bounds for length 0
    [01:39:17 WARN]: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 0
    [01:39:17 WARN]:        at com.extendedclip.papi.expansion.otherplayer.OtherPlayerExpansion.getHealth(OtherPlayerExpansion.java:271)
    [01:39:17 WARN]:        at com.extendedclip.papi.expansion.otherplayer.OtherPlayerExpansion.onRequest(OtherPlayerExpansion.java:118)
    [01:39:17 WARN]:        at PlaceholderAPI-2.11.5.jar//me.clip.placeholderapi.replacer.CharsReplacer.apply(CharsReplacer.java:119)
    [01:39:17 WARN]:        at PlaceholderAPI-2.11.5.jar//me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(PlaceholderAPI.java:71)
    [01:39:17 WARN]:        at PlaceholderAPI-2.11.5.jar//me.clip.placeholderapi.commands.impl.local.CommandParse.evaluateParseSingular(CommandParse.java:117)
    [01:39:17 WARN]:        at PlaceholderAPI-2.11.5.jar//me.clip.placeholderapi.commands.impl.local.CommandParse.evaluate(CommandParse.java:57)
    [01:39:17 WARN]:        at PlaceholderAPI-2.11.5.jar//me.clip.placeholderapi.commands.PlaceholderCommandRouter.onCommand(PlaceholderCommandRouter.java:114)
    [01:39:17 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45)
    [01:39:17 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155)
    [01:39:17 WARN]:        at org.bukkit.craftbukkit.v1_20_R1.CraftServer.dispatchCommand(CraftServer.java:987)
    [01:39:17 WARN]:        at org.bukkit.craftbukkit.v1_20_R1.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64)
    [01:39:17 WARN]:        at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:265)
    [01:39:17 WARN]:        at net.minecraft.commands.CommandDispatcher.performCommand(CommandDispatcher.java:324)
    [01:39:17 WARN]:        at net.minecraft.commands.CommandDispatcher.a(CommandDispatcher.java:308)
    [01:39:17 WARN]:        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2354)
    [01:39:17 WARN]:        at net.minecraft.server.network.PlayerConnection.lambda$handleChatCommand$21(PlayerConnection.java:2314)
    [01:39:17 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.b(IAsyncTaskHandler.java:59)
    [01:39:17 WARN]:        at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
    [01:39:17 WARN]:        at net.minecraft.server.TickTask.run(TickTask.java:18)
    [01:39:17 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153)
    [01:39:17 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1338)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197)
    [01:39:17 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.x(IAsyncTaskHandler.java:126)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.bg(MinecraftServer.java:1315)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1308)
    [01:39:17 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.p_(MinecraftServer.java:1286)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1174)
    [01:39:17 WARN]:        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317)
    [01:39:17 WARN]:        at java.base/java.lang.Thread.run(Thread.java:840)
    либо выдает не то, что нужно (зависит от плейсхолдера). Флаг use-modern-placeholders менял, пробовал с квадратными скобками и все равно бредятина выползает. Либо разрабы PAPI что-то намудрили, либо я че-то опять не так делаю
     
  19. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Ошибка со стороны PAPI. Скорее всего проблема в том, что при вводе "%otherplayer_health_%player_name%%" PAPI пытается разобрать "%otherplayer_health_%" как отдельный плейсхолдер. По-хорошему, надо им зарепортить, ибо ошибка в таком случае - неестественное поведение PAPI.
    Малость упорото, но в РеА можно обойти через локальные (раньше назывались временными) переменные как-то так:
    Код:
    actions:
    - local_var=id:health_ph value:otherplayer_health_%[player_name]
    - response=%%[health_ph]%
    (player_name есть и в PAPI, и в ReA)
    С использованием use-modern-placeholders синтаксис плейсхолдеров PAPI никак не меняется - они обрабатываются заранее через сам PAPI. Хотя теперь мне кажется, что это неплохая идея...
     
  20. Автор темы
    imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Выделил текущую версию 0.14.4 в отдельный релиз.

    С 0.14.5-SNAPSHOT плейсхолдеры PAPI учитывают параметр general.use-modern-placeholders.
    Например:
    Код:
    actions:
    - response=%[otherplayer_health_%[player_name]]
    Также добавил параметр general.use-colon-for-papi-placeholders - если выставить его на true, то написание его плейсхолдеров будет требовать писать : вместо первого _. Добавлен чисто из эстетических побуждений, чтобы соответствовать некоторым другим плейсхолдерам РеА.
    Код:
    actions:
    - response=%[otherplayer:health_%[player:name]]
    Передумал - не хочется вводить ещё больше разницы в скриптах между юзерами.
     
    Последнее редактирование: 11 янв 2024

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