# Правила работы Это общие правила для ассистента и будущих сессий. ## Общение - **Ответы короткие.** Не повторять уже сохранённое в документации, не пересказывать код и не добавлять длинные вступления. Экономить токены. - **Любое сомнение или вопрос — диалог.** Если есть выбор, неоднозначность или риск, сначала показать 2–4 варианта с краткой рекомендацией, дать пользователю выбрать или ответить самому. Не угадывать и не принимать решение за него. ## Контекст - Перед началом работы читать `docs/SESSION-STATE.md`, затем `docs/HANDOFF.md` и `docs/client-visual-direction.md`. - Главное состояние и следующие шаги хранить в `docs/SESSION-STATE.md`, подробную историю — в `docs/HANDOFF.md`. - После блока: тесты, `validate`, `translations check`, коммит и push. ## UI и взаимодействие - **Выбор делаем интерактивом по объектам:** клик/драг по карте, кругу, зоне или полю. Не заменяем выбор карты, круга или цели списком кнопок в интерфейсе. - Кнопки допустимы только для глобальных действий и подтверждений: завершить ход, сдаться, отмена, принять/пропустить опциональную способность. Если выбирается конкретная карта/круг/зона — это делается кликом по объекту. - Информационные оверлеи (`ActionPrompt`, подсказки) не должны перехватывать клики и не дублируют выбор кнопками. ## Способности - Каждая текстовая способность карты должна иметь ровно одну реализацию: `CardScript` (`Abilities`/`Continuous`/`Activated`), общий движок (Sentinel, Heal/Trigger, Tejas) или флаг данных. Текст без реализации — баг. - **AUTO**: `AbilityDefinition` с `Trigger`, `Condition`, `Optional`, `CanPay`/`Pay` и `Resolve`. Проверяй зону/источник через `IsVanguardOf`/`IsRearGuardOf`/`IsInHand`; `OnPlace` не должен срабатывать от VC, если текст требует RC. - **ACT**: `ActivatedAbility`; флаги `RestsSelf`, `RetiresSelf`, `RequiresDiscard`, `FromHand`, `FromDropZone`. `CanActivate` — только проверка условий; оплата и эффект — в `Resolve` (или `Pay` для AUTO). - **CONT**: `ContinuousAbility` для силы/критики; исключения вроде «нельзя поддерживать» — через `CardScript.CanBeBoosted`, ограничения передвижения/атаки — через `RestrictionType`. - **Sentinel**: `IsSentinel` в данных, общий механизм Guard + сброс карты того же клана; отдельный скрипт не нужен. - **Trigger/Heal**: данные `trigger`; общий движок проверок и лечения. - **Ключевые механики**: Tejas — `CanSnipeBackRow`; Restraint — флаг; Boost/Intercept — `HasBoost`/`HasIntercept` и общий движок. - **Выбор и цели**: только `AskUnitChoice`, `AskUnitMultiChoice`, `AskHandCardChoice`, `AskEmptyRearGuardChoice`; клиент не выбирает карты кнопками вместо объектов. - **Клиент**: AUTO-подтверждение — оверлей; ACT — меню/оверлей карты; стоимость способности (сброс/урон/поле) выбирается по объектам и подтверждается кнопкой панели «Действия». - После правок способностей проверять весь реестр `CardScripts.Default`, тесты правил, `validate` и `translations check`. - Полный аудит 66 карт и правила для новых карт — `docs/ability-implementation.md`. ## Технические ограничения - Не запускать `dotnet` и Docker на рабочем ПК; сервер проверять на `ssh home`. - Не открывать второй экземпляр Unity с тем же проектом; для batch-проверок делать копию проекта без `Library`. - `Vanguard.Rules` остаётся чистой библиотекой; сервер зависит от неё, а не наоборот.