# 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 тегами и плейсхолдерами {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, соцсети).