Перейти к содержанию

Фичи, зависимости, A/B-тесты и порядок разработки

Дата: 8 октября 2026. Статус: проектный план для обсуждения, до реализации.

Документ собирает функциональные блоки из текущего дизайна, предлагает их границы, зависимости, поведение при отключении и порядок разработки. Система фич и A/B-тестов пока не реализована.

Подтверждённое требование пользователя: фича — функциональность, которую можно включить и выключить без остановки игры. Фичи могут зависеть друг от друга. Выключение зависимости выключает всех прямых и косвенных потребителей, даже если A/B-тест назначил им включённое состояние. Каждая фича поддерживает включение и выключение через A/B-тест.

Подтверждённый масштаб: бой, спавнеры, боссы, оружие, карта, контент и магазин составляют одну фичу Core Gameplay. Их внутренние механики и этапы реализации не имеют отдельных выключателей фич. Pass — отдельная фича, объединяющая бесплатную и платную части баттл пассов. Магазин обязателен для игрового тестирования Core Gameplay.

Дополнение к Core Gameplay: аккаунт, область облачных функций, настройки, обучение, уведомления и поддержка также являются внутренними частями Core Gameplay, без самостоятельных флагов. Прогресс хранится локально, в версионном JSON, с обязательными миграциями. Подробный контракт: сохранения и миграции.

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

1. Минимальная работоспособная игра

Предлагается выделить минимальную основу: при всех выключенных фичах, включая Core Gameplay, игрок может запустить упрощённую стартовую арену, двигать танк, автоматически стрелять одной «Основой», уничтожать простых врагов, умереть и автоматически возродиться, выйти на карту и продолжить с сохранением. Это резервное поведение при отключении крупной фичи, которое ещё нужно утвердить. Полный бой, оружейная прогрессия, боссы и карта относятся к Core Gameplay.

Основа Что работает независимо от дополнительных фич
Загрузка и игровая сессия Стартовая арена, карта с доступным стартом, пауза, выход
Профиль и локальное сохранение Постоянный ID игрока, версионный JSON, последовательные миграции, резервная копия, хранение заработанного и загрузка после перезапуска
Базовый бой Ручное движение, одна «Основа», автонаведение и обычный выстрел, базовый урон, прочность, простые наземные враги и столкновения
Смерть и возвращение Безопасное автоматическое возрождение с полной прочностью; сохранение заработанного; снятие временных эффектов; удаление вражеских снарядов и опасных зон
События и выдача наград Одно событие гибели на врага, выгрузка не считается гибелью, положенная награда выдаётся один раз, операции переживают повторную загрузку
Минимальный интерфейс Запуск, выход, пауза, прочность танка, базовые настройки
Управление фичами Проверка конфигурации, граф зависимостей, эффективные состояния и причины блокировки

Эта основа — техническое условие существования игры. Выключение игры целиком не является выключением дополнительной фичи. Если понадобится эксперимент над частью основы, сначала нужно выделить заменяемое поведение с полноценным резервным вариантом. Например, другая формула брони не отключает обработку урона вообще.

Резервная техническая основа не зависит от дерева, предметов, сюжета, пассов или облака и сохраняет работоспособность при выключенном Core Gameplay. Она предназначена для проверки безопасного отключения, а не для тестирования игрового цикла и экономики. Для игровых тестов Core Gameplay включён и магазин работает. Сервис хранения умеет сохранять данные выключенной фичи, даже когда её игровая логика не запущена.

2. Состояние фичи и зависимости

У фичи есть ID, общий выключатель, состояние по умолчанию, обязательные зависимости и решение эксперимента для конкретного игрока. Условие открытия по прогрессу хранится отдельно.

Технически включена = общий выключатель
                     И (решение A/B, если оно есть, иначе состояние по умолчанию)
                     И все обязательные зависимости технически включены.

Доступна игроку = технически включена И выполнено условие открытия по прогрессу.

Приоритет общего выключателя и зависимостей выше A/B. Выключение потребителя не выключает его родителя. Выключение родителя не переписывает выключатели потребителей и назначения групп. При возвращении родителя потребитель включается только если его собственные настройки и остальные зависимости это допускают.

Нельзя смешивать разные виды связей:

Связь Пример Правило
Обязательная зависимость фичи Предметы требуют Core Gameplay Выключение Core Gameplay выключает предметы и их потребителей
Необязательная интеграция Пасс может содержать задачи на пассивные способности предметов Без предметов используются заранее подготовленные выполнимые задания; без Core Gameplay пасс выключается через зависимость от заданий
Внутреннее правило Core Gameplay Способность оружия открывается ручной эволюцией Это правило прогрессии внутри одной фичи, без отдельных выключателей эволюции и способности
Условие открытия Дерево открывается при первом получении Scrap от босса третьей локации Назначение в B не открывает дерево раньше времени
Альтернативный доступ к контенту Лабораторию открывает завод или питомник Это не требование пройти обе локации и не две обязательные зависимости фичи

