Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Плагин [GEN] rscPermissions v0.10.x — идеальный менеджер прав для мультисерверных сред [1.2.5 - 1.10.x]

Тема в разделе "Релизы плагинов", создана пользователем Reality_SC, 8 янв 2014.

  1. Linkinkov

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

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    Приветствую, возможно ли сделать интеграцию с essentials chat? Не берет префикс ни в какую
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Я, так сложилось, не пользуюсь Essentials. Обещаю попробовать в свободную минутку.
    Давно уже нужно закончить начатые изменения.
     
  4. Linkinkov

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

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    Благодарю, ваше решение очень элегантно, но на Essentials очень много серверов завязано, в частности на его чат менеджере.[DOUBLEPOST=1417893313,1417603831][/DOUBLEPOST]Нашел еще один баг, в Вк его описывал, связан с выдачей наборов игрокам. Почему то некоторые права и их отмена игнорируется
     
  5. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Завязаны ли эти киты (права на них) на регионы WG? Укажи, если не сложно, какие виды destination используются.
    Ещё есть вариант, если ты их назначаешь несколько раз, поиграться с приоритетом наследования; чтобы несколько назначений прав явно были разведены по приоритету.

    На днях Vault обновился до 1.5 (добавлена поддержка игры 1.8), у Spigot API стал доступен свой maven-репозиторий, так что я, скорее всего, скоро активно возьмусь за доработку.
     
  6. Linkinkov

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

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    WG поддержка отключена в конфиге вовсе. Игнорируется правила парочку.[DOUBLEPOST=1418104578,1418061411][/DOUBLEPOST]Если есть возможность мне выделить минут 15, покажу в скайпе что и как, объяснять на пальцах очень сложно.
     
  7. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Есть, напиши мне (Reality_SC), сейчас включу.[DOUBLEPOST=1424849185,1418105905][/DOUBLEPOST]
    В разработке находится новая мажорная версия rscPermissions.


    С таким большим изменением я планирую лаконично выразить в нескольких предложениях основы идеологии плагина. Черновик:
    1. Простая и понятная структура данных способствует лучшему использованию.
    2. Дать использующим как можно больше интуитивно понятных способов сделать записи короче.
    3. Надёжность и предсказуемость поведения являются залогом выбора в нашу пользу.

    Что нового (уже сделано и ещё планируется):
    • Исходный код разбит на API/Engine, отдельные Bukkit-зависимые классы и (планируется) Sponge-зависимые классы. Все необходимые библиотеки включены в .jar (при помощи shade + rellocations + minimize).
    • С нуля написан новый движок расчёта прав (тоже абстрактный, без привязки к игровой платформе Bukkit/Spigot): бо́льшая гибкость при расчёте префиксов/суффиксов сложных графов наследования; быстрее, надёжнее, предсказуемый.
    • Обновлёны зависимости с интегрируемыми плагинами: WorldGuard 6, Residence 3, Vault 1.5 (через VaultAPI).
    • Ранее для стабильности при отказе основного сервера MySQL плагин позволял прописывать несколько разных серверов. Это были сложность и неудобность. Теперь при получении данных из БД плагин хранит их в локальных json-файлах и если нет коннекта — считывает оттуда. Плюсы: моментальная работа с правами с запуском сервера, безотказная работа при долговременном отсутствии СУБД.
    • В следующих колонках в одной ячейке БД можно перечислять сразу несколько значений: entity (все таблицы), destination (таблицы permissions и inheritance), parent (таблица inheritance). Разделителями являются: пробел, перенос строки, возврат каретки и другие пробельные символы, а также запятая и точка с запятой. В таблице entities ещё с версии 0.8.15b появилась колонка lifetime (TIMESTAMP), просто версия не была распространена и я упомянул об этот здесь.
    • Функция лимитирования входа по количеству оставшихся незанятых слотов расширяет возможности режима обслуживания (maintenance mode). Предлагается создание пар название лимита -- количество свободных слотов (например, xxx = 10). Если подключающийся игрок имеет право rscp.limit.xxx, то он может подключиться, когда на сервере остаётся не менее 10 свободных слотов.
    • В качестве идентификаторов игроков (значений entity при entity_type/child_type = 1) можно использовать: имена игроков, uuid-ы (с дефисами/без, любой регистр), а теперь также и IP-адреса (в формах 192.168.*.* или 192.168.0.0/16).
    • Полностью вырезана работа с лестницами повышения прав (таблица ladders) — использование их могло привести к неочевидным изменениям строк БД. Вероятно появление в будущем плагина-дополнения, который будет выполнять такую функцию посредством Vault.
    • Полностью вырезаны поощрения (rewards) — как не вписывающиеся по существу в плагин управления правами и никем не использующиеся.
    • Вывод отладочной информации игроку (/rscp debug [yes/on/no/off/toggle]).
    [DOUBLEPOST=1427812344][/DOUBLEPOST]Вышла довольно-таки стабильная сборка, 0.9.8a, можно скачать с Jenkins-а.
    Гоняю на своём продакшен-сервере, вполне стабильно.
     
    Последнее редактирование: 24 мар 2015
  8. MySt1k

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

    Баллы:
    173
    Ура!
     
  9. chief

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

    Баллы:
    76
    Структура базы данных такая же, как и в PEx?[DOUBLEPOST=1427906283,1427905814][/DOUBLEPOST]Пожалуйста, дайте пример БД. Не очень понимаю в ее структуре.[DOUBLEPOST=1427906681][/DOUBLEPOST]Ввел команду /rscp examplerows и в консоли появилась такая ошибка
    Таблицы rscp_entities, rscp_permissions создались
    Код:
    [19:41:10] [Server thread/INFO]: chief issued server command: /rscp examplerows
    [19:41:10] [rscAPI:SQL-write (rscp:InsertExampleRows)/INFO]: [rscAPI][SQL] Connecting to "rscp"...
    [19:41:10] [rscAPI:SQL-write (rscp:InsertExampleRows)/WARN]: [rscAPI][SQL] Exception in Execute():
    {0}
    com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'expirience' cannot be null
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_40]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_40]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_40]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[?:1.8.0_40]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:407) ~[Util.class:?]
        at com.mysql.jdbc.Util.getInstance(Util.java:382) ~[Util.class:?]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039) ~[SQLError.class:?]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) ~[MysqlIO.class:?]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) ~[MysqlIO.class:?]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:931) ~[MysqlIO.class:?]
        at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1817) ~[MysqlIO.class:?]
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2198) ~[MysqlIO.class:?]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) ~[ConnectionImpl.class:?]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2570) ~[ConnectionImpl.class:?]
        at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:779) ~[StatementImpl.class:?]
        at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:622) ~[StatementImpl.class:?]
        at ru.simsonic.rscPermissions.ru-simsonic-rscUtilityLibrary-shaded.ConnectionMySQL.executeUpdate(ConnectionMySQL.java:178) [rscPermissions_v0.9.8a.jar:?]
        at ru.simsonic.rscPermissions.ru-simsonic-rscUtilityLibrary-shaded.ConnectionMySQL.executeUpdateT(ConnectionMySQL.java:150) [rscPermissions_v0.9.8a.jar:?]
        at ru.simsonic.rscPermissions.Backends.BackendDatabase.insertExampleRows(BackendDatabase.java:108) [rscPermissions_v0.9.8a.jar:?]
        at ru.simsonic.rscPermissions.Bukkit.Commands.BukkitCommands$3.run(BukkitCommands.java:117) [rscPermissions_v0.9.8a.jar:?]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]
    
     
    Последнее редактирование: 1 апр 2015
  10. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Должно быть три таблицы: entities, permissions, inheritance. Плагин я начал писать давно, и на тот момент структура была очень сильно похожа на PEx, но совсем недавно я заглянул в его новую версию и, мягко говоря, ничего не понял.

    Таблица entities
    :
    • Первичный ключ id
    • Строка наименования сущности (игрок или группа) entity
    • Тип сущности (0 - группа, 1 - игрок) entity_type
    • Префикс prefix
    • Суффикс suffix
    • Время жизни строки lifetime
    Таблица permissions:
    • Первичный ключ id
    • Строка наименования сущности (игрок или группа) entity
    • Тип сущности (0 - группа, 1 - игрок) entity_type
    • Строка с пермишеном permission
    • Назначаемое значение (1 - дать, 0 - забрать) value
    • Опциональная условная колонка "расположение" destination, см. описание ниже
    • Опциональная условная колонка с требуемым уровнем игрока expirience
    • Время жизни строки lifetime
    Таблица inheritance:
    • Первичный ключ id
    • Строка наименования сущности (игрок или группа) entity
    • Название родительской группы parent
    • Тип дочерней сущности (entity) (0 - группа, 1 - игрок) inheritance_type
    • Опциональная условная колонка "расположение" destination, см. описание ниже
    • Опциональная условная колонка с требуемым уровнем игрока expirience
    • Время жизни строки lifetime
    Ключ id в общем-то, только для удобства — кроме него имеются разные INDEX и UNIQUE индексы.
    Колонка lifetime указывает момент в будущем, при достижении которого плагин удалит эту строку. Так как она есть во всех трёх таблицах, то таким образом можно задавать временные и префиксы, и права и группы.Самое интересное это destination. Оно состоит из трёх кусков: названия региона, мира и сервера. Все три необязательны. Если что-то из них введено, то оно ограничивает действие этой строки на соответствующий регион/мир/сервер. Если не введено — не ограничивает. Формат такой: region:world@serverId, где двоеточие как бы часть региона, а @ — как бы часть имени сервера.[DOUBLEPOST=1427945840,1427945497][/DOUBLEPOST]
    Большое спасибо за подробный лог, он помог мне локализовать ошибку. Таблиц именно создалось две, или всё-же создались три, но заполнились дрянью только две?
     
  11. chief

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

    Баллы:
    76
    После подключения плагина, создались все три таблицы. После ввода команды заполнились только две из них.
    Обнаружил еще одну ошибку. Я не могу уверенно говорить, что ошибка в вашем плагине но связана с ним.
    При подключении к серверу меня отключает с такой ошибкой. Со стороны клиента:
    Код:
    internal exception: io.netty.handler.codec.decoderException: java.io.IOException: Bad packet id 64
    Со стороны сервера:
    Код:
    [00:20:38] [User Authenticator #2/INFO]: UUID of player chief is adfadefe-хххх-хххх-b71e-b7ed34dfca93
    [00:20:38] [Server thread/WARN]: Failed to handle packet for /ххх.ххх.ххх.ххх:3572
    java.lang.NullPointerException
        at net.minecraft.entity.player.EntityPlayer.<init>(EntityPlayer.java:172) ~[yz.class:?]
        at net.minecraft.entity.player.EntityPlayerMP.<init>(EntityPlayerMP.java:187) ~[mw.class:?]
        at net.minecraft.server.management.ServerConfigurationManager.attemptLogin(ServerConfigurationManager.java:522) ~[oi.class:?]
        at net.minecraft.server.network.NetHandlerLoginServer.func_147326_c(NetHandlerLoginServer.java:130) ~[nn.class:?]
        at net.minecraft.server.network.NetHandlerLoginServer.func_147233_a(NetHandlerLoginServer.java:70) ~[nn.class:?]
        at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:247) ~[ej.class:?]
        at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) [nc.class:?]
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:980) [MinecraftServer.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:423) [lt.class:?]
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:798) [MinecraftServer.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:658) [MinecraftServer.class:?]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]
    [00:20:38] [Server thread/INFO]: com.mojang.authlib.GameProfile@207ceffa[id=adfadefe-хххх-хххх-b71e-b7ed34dfca93,name=chief,properties={textures=[com.mojang.authlib.properties.Property@33fcbcc4]},legacy=false] (/ххх.ххх.ххх.ххх:3572) lost connection: Internal server error
    [00:21:22] [Server thread/INFO]: CONSOLE: Stopping the server..[m
    [00:21:23] [Server thread/INFO]: Stopping server
    
    После нескольких неудачных подключений, сервер выключается[DOUBLEPOST=1427954283,1427954205][/DOUBLEPOST]онлайн режим был выключен[DOUBLEPOST=1427955054][/DOUBLEPOST]
    Ошибся. Это не ваш плагин виноват.
    На хостинге все нормально работало. Переместил на VDS и вот такая канитель
     
    Последнее редактирование: 2 апр 2015
  12. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Плагину буквально нечем вызывать такие ошибки. Он не работает с пакетами, вообще.
    Это не должно играть роли.
    Большое спасибо. Сразу же сообщайте, если действительно с плагином будет что-то не так. Это не релиз, но уже очень стабильная публичная альфа (пора бы перейти в бету, кстати).

    Обновил до 0.9.11a, скачать можно с Jenkins-а по ссылке в первом посту.
    • Улучшены визуально ответы команд
    • Работают (после того, как были недавно сломаны) uuid-ы игроков (их можно вводить вместо имени).
    • Нормально работает анализ прав оффлайн игроков.
    • Реализованы лимиты на подключение, когда свободных слотов мало.
    • Ну и вообще там по мелочам много грамотного сделал.
     
  13. chief

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

    Баллы:
    76
    Код:
    Server is too full to allow you enter.
    Please try to connect later...
    Я должен дать игроку специальные права для доступа к серверу?
     
  14. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Это новая фича, она только что из коробки :) Именованные лимиты на оставшиеся слоты.
    В config.yml есть узел slot-limits, в нём перечислены лимиты. Если свободных слотов меньше, чем задаёт лимит, то игроку нужно право rscp.limits.<название лимита>, чтобы подключиться. Если игрок обладает лимитом, который позволяет зайти при меньшем кол-ве оставшихся слотов, то он автоматически разрешает и все "более объемные" слоты.
    Плагин идёт из коробки с двумя предустановленными слотами:
    • administrators — 5 слотов
    • premium — 25 слотов
    Сотри их, если не хочешь использовать эту фичу вообще, увеличь кол-во слотов на сервере или настрой всё под себя :)
     
  15. chief

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

    Баллы:
    76
    Плагин очень классный, просто суперовый. Благодарю за помощь, с таблицами разобрался.
    Плагин содержит API от PEX? То есть с ним будут работать все плагины, которые работают с PEX?
    Еще с префиксам EssentialsChat разобраться и все будет отлично.
    Уже третий день не сплю с этим дырявый майнкрафтом :coffee:
     
  16. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Обращайтесь, я регулярно отвечаю на все вопросы :)
    Абсолютно не содержит — плагин предоставляет своё собственное API, в том числе реализующее VaultAPI — работают все плагины, которые адекватно используют его.
    На моём сервере я не использую Essentials, с моими плагинами всё ОКъ. Я уже сделал некоторые костыльные шаги, думал что уже и Essentials побеждён. Ан нет... ну окай.
     
  17. chief

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

    Баллы:
    76
    Я вам очень благодарен, что не игнорируете :good:
    Не нашел хорошую замену Essentials'у, а ставить 10 плагинов на замену одному не хочется.[DOUBLEPOST=1427968626,1427967387][/DOUBLEPOST]Могли бы вы сделать платное пользование определенными правами?
    Например: При вводе команды /fly, со счета пользователя снимается 50 монет.
     
  18. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Это не задача для данного плагина: нужно найти и использовать другой, который бы позволял за игровые деньги назначать игрокам посредством VaultAPI временные права.
    Стоит отметить, что я ещё не до конца доделал реакцию плагина на запросы на изменение прав со стороны VaultAPI — она ожидается в ближайшем будущем. Следите за обновлениями.
     
  19. chief

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

    Баллы:
    76
    У меня еще одна проблема) Некоторые права в некоторых группах дублируются.
    Код:
     #1062 - Duplicate entry 'dc.keepallitems' for key 'PRIMARY'
    Если я сниму ключ, ничего непредсказуемого не случится?
     
  20. Автор темы
    Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Какой именно ключ мешает?
    Если id, так ты не вводи id, он сам введётся, он AUTO_INCREMENT.
    Если ключ entity-permission, то нет никакого смысла вводить два раза одно и тоже!!
    Ключ на то и есть ключ, чтобы не допускать нехороших данных. Если ты пытаешься массово сделать вставку, проигнорируй это через INSERT IGNORE INTO ...

    P.S. Да, я тупанул, ты же написал, что ключ PRIMARY — просто не вводи id сам, пусть БД их расставляет сама.

    Напиши мне в одноимённый скайп, помогу с твоим случаем :)
     
    Последнее редактирование: 2 апр 2015
  21. chief

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

    Баллы:
    76
    Я про сам ключ.

    Код:
    (NULL, 'vip', 0, 'essentials.time.set', b'1', '', 0, NULL),
    V.I.P. имеет права на изменение времени. Я хочу еще игрокам группы helper дать права на изменение времени. Можно группу vip сделать родительской группой для группы helper но тогда все права группы vip станут доступными игрокам группы helper
    Как вариант, я создал отдельную группу time с нужными правами и сделал ее родительской для групп vip и helper.
    Иду подремлю :cool:
     

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