Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Привет, проблема такая - выключаю сервак, вылетает ошибка
faVa-oQy2O0.jpg


Ядро сервера Purpur
Версия 1.19.4
 
Не добавлял еще? Хотелось бьі уже реализовать задуманное на сервере.
Извиняюсь, пока нет. Нынче слишком много дел. Попробую добавить какое-нибудь временное решение на днях.
Привет, проблема такая - выключаю сервак, вылетает ошибка
faVa-oQy2O0.jpg


Ядро сервера Purpur
Версия 1.19.4
Попробовал поправить в последнем снапшоте, но не уверен - сам не встречался.
 
Всех приветствую! Возникла необходимость использования команды SQL_SELECT, и вот не пойму, то ли лыжи не едут, то ли я криворукий. Суть в том, что в ответ на SQL-запрос приходит... ничего! При этом я знаю, что данные по нужному мне адресу есть.
Код:
    actions:
    - VAR_SET=id:sqltest value:''
    - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:%var:sqltest%
Проверял запрос в панели phpMyAdmin - запрос составлен верно.
Может, кто из знатоков SQL что-нибудь подскажет или это все-таки плагин чудит?
 
Всех приветствую! Возникла необходимость использования команды SQL_SELECT, и вот не пойму, то ли лыжи не едут, то ли я криворукий. Суть в том, что в ответ на SQL-запрос приходит... ничего! При этом я знаю, что данные по нужному мне адресу есть.
Код:
    actions:
    - VAR_SET=id:sqltest value:''
    - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:%var:sqltest%
Проверял запрос в панели phpMyAdmin - запрос составлен верно.
Может, кто из знатоков SQL что-нибудь подскажет или это все-таки плагин чудит?
Может быть стоит попробовать так:
Код:
  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/
 
Может быть стоит попробовать так:
Код:
  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/
По-разному пробовал, даже SELECT-FROM без фильтрации - ничего. Задал исходной переменной начальный текст, но после отправки запроса, текста в переменной как и не бывало. То есть, в переменную, как я понял, что-то пишется, но что и откуда - не понятно. Может есть способ запарсить ответ на запрос?
 
По-разному пробовал, даже SELECT-FROM без фильтрации - ничего. Задал исходной переменной начальный текст, но после отправки запроса, текста в переменной как и не бывало. То есть, в переменную, как я понял, что-то пишется, но что и откуда - не понятно. Может есть способ запарсить ответ на запрос?
Не знаю, почему не указано в документации, но там также требуется указать параметр column - это число, которое определяет, какой столбец выбрать. Если колонка лишь одна, то просто указать 1.

Но вообще, я крайне не рекомендую пользоваться действиями, связанными с SQL. Все операции проводятся на основном потоке, а выражения никак не защищены от инжектов. В общем, лагов не избежать, а если принимать значения от игроков, то может попасться чего и похуже.
Когда-нибудь я добавлю альтернативные действия и флаги для нормальной работы с БД, но до тех пор - советую посмотреть в сторону каких-нибудь иных решений в этом плане.
 
Не знаю, почему не указано в документации, но там также требуется указать параметр column - это число, которое определяет, какой столбец выбрать. Если колонка лишь одна, то просто указать 1.
Указано, как опциональный аргумент. И по дефолту (если брать исходники как оригинального ReActions, так и этого форка) колонка вроде как действительно первая:
upload_2024-1-10_18-50-19.png
Задал исходной переменной начальный текст, но после отправки запроса, текста в переменной как и не бывало.
И еще одна забавная находка: если SQLManager не инициализирован, то метод, использующийся для выполнения SELECT запросов, возвращает пустую строку:
upload_2024-1-10_18-52-33.pngupload_2024-1-10_19-0-58.png
Присоединяюсь к советам выше, но если так хочется использовать, то может быть стоит как-то удостоверится, что ReActions все таки подключен к БД, возможно воспользовавшись логгированием запросов.
 
Последнее редактирование:
Указано, как опциональный аргумент. И по дефолту (если брать исходники как оригинального ReActions, так и этого форка) колонка вроде как действительно первая:
Как-то проморгал, что в обоих случаях есть значение по умолчанию. Тогда любопытно - проверю у себя позже на всякий случай.
 
Всех приветствую! Возникла необходимость использования команды SQL_SELECT, и вот не пойму, то ли лыжи не едут, то ли я криворукий. Суть в том, что в ответ на SQL-запрос приходит... ничего! При этом я знаю, что данные по нужному мне адресу есть.
Код:
    actions:
    - VAR_SET=id:sqltest value:''
    - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:%var:sqltest%
Проверял запрос в панели phpMyAdmin - запрос составлен верно.
Может, кто из знатоков SQL что-нибудь подскажет или это все-таки плагин чудит?
Попробовал исправить в последнем снапшоте. Странно, что раньше работало - возможно, с обновлением библиотек самого ядра что-то поменялось.
Код:
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
(такая задержка в выполнении из-за того, что использовалась внешняя бесплатная БД)
 