Квесты не блокируют карту. Дерево не требуется для первых трёх локаций. Предметы не требуются обычной стрельбе. Покупка не требуется для бесплатного прохождения Pass. Магазин входит в Core Gameplay и работает независимо от включения Pass; товар пасса появляется только когда соответствующая фича доступна.

Граф обязательных зависимостей не содержит циклов. В реестре перечислены только прямые зависимости; все ID в одной ячейке требуются одновременно. — означает зависимость только от минимальной основы. Циклы, неизвестные ID, дубликаты и несовместимая конфигурация отклоняются целиком, с сохранением последней рабочей версии.

Изменение во время игры

Предлагается применять изменения между боевыми шагами и после завершения начатых операций выдачи награды/покупки. Нельзя прервать сохранённую операцию наполовину. Все эффективные состояния меняются согласованно. Порядок остановки: потребители → зависимости. Порядок запуска: зависимости → потребители.

Окно выключенной фичи закрывается с возвратом к доступному экрану. Новые действия и эффекты не запускаются. Уровни, ранги, ресурсы, счётчики, доступные награды и купленные права не удаляются и не выдаются повторно при включении.

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

Для текущего контента нужен подготовленный профиль без фичи либо безопасный возврат на доступную арену. Нельзя оставить игрока без поражаемых целей, выхода или выполнимого обязательного задания. Замена обязательных боссовых наград и поведение уже купленных прав определяются до запуска эксперимента.

3. Реестр фич

Реестр выделяет крупную фичу Core Gameplay и остальные системы. Только строки с ID в таблицах фич предусматривают отдельный выключатель и A/B-включение/выключение. Таблицы внутреннего состава Core Gameplay описывают объём работы одной фичи. Конкретные пушки, враги, предметы, узлы и задания остаются её контентом или контентом соответствующей системы; их параметры можно сравнивать в экспериментах без добавления самостоятельных фич.

Колонка «Без фичи» — предлагаемое поведение; резервные профили контента и баланс утверждаются перед реализацией блока.

3.1. Core Gameplay

Подтверждённая граница фичи: боевые расширения, спавнеры, боссы, оружие, карта, контент и магазин объединены в одну крупную фичу. У этих частей нет отдельных выключателей и назначений A/B. Этапы ниже определяют порядок создания одной фичи, а не дополнительные фичи.

ID Функциональность Обязательные зависимости Без фичи
core.gameplay Бой, враги, спавнеры, боссы и награды, оружие/башни/эволюция/способности, карта и контент, магазин, аккаунт, область облачных функций, настройки, обучение, уведомления и поддержка; локальный версионный JSON с миграциями — Предлагаемый минимальный профиль стартовой арены из раздела 1; сохранение, миграции и защита купленных прав продолжают работать, зависимые фичи выключаются каскадно; игровой тест без магазина не проводится

Обычная игра использует Core Gameplay целиком. Первые три арены и полный сектор — последовательные поставки контента этой фичи. Необходимая для разработки неполная реализация не является отдельной экспериментальной группой.

Эксперименты могут менять параметры Core Gameplay, например формулу брони, не создавая самостоятельные фичи из брони, типов урона или способностей. Предметы, задания, ингредиенты и дерево зависят от core.gameplay; Pass зависит от него через задания. Аккаунт, настройки, обучение, уведомления и поддержка не являются независимыми фичами. Чтение/запись сохранения и миграции остаются доступными технической основе при отключении игровой логики.

Бой — внутренний этап 2

Источники: дизайн, оружие и враги, поведение врагов, экраны.

Внутренняя функциональность Core Gameplay
Постоянные прибавки характеристик за уничтожение
Пять типов урона, индивидуальные уязвимости, сопротивления, иммунитеты
Общая и типовая броня, пробитие, заменяемая формула защиты
Криты обычных атак, разрешённых способностей и отдельных тиков
Уклонение с уменьшением урона на величину блока
Расширенные траектории снарядов и взаимодействие с препятствиями
Площади, зоны, время жизни и сложение урона
Горение, яд, независимые источники, обновление и лимиты эффектов
Замедление, оглушение, отталкивание, ограничения конкретных целей
Очереди, веер, цепь, линии, смешанные компоненты атаки
Медленные, быстрые, стоящие, летающие, прыгающие и инерционно катящиеся варианты
Самоподрыв, взрыв при гибели, цепные реакции
Дополнительные действия и поддержка из матрицы поведения
HP-бар со здоровьем, уязвимостью и наградами, без попапа врага

