Party
Обзор
Party позволяет игрокам образовывать недолговечные группы. Лидер создаёт отряд и приглашает игроков по имени, а приглашённые принимают приглашение командой /party join <leader>. Системы квестов, подземелий и HUD затем могут спросить «кто состоит в одном отряде с этим игроком». Лидер также может перенести весь отряд на другой сервер сети.
Отряды не сохраняются в базу данных: они живут в памяти и реплицируются на остальные серверы сети через Redis. Участник, который отключился, остаётся в отряде, поэтому отряд переживает переход между серверами и заканчивается, только когда участники выходят, их исключают или лидер распускает отряд. Перезапуск всех серверов распускает все отряды.
Меню отряда — это меню GUI, которое вы создаёте в веб-панели. Участники показываются как головы игроков, а ожидающие приглашения — как кликабельные головы.
Возможности
- Создание, приглашение, вступление, выход, исключение, роспуск — доступно как команды, действия TypeWriter и кнопки меню.
- Меню отряда — одна запись с экранами участников и приглашений, постраничным просмотром и вкладками.
- Приглашения — ввод имени в чате, экран вступления с фильтром поиска и срок действия 60 секунд.
- Ограничения размера — максимум по умолчанию с более высокими лимитами для прав вроде
typewriter.party.vip. - Варп на сервер — лидер отправляет всех участников на другой бэкенд, где бы они ни находились в сети.
- Межсерверные отряды — состав, приглашения и сообщения чата отряда доходят до каждого сервера группы.
- Хуки для сюжета — факт сообщает, состоит ли игрок в отряде.
- Плейсхолдеры — лидер, роль, размер, имена участников и здоровье участников для HUD.
- Интеграции — другие расширения BTC, например коопы островов и подземелья, создают и читают отряды.
Установка
- Установите расширение GUI, которое отрисовывает меню, и расширение Quest, которое Party объявляет зависимостью.
- По желанию, для нескольких серверов: установите расширение MySQL, включите Redis (или Valkey) и задайте одинаковый
redis.group-idи уникальныйredis.server-nameна каждом сервере. Для варпа нужно, чтобы прокси обрабатывал каналbtc:bridge. - Положите JAR-файл Party в
plugins/Typewriter/extensions/и перезапустите сервер.
party.use по умолчанию выдаётся всем, а party.admin — операторам.
Быстрый старт
Создадим меню отряда и ограничение размера:
- В веб-панели TypeWriter откройте страницу и добавьте запись Party Menu Config. Используются только её лимиты (см. Конфигурация): задайте
maxPartySizeи при желанииmaxPartySizePermissions. - Добавьте запись Party Menu.
/partyоткрывает первую найденную. - Задайте
inventoryTitle,inventoryRowsиguiType, затем постройте макет вlayoutPoolи задайтеmainLayoutId. См. руководства по GUI. - Объявите экраны в
views(напримерmembersиjoin). Перечислите id экранов участников вmemberListViewIds, а id экрана приглашений — вjoinListViewIds. - Добавьте предметы с
buttonType:PARTY_MEMBERS,PARTY_JOIN,PAGE_NAVи кнопки, выполняющие команды (см. Меню). - Опубликуйте и выполните
/party.
Чтобы начать отряд из квеста, используйте действие Create Party. Чтобы собрать игроков вместе, используйте Invite Player с targetName, который принимает плейсхолдер, и Join Party с leaderName.
Используйте Warp Party to Server с targetServer, равным имени бэкенда, известному прокси, например dungeon-1. Запустить его может только лидер. Сочетайте его с фактом In Party как criteria, чтобы предлагать варп только игрокам в отряде.
Как это работает
Каждое изменение отряда отправляется на другие серверы, которые заменяют свою копию. Приглашения истекают через 60 секунд, проверка выполняется раз в минуту, поэтому приглашение живёт от 60 до 120 секунд. Когда лидер уходит, лидером становится первый из оставшихся участников. Отряд без участников удаляется.
Конфигурация
Запись Party Menu Config необязательна. Она содержит только ограничения размера отряда, через такие поля:
maxPartySize— максимальное число участников по умолчанию. По умолчанию5.maxPartySizePermissions— соответствие права максимальному размеру. Применяется наибольший подходящий размер лидера. По умолчанию этоtypewriter.party.vipдля 8 иtypewriter.party.mvpдля 12.
Без этой записи ограничения размера нет. Само меню отряда здесь не настраивается, оно берётся из записи Party Menu.
Party Artifact в этой версии службой отрядов не читается и не записывается, и создавать его не нужно.
Меню
Запись Party Menu — это меню GUI со следующими особенностями поведения, относящимися к отряду.
Панель содержимого. На экране из списка memberListViewIds каждый участник — голова игрока с ролью и статусом в сети. Если вы лидер, левый клик по другому участнику исключает его. На экране из списка joinListViewIds каждое ожидающее приглашение — голова пригласившего лидера: левый клик вступает, правый клик отклоняет. Панель размещается через contentX (по умолчанию 5), contentY, contentColumns (по умолчанию 4) и contentRows (по умолчанию 7).
Кнопки. Эти значения buttonType работают из коробки:
buttonType | Клик |
|---|---|
PARTY_MEMBERS | Открывает экран members (party open members). |
PARTY_JOIN | Переключает на представление join того же меню. |
PAGE_NAV | Левый клик — вперёд, правый клик — назад; в названии показан счётчик страниц. Скрыт, когда достаточно одной страницы. |
Эти значения не привязывают действия. Настройте предмет сами и задайте ему команды: PARTY_INFO, PARTY_CREATE, PARTY_LEAVE, PARTY_DISBAND, PARTY_INVITE, PARTY_CLOSE, PARTY_ACCEPT_INVITE, PARTY_DECLINE_INVITE. Например, выполняйте party create, party leave или party disband на соответствующих предметах. Кнопке приглашения нужно введённое имя: задайте ей диалог input, чьё onInputCommands выполняет party invite {input}.
Команды слотов. Предметы могут выполнять party open [view], party page next|prev|<number>, party info, party create, party leave, party disband, party kick <name>, party invite <name>, party join <leader>, party declineinvite <leader> и party joinsearch <text>. Они выполняются от имени кликнувшего игрока.
Описание голов (lore) и некоторые административные сообщения — на французском. Плейсхолдер <party_role> возвращает французские слова Chef, Moderateur и Membre. Используйте <party_role_raw> для идентификаторов LEADER, MODERATOR и MEMBER.
Команды
Для всех команд нужно party.use. Псевдоним: /p. Голая команда открывает первое Party Menu и ничего не выводит, если его нет.
| Команда | Описание |
|---|---|
/party | Открывает меню отряда. |
/party create | Создаёт отряд, и вы становитесь его лидером. |
/party invite | Закрывает инвентарь и просит ввести имя игрока в чате. |
/party invite <player> | Приглашает игрока (только лидер). |
/party join <leader> | Вступает в отряд этого лидера, если вас пригласили. |
/party accept <leader> | То же, что join. |
/party leave | Покидает ваш отряд. |
/party kick <player> | Исключает участника (только лидер). |
/party disband | Распускает отряд (только лидер). |
/party info | Выводит лидера и участников. |
/party admin list | Выводит все активные отряды (требуется party.admin). |
/party admin info <player> | Показывает отряд игрока. |
/party admin disband <player> | Распускает отряд игрока. Его лидер должен быть в сети. |
/party admin kick <player> | Убирает игрока из его отряда. Лидер отряда должен быть в сети. |
Права
| Право | По умолчанию | Даёт доступ к |
|---|---|---|
party.use | Все | Всем командам /party. Клики в меню выполняют те же действия без проверки этого права. |
party.admin | Операторы | Командам /party admin. |
typewriter.party.vip, typewriter.party.mvp | Нет | Увеличенным размерам отрядов, только когда указаны в maxPartySizePermissions записи конфигурации. Эти названия — значения по умолчанию, их можно менять. |
Плейсхолдеры
Теги MiniPlaceholders для текста MiniMessage, например <party_leader>. Индексы начинаются с 0.
| Плейсхолдер | Возвращает |
|---|---|
<party_in_party> | 1, когда игрок в отряде, иначе 0. |
<party_leader> | Имя лидера. |
<party_role> | Chef, Moderateur или Membre. |
<party_role_raw> | LEADER, MODERATOR или MEMBER. |
<party_size> | Число участников. |
<party_members> | Число участников. |
<party_members:index> | Имя участника на этой позиции. |
<party_members_exclude:index> | Имя участника на этой позиции без смотрящего. |
<party_list> | Имена участников через запятую. |
<party_member_name:index> | Имя участника на этой позиции. |
<party_member_uuid:index> | UUID этого участника. |
<party_member_health:index> | Текущее здоровье этого участника, когда он в сети на этом сервере, иначе 0.0. |
<party_member_health_max:index> | Максимальное здоровье, 20.0, если неизвестно. |
<party_member_health_percent:index> | Здоровье в процентах. |
Записи
Записей: 10, сгенерированы из исходного кода расширения.
Действия7
- Create PartyCreate a new party
- Invite PlayerInvite a player to your party
- Join PartyJoin a party
- Kick Party MemberKick a member from your party
- Leave PartyLeave your current party
- Party MenuOpen Party Menu
- Warp Party to ServerWarp the player's party to a server
Факты1
- In PartyCheck if player is in a party
Артефакты1
- Party ArtifactArtifact for storing party and friend data
Манифесты1
- Party size limitsMaximum party size, with optional permission-based overrides
Устранение неполадок
/party ничего не делает. Не опубликована запись Party Menu. Подкоманды вроде /party create работают и без неё.
«You do not have an invite to this party.» Приглашение истекло через 60–120 секунд или имя лидера написано с ошибкой. Попросите лидера пригласить снова, затем используйте /party join <leader>.
«Party is full! Limit: N». Лидер достиг maxPartySize у Party Menu Config. Увеличьте его или выдайте лидеру право из maxPartySizePermissions. Без записи конфигурации ограничения нет.
Участники на другом сервере не появляются. Каждому серверу нужны одинаковый непустой redis.group-id, уникальный redis.server-name и подключённый Redis. Без group-id ничего не рассылается.
Варп завершается ошибкой «Cross-server transport is unavailable.» Redis не подключён. Проверьте конфигурацию расширения MySQL. targetServer должен быть именем бэкенда, известным прокси, а прокси должен принимать канал btc:bridge.
Изменения в Party Menu Config (слоты, кнопки, сообщения) не действуют. Эти поля относятся к прежнему меню, которое больше не регистрируется. Используйте запись Party Menu для проектирования меню.
Следующее сообщение в чате после /party invite не показывается. Так и должно быть: команда без имени ждёт одно сообщение в чате и использует его как имя игрока, затем приглашает этого игрока. Неверное имя просто даёт ошибку.
Связанные расширения
- MySQL — обмен сообщениями через Redis и транспорт прокси, используемый для варпов.
- GUI — макеты и представления, используемые меню отряда.
- Friend и Guild — другие социальные системы.
- BTC Sky — коопы островов помещают участников в один отряд.
- Dungeon — экземпляры подземелий используют отряд для группировки игроков.