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

Quest Codex

Расширение Quest Codex предоставляет полностью настраиваемую систему GUI, позволяющую игрокам просматривать, отслеживать и управлять квестами, организованными по иерархическим категориям. Каждое меню строится через декларативные пулы раскладки на базе расширения GUI — никаких жёстко закодированных меню, бесконечная настройка.

Возможности

  • Иерархические категории — Вкладывайте категории через отношения родитель/потомок. Подкатегории наследуют видимость родителя.
    • Пулы раскладки — Проектируйте каждое меню через декларативные пулы раскладки. Плейсхолдеры (SORT_SLOT, CATEGORY_SLOT, QUEST_SLOT) внедряются автоматически.
    • Прокручиваемые списки квестов — Слоты квестов и категорий следуют вьюпортам scrollable, paginated и frame — стройте прокручиваемые сетки квестов любого размера (начиная с 0.3.0).
    • Динамическая сортировка — Переключайте Все → Не начатые → Активные → Завершённые, с отображением кнопки для каждого режима (метка, описание, пользовательский предмет).
    • Отслеживание квестов — Отслеживайте активные квесты с индикаторами приоритета через нативную систему отслеживания QuestExtension.
    • Полный звуковой дизайн — Настраивайте звуки для открытия меню, кликов, прокрутки и событий отслеживания/снятия отслеживания квеста.
    • Интеграция с BlueMap — Отображайте значки квестов на BlueMap с динамическими метками и правилами видимости (версия BTC).

Архитектура

Библиотека записей

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

  • Quest Codex Config — Глобальные звуки, число строк по умолчанию и шаблоны сообщений.

Система категорий

  • Quest Category — Задаёт категорию с заголовком, значком, родителем и критериями видимости.
    • Quest Assignment — Привязывает записи квестов к категории, с порядком и переопределениями по статусу.

Меню и отображение

  • Category Menu — Проектируйте меню с декларативными пулами раскладки, слотами-плейсхолдерами и кнопками сортировки по режимам.
    • Quest Lore — Переопределяйте строки описания по квесту и по статусу.

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

  • 1. Добавьте глобальную конфигурацию (опционально) — Создайте запись Quest Codex Config в JSON страницы, чтобы настроить звуки и сообщения. Расширение работает «из коробки» и без этого — оно использует разумные значения по умолчанию. json { "type": "quest_codex", "id": "my_codex_config", "defaultRows": 5, "nowTrackingMessage": "<green>Now tracking: {quest}</green>" } Разместите её на любой скомпилированной странице в plugins/Typewriter/pages/. → Quest Codex Config

  • 2. Определите категории — Добавьте запись Quest Category. Она задаёт логическую группу квестов в кодексе с отображаемым заголовком, значком и необязательным родителем для вложенности. Ключевые поля: - category — Уникальное внутреннее имя (напр., main_quests) - title — Отображаемый заголовок для игроков (MiniMessage) - icon — Предмет, показываемый в списке родителя/категории - parent — Оставьте пустым для верхнего уровня или задайте для вложенности → Quest Category

  • 3. Назначьте квесты — Добавьте запись Quest Assignment, чтобы привязать ваши квесты QuestExtension к категории. Управляйте порядком и переопределениями по статусу. json { "type": "quest_assignment", "id": "assign_main", "category": "main_quests", "questRefs": ["quest:quest_main_1", "quest:quest_main_2"], "orders": [0, 1] } → Quest Assignment

  • 4. Спроектируйте меню — Добавьте запись Category Menu для каждой категории, которой нужен собственный GUI. Используйте пул раскладки, чтобы разместить: - CATEGORY_SLOT — Автоматически внедряемые значки категорий (главное меню) - QUEST_SLOT — Автоматически внедряемые кнопки квестов (меню категории) - SORT_SLOT — Автоматически внедряемая динамическая кнопка сортировки - Стандартные предметы GUI — Декоративные предметы, заполнители, статические кнопки Пул раскладки использует guiType CUSTOM. Всё позиционно: размещайте предметы по координатам (x, y). → Category Menu

  • 5. Откройте меню — Доступ к кодексу через команду: /tw codex → главное меню кодекса (начиная с 0.3.0) /tw codex <category> → конкретная категория Примеры: - /tw codex main_quests — Открывает категорию основных квестов - /tw codex daily_tasks — Открывает ежедневные задания > Главное меню: либо создайте запись category_menu с пустым category и маркерами CATEGORY_SLOT, либо постройте хаб как меню open_gui расширения GUI, кнопки которого запускают codex:open <category>, и укажите его в mainMenuTrigger конфигурации — тогда /tw codex и кнопка BACK кодекса будут открывать его.

Команды

КомандаPermissionОписание
/tw codextypewriter.codex.openОткрыть главное меню кодекса (category_menu с пустой категорией или mainMenuTrigger из конфигурации).
/tw codex <category>typewriter.codex.openОткрыть конкретную категорию квестов напрямую. Доступно автодополнение.

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

Префикс: %typewriter_*%

Глобальные плейсхолдеры
ПлейсхолдерВозвращаетПример
%typewriter_total_quests%Общее число квестов по всем категориям42
%typewriter_total_completed%Всего завершённых квестов15
%typewriter_total_in_progress%Всего квестов в процессе5
%typewriter_total_not_started%Всего не начатых квестов22
%typewriter_total_progress%Завершённые/Всего в формате15/42
Плейсхолдеры по категории

Замените <name> на идентификатор категории (напр., main_quests).

ПлейсхолдерВозвращаетПример
%typewriter_category_<name>%Всего квестов в категории10
%typewriter_category_<name>_completed%Завершённые в категории3
%typewriter_category_<name>_in_progress%В процессе в категории2
%typewriter_category_<name>_not_started%Не начатые в категории5
%typewriter_category_<name>_progress%Прогресс в формате3/10

Псевдонимы: _inprogress% и _notstarted% тоже работают.

Шаблонные переменные (в полях @Placeholder)
ПеременнаяКонтекстЗаменяется на
{quest}Шаблоны сообщенийОтображаемое название квеста
{completed}Сообщения о прогрессеЧисло завершённых квестов
{total}Сообщения о прогрессеВсего квестов в категории

Права

PermissionОписание
typewriter.codex.openОткрыть кодекс квестов.

Зависимости

ExtensionОбязательноНазначение
QuestExtensionОбязательноОсновной движок квестов.
GUI ExtensionОбязательноОтрисовка меню и система пулов раскладки.
PlaceholderAPIОпциональноДля полей @Placeholder.