45 lines
2.5 KiB
Markdown
45 lines
2.5 KiB
Markdown
# Боевая система
|
||||
|
|
|
|||
|
|
Урон, потери, исход боя. Модуль только считает: кто победил и сколько погибло. Кто идёт в бой и что делать с итогом, решают другие модули.
|
|||
|
|
|
|||
|
|
- **Сборка:** `Bogatyri.Battle` (без Unity — тот же код будет считать бои на сервере).
|
|||
|
|
- **Папка:** `Assets/Scripts/Modules/Battle`.
|
|||
|
|
- **Зависит от:** ядра.
|
|||
|
|
|
|||
|
|
## Контракт `IBattleSystem`
|
|||
|
|
|
|||
|
|
`BattleOutcome Resolve(BattleRequest request)`
|
|||
|
|
|
|||
|
|
| `BattleRequest` | `BattleOutcome` |
|
|||
|
|
| --- | --- |
|
|||
|
|
| `Attackers` — атакующих | `Victory` — победил атакующий |
|
|||
|
|
| `Defenders` — защитников | `AttackerLosses`, `DefenderLosses`, `Survivors` |
|
|||
|
|
|
|||
|
|
Регистрирует `App/GameModules`. Мир получает модуль при создании симуляции, не через реестр — так симуляцию можно запустить на сервере.
|
|||
|
|
|
|||
|
|
## Текущие правила
|
|||
|
|
|
|||
|
|
- Побеждает тот, у кого больше солдат; ничья — победа защитника.
|
|||
|
|
- Проигравший теряет половину своего войска, победитель — столько же.
|
|||
|
|
|
|||
|
|
Пример: 30 против 20 — победа, погибает 10 атакующих и 10 защитников, домой идут 20.
|
|||
|
|
|
|||
|
|
## События
|
|||
|
|
|
|||
|
|
Нет: исход возвращается вызвавшему модулю.
|
|||
|
|
|
|||
|
|
## Сохранение
|
|||
|
|
|
|||
|
|
Нет данных.
|
|||
|
|
|
|||
|
|
## Решения и план
|
|||
|
|
|
|||
|
|
- **Этап 6:** формула с типами войск — кто кого контрит и как делятся потери. Сначала записать правила в документ экономики.
|
|||
|
|
- **Решение команды от 19.10.2026:** при голоде сильные дебаффы на боевую эффективность, включая гарнизон и походы. В `BattleRequest` для этого появятся модификаторы силы сторон; проценты — из `EconomyConfig`.
|
|||
|
|
|
|||
|
|
## Журнал изменений
|
|||
|
|
|
|||
|
|
| Дата | Кто | Что |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| 19.10.2026 | Claude | Модуль выделен: `BattleResolver` из `WorldSimulation.cs` стал `BattleSystem` с контрактом `IBattleSystem`; `BattleOutcome` перенесён в ядро. Правила не изменились. |
|