Типы, броню, криты, уклонение, снаряды, площади и контроль можно делать независимо. Периодический урон — после типов; паттерны — после снарядов и площадей; взрывы — после площадей. Все 30 признаков матрицы не нужны первому прототипу.

Рост, защита и типы входят в общий баланс Core Gameplay. Для него порядок расчёта остаётся: крит → уязвимость/сопротивление → броня → уменьшение при уклонении. Замена формулы брони в A/B меняет параметр или алгоритм внутри фичи, сохраняя этот порядок; она не создаёт отдельный выключатель брони.

Спавнеры, боссы и оружие — внутренний этап 3

Источники: прогрессия, прокачка оружия, экраны.

Внутренняя функциональность Core Gameplay
Самостоятельные группы, перезарядка после уничтожения, живой состав и таймер UTC в сохранении, активация возле игрока
Суточные, одноразовые и навсегда исчерпаемые источники
Три босса локации, независимые повторные появления, отметки побед
Награды боссов, единственный источник каждой пушки, гарантированная копия при повторной победе
Получение и хранение оружия сверх «Основы»
Арсенал, попап пушки, смена в бою с паузой, уникальность модели в сборке
Вторая и третья башни, любая модель в любом слоте без дублей
Копии повышают уровень модели и её постоянную мощность
Ручное списание уровней и повышение ранга без заданного максимума
Ноль–три кнопки открытых эволюцией способностей и отдельные перезарядки
Цвета и эффекты эволюционировавшей пушки

Боссы — источники копий оружия неисчерпаемы: это внутреннее правило конфигурации спавнеров Core Gameplay. Вне игры истекают только таймеры; убийства, характеристики, ингредиенты, оружие и задания не начисляются автоматически. Одна стартовая «Основа» и две пустые башни остаются правилом начала игры.

Карта и контент — внутренние этапы 4 и 9

Источники: прогрессия, локации, экраны, актуальные решения.

Внутренняя функциональность Core Gameplay
Прохождение по третьему боссу, открытия, свободный возврат
Развилки и альтернативные источники открытия одной локации
Попап миссии с предысторией и запуском
Полноценные Стальной плацдарм, Алхимические болота, Фронт терний и их арсенал
Остальные локации каталога, ветки, дополнительные пушки и враги
Особенности биомов и согласованные интерактивные опасности
Ослабление давления после зачистки, подкрепления, оформление повторных атак

Первые четыре строки — внутренний этап 4; полный сектор, окружение и фронт — внутренний этап 9 той же фичи Core Gameplay. Обработчики конкретных опасностей и правила открытия проверяются как совместимость её контента. Детальная модель состояний фронта пока является предложением.

Уже согласованные связи карты:

Стальной плацдарм → Алхимические болота → Фронт терний
Фронт терний → Броневой завод И Питомник войны
Броневой завод ИЛИ Питомник войны → Утопленная лаборатория (ID 12)
Питомник войны → Рунический аэродром
Рунический аэродром → Пепельный фронт → Башни грозы
Утопленная лаборатория → Разорванный виадук (ID 13) → Пепельная кальдера (ID 14)

«И» здесь означает открытие обеих миссий, «ИЛИ» — альтернативный источник доступа. Квесты эти открытия не задерживают. ID 12–14 не требуют прохождения всех меньших номеров. Остальные связи и некоторые боссовые награды ещё прорабатываются.

Магазин — внутренние этапы 2–4

Источник: экраны. Магазин входит в обязательный объём Core Gameplay до первого игрового теста, а не откладывается до реализации Pass.

Внутренняя функциональность Core Gameplay
Каталог, карточки и цены согласованных товаров
Запуск покупок, подтверждение результата платежным сервисом и выдача без дублей
Сохранение купленных прав и завершение уже начатых операций
Восстановление подтверждённых покупок
Отображение товаров доступных дополнительных фич, в том числе Pass

На внутреннем этапе 2 проектируются ассортимент и контракты магазина; к завершению этапа 4 каталог и покупка должны работать в тестовой среде выбранной платформы. Тестовая среда не означает отдельную фичу или выключатель магазина. Конкретный ассортимент, валюты и платежная платформа ещё требуют выбора.

Core Gameplay не зависит от Pass: при выключенном Pass магазин продолжает работать с остальными согласованными товарами, предложение пасса убирается. Обработка уже начатых покупок и хранение прав продолжаются в базовом сервисе даже при отключении Core Gameplay; отключение не отменяет подтверждённую покупку.

