Привилегия на время в LuckPerms: команды и автовыдача
В LuckPerms привилегия - это родительская группа игрока, а срок задаёт команда parent addtemp. Ниже - команды для выдачи, продления и проверки и то, как плагин aDonate выдаёт группу на срок сам, чтобы одна команда подходила и к 30 дням, и к варианту «навсегда».
Группа навсегда и на срок
lp user Steve parent add vip
lp user Steve parent addtemp vip 30d
lp user Steve parent remove vip
lp user Steve parent removetemp vipadd выдаёт группу навсегда, addtemp - на срок: 30d - 30 дней, 12h - 12 часов. remove и removetemp снимают постоянную и временную группу. По окончании срока LuckPerms снимает группу сам, в том числе если игрок не в сети, а в сети серверов с общей базой - на всех серверах сразу.
Продление при повторной покупке
Если у игрока уже есть эта временная группа, повторный addtemp по умолчанию время не добавит: поведение задаёт настройка temporary-add-behaviour в config.yml LuckPerms или последний аргумент команды.
lp user Steve parent addtemp vip 30d accumulate| Значение | Что происходит |
|---|---|
deny | Команда отклоняется, срок не меняется. Это значение по умолчанию |
accumulate | Новый срок прибавляется к остатку |
replace | Остаётся больший из двух сроков |
Для доната почти всегда нужен accumulate: игрок, который дважды купил 30 дней, ждёт 60.
Права и префикс группы
lp creategroup vip
lp group vip parent add default
lp group vip permission set essentials.fly true
lp group vip meta setprefix 10 "&6[VIP] "parent add default наследует права обычного игрока, поэтому их не нужно копировать. Число в setprefix - приоритет: если у игрока несколько групп, чат покажет префикс с наибольшим, поэтому старшим привилегиям давайте приоритет выше. Имена прав смотрите в документации своих плагинов: essentials.fly - право EssentialsX.
Что есть у игрока
lp user Steve info
lp user Steve parent info
lp user Steve permission check essentials.flyparent info показывает группы игрока и сколько осталось у временных. permission check - есть ли у игрока право и откуда оно пришло.
Как выдавать группу на срок из доната
Команду выдачи можно написать прямо на LuckPerms: lp user {player} parent addtemp vip {duration}d accumulate. Но у варианта «навсегда» срок пустой, и такая команда сломается, а значит, для каждого варианта пришлось бы писать свою.
У плагина aDonate для этого своя команда, она подходит ко всем вариантам товара:
adonate group {player} vip {duration}- С LuckPerms группа выдаётся через его API. Повторная покупка добавляет дни к остатку при любом значении
temporary-add-behaviour, а снимает группу по окончании срока сам LuckPerms. - С Vault и другим плагином прав (PermissionsEx, GroupManager) плагин aDonate хранит срок у себя и сам выводит игрока из группы, когда время вышло, даже если игрок не в сети.
- Если группа у игрока уже есть навсегда, на срок она не выдаётся: игрок увидит, что она у него уже есть.
- Группу, которой нет на сервере, плагин не выдаёт: покупка ждёт в ящике игрока, а консоль пишет, что исправить.
Действующие привилегии и их сроки игрок видит в /store.
Частые ошибки
- Группа выдана, а префикса нет. Префиксы показывает чат-плагин, и он должен читать их из LuckPerms или Vault, например EssentialsX Chat вместе с Vault.
- Повторная покупка не продлила срок. Стоит
temporary-add-behaviour: deny, иaddtempбезaccumulateотклонён. - Права не работают на одном из серверов сети. У серверов разные базы LuckPerms. Подключите общую базу (MySQL, MariaDB или PostgreSQL) или выдавайте группу на каждом сервере.