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

Только что набросал ряд активаторов для сохранения инвентаря в таблицу базы данных MySQL.
Это же больше полутора секунд на выполнение... По-моему, проще засунуть всё в один активатор и выполнить за один тик, а не за 37. Рекурсия хороша, но не с задержкой в 50ms.
Недавно я, кстати, попытался сделать аналогичную конкатенацию нового значения со старым в одной переменной. Сохранял локации. После шестой итерации сервер отправился в краш :р
Что уж говорить про формат предмета, который может занимать более сотни символов (один предмет)?
Запустил MySQL-сервер у себя на локалке. Настройки в ReActions такие:
Код:
MySQL:
  server: localhost
  port: '3306'
  database: reactionsdb
  username: root
  password: 123456789i12I
  codepage: ''
При попытке выполнить такой активатор
Код:
COMMAND:
  Test:
    override: true
    regex: false
    command: test
    actions:
    - SQL_INSERT=query:{INSERT INTO local_pvp (FIELD,PLAYERNAME1,PLAYERNAME2) VALUES (2, "Yesssss", "Nooooo")}
    - SQL_SELECT=variable:Test query:{SELECT * FROM local_pvp}
    - MESSAGE=%var:prefix% &6%var:Test%
    - VAR_CLEAR=id:Test
Консоль моего сервера мне пишет следующее:
Код:
[05:48:47 WARN]: Fri May 26 05:48:47 EEST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Хотя таблица существует, функционирует:
Код:
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_reactionsdb |
+-----------------------+
| local_pvp             |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM local_pvp;
+-------+-------------+-------------+
| FIELD | PLAYERNAME1 | PLAYERNAME2 |
+-------+-------------+-------------+
|     1 | Lyosha12    | Esbrime     |
+-------+-------------+-------------+
1 row in set (0.00 sec)

Как я понял, сервер MySQL ждёт, что соединение будет установлено как защищённое, на что требуется соответствующий сертификат, который я подозреваю где брать - в центре сертификации, за деньги. Следовательно, нужно отключить поддержку SSL. Нашёл как проверить тип ожидаемого соединения:
Код:
mysql> SHOW VARIABLES LIKE '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_crl       |          |
| ssl_crlpath   |          |
| ssl_key       |          |
+---------------+----------+
9 rows in set, 1 warning (0.01 sec)
Поддержка SSL, вроде, выключена по-умолчанию, хотя консоль моего сервера хочет мне доказать обратное. Что мне предпринять?
Забытое наследство (в документации отсутствует):
  • Добавлено действие ITEM_REMOVE_OFFHAND - тоже, что и ITEM_REMOVE только для второй руки.
  • Добавлен флаг ITEM_OFFHAND - тоже что и ITEM, но для второй руки

Актуальна проблема (и, нет, не предлагайте DELAY_PLAYER - это заставляет создавать больше активаторов, чем нужно):
Использую активатор MOB_CLICK, но проблема в том, что все действия повторяет дважды.

P.S. Куда теперь кидать ошибки\предложения, кроме как сюда? Темы на dev.bukkit, вроде как брошены на произвол судьбы. Не постигнет ли та же участь тикеты на github?
 
Последнее редактирование:
Запустил MySQL-сервер у себя на локалке. Настройки в ReActions такие
Попробуйте добавить свойство для базы данных ?useSSL=false:
Код:
database: reactionsdb?useSSL=false
После этого необходимо перегрузить сервер, обязательно
Это же больше полутора секунд на выполнение... По-моему, проще засунуть всё в один активатор и выполнить за один тик, а не за 37.
Да, всё верно. Я намеренно так сделал, чтобы активатор не был громоздким. Также, всегда стараюсь уменьшить код, как можно сильнее, чтобы проще было ориентироваться. Полторы секунды меня не напрягает. Да их никто и не чувствует. Ещё, это мне даёт уверенность, что сервер не будет подлагивать в момент выполнения этого активатора. Конечно, если время будет проблемой, то запихну всё в один активатор.
 
Также, всегда стараюсь уменьшить код, как можно сильнее, чтобы проще было ориентироваться.
Где-то читал про одно из правил проектирования: "Никогда не доверяйте параметрам функции, даже если она написана лично Вами в private-секции и используется только другими private-функциями в одном классе". Цитата примерная. Суть в том, что мы работаем с игроками. А что может сделать игрок за полторы секунды? Умереть, выкинуть вещи, админ может забрать вещи, может выйти с сервера (активатор не исполнится для offline-игрока). Если после этого будет возвращён или сохранён инвентарь, то это прямой путь для дюпа.

Идеальный код редко когда может быть и красивым, и эффективным. Если работаешь со внешней средой - будь готов ко всему. Если это просто показательный пример, как в данном случае, то он сродни вычислению факториала или ряда Фибоначи через рекурсию: красиво, но зачем?
Есть контакт:
upload_2017-5-26_9-6-7.png
Код:
+-------+-------------+-------------+
| FIELD | PLAYERNAME1 | PLAYERNAME2 |
+-------+-------------+-------------+
|     1 | Lyosha12    | Esbrime     |
|     2 | Yesssss     | Nooooo      |
+-------+-------------+-------------+
Однако, почему запрос SELECT * FROM local_pvp возвращает 1? Я же, вроде, ожидал увидеть выборку из всех строк данной таблицы с каким-то разделителем, чтобы можно было вытащить данных через действие REGEX. Какие тут нюансы?
Execute SQL query and store value of field located in first row (and defined column) at variable.
Окей. А если мне нужен всё-таки список значений колонок найденной строки\строк? Только по одному значению придётся вытаскивать?
Каким образом можно замерить время ответа от БД, чтобы можно было знать на что рассчитывать?
 
