Экономика, исследования и правительства
Разделение коммерции
В CurrentCommerceYieldRaw сначала собирается коммерция центра и работающих клеток, затем учитываются коррупция, анархия и беспорядки. Для полезной коммерции C рассчитываются:
- Базовые колбы:
floor(C × scienceRate / 10). - Базовая роскошь:
floor(C × luxuryRate / 10). - Базовые налоги: остаток C после первых двух долей.
Бонусы зданий применяются к каждой части после разделения. Вклад специалистов добавляется отдельно. Поэтому «ещё 10% науки» не обязательно даёт одинаковый прирост во всех городах: существенны округления и множители.
Режим производства Inflow позволяет превращать производственные возможности в денежные и другие потоки через Lua. В базовых данных есть одна запись такого режима. Источники: C7Engine/C7GameData/Inflow.cs, C7/Lua/civ3/behaviors/inflows.lua.
Бюджет и содержание
DoPerTurnFinanceUpdates агрегирует доходы, содержание зданий и юнитов. При невозможности удержать неотрицательную казну код сначала распускает юниты сверх бесплатного содержания, затем снижает научный бюджет и расходы на роскошь. Если баланс всё равно не достигается, выбрасывается исключение.
Это наблюдаемая реализация, а не желаемый UX нашей игры. Наш интерфейс должен заранее объяснять дефицит и последствия. Не стоит переносить случайный выбор распускаемых юнитов без отдельного решения.
Наука
Игрок хранит известные технологии, текущую цель, колбы, очередь, число ходов исследования и бесплатные открытия. Проверки доступности учитывают зависимости; выдача технологий через торговлю отделена от обычного завершения исследования.
GameData.TechCostFor зависит от базовой цены, research rate карты, сложности и числа известных цивилизаций, уже знающих технологию. Из накопленной стоимости вычитается прогресс текущего открытия. EstimateTurnsToResearch ограничивает прогноз минимумом и максимумом; в базовом ruleset это 4 и 50 ходов.
В DoPerTurnScienceUpdates остаётся TODO: счётчик ходов увеличивается даже без фактического финансирования. Стоимость и сроки следует проверять сценариями с нулевым бюджетом и специалистом. Источники: C7Engine/C7GameData/GameData.cs, C7Engine/C7GameData/Player.cs, EngineTests/GameData/FreeTechTest.cs.
Правительства и коррупция
C7Engine/C7GameData/Government.cs задаёт тип коррупции, ускорение, полицию, содержание, скорость рабочих и переходный режим. Восемь записей базовых данных включают анархию. Нельзя считать её обычным выбираемым правительством только по наличию строки.
Коррупция города складывается из дистанционной и ранговой частей и ограничивается максимумом, который уменьшают соответствующие здания. В коде отмечены недоработки по отдельным чудесам, полицейским и устаревшим зданиям.
Для нас: хранить подробный расчёт бюджета и единые округления, валидировать сумму долей и проверять доход после каждого изменения правил. Открытая задача #864 указывает на вопросы к коммерции, но её состояние не доказывает актуальность каждого описанного симптома.