# Правила OpenCiv3: сущности и состав данных

## Что измерено

Автоматический разбор [базового ruleset](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Lua/civ3/ruleset.json) дал:

| Таблица | Записей |
| --- | --- |
| Типы местности | 14 |
| Улучшения местности | 9 |
| Ресурсы | 26 |
| Прототипы юнитов | 124 |
| Здания и чудеса | 82 |
| Технологии | 83 |
| Цивилизации, включая специальные записи | 32 |
| Правительства | 8 |
| Типы жителей | 6 |
| Работы по преобразованию местности | 13 |
| Уровни сложности | 8 |
| Размеры мира | 5 |

Числа относятся к данным этого коммита. Прототип может быть непроизводимым, иметь особый способ появления или неподдерживаемые свойства. Количество зданий не равно количеству законченных эффектов.

Standalone-дополнение оставляет **27 типов юнитов** по таблице доступной графики и удаляет upgrade-ссылки на отсутствующие замены. Источник: [C7/Lua/standalone/ruleset.lua](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7/Lua/standalone/ruleset.lua); проверяемые результаты: [ruleset-summary.json](data/ruleset-summary.json).

## Определение и экземпляр

`UnitPrototype` задаёт стоимость, атаку, защиту, движение, ресурсные и технологические требования, действия, флаги, графику и обновления. `MapUnit` содержит конкретного владельца, местоположение, здоровье, остаток движения и назначение AI. Аналогично отделены определения зданий и построенные городские объекты.

Источники: [C7Engine/C7GameData/UnitPrototype.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/UnitPrototype.cs), [C7Engine/C7GameData/MapUnit.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/MapUnit.cs), [C7Engine/C7GameData/Building.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/Building.cs), [C7Engine/C7GameData/City.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/City.cs).

Данные сохранений используют отдельные `SaveUnitPrototype`, `SaveUnit`, `SaveCity` и другие представления. Ссылки восстанавливаются по идентификаторам и ключам, вместо сериализации всего циклического графа объектов.

## Что нельзя смешивать

Наш профиль Path of Atlants 2 содержит 413 типов юнитов, 236 технологий и 244 здания по [разбору оригинальной поставки](../original-game/README.md). Базовый набор OpenCiv3 не заменяет этот профиль и не доказывает поддержку его флагов.

Рабочая таблица совместимости должна различать: «поле разобрано из BIQ», «перенесено в нашу схему», «влияет на правила», «объясняется интерфейсом», «проверено сценарием». При импорте неизвестное свойство следует сохранять или выдавать диагностику, а не терять молча.

## Для редактора

Использовать устойчивые ключи для сущностей, отдельные локализованные названия и явный список возможностей. Не определять роль по отображаемому имени «Worker». При изменении прототипа заранее определить, меняются ли характеристики существующих экземпляров. Состав профиля, правила и сохранённая партия должны иметь отдельные версии.

