VanguardReMaster/plan.md

283 lines
19 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CF!! Vanguard — Сводка наработок проекта
## 1. Общие принципы
- Фанатский проект без монетизации. Никаких реальных денег, твёрдой валюты, премиум-баттлпасса. Дисклеймер: "Fan-made project. Not affiliated with Bushiroad. All card names and art belong to their respective owners."
- Авторитарный сервер. Вся игровая логика на сервере. Клиент — тонкий терминал. Клиент просит, сервер решает.
- Скрытая информация. Клиент A не получает данных о руке клиента B.
- Два языка: русский и английский. UI — Unity Localization, карты — поля в БД.
- Единый стек C#: клиент (Unity), сервер (ASP.NET Core + GeekServer), лаунчер (WPF).
- Движок: Unity (финальный выбор). Не UE.
## 2. Архитектура и технологии
### Мета-сервер (Backend API)
- C# .NET 8, ASP.NET Core Web API
- JWT + BCrypt, Entity Framework Core, PostgreSQL
- Redis (сессии, очереди, онлайн-статус)
- SignalR (чат, уведомления)
### Игровой сервер
- C# .NET 8, GeekServer (Actor-модель)
- TCP, MessagePack
- Redis (состояние матча)
### Клиент
- Unity 2022 LTS / Unity 6
- Netcode for GameObjects (игровой протокол)
- SignalR Client (социалка)
- MessagePack / MemoryPack
- ScriptableObject (данные карт)
- DOTween / корутины (анимации)
- Unity Localization (UI)
- Input System (тач + клавиатура/мышь)
### Лаунчер
- C# + WPF (.NET 8)
- Game Launcher (Asset Store) — бинарные дифф-патчи
- CDN / S3 для патчей
- RESX для локализации
### Docker
- postgres:16-alpine, redis:7-alpine
- meta-server, game-server, nginx
- Сети: backend (internal), frontend
- Volumes: postgres_data, redis_data
- .env с паролями, nginx как reverse proxy (HTTP + TCP stream)
### Подключение агента
- OpenCode + MCP Unity (CoderGamester) или unity-open-mcp
- Node.js 18+, Unity 2021.3+ (или Unity 6 для официального MCP)
## 3. Модель данных карт
CardData: id, grade, power, critical, shield, nation, clan, rarity (Common/Uncommon/Rare/Legendary/RRR), name_ru/name_en, effect_text_ru/effect_text_en (с rich-text тегами <b> и плейсхолдерами {cb}, {sb}), flavor_ru/flavor_en, skills[] (type, trigger, conditions, costs, effects, target), imageUrl.
Глоссарий: ключевые слова Vanguard (Ride, Call, Drive Check, Damage Check, Counter Blast, Soul Blast, Stand, Rest, Guard, Boost, Intercept) на двух языках. Тексты карт используют плейсхолдеры, подставляемые из глоссария.
## 4. Механики Vanguard (все заложены сразу, карты выпускаются постепенно)
Базовые: Ride, Call, Boost, Intercept, Guard, Drive Check, Damage Check. Зоны: Vanguard Circle, Rear-Guard, Guardian, Soul, Damage, Drop, Bind, Trigger, G Zone. Состояния: Stand/Rest, Lock. Фазы: Stand, Draw, Ride, Main, Battle, End.
Триггеры: Critical, Draw, Stand, Heal, Front, Over Trigger.
По эрам:
- Limit Break (4+ урона)
- Break Ride (тот же клан, +10000)
- Legion (Leader + Mate, Seek Mate)
- Stride / G Era (Heart Card, G Guardians)
- V Series (Imaginary Gift: Force/Accel/Protect)
- D Series (Ride Deck, Persona Ride, Over Trigger)
Реализация: каждая механика — отдельный модуль. Rule Engine применяет все, карты определяют активные. Check Timing обрабатывает порядок срабатывания.
## 5. Способности карт
AbilityData: type (Continuous/Activated/Triggered), triggerEvent, conditions[], costs[], effects[], target. Три обработчика. Шина событий в GameActor. Check Timing: событие → проверка триггеров → разрешение → повтор. Условия — отдельные Evaluate()-объекты.
## 6. Режимы игры
Варианты (форматы): Standard (делится на Эры), V, D.
Ранкед и Казуал — по вариантам (6 очередей). Рейтинг — по вариантам (3 MMR у игрока). Эры — только для турниров и ивентов (модификатор пула). Standard Ranked по умолчанию — весь пул Standard.
Casual: матчмейкинг просто по онлайну, без критериев.
Приватные матчи: приглашение друга → принятие → выбор колоды → матч. XP не начисляется, результат в историю пишется.
Бот: пока не делаем.
## 7. Турниры
Одиночные: 1х1, Swiss + Top Cut, 35 мин/раунд, Double Loss при таймауте. Фиксация колод при регистрации.
Командные 3х3: три параллельных 1х1. Капитаны видят составы и кланы колод соперников (не полный состав), выбирают порядок. Победа по сумме очков (2:1 или 3:0). Техническое поражение только в конкретной паре.
История: все турниры хранятся. После завершения снимки колод становятся публичными (полный состав), карты разблокируются. Архив меты.
## 8. Команды
Структура: полное название, короткий тег (2-5 символов), иконка. Префикс [TAG] в никнейме везде.
Типы: открытая (заявки) / закрытая (только приглашения).
Роли:
- Лидер: полный контроль, переименование, иконка, назначение офицеров, кик, передача лидерства, роспуск.
- Офицеры (1-3): одобряют заявки, приглашают. Не могут переименовать, сменить иконку, удалить.
- Участники: играют, общаются, выходят.
Передача лидерства: только офицеру, раз в 30 дней (кулдаун от последней передачи).
Лимит участников: зависит от уровня команды (1-10).
## 9. Командные награды и территории
Карта наций: 6 регионов (United Sanctuary, Dragon Empire, Star Gate, Zoo, Megalanica, Dark Zone). Территории внутри регионов (столица, ключевые точки, аутпосты).
Очки контроля: за победы в командных матчах. В конце цикла (неделя) команда с наибольшим количеством очков становится владельцем.
Награды: Gold, пыль, командный XP, рейтинг. Лимит 3 территории на команду. Убывающая отдача за длительное владение.
Командный рейтинг: глобальный лидерборд команд.
## 10. Рейтинговая система
Сезон = месяц. Совпадает с баттлпассом. Сброс 1-го числа.
Ранги: 6 тиров × 5 дивизионов (Bronze, Silver, Gold, Platinum, Diamond, Master). Master — без дивизионов, только MMR и лидерборд.
Звёзды: победа +1, поражение -1. 5 звёзд = +1 дивизион. Защита от падения: Bronze/Silver — нет, Gold/Platinum/Diamond — до пола тира, Master — свободно.
Сброс: Master → Platinum 1, Diamond → Gold 1, Platinum → Silver 1, Gold → Bronze 1, Silver/Bronze — без изменений.
Награды за ранг: Gold, пыль, Master — эксклюзивная рубашка + титул.
MMR: скрытый, для матчмейкинга. Бонусные звёзды при высоком MMR.
## 11. Экономика
Валюты: Gold (основная), пыль (за разбор карт), токены Draft (за 10 побед в Draft Run).
Цены: бустер = 100 Gold. Draft Run = 1000 Gold (10 бустеров).
Пыль:
- Разбор: Common 5, Uncommon 10, Rare 25, RRR 100.
- Крафт: ×4 (Common 20, Uncommon 40, Rare 100, RRR 400).
- Фойл: ×2.
- Объединение 4 обычных → 1 фойл (альтернатива).
- Разбор любой карты, включая последнюю копию — с предупреждением.
- Карты в колодах (включая турнирные снимки) защищены от разбора до конца турнира.
Duplicate Protection: работает для покупных бустеров (общая коллекция). Бонусные бустеры внутри Draft Run — только в рамках захода (лимит 4 копии). Бустеры за токены — стандартная защита.
Баттлпасс: 75 уровней / 30 дней. XP на уровень: 1-10 = 250, 11-40 = 700, 41-75 = 1000. Всего ~58 500 XP. Награды: 15 бустеров (каждый 5-й уровень), пропуск Draft на уровнях 40 и 75, ~4000 Gold, ~1200 пыли. Переполнение (76+) — только 50 Gold/уровень.
XP за матчи: победа 150, поражение 75, ничья 100. Draft Run: победа 200, поражение 100. Турниры: участие 500, победа 250, Top Cut 1000, чемпион 2000.
Ежедневные задания: 3 задания, 1/3/5 матчей → 300 XP каждое. Еженедельное: 20 матчей → 2000 XP. Только XP.
Засчитывается матч: сыгран до конца, без сдачи, без АФК. Приватные матчи — не засчитываются.
Draft Run: вход 1000 Gold → 10 бустеров. Duplicate Protection только в рамках захода (лимит 4 копии). 5 побед → +5 бустеров. 10 побед → +5 токенов на любой бустер. Без пыли. Без лимита поражений.
## 12. Источники карт
Готовые колоды: фиксированный набор, покупка за Gold.
Бустеры: рандом по редкости, серверный рандом. Логи открытий.
Фойлы: is_foil в коллекции, визуальный вариант.
Промокарты: за ачивки/события.
## 13. Колоды
Лимиты: 30 обычных колод на вариант (Standard, V, D) + 10 турнирных. Турнирные привязаны к эре/турниру.
Сайд-дек: 5 карт, отдельная секция. Валидация: main + side ≤ 4 копий одной карты.
Шаринг: код колоды + ссылка.
Оценка: просмотры + лайки. Опционально «вес колоды» для матчмейкинга.
Защита от разбора: карты в колодах заблокированы. После турнира — разблокированы.
## 14. Локализация
UI: Unity Localization, String Tables (en/ru), runtime switching.
Карты: поля _ru/_en в БД, сервер отдаёт по параметру lang.
Глоссарий: ключевые слова Vanguard на двух языках.
Лаунчер: RESX или общий CSV.
## 15. Социалка
Друзья: добавление, удаление, чёрный список, онлайн-статус (Redis).
Чат: общий, командный, с друзьями (SignalR).
Эмоции: ID вместо текста, кулдаун 2-3 сек, мьют (локальный per-match + глобальный в настройках). Отправка своих не блокируется.
Гайды: публикация колоды + описание, лайки. Если нет лайков за неделю — удаляется.
Фидбек: отдельная вкладка для отзывов о мете и предложений.
Голосовой чат: убран полностью.
## 16. Модерация
Администратор: доступ к логам (чат, матчи, транзакции, IP), разбор обращений, глобальные баны, назначение модераторов.
Модератор: только чат — удаление сообщений, мут (временный/постоянный). Не видит логи матчей, IP, транзакций.
Мут: временный (15 мин, 1 час, 24 часа, 7 дней) или постоянный. Не блокирует игру, только чат.
Логи: удалённые сообщения не исчезают из БД.
Обращения: жалобы, апелляции, баг-репорты, пожелания. Маршрутизация по типу.
## 17. Профиль игрока
Видно другим: ник + префикс, аватар, рамка, титул. Статистика по режимам (игры, % побед), любимый клан, рейтинг, история турниров и ивентов, достижения, публичные колоды.
Настройки приватности: скрыть статистику, историю, достижения, колоды.
## 18. Косметика
Типы: карт-бэки, аватары, рамки профиля, эмоции, эффекты поля, титулы, музыка/звуки.
Источники: достижения, турниры, баттлпасс, промо-события, рейтинг.
Ключевое: не влияет на геймплей.
## 19. Достижения
Категории: победы, кланы, коллекция, турниры, Top Cut, механики, Draft Run, социальное, прогрессия.
Типы: разовые, прогрессивные (с уровнями), скрытые.
## 20. Прогрессия аккаунта
Грейды: 0 (Новичок) → 5 (Легенда). XP за матчи, достижения, турниры.
Награды: Gold, пыль, слоты колод, косметика, доступ к режимам.
## 21. Обучение
Тестовый матч: скриптованный, локальный, без сервера. TutorialGameManager, TutorialStep (ScriptableObject). Покрытие Ride → Call → Boost → Attack → Drive/Damage Check. Кнопка «Пропустить».
Экскурсия по клиенту: ClientTourManager, подсветка элементов (меню, коллекция, декбилдер, бустеры, задания, баттлпасс, настройки, друзья). Повторный запуск из настроек.
Продвинутые туториалы: по каждой ключевой механике (отдельно).
## 22. Промо-события
Турниры к выходу сета: участие, награды по местам (промо, рубашки, титулы, бустеры).
Другие: «Неделя клана», «Двойной опыт», «Легендарный Draft», «Ретро-турнир».
## 23. Мета и баланс
Инструменты: бан карты, ограничение количества, условный бан (нельзя X если есть Y).
Источник: фидбек игроков, статистика матчей, голосования.
Объявления: патчноуты в отдельной вкладке.
## 24. Реконнект
- Автоматический через OnClientDisconnectCallback.
- Экспоненциальная задержка: 0, 2, 10, 30 сек.
- Индикатор «Переподключение...», кнопка «Отменить».
- Таймаут на ход при обрыве.
- Реконнект только при неожиданном обрыве.
- Сессия в Redis с TTL на время матча.
## 25. Мобильная адаптация
- Input System: тап, долгое нажатие, drag, свайп. Одна схема с двумя наборами привязок.
- Canvas Scaler, Safe Area.
- ASTC-сжатие текстур, атласы UI, стриминг аудио.
- Target Frame Rate: 30 (мобила), 60 (десктоп).
- Adaptive Performance.
- Мониторинг connectivity, UI офлайн-состояния.
- OnApplicationPause → пауза матча.
- Лаунчер: десктоп — WPF, мобила — Addressables (CDN).
## 26. Что ещё не обговорено (отметить в чеклисте)
- Полный список кланов и наций (какие войдут, сколько).
- Анимированные карты / альтернативные арты.
- Особые версии карт (SP, RRR+, Parallel).
- Инфляция Gold (что ещё купить).
- Сброс пыли (сгорает ли в конце сезона).
- Токены Draft (копятся ли, лимит).
- Полный список косметики (сколько предметов).
- Хранение косметики (где лежит, как выбирается).
- Обмен косметикой.
- Версионирование клиента (что если не обновился).
- Логи и аналитика (что логируем, где храним).
- Бэкапы (как часто, где).
- Мониторинг (как следим за сервером).
- Масштабирование (что если игроков в 10 раз больше).
- Сторы (Google Play / App Store / только APK).
- Размер клиента (как оптимизируем).
- Батарея и нагрев (конкретные настройки).
- Продвинутые туториалы (формат каждого).
- Обучение старым эрам.
- Частота балансных правок.
- Бан-лист (где смотреть).
- Фидбек-система (модерация, голосование).
- Приватность профиля (что скрыть).
- История матчей (как глубоко хранится).
- Статистика по картам (winrate, популярность).
- Безопасность (мультиаккаунты, читы, 2FA).
- Маркетинг и комьюнити (сайт, Discord, соцсети).