Иерархия мира

Status: 🟢 реализовано (спека 8.5 + 8.7).

Структура

Country (страна)
├── PresidentPlayerID — глава, NULL = страна "спящая" (не основана)
├── CapitalRegionID — столичный регион, NULL пока не основана
│
├── Region (регион / субъект страны)
│   ├── GovernorPlayerID — глава региона, NULL = нейтральный
│   ├── CapitalCityID — столичный город региона
│   ├── RulingCountryID — какой стране принадлежит, NULL = нейтральный
│   │
│   ├── City (город / округ)
│   │   ├── MayorPlayerID — мэр города, NULL = нет мэра
│   │   ├── RulingCountryID — страна-владелец, NULL = нейтральный
│   │   │
│   │   └── Territory (земельный лот, 1 км²)
│   │       ├── owner_kind: city_gov / private_player
│   │       ├── owner_player_id (если private)
│   │       │
│   │       └── Building (постройка)
│   │           ├── owner_kind: city_gov / private_player / country_gov
│   │           └── building_type (завод, магазин, школа, ...)
│   │
│   └── ... (другие города региона)
│
└── ... (другие регионы страны)

Auto-наследование главы через capitals

💡 Президент по должности правит всей цепочкой: страна → столичный регион → столичный город. Без отдельных полей governor/mayor.

Псевдокод резолвера:

headOfRegion(region) =
  if region.id == country.capital_region_id → country.president
  else                                        → region.governor

headOfCity(city) =
  if city.id == region.capital_city_id → headOfRegion(region)
  else                                  → city.mayor

Почему так:

  • Реальные деньги/ресурсы/оборона страны находятся в «Кремле» (столичный город столичного региона).
  • Захватить страну = захватить Кремль. Президенту не нужны параллельные роли «Губернатор столицы» и «Мэр Кремля».

Типы Region

Region.type Назначение Лейбл UI
oblast Область (Подмосковье, Калужская и т.д.) «область»
republic Республика (Татарстан, Башкортостан) «республика»
krai Край (Алтайский, Краснодарский) «край»
federal_city Город федерального значения (Москва, СПб, Севастополь) «город федерального значения»
aut_oblast Автономная область «автономная область»
aut_okrug Автономный округ «автономный округ»

Типы City

City.type Назначение Лейбл UI
regional_capital Столица региона (динамическая, может меняться) «региональный центр»
town Обычный город / городской округ «город»
village Село «село»
rural_settlement Посёлок «посёлок»

Особый случай: federal_city (Москва)

Москва — Region.type=federal_city. Внутри Москвы как региона — 12 Cities-округов:

  • ЦАО (type=regional_capital — столица Москвы по умолчанию)
  • САО, СВАО, ВАО, ЮВАО, ЮАО, ЮЗАО, ЗАО, СЗАО, Зеленоградский АО, Новомосковский АО, Троицкий АО (все type=town)

Дубля Region+City с одним именем нет. ЦАО — это City, Москва — это Region.

Спящая страна — старт мира

На старте никаких государств не существует. Country=РФ есть в БД с пустым PresidentPlayerID. Все регионы — нейтральные (Region.RulingCountryID=NULL).

Государство рождается когда первая партия захватывает первый нейтральный регион через войну с NPC-армией. См. Пути к власти.

Текущее состояние мира (тестовый сценарий)

В seed для тестов:

  • 🇷🇺 Российская Федерация — основана тестовым профилем 1003 «Президент РФ».
    • Москва (RU-MOW, federal_city) — столичный регион.
      • ЦАО (regional_capital, столичный город РФ) — под РФ.
      • САО — под РФ. Мэр: 1002.
      • ВАО — под РФ. Приватный завод 1004.
      • 9 других округов — нейтральные.
  • ⚪️ Подмосковье (RU-MOS, oblast) — нейтральный регион. 56 городов, все нейтральные.

Auto-генерация при расширении мира

При добавлении новых регионов в seed (например СПб RU-SPE) карта автоматически их подхватит если в frontend/public/assets/maps/russia-admin-1.json есть feature с этим iso_3166_2. Без правок UI-кода. Это закладывалось в спеке 8.7.

See also