77 lines
5.3 KiB
Markdown
77 lines
5.3 KiB
Markdown
# Правила работы
|
||
|
||
Это общие правила для ассистента и будущих сессий.
|
||
|
||
## Общение
|
||
|
||
- **Ответы короткие.** Не повторять уже сохранённое в документации, не
|
||
пересказывать код и не добавлять длинные вступления. Экономить токены.
|
||
- **Любое сомнение или вопрос — диалог.** Если есть выбор, неоднозначность
|
||
или риск, сначала показать 2–4 варианта с краткой рекомендацией, дать
|
||
пользователю выбрать или ответить самому. Не угадывать и не принимать
|
||
решение за него.
|
||
|
||
## Контекст
|
||
|
||
- **При работе с этим проектом всегда загружать скилл
|
||
`vanguard-remaster`** (`.opencode/skills/vanguard-remaster/SKILL.md`)
|
||
до начала анализа или правок.
|
||
- Перед началом работы читать `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` остаётся чистой библиотекой; сервер зависит от неё, а не
|
||
наоборот.
|