Профиль, сохранения и пользовательские сервисы — внутренние этапы 1, 4 и 10

Источники: экраны, сохранения и миграции. Прежние названия profile.account, profile.cloud, settings.advanced, tutorial, notifications, support теперь обозначают области работы внутри Core Gameplay, а не ID самостоятельных фич.

Внутренняя функциональность Core Gameplay Ограничение
Аккаунт и гостевой профиль Первый бой не требует обязательного входа; имя и привязка аккаунта не заменяют постоянный ID локального игрока
Локальное сохранение JSON в постоянном локальном хранилище; явная версия схемы и цепочка миграций с первого формата
Область облачных функций Принадлежит Core Gameplay; в текущем плане прогресс только локальный, облачная запись/загрузка/синхронизация не реализуются без отдельного решения
Настройки Базовые и расширенные настройки внутри Core Gameplay; локальные данные тоже версионируются при изменении структуры
Обучение Пропуск и повтор через помощь; объяснения только доступных систем
Уведомления Отказ в разрешении не блокирует игру; недоступность сервиса не блокирует локальное сохранение
Поддержка Отправка обращения самим игроком; доступность сервиса не определяет доступность боя или сохранения

Отказ от входа/уведомлений или недоступность внешнего сервиса — состояние интеграции, а не отдельный выключатель фичи. profile.cloud оставляет место будущей интеграции внутри Core Gameplay; текущим источником прогресса является локальный JSON. Будущая синхронизация потребует отдельного контракта и не меняет это правило автоматически.

На этапе 1 создаются локальный профиль, JSON, версия схемы и миграции. К первому игровому тесту на этапе 4 готовы настройки и минимальное обучение. Выбор и завершение внешних интеграций относятся к внутреннему этапу 10; базовая локальная игра не ждёт их доступности.

3.2. Предметы — этап 5

Источник: предметы.

ID Функциональность Обязательные зависимости Без фичи
equipment.slots Двигатель, ПВО, РЭБ; инвентарь, попап, смена с паузой core.gameplay Танк без бонусов оборудования; содержимое и назначения сохранены
equipment.loot Боссовая добыча предметов, несколько источников модели, автоматические копии equipment.slots Профили боссов без недоступной обязательной награды; предметы сохранены
equipment.engine Базовые бонусы двигателей и согласованные механики equipment.slots Базовые движение и защита без двигателя
equipment.pvo Модификация урона и атак предметами ПВО equipment.slots Собственные параметры оружия без ПВО
equipment.ew Влияние предметов РЭБ на врагов equipment.slots Базовое поведение врагов без РЭБ
equipment.levels Общий уровень модели от копий из любых источников equipment.loot Базовые бонусы модели; уровни сохранены
equipment.evolution Ручная эволюция со своей ценой и сохранением остатка equipment.levels Новая эволюция недоступна; ранги и уровни сохранены
equipment.passives Пассивные способности после эволюции, перезарядки, атрибуция урона equipment.evolution Базовые бонусы; новые пассивные срабатывания не происходят

60 предметов в каталоге — предложения; начать с одного предмета каждого слота. Первый босс Питомника выдаёт «Импульсный двигатель»: для группы без добычи предметов нужна заранее утверждённая награда.

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

3.3. Задания и сюжет — этап 6

Источники: квесты, пассы, правила гибели врагов.

ID Функциональность Обязательные зависимости Без фичи
tasks.conditions Общие условия/счётчики: уничтожение, урон, посещение, взаимодействие, составные цели core.gameplay Бой без прогресса заданий; счётчики сохранены
tasks.rewards Ручная награда задания и сохранённая операция без дублей tasks.conditions Новые получения недоступны; неполученные награды сохранены
tasks.ability_kills Учёт суммарного фактического урона способностей для порога 20% максимальной прочности tasks.conditions Подготовленные задания без условия; несовместимые активные задания приостановлены
quests.story Одноразовые цепочки; следующий квест после ручной награды tasks.rewards Бой и карта без сюжета; этапы и найденные предметы сохранены
quests.dialogues Начальные/итоговые диалоги с паузой, персонажи и радио quests.story Текст задачи без диалога; пауза не зависает
quests.objects Сюжетные объекты и кнопка взаимодействия рядом quests.story Подготовленный сюжет без обязательного взаимодействия; несовместимые квесты приостановлены
quests.multilocation Задачи на нескольких открытых локациях и частичные этапы quests.story Однолокационные задания; многолокационные приостановлены
quests.first_ten Первые десять квестов стартовых арен quests.dialogues, quests.objects, quests.multilocation Арены проходятся без квестов; сюжетный прогресс сохранён

Для условия способностей достаточно доступного источника от оружия или предмета. Это проверяется по контенту, а не требует включения обоих модулей одновременно. Урон цепных взрывов врагов не считается уроном способности игрока. Для задания на тип добивания учитывается смертельное попадание/тик; самоподрыв не наследует тип прежнего урона игрока.

Одна гибель учитывается один раз в каждом подходящем активном счётчике. Обязательные цели имеют неисчерпаемые источники с учётом ограничений локации. Исчерпание спавнера не заменяет задание динамически.

3.4. Ингредиенты и дерево — этап 7

Источник: дерево прокачки.

ID Функциональность Обязательные зависимости Без фичи
loot.ingredients Автоматическая добыча десяти последовательно открываемых ингредиентов core.gameplay Нет новой добычи; запасы и открытия сохранены
tree.core Открытие дерева, покупки узлов, условия и постоянный прогресс loot.ingredients Нет покупок и бонусов дерева; узлы и ресурсы сохранены
tree.damage Страница Damage tree.core Нет бонусов страницы
tree.defense Страница Defense tree.core Нет бонусов страницы
tree.mobility Страница Mobility tree.core Базовое движение без бонусов страницы
tree.weapon Страница Weapon tree.core Собственные параметры оружия
tree.special Только отдельно утверждённые эффекты Special tree.core Нет специальных бонусов; дополнительные зависимости задаются конкретным узлам

Дерево открывается не раньше прохождения Фронта терний; точное условие ещё не выбрано. Первые три локации проходятся без дерева. Момент начала добычи ингредиентов и источник Scrap определяются вместе с этой фичей: нельзя требовать потратить Scrap, чтобы открыть его единственную добычу. Характеристика за убийство и случайный ингредиент — разные награды.

Отключение страницы не возвращает цену автоматически и не удаляет узлы. Её бонусы и покупки приостанавливаются. Dash, Jump, Shield и другие примеры активных механик пока не утверждены.

3.5. Pass — отдельная фича, этап 8

Источники: пассы, экраны.

ID Функциональность Обязательные зависимости Без фичи
pass Каталог постоянных баттл пассов, 25 последовательных задач, одновременный прогресс нескольких пассов, бесплатные награды и покупаемые дополнительные награды, включая задачи до покупки tasks.rewards Экран, прогресс и новые покупки пассов недоступны; счётчики, завершения, неполученные награды и купленные права сохранены; магазин Core Gameplay продолжает работать

У Pass один выключатель и одно эффективное состояние. Бесплатная и платная части — внутренние составляющие одной фичи, без отдельных флагов. Владение платной дорожкой — состояние покупки конкретного пасса, а не состояние фичи.

Зависимость от Core Gameplay проходит через tasks.rewards → tasks.conditions → core.gameplay. Магазин и платежи уже входят в Core Gameplay, поэтому не создают отдельных зависимостей. Pass использует их для покупки; отсутствие Pass не выключает магазин. Реализация Pass не зависит от реализации сюжетных квестов.

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

Нельзя автоматически скрывать купленные награды у владельца в тесте приобретения. Предлагается исключать владельцев из теста отключения Pass либо сохранять получение оплаченных наград через базовый интерфейс прав. Купленные права не удаляются; возвращение Pass не выдаёт уже полученные награды повторно.

3.6. Будущие кандидаты

Источник: предметы. Таран требует отдельного дизайна.

ID Функциональность Обязательные зависимости Без фичи
equipment.ram Будущий урон столкновением от предмета equipment.engine Столкновение блокирует движение, но не наносит урон

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

4. A/B-тесты

Первая версия

  1. Постоянный ID игрока, отдельный от имени; ID/версия эксперимента, активность, доля трафика и правила участия.
  2. Два или больше взвешенных вариантов с суммой 100%; варианты включают/выключают фичи и при необходимости задают параметры.
  3. Детерминированное назначение, сохраняемое в профиле. Перезапуск не меняет группу. Изменение состава и весов требует новой версии и явного решения о переносе участников.
  4. Стандартное поведение вне трафика и при отсутствии корректной конфигурации; последняя рабочая конфигурация при ошибке обновления.
  5. Проверка зависимостей после решения варианта; общий выключатель всегда имеет приоритет.
  6. Диагностика назначенной группы, эффективного состояния и причины блокировки.
  7. Отключение эксперимента возвращает стандартное поведение без удаления группы и прогресса.

Глобальная конфигурация хранится отдельно от состояния игрока. Сначала используется локальная конфигурация; удалённая загрузка — отдельная интеграция после выбора сервиса. Отсутствие сети не должно менять назначение при каждом запуске.