де-то читал про одно из правил проектирования: "Никогда не доверяйте параметрам функции, даже если она написана лично Вами в private-секции и используется только другими private-функциями в одном классе". Цитата примерная. Суть в том, что мы работаем с игроками. А что может сделать игрок за полторы секунды? Умереть, выкинуть вещи, админ может забрать вещи, может выйти с сервера (активатор не исполнится для offline-игрока). Если после этого будет возвращён или сохранён инвентарь, то это прямой путь для дюпа.
Согласен на все 100%.
Однако, почему запрос SELECT * FROM local_pvp возвращает 1
Если вы воспользовались действием SQL_SELECT, то всё верно, так и должно быть. Но то что вы хотите не так нужно делать, ведь вы выводите таблицу в виде массива, а массив нельзя вывести. Необходимо создавать конкатенцию колонок и строк (если необходимо) и выводить результать в виде строки. Затем обрабатывать полученную строку.
Код:
select concat(PLAYERNAME1,'|',PLAYERNAME2)as test from local_pvp WHERE FIELD=1
Получим результат в виде строки: Lyosha12|Esbrime
Теперь такую строку можно обработать.
При таком запросе:
Код:
select concat(PLAYERNAME1,'|',PLAYERNAME2)as test from local_pvp WHERE FIELD=2
Получим: Yesssss|Nooooo
 
Планируется ли в ближайшее время, действию FILE добавлять копирование и перенос файла?
Как скоро можно ожидать подобных нововведений?
И ещё вопрос: Есть ли возможность использовать плейсхолдеры других плагинов?
 
Что значит плейсхолдеры других плагинов?
Просто так взят и вытащить какие-то произвольные переменные из других плагинов средствами ReActions нельзя.
Для этого нужно написать определённый код, который обращался бы к API другого плагина и что-то оттуда брал.
Если есть какие-то идеи - опишите что нужно. И если это достаточно распространённый и интересный плагин, то можно будет подумать.
 
Что значит плейсхолдеры других плагинов?
Просто так взят и вытащить какие-то произвольные переменные из других плагинов средствами ReActions нельзя.
Для этого нужно написать определённый код, который обращался бы к API другого плагина и что-то оттуда брал.
Если есть какие-то идеи - опишите что нужно. И если это достаточно распространённый и интересный плагин, то можно будет подумать.
placeholderapi?
 
У меня работает.
И не только у меня:
WZ8IRln.png
 
У меня работает.
Не сразу смекнул. Большой Брат запретил с Вами общаться сроком на три года :D
Пробный вариант (ранняя альфа) сайта сгенерированного на основе вики
WIKI кажется намного удобнее в плане внесения изменений. Или функционал недостаточен?
 
Не сразу смекнул. Большой Брат запретил с Вами общаться сроком на три года
Круто. Сервер не помню где, во франции или германии что ли...

WIKI кажется намного удобнее в плане внесения изменений. Или функционал недостаточен?

А это же вики и есть. В смысле, страницы сайта генерируются на основе вики-страниц. Сейчас я пока запускаю генерацию вручную, а потом она будет производиться по расписанию.
 
А это же вики и есть. В смысле, страницы сайта генерируются на основе вики-страниц. Сейчас я пока запускаю генерацию вручную, а потом она будет производиться по расписанию.
Но а смысл? Свой же сайт надо и хостить где-то, и обновлять, а вики и бесплатна и онлайн всегда.
 
Последнее редактирование:
Есть возможность добавить 1 флаг?
- проверка на то, что инвентарь игрока абсолютно пустой и даже брони никакой нет
 
Последнее редактирование:
Что значит плейсхолдеры других плагинов?
Просто так взят и вытащить какие-то произвольные переменные из других плагинов средствами ReActions нельзя.
Для этого нужно написать определённый код, который обращался бы к API другого плагина и что-то оттуда брал.
Если есть какие-то идеи - опишите что нужно. И если это достаточно распространённый и интересный плагин, то можно будет подумать.
Поддержка PlaceholderAPI расширила бы возможности ReActions. Плагин довольно таки распространённый и интересный, он даёт множество плейсхолдеров MineCraft, Bukkit, Bungee и плейсхолдеры самых распространённых плагинов.
 
Последнее редактирование:
Поддержка PlaceholderAPI расширила бы возможности ReActions. Плагин довольно таки распространённый и интересный, он даёт множество плейсхолдеров MineCraft, Bukkit, Bungee и плейсхолдеры самых распространённых плагинов.
Тоесть ты ставиш плейсхолдерАПИ и в любом плагине можеш юзать любые другие плейсхолдеры из плагинов, которые это АПИ суппортят или как?
Люблю плейсхолдеры! Плейсхолдеров, как и активаторов, много небывает
 
Последнее редактирование:
Назад
Верх