Shared tags и addon-private tags
✅ Source verified 🏷 Data-design pattern
Political World предоставляет два разных типа kingdom tags.
Они нужны для разных задач.
Shared kingdom tags
Заголовок раздела «Shared kingdom tags»Public methods:
GetKingdomTags(...)HasKingdomTag(...)AddKingdomTag(...)RemoveKingdomTag(...)Это намеренно shared/global tags.
Source сохраняет исторический storage key:
ukiol_api_kingdom_tagsради compatibility.
Shared tag стоит использовать только когда несколько модов осознанно договорились об одном meaning.
Например conceptual:
trade_embargoedможет стать cross-mod convention, если несколько addons документируют одинаковое значение.
Addon-private kingdom tags
Заголовок раздела «Addon-private kingdom tags»Public methods:
GetAddonKingdomTags(...)HasAddonKingdomTag(...)AddAddonKingdomTag(...)RemoveAddonKingdomTag(...)Они требуют registered addon и живут внутри collision-safe data namespace этого addon.
Внутри проверенного source список хранится под local key:
__private_tagsНо final save key всё равно namespaced через addon-data system.
Формат private tags
Заголовок раздела «Формат private tags»Текущий implementation сериализует список через |:
tag_a|tag_b|tag_cPrivate local tag с | отклоняется при добавлении.
Это internal serialization detail. Addon должен использовать public methods, а не читать __private_tags напрямую.
Правило выбора
Заголовок раздела «Правило выбора»Спросите:
Должен ли другой независимый mod понимать этот tag?
Если нет:
addon-private tagЕсли да, намеренно:
shared tag + документированная cross-mod conventionПримеры
Заголовок раздела «Примеры»Private:
dragon_dynastyhas_completed_my_questinternal_reform_stage_2Shared только по договорённости:
sanctionedneutral_trade_zoneprotected_stateЭто примеры, а не built-in Political World tag IDs.
Почему private — default
Заголовок раздела «Почему private — default»Private storage даёт:
- collision protection;
- clear ownership;
- безопаснее refactor;
- меньше accidental coupling;
- проще cleanup/migrations.
Shared state создаёт dependency даже без DLL/reference dependency.
Если два mods понимают одну строку одинаково — это уже protocol.
Migration note
Заголовок раздела «Migration note»Shared/global tag key специально сохраняет legacy ukiol_* ID.
Persistent key нельзя переименовывать только ради нового branding.
См. Stable IDs — это данные, а не branding.
Runtime persistence — WBML-0001
Заголовок раздела «Runtime persistence — WBML-0001»Оба типа tags вошли в full-process save/load probe.
Проверенная среда:
WorldBox 0.51.2 build 719NeoModLoader 1.2.0.1PoliticalWorldAPI 1.14.0WBML 0.0.1После save, полного закрытия WorldBox, нового запуска и загрузки того же save:
addon-private kingdom tag ... PASSshared kingdom tag .......... PASSPersistence подтверждён для этой среды.
Isolation между двумя разными world saves пока не проверен. Это задача WBML-0002.