- Ядро (Bogatyri.Core): контракты модулей, EventBus, GameServices, SaveRegistry - Модули: Экономика, Поселение, Армия, Глобальный мир, Боевая система, Сохранения (каждый — отдельный asmdef, видит только ядро) - App/GameModules: регистрация модулей и связь с GameProgress/Казармами - Сохранения v2 по секциям модулей, перенос старого save.json и походов из progress.json - Сброс сохранений: ISaveSystem.ResetAll, ResetState у модулей, меню Tools - EditMode-тесты модулей, документы по каждому модулю с журналом изменений Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Боевая система
Урон, потери, исход боя. Модуль только считает: кто победил и сколько погибло. Кто идёт в бой и что делать с итогом, решают другие модули.
- Сборка:
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 перенесён в ядро. Правила не изменились. |