# Армия Войска и их характеристики: сколько воинов дома, как они уходят в поход и возвращаются. - **Сборка:** `Bogatyri.Army` (без Unity). - **Папка:** `Assets/Scripts/Modules/Army`. - **Зависит от:** ядра. ## Контракт `IArmy` | Член | Что делает | | --- | --- | | `SoldiersAtHome` | Воинов в городе (все типы). | | `TakeForMarch(marchId, count)` | Забрать воинов в поход пропорционально составу армии и запомнить состав похода. | | `ReturnFromMarch(marchId, survivors)` | Вернуть выживших по тем же типам. | Получить: `GameServices.Get()`. ## Где сейчас данные Войска пока хранятся в `GameProgress` (`progress.json`, поле `troops`, 4 типа). Поэтому контракт реализует мост `Assets/Scripts/WorldMap/ArmyBridge.cs` (`ArmyBridge.Service`), а модуль Армии содержит правила деления войск `ArmyMath`. **Решение команды от 19.10.2026:** `ArmyBridge` не удалять, пока войска не переедут в модуль Армии вместе с миграцией сохранений (поле `sashaMarchUnits`). ## События - **Публикует:** пока ничего. - **Слушает:** ничего (походы вызывают контракт напрямую). ## Сохранение Пока через `GameProgress`. Когда войска переедут в модуль, у него появится своя секция `"army"` и перенос из `progress.json`. ## Файлы | Файл | Что это | | --- | --- | | `ArmyMath.cs` | `TakeProportional` — кого взять в поход; `SplitSurvivors` — как вернуть выживших. Без Unity. | | `../../WorldMap/ArmyBridge.cs` (слой приложения) | Реализация `IArmy` поверх `GameProgress`. | ## Решения и план - **Этап 5 (план разработки):** солдат стоит 1 человека, 15 еды, 5 металла, 5 золота; содержание 0,2 еды в час; погибшие уменьшают население. - **Решение команды от 19.10.2026:** - войска набираются из населения с сохранением гражданского минимума; - гарнизон поселения: часть солдат назначается защищать город; - общая армия = гарнизон + доступные отряды + войска в походах, на точках и в гарнизоне Круга; **один солдат не может быть в двух местах**; - гарнизон ест еду и участвует в защите; - при голоде дебаффы действуют и на гарнизон, и на походы. - **Следующий шаг модуля:** перенести `troops` и `sashaMarchUnits` из `GameProgress` в модуль (секция `"army"`), заменить `ArmyBridge` на реализацию внутри модуля. ## Журнал изменений | Дата | Кто | Что | | --- | --- | --- | | 19.10.2026 | Claude | Модуль создан: `ArmyMath` (правила деления войск, без Unity, тесты на отсутствие двойного учёта). `ArmyBridge` сохранён и теперь реализует `IArmy` через `ArmyMath`; формат `sashaMarchUnits` не изменён. |