# Экономика, исследования и правительства

## Разделение коммерции

В [CurrentCommerceYieldRaw](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/City.cs) сначала собирается коммерция центра и работающих клеток, затем учитываются коррупция, анархия и беспорядки. Для полезной коммерции C рассчитываются:

- Базовые колбы: `floor(C × scienceRate / 10)`.
- Базовая роскошь: `floor(C × luxuryRate / 10)`.
- Базовые налоги: остаток C после первых двух долей.

Бонусы зданий применяются к каждой части после разделения. Вклад специалистов добавляется отдельно. Поэтому «ещё 10% науки» не обязательно даёт одинаковый прирост во всех городах: существенны округления и множители.

Режим производства `Inflow` позволяет превращать производственные возможности в денежные и другие потоки через Lua. В базовых данных есть одна запись такого режима. Источники: [C7Engine/C7GameData/Inflow.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Inflow.cs), [C7/Lua/civ3/behaviors/inflows.lua](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Lua/civ3/behaviors/inflows.lua).

## Бюджет и содержание

[DoPerTurnFinanceUpdates](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Player.cs) агрегирует доходы, содержание зданий и юнитов. При невозможности удержать неотрицательную казну код сначала распускает юниты сверх бесплатного содержания, затем снижает научный бюджет и расходы на роскошь. Если баланс всё равно не достигается, выбрасывается исключение.

Это наблюдаемая реализация, а не желаемый UX нашей игры. Наш интерфейс должен заранее объяснять дефицит и последствия. Не стоит переносить случайный выбор распускаемых юнитов без отдельного решения.

## Наука

Игрок хранит известные технологии, текущую цель, колбы, очередь, число ходов исследования и бесплатные открытия. Проверки доступности учитывают зависимости; выдача технологий через торговлю отделена от обычного завершения исследования.

`GameData.TechCostFor` зависит от базовой цены, research rate карты, сложности и числа известных цивилизаций, уже знающих технологию. Из накопленной стоимости вычитается прогресс текущего открытия. `EstimateTurnsToResearch` ограничивает прогноз минимумом и максимумом; в базовом ruleset это **4 и 50 ходов**.

В `DoPerTurnScienceUpdates` остаётся TODO: счётчик ходов увеличивается даже без фактического финансирования. Стоимость и сроки следует проверять сценариями с нулевым бюджетом и специалистом. Источники: [C7Engine/C7GameData/GameData.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/GameData.cs), [C7Engine/C7GameData/Player.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Player.cs), [EngineTests/GameData/FreeTechTest.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/EngineTests/GameData/FreeTechTest.cs).

## Правительства и коррупция

[C7Engine/C7GameData/Government.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Government.cs) задаёт тип коррупции, ускорение, полицию, содержание, скорость рабочих и переходный режим. Восемь записей базовых данных включают анархию. Нельзя считать её обычным выбираемым правительством только по наличию строки.

Коррупция города складывается из дистанционной и ранговой частей и ограничивается максимумом, который уменьшают соответствующие здания. В коде отмечены недоработки по отдельным чудесам, полицейским и устаревшим зданиям.

Для нас: хранить подробный расчёт бюджета и единые округления, валидировать сумму долей и проверять доход после каждого изменения правил. Открытая [задача #864](https://github.com/C7-Game/OpenCiv3/issues/864) указывает на вопросы к коммерции, но её состояние не доказывает актуальность каждого описанного симптома.

