Перейти к основному содержимому

Party

Временные группы с приглашениями, GUI-меню, лимитами размера и серверными варпами для всей группы.

Приватныеv0.2.0Социальное
ТребуетсяTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)GUI (TypeWriter extension)MySQL (TypeWriter extension)необязательноRedis or Valkeyнеобязательно

Создано для сети BornToCraft. Это расширение описано для справки и не распространяется.

Обзор​

Party позволяет игрокам образовывать недолговечные группы. Лидер создаёт отряд и приглашает игроков по имени, а приглашённые принимают приглашение командой /party join <leader>. Системы квестов, подземелий и HUD затем могут спросить «кто состоит в одном отряде с этим игроком». Лидер также может перенести весь отряд на другой сервер сети.

Отряды не сохраняются в базу данных: они живут в памяти и реплицируются на остальные серверы сети через Redis. Участник, который отключился, остаётся в отряде, поэтому отряд переживает переход между серверами и заканчивается, только когда участники выходят, их исключают или лидер распускает отряд. Перезапуск всех серверов распускает все отряды.

Меню отряда — это меню GUI, которое вы создаёте в веб-панели. Участники показываются как головы игроков, а ожидающие приглашения — как кликабельные головы.

Возможности​

  • Создание, приглашение, вступление, выход, исключение, роспуск — доступно как команды, действия TypeWriter и кнопки меню.
  • Меню отряда — одна запись с экранами участников и приглашений, постраничным просмотром и вкладками.
  • Приглашения — ввод имени в чате, экран вступления с фильтром поиска и срок действия 60 секунд.
  • Ограничения размера — максимум по умолчанию с более высокими лимитами для прав вроде typewriter.party.vip.
  • Варп на сервер — лидер отправляет всех участников на другой бэкенд, где бы они ни находились в сети.
  • Межсерверные отряды — состав, приглашения и сообщения чата отряда доходят до каждого сервера группы.
  • Хуки для сюжета — факт сообщает, состоит ли игрок в отряде.
  • Плейсхолдеры — лидер, роль, размер, имена участников и здоровье участников для HUD.
  • Интеграции — другие расширения BTC, например коопы островов и подземелья, создают и читают отряды.

Установка​

  1. Установите расширение GUI, которое отрисовывает меню, и расширение Quest, которое Party объявляет зависимостью.
  2. По желанию, для нескольких серверов: установите расширение MySQL, включите Redis (или Valkey) и задайте одинаковый redis.group-id и уникальный redis.server-name на каждом сервере. Для варпа нужно, чтобы прокси обрабатывал канал btc:bridge.
  3. Положите JAR-файл Party в plugins/Typewriter/extensions/ и перезапустите сервер.

party.use по умолчанию выдаётся всем, а party.admin — операторам.

Быстрый старт​

Создадим меню отряда и ограничение размера:

  1. В веб-панели TypeWriter откройте страницу и добавьте запись Party Menu Config. Используются только её лимиты (см. Конфигурация): задайте maxPartySize и при желании maxPartySizePermissions.
  2. Добавьте запись Party Menu. /party открывает первую найденную.
  3. Задайте inventoryTitle, inventoryRows и guiType, затем постройте макет в layoutPool и задайте mainLayoutId. См. руководства по GUI.
  4. Объявите экраны в views (например members и join). Перечислите id экранов участников в memberListViewIds, а id экрана приглашений — в joinListViewIds.
  5. Добавьте предметы с buttonType: PARTY_MEMBERS, PARTY_JOIN, PAGE_NAV и кнопки, выполняющие команды (см. Меню).
  6. Опубликуйте и выполните /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
Факты1
Артефакты1
Манифесты1

Устранение неполадок​

/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 — экземпляры подземелий используют отряд для группировки игроков.