283 lines
19 KiB
Markdown
283 lines
19 KiB
Markdown
# 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, соцсети). |