feat(game): do[]-эффекты в контенте через EffectSink; QuestEffect-свитч удалён
- data/effects.ts: реестр DIALOGUE_CUSTOM (plant_flowers) — имена сюжетных
  эффектов, как FLAGS/VARS.
- systems/DialogueEffects.ts: DialogueEffectSink + applyDialogueEffect
  (give/take в сумку, sound, toast, custom; unknown kind — тихий игнор,
  валидатор = error).
- DialogueSystem: registerSink + runner.onEffect → sink.
- Контент на do[]: elder_hand_in.accept → custom plant_flowers;
  trader_first.give_cloth → giveItem cloth. Удалены QuestEffect,
  EXTRA_EFFECTS, questEffectFor, поле QuestStage.effect и ручной switch
  в onDialogueFinished (custom откладывается до конца диалога — кат-сцена
  не рвёт реплику).
- Валидатор: do[].id give/take ∈ ITEMS, custom ∈ DIALOGUE_CUSTOM (error).
- Сценарий interact-world: первый advance теперь догоняет печать —
  двойное нажатие.
- Тесты: give/take в Inventory, custom до sink, unknown игнор.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent ba04f03 commit 12d263425f9957db37aca4ea42ebbfecc275ff81
@root root authored 1 hour ago
Showing 9 changed files
View
apps/game/src/data/__tests__/quests.test.ts
View
apps/game/src/data/dialogues.ts
View
apps/game/src/data/effects.ts 0 → 100644
View
apps/game/src/data/quests.ts
View
apps/game/src/data/validate.ts
View
apps/game/src/scenes/LocationScene.ts
View
apps/game/src/systems/DialogueEffects.ts 0 → 100644
View
apps/game/src/systems/DialogueSystem.ts
View
apps/game/tools/checks/interact-world.mjs