Попробовал исправить в последнем снапшоте. Странно, что раньше работало - возможно, с обновлением библиотек самого ядра что-то поменялось.
Код:
FUNCTION:
  sqlcheck:
    actions:
    - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:sqltest
    - response=Value %var:sqltest%
Посмотреть вложение 66522
Посмотреть вложение 66523
(такая задержка в выполнении из-за того, что использовалась внешняя бесплатная БД)
Понял, вечером скачаю, проверю
 
Не знаю, почему не указано в документации, но там также требуется указать параметр column - это число, которое определяет, какой столбец выбрать. Если колонка лишь одна, то просто указать 1.

Но вообще, я крайне не рекомендую пользоваться действиями, связанными с SQL. Все операции проводятся на основном потоке, а выражения никак не защищены от инжектов. В общем, лагов не избежать, а если принимать значения от игроков, то может попасться чего и похуже.
Когда-нибудь я добавлю альтернативные действия и флаги для нормальной работы с БД, но до тех пор - советую посмотреть в сторону каких-нибудь иных решений в этом плане.
К слову на счет параметра column: на тот момент тщетно пробовал и ему значения подбирать
 
Попробовал исправить в последнем снапшоте. Странно, что раньше работало - возможно, с обновлением библиотек самого ядра что-то поменялось.
Код:
FUNCTION:
  sqlcheck:
    actions:
    - SQL_SELECT=query:{SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"} variable:sqltest
    - response=Value %var:sqltest%
Посмотреть вложение 66522
Посмотреть вложение 66523
(такая задержка в выполнении из-за того, что использовалась внешняя бесплатная БД)
Мне или показалось, или я скачал точно такую же версию, которая стояла до обновления снапа. Качал с гитхаба (вкладка Actions). И, собсно, проблема осталась. Или я не оттуда качал?
 
Мне или показалось, или я скачал точно такую же версию, которая стояла до обновления снапа. Качал с гитхаба (вкладка Actions). И, собсно, проблема осталась. Или я не оттуда качал?
Там правка буквально в две строки - вес файла мог не измениться практически.
Могу лишь посоветовать проверить на наличие ошибок в консоли. Предупрежу, что ReActions может кидать ошибки лишь при первом запуске действия (выпилить эту фичу что ли уже...).
Ну, и на всякий, проверь, что значение в БД действительно не пустое.
 
Там правка буквально в две строки - вес файла мог не измениться практически.
Могу лишь посоветовать проверить на наличие ошибок в консоли. Предупрежу, что ReActions может кидать ошибки лишь при первом запуске действия (выпилить эту фичу что ли уже...).
Ну, и на всякий, проверь, что значение в БД действительно не пустое.
Выпадает-таки ошибку, но лишь однажды за сеанс работы сервера (при повторном запуске активатора ошибка не пишется):
Код:
[20:41:28 INFO]: [ReActions] Failed to execute query: SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"
 
Указано, как опциональный аргумент. И по дефолту (если брать исходники как оригинального ReActions, так и этого форка) колонка вроде как действительно первая:

И еще одна забавная находка: если SQLManager не инициализирован, то метод, использующийся для выполнения SELECT запросов, возвращает пустую строку:
Присоединяюсь к советам выше, но если так хочется использовать, то может быть стоит как-то удостоверится, что ReActions все таки подключен к БД, возможно воспользовавшись логгированием запросов.
Логирование запросов phpMyAdmin не дает из-за отсутствия супер-прав. Но то, что плагин правильно подключен к БД это 100% - SQL_INSERT/UPDATE работают
 
Выпадает-таки ошибку, но лишь однажды за сеанс работы сервера (при повторном запуске активатора ошибка не пишется):
Код:
[20:41:28 INFO]: [ReActions] Failed to execute query: SELECT ValueVar FROM RegList WHERE Nickname="SomePlayer1"
Странно, должно больше выдавать. Добавил больше логирования, и теперь будет показывать каждый раз.
https://github.com/GlowingInk/ReActions/actions/runs/7479864252
 
Странно, должно больше выдавать. Добавил больше логирования, и теперь будет показывать каждый раз.
https://github.com/GlowingInk/ReActions/actions/runs/7479864252
Итак! Первое и главное, проблема устранена, все заработало)
Второе, я в первый раз все-таки тупанул и каким-то образом поставил одну и ту же версию плагина (видимо, забыл, что скачивался архив, а я накатил уже лежавший в загрузке jar)
На счет логирования ошибок: проверил на "неправильных" запросах, вроде тоже все пашет.
Большое спасибо!
 
Так-с, теперь нарисовалась новая проблема - не знаю только, по адресу я или кого пинать? Мне нужно, например, получить уровень здоровья другого игрока (%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 что-то намудрили, либо я че-то опять не так делаю
 
Так-с, теперь нарисовалась новая проблема - не знаю только, по адресу я или кого пинать? Мне нужно, например, получить уровень здоровья другого игрока (%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 что-то намудрили, либо я че-то опять не так делаю
Ошибка со стороны 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. Хотя теперь мне кажется, что это неплохая идея...
 
Выделил текущую версию 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]]
Передумал - не хочется вводить ещё больше разницы в скриптах между юзерами.
 
Последнее редактирование:

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

Назад
Верх