Одна фича и один параметр управляются не более чем одним активным экспериментом для конкретного игрока. До реализации исключающих групп первая версия отклоняет конфликт, а не выбирает последний загруженный эксперимент.

Пример A B Что остаётся обязательным
Pass pass выключена Включена Core Gameplay и магазин работают в обеих группах; задания доступны; для владельцев платных прав определено сохранение доступа к оплаченному
Дерево tree.core выключена Включена Условие открытия после первых трёх арен и подходящий баланс
Формула брони Текущая A / (A + K) Другая утверждённая формула core.gameplay включена; параметры корректны, порядок расчёта не меняется
РЭБ equipment.ew выключена Включена Core Gameplay и слоты включены; награды и контент соответствуют группе

Если B включает tree.core, но общий выключатель core.gameplay выключен, дерево выключается через зависимость от ингредиентов. Игрок остаётся в B, а диагностика показывает цепочку блокировки. Назначение в B не означает фактическое использование фичи.

Отключение Core Gameplay по-прежнему поддерживается технически и выключает Pass независимо от группы. Однако игровой тест без магазина не проводится: в продуктовых экспериментах Core Gameplay остаётся включённым, сравниваются его параметры либо отдельные зависимые фичи.

Аналитика

Обязательные игровые события

Подтверждённый набор включает четыре базовых события — получение предмета, убийство босса, убийство обычного врага и установку пушки — и все события прогресса, сборки и сессий из таблицы ниже. Всего 17 типов игровых событий. Названия ниже — предлагаемый контракт, сервис отправки ещё не выбран.

Событие Когда фиксируется Специфичные поля Для чего
item_received Предмет или пушка фактически добавлены в инвентарь, включая повторную копию item_id, item_category (пушка/двигатель/ПВО/РЭБ), quantity, source_type, source_id, reward_operation_id, is_first_acquisition Источники наград, темп получения сборки и копий
boss_killed Подтверждена гибель босса boss_id, kill_id, номер босса в локации, время боя, is_first_kill, сборка игрока, источник финального урона Сложность боссов, скорость прогресса и повторный фарм
enemy_killed Подтверждена гибель обычного врага enemy_id, enemy_type, kill_id, источник финального урона, ID пушки/способности при наличии Темп фарма, востребованность оружия и способности
weapon_equipped Успешно установлена или заменена пушка в слоте weapon_id, slot_id, previous_weapon_id при замене, уровень, эволюция Реальные сборки и переход от получения оружия к его использованию

Общие поля: постоянный ID игрока, ID сессии, уникальный ID события, время события, версия игры, версия конфигурации, ID локации и текущего захода при наличии. Для активных экспериментов прикладываются ID/версия и вариант; отсутствие эксперимента допустимо.

Босс учитывается только в boss_killed; общее число убийств получается суммой двух типов событий. Выгрузка врага не считается убийством. Получение награды и убийство — самостоятельные события: item_received отправляется после успешной выдачи, а не по обещанию награды. Повторная доставка события не увеличивает счётчики: используются стабильные ID события и операции награды; загрузка сохранения и миграция не создают новые события получения. Новое убийство при повторном фарме учитывается отдельно. Открытие инвентаря, восстановление сборки при загрузке, неудачная установка и выбор уже установленной пушки не создают weapon_equipped; установка после реального снятия создаёт.

Для частых обычных убийств предусмотреть пакетную доставку вне горячего пути боя. Аналитика не должна блокировать бой или выдачу награды; при повторной отправке сохраняется исходный ID события. Конкретный транспорт и буферизация определяются при реализации.

Обязательные события прогресса, сборки и сессий

Все следующие события включены в обязательный набор. Для них действуют те же общие поля и правила повторной доставки, что и для базовых событий.

Событие Когда фиксируется Поля и назначение
location_entered / location_exited После фактического входа в игровую локацию / выхода из неё; смерть и возрождение внутри локации не завершают заход Локация, ID захода, причина выхода, длительность активного боя: где игрок играет и когда уходит
boss_fight_started При фактическом начале новой попытки боя с боссом, один раз на попытку Босс, ID попытки, сборка; тот же ID попытки в boss_killed и смерти игрока позволяет оценить число попыток и долю побед
player_died При подтверждённом уничтожении танка, один раз на смерть Локация, противник/источник урона, время с входа или последнего возрождения, сборка, активная попытка босса: точки сложности
location_unlocked При первом переходе локации из закрытого состояния в доступное Локация и условие открытия: воронка прогресса и выбор ветвей
weapon_upgraded / weapon_evolved После успешного повышения уровня / эволюции пушки и фиксации соответствующих затрат Пушка, значения до/после, потраченная валюта или копии: темп развития и стоимость прогресса
equipment_equipped После успешной установки или замены двигателя, ПВО или РЭБ Предмет, категория, слот и заменённый предмет: популярность двигателей, ПВО и РЭБ
ability_used При успешном запуске способности; отклонённое нажатие во время перезарядки не учитывается Способность, пушка, локация и активная попытка босса: пользуется ли игрок открытой способностью
quest_completed / quest_reward_claimed При переходе квеста в состояние выполнения / после успешной ручной выдачи награды Квест, ID выполнения и операция награды для получения: отделить выполнение задания от ручного получения награды
session_started / session_ended При начале игровой сессии / её штатном завершении Сессия и длительность: возвраты и длина игры; аварийное закрытие не гарантирует событие завершения

Загрузка сохранения и миграция не повторяют открытия локаций, улучшения, эволюции, выполнение квестов и получение наград. Для equipment_equipped действуют те же исключения, что и для weapon_equipped. Пауза боя в инвентаре не входит в длительность активного боя. При аварийном закрытии выход и завершение сессии могут отсутствовать; такие заходы и сессии учитываются как незавершённые, без выдуманного времени окончания.

Вход в локацию, начало боя с боссом и смерть игрока вместе с базовыми событиями покажут, где тормозится прогресс. События улучшения и эволюции добавят понимание экономики. Весь набор обязателен; последовательность подключения следует готовности соответствующих механик.

События A/B-тестов

Назначение и фактическое знакомство с функциональностью — разные события. Показ/использование учитываются только когда фича технически включена, открыта по прогрессу и реально доступна игроку. Поля: ID/версия эксперимента, вариант, ID фичи, версия конфигурации, эффективное состояние и причина блокировки.

До запуска теста определить основную метрику, ограничения по ошибкам/потере прогресса и критерий завершения. Для дерева возможны прохождение последующих арен и возврат в игру; для способностей — использование и темп боя. Метрики, статистический метод и сервис ещё не утверждены.

После выключения зависимости события помечаются новой версией конфигурации. Нельзя трактовать период блокировки как обычное использование B. Остановка или перезапуск эксперимента — явное решение.

5. Порядок разработки

Это порядок реализации, а не порядок открытия игроку. Этапы 1, 2, 3, 4, 9 и 10 включают работу над одной фичей Core Gameplay. Деление работы на этапы не создаёт отдельных выключателей или A/B-групп. Внутренние обработчики делаются раньше использующего их контента; зависимости между крупными фичами сохраняются. Следующий этап начинается после проверки результата предыдущего; оценки сроков уточняются перед конкретной задачей.

Этап Последовательность Результат
0. Контракты Утвердить минимальную основу → границы и ID → зависимости → резервное поведение и сохранение Для каждой фичи понятны условия открытия и работа игры без неё
1. Основа и инструменты Core Gameplay Минимальная арена → локальный JSON и версия схемы → миграции/backup/безопасная запись → события/операции наград → граф фич → локальное A/B → диагностика Бой работает при выключенных дополнительных фичах; тестовая цепочка каскадно выключается, группа стабильна после перезапуска
2. Core Gameplay: бой и проектирование магазина Рост/защита/типы/снаряды/площади/контроль → DoT → паттерны и взрывы → поведение и HP-бары; параллельно ассортимент и контракты магазина Технический полигон с проверенными расчётами; определён обязательный объём магазина для первого игрового теста
3. Core Gameplay: боссы и арсенал Постоянные спавнеры → лимиты и боссы → награды → коллекция → сборка/башни и уровни → эволюция → способности/визуал Одна арена с тремя боссами, гарантированными копиями, сборкой без дублей и ручной эволюцией без повторного списания
4. Core Gameplay: карта, три арены и работающий магазин Прохождение и открытия → брифинг и первые три арены → поддержка развилок; каталог → покупка/выдача → восстановление в тестовой платежной среде Первый игровой тест включает работающий магазин; первые три арены проходятся без дерева, квестов, предметов и Pass
5. Предметы Слоты → добыча и базовые механики трёх категорий → уровни → эволюция → пассивные способности По одному предмету категории; отключение не сбрасывает прогресс и не дублирует эффекты
6. Задания и сюжет Счётчики → ручные награды и атрибуция способностей → цепочки → диалоги/объекты/многолокационные задачи → десять квестов Одно событие продвигает подходящие задания один раз; сюжетные переходы отличаются от пассов
7. Дерево Момент открытия и Scrap → ингредиенты → ядро → Damage/Mobility, Defense/Weapon с их зависимостями → утверждённые Special Нет циклической добычи Scrap; отключение сохраняет узлы и не блокирует бой
8. Pass Каталог пассов и 25 задач → бесплатные награды → платные награды и интеграция с готовым магазином Core Gameplay → аналитика и пилотный A/B Одна отдельная фича; покупка не стирает бесплатный прогресс, выключение Pass сохраняет права и не выключает магазин
9. Core Gameplay: полный сектор Граф веток и награды → остальные арены/арсенал → окружение и фронт Расширение контента той же фичи без тупиков доступа и обязательных непоражаемых целей
10. Core Gameplay: пользовательские сервисы Минимальные настройки/обучение готовы к этапу 4; завершить выбранные интеграции аккаунта, уведомлений и поддержки; облако только после отдельного решения, таран — после дизайна Все сервисы внутри Core Gameplay; прогресс остаётся локальным JSON, недоступность сервиса не блокирует сохранение

Аналитика нужна до реального запуска эксперимента; локальное назначение проверяется уже на этапе 1. Пилот предлагается проводить на бесплатной механике, а не начинать с покупок. Развилки проверяются минимальным тестовым контентом на этапе 4; полные дополнительные арены появляются на этапе 9.

6. Проверки будущей реализации

Для каждой фичи:

  • самостоятельное отключение и каскад через каждую зависимость;
  • работа независимых систем; выключение потребителя не выключает родителя;
  • запуск с выключенной фичей, отключение во время боя/открытого окна и перезапуск;
  • сохранение прогресса, отсутствие повторных наград при возвращении;
  • A/B не обходит общий выключатель, зависимости или условие открытия;
  • отсутствие обязательных недоступных задач, целей, покупок и переходов;
  • начатая операция полностью завершается либо остаётся восстанавливаемой.

Для графа и экспериментов:

  • цикл, неизвестный ID и конфликт отклоняются до применения;
  • цепочка из трёх фич и две обязательные зависимости пересчитываются согласованно;
  • 0% трафика означает стандартное поведение, 100% — назначение всех подходящих игроков;
  • ID и версия дают ту же группу после перезапуска;
  • различимы назначение, блокировка зависимостью и отсутствие открытия по прогрессу;
  • при всех дополнительных фичах выключенных минимальная игра, бой и сохранение работают.

Отдельно проверить общий выключатель Core Gameplay: вместе с ним останавливаются магазин, предметы, задания, ингредиенты, дерево и Pass, даже в группе B. Остаётся резервная техническая основа с локальным сохранением/миграциями; начатые покупки безопасно завершаются. Пользовательские сервисы относятся к выключенному Core Gameplay. Это техническая проверка отключения, а не игровой тест без магазина. Возвращение фичи восстанавливает сохранённый прогресс. У внутренних механик, магазина и этапов Core Gameplay нет отдельных выключателей.

При выключении только Pass проверить, что Core Gameplay и магазин работают, предложения пассов убраны, прогресс и права сохранены. Бесплатная и платная части управляются одним флагом; право покупки проверяется отдельно.

Это требования к реализации. Поведенческие проверки пока не выполнены; работа системы в Unity не подтверждена.

7. Решения до соответствующего этапа

Когда Что определить
До этапа 1 Утвердить нижний предел игры и применение изменений; конкретную схему локального JSON, первую версию и миграции по контракту сохранений
До этапа 2 Резервный профиль без Core Gameplay целиком; баланс полного боя, пределы характеристик и параметры возможных экспериментов
До этапа 3 Оставшиеся награды первых боссов, интервалы/лимиты спавнеров, последующие цены эволюций; источник копий «Основы» уже закреплён за A01-B1
До этапа 4 Ассортимент и валюты магазина, платежная платформа, тестовая среда, подтверждение/восстановление покупок; критерий готовности магазина до игрового теста
До этапа 5 Первые предметы, источники и цена эволюции; награда Питомника в профиле без предметов
До этапа 6 Сюжетные объекты при возврате; задания для наборов без способностей и взаимодействий
До этапа 7 Точное открытие дерева, начало добычи и Scrap; эффекты узлов и их зависимости
До этапа 8 Группы локаций, цели/награды Pass и его товары в готовом магазине; доступ владельцев купленных прав при отключении; аналитика и метрики
До этапа 9 Ранний баланс лаборатории/виадука на принятой карте, полные карточки 26 дополнительных пушек
До этапа 10 Выбрать интеграции аккаунта, уведомлений и поддержки внутри Core Gameplay; облачное хранение требует нового отдельного решения; дизайн тарана

8. Источники