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

Profiles

Несколько профилей персонажа на игрока, у каждого свой инвентарь, эндер-сундук, опыт и факты TypeWriter.

Приватныеv0.2.0RPG и прогресс
ТребуетсяTypeWriter0.9.0-beta-177 (BTC build)Basic (TypeWriter extension)GUI (TypeWriter extension)MySQL (TypeWriter extension)необязательноParty (TypeWriter extension)необязательно

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

Обзор​

Profiles даёт каждому игроку несколько независимых персонажей на одном аккаунте. Переключение профиля меняет инвентарь игрока, эндер-сундук, опыт, здоровье и сытость, а также его факты TypeWriter, поэтому прогресс квестов, открытия и счётчики у каждого персонажа свои. Другие расширения BTC, например BTC Sky, прикрепляют свои данные к активному профилю.

Профили создаются и выбираются из меню, которое вы проектируете в веб-панели. Сервер может заставить игроков выбрать профиль, прежде чем они смогут двигаться, строить, сражаться или писать в чат. Данные хранятся в базе данных, когда включён мост MySQL, что делает профили доступными на каждом сервере сети, а в остальных случаях — в файлах.

Система привязана к игровому режиму сервера (mysql.game-mode.current): у игрока в каждом игровом режиме свой отдельный список профилей.

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

  • Отдельные персонажи — инвентарь, броня, вторая рука, эндер-сундук, уровень, опыт, здоровье, сытость и насыщение для каждого профиля.
  • Отдельное состояние истории — факты TypeWriter сохраняются при переключении и восстанавливаются для профиля.
  • Меню профилей — GUI с одним слотом на профиль и шаблонами для активных, неактивных, свободных и заблокированных слотов.
  • Принудительный выбор — пока профиль не активен, игрок не может двигаться, взаимодействовать, ломать, ставить, выбрасывать, сражаться или писать в чат.
  • Соло и кооператив — профиль создаётся как соло или кооперативный (общий остров BTC Sky), а игровой режим без кооператива пропускает этот вопрос.
  • Ограничения — максимум по умолчанию и более высокие лимиты по правам.
  • Защита от переключения — перезарядка между переключениями и событие, которое могут отменить другие расширения.
  • Записи — действия для открытия меню, создания, переключения, переименования, удаления и сохранения, факты о состоянии профиля и события.
  • Между серверами — профили и их данные разделяются через мост MySQL.
  • Плейсхолдеры — название, идентификатор, число, лимиты и подробности по каждому профилю для меню и HUD.

Установка​

  1. Установите расширение GUI, которое рисует меню. Расширение Basic объявлено как зависимость.
  2. Рекомендуется: установите расширение MySQL и включите его (mysql.enabled: true). Без него профили хранятся в файлах и не разделяются между серверами.
  3. Поместите JAR-файл Profiles в plugins/Typewriter/extensions/ и перезапустите сервер.
  4. Отредактируйте раздел profiles в plugins/Typewriter/mysql/config.yml, см. Конфигурация. Profiles читает свои настройки из файла конфигурации расширения MySQL, даже если вы не используете базу данных.
  5. Создайте записи меню, описанные в разделе Начало работы.

Начало работы​

Настройте выбор профиля, который должны пройти новые игроки:

  1. В веб-панели TypeWriter откройте страницу и добавьте запись Profile Menu Config. /profile открывает первую найденную и ничего не делает, если её нет.
  2. Задайте inventoryTitle, inventoryRows и guiType. Постройте раскладку в layoutPool и задайте mainLayoutId. См. руководства по GUI.
  3. Разместите предметы с buttonPrefix profile_button: и buttonType PROFILE_SLOT там, где должны появляться профили. Каждый маркер показывает один профиль, считываемый слева направо, затем сверху вниз. Слоты ниже лимита игрока, в которых нет профиля, показывают createProfileTemplate, а слоты за пределами лимита показывают maxProfilesTemplate.
  4. Задайте defaultMaxProfiles и при необходимости permissionLimits.
  5. Создайте две страницы GUI, используемые для создания, как записи Open GUI с идентификаторами profile_create_chooser (выбор Solo или Coop) и, для игровых режимов без кооператива, profile_create_solo. Кнопка на этих страницах выполняет profile create solo или profile create coop, а для режимов только соло — просто profile create.
  6. В plugins/Typewriter/mysql/config.yml проверьте profiles.force-profile-selection (по умолчанию true) и profiles.coop-supported.
  7. Опубликуйте, зайдите на сервер и выберите или создайте профиль.

Используйте Switch Profile Action или Open Profile Menu Action от NPC и предметов. Реагируйте на переключения, выполненные действием переключения или введёнными командами, с помощью Profile Switched Event.

Ограничьте содержимое профилем

Используйте факты Profile Count Fact и Is Profile Active Fact в критериях. Например, показывайте кнопку «создать профиль», только пока Can Create Profile Fact равен 1.

Как это работает​

При переключении расширение проверяет перезарядку, затем запускает отменяемое событие перед переключением, чтобы игровой режим мог отказать (например, во время войны или мини-игры). Затем оно фиксирует текущее состояние игрока, записывает его в хранилище, очищает факты TypeWriter и инвентарь игрока и восстанавливает данные целевого профиля. Состояние активного профиля также сохраняется, когда игрок выходит.

Что сохраняется, зависит от конфигурации: инвентарь и эндер-сундук (save-inventory, save-ender-chest) и статистика Minecraft (save-statistics, по умолчанию выключено из-за большого размера). Уровень, опыт, здоровье, сытость и факты TypeWriter сохраняются всегда.

Поскольку факты подменяются, всё, что хранится в факте, принадлежит профилю. Данные других расширений следуют их собственному profile-mode в конфигурации MySQL: данные per-profile хранятся отдельно для каждого профиля, данные shared общие для всех профилей.

Конфигурация​

У Profiles нет собственного файла конфигурации. Его настройки находятся в разделе profiles файла plugins/Typewriter/mysql/config.yml, создаваемого расширением MySQL.

КлючЗначение по умолчанию в поставляемом файлеЗначение
profiles.enabledtrueВключает систему профилей.
profiles.max-profiles2Максимум профилей на игрока, когда записи Profile Menu Config не существует. defaultMaxProfiles записи заменяет его.
profiles.default-profile-namePrincipalНазвание автоматического профиля.
profiles.save-statisticstrueСохранять статистику Minecraft для каждого профиля. Занимает много места.
profiles.save-inventorytrueПодменять инвентарь для каждого профиля.
profiles.save-ender-chesttrueПодменять эндер-сундук для каждого профиля.
profiles.require-permissionfalseТребовать typewriter.profiles.create для создания профиля.
profiles.auto-create-defaulttrueСоздавать профиль по умолчанию при первом входе. Работает только когда coop-supported равен false.
profiles.force-profile-selectiontrueБлокировать игрока, пока профиль не активен.
profiles.switch-cooldown-seconds60Минимальная задержка между двумя переключениями игрока. 0 отключает её.
profiles.coop-supportedtrueЕсть ли в этом игровом режиме кооперативные профили. Когда false, вопрос Solo или Coop пропускается, и каждый профиль соло.
profiles.creation-menu-entry-idпустоИдентификатор страницы GUI, открываемой для создания профиля. Пусто означает profile_create_chooser, если кооператив поддерживается, и profile_create_solo в остальных случаях.

Значения выше — из поставляемого файла. Встроенные значения по умолчанию, когда ключа нет, отличаются (max-profiles 5, save-statistics true, auto-create-default false), поэтому сохраняйте ключи в вашем файле.

Хранилище. При mysql.enabled: true и profiles.enabled: true профили хранятся в таблице typewriter_profiles. В остальных случаях они хранятся как ассеты в profiles/<game mode>/<player uuid>.json. Профили, сохранённые в старом артефакте Profile Storage Artifact, автоматически копируются в новое хранилище при запуске.

Меню​

Запись Profile Menu Config описывает меню. Клик по профилю переключает на него, Shift + левый клик удаляет его (сначала открывается экран подтверждения, если deleteConfirmation не отключён), а клик по свободному слоту открывает страницу создания. При создании профиля имя запрашивается в наковальне. {profile_name}, {profile_id}, {created_date}, {last_used}, {level}, {exp}, {health}, {food}, {profile_count} и {max_profiles} можно использовать в заголовках, названиях и описаниях.

Предметы-кнопки с buttonPrefix profile_button: поддерживают PROFILE_SLOT (один профиль) и маркеры INFO и CLOSE, которые выполняют profile info и gui:close.

Слоты могут выполнять profile open, profile select <id>, profile create solo|coop и profile delete <id> от имени кликнувшего игрока.

Язык

Тексты меню по умолчанию, сообщения и сообщение о перезарядке на французском. Измените их в записи меню.

Команды​

Все команды требуют profiles.use. Псевдонимы: /profil, /profiles.

КомандаОписание
/profileОткрыть меню профилей.
/profile menuОткрыть меню профилей.
/profile select <id>Переключиться на профиль.
/profile create solo или coopСоздать и активировать профиль; имя запрашивается в наковальне. Без режима — только для игровых режимов без кооператива.
/profile delete <id> [confirm]Удалить неактивный профиль. Если deleteConfirmation включён, сначала открывается экран подтверждения, кроме случая с confirm.
/profile admin list <player>Перечислить профили игрока в сети (требует profiles.admin).
/profile admin create <player> <name>Создать соло-профиль для игрока.
/profile admin delete <player> <id>Удалить профиль игрока.
/profile admin switch <player> <id>Переключить игрока на профиль.
/profile admin rename <player> <id> <name>Переименовать профиль.
/profile headless list, select <id>, create <name>Управлять своими профилями без меню (требует profiles.headless).
Перехват команд в игре

Слушатель меню обрабатывает /profile, введённую игроком, раньше дерева команд: он поддерживает select, create, delete и открытие меню, а остальные игнорирует. Поэтому /profile admin ... и /profile headless ... надёжно работают из консоли или через псевдонимы /profil и /profiles.

Права​

ПравоПо умолчаниюЧто даёт
profiles.useВсеКоманды /profile.
profiles.adminОператоры/profile admin.
profiles.headlessНикто/profile headless, для клиентов без экрана, например тестовых ботов.
profiles.switch.bypasscooldownНиктоПереключение без перезарядки.
typewriter.profiles.createНиктоСоздание профилей, когда profiles.require-permission равен true.
Права из permissionLimitsВы выбираетеПовышают лимит профилей. Побеждает наибольший лимит.

Плейсхолдеры​

Теги MiniPlaceholders для текста MiniMessage. Ссылка — это позиция в списке (цифры, начиная с 0) или идентификатор профиля.

ПлейсхолдерВозвращает
<profile_active_id>, <profile_active_name>Идентификатор и название активного профиля.
<profile_active>1, когда профиль активен. Со ссылкой <profile_active:0> сообщает, является ли этот профиль активным.
<profile_count>Число профилей.
<profile_max>Максимальное число профилей для игрока.
<profile_can_create>1, когда игрок может создать ещё один профиль.
<profile_remaining>Число ещё доступных профилей.
<profile_friend_count>Число друзей, 0 без расширения Friend.
<profile_enabled>1, когда система включена.
<profile_name:ref>, <profile_id:ref>Название и идентификатор профиля.
<profile_created:ref>, <profile_last_used:ref>Даты в формате dd/MM/yyyy HH:mm.
<profile_created_timestamp:ref>, <profile_last_used_timestamp:ref>Миллисекунды с начала эпохи.
<profile_level:ref>, <profile_exp:ref>Уровень и прогресс опыта в процентах.
<profile_health:ref>, <profile_food:ref>Сохранённое здоровье и уровень сытости.

Записи​

Записей: 20, сгенерированы из исходного кода расширения.

Действия6
События5
Факты7
Артефакты1
Манифесты1

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

/profile ничего не делает. Нет записи Profile Menu Config. Создайте и опубликуйте её.

Новые игроки замирают и не могут писать в чат. profiles.force-profile-selection равен true, и ни один профиль не активен. После входа игрока отправляют на страницу создания; убедитесь, что запись GUI profile_create_chooser (или profile_create_solo, или ваша creation-menu-entry-id) существует. Задайте опции значение false, чтобы отключить блокировку.

«Choisissez d'abord Solo ou Coop dans le menu des profils.» Игрок попробовал выполнить команду при принудительном выборе. Пока профиль не активен, разрешены только /profile ... и команда страницы создания.

«Vous devez attendre N s avant de changer à nouveau de profil.» Идёт перезарядка переключения. Уменьшите profiles.switch-cooldown-seconds или выдайте profiles.switch.bypasscooldown.

Профиль по умолчанию не создаётся при первом входе. auto-create-default работает только когда coop-supported равен false. При кооперативе игрок должен выбрать Solo или Coop, а в логе написано «No implicit profile was created; disable the setting.»

Профили различаются между серверами. Расширение MySQL должно быть включено (mysql.enabled: true) на каждом сервере с одной и той же базой данных и игровым режимом. Без него профили находятся в локальных файлах. Если MySQL включён, но источник данных отсутствует, в логе написано «MySQL enabled for profiles but DataSource not found. Falling back to JSON.»

Игроки теряют предметы после переключения. Проверьте save-inventory и save-ender-chest. Когда они равны false, инвентарь не подменяется и не очищается, поэтому предметы общие для профилей.

Переключение отклоняется с сообщением. Другое расширение отменило его через событие перед переключением, например во время боя или мини-игры. Сообщение приходит из этого расширения.

Связанные расширения​

  • MySQL — хранилище, игровые режимы и настройки, читаемые Profiles.
  • GUI — раскладки и представления меню профилей.
  • BTC Sky — кооперативные острова и данные островов, прикреплённые к профилю.
  • Party и Friend — социальные функции, следующие за активным профилем.