Party-private данные аддона в PoliticalWorldAPI
✅ Runtime verified — выполненные ветки WBML-0003 API runtime 1.14.0
Party-private data позволяет аддону хранить собственные значения у стабильного ID партии Political World и не превращать их в общий межмодовый протокол.
Для новичка схема такая:
королевство└─ party ID └─ ID твоего аддона └─ локальный ключ → значениеТипизированный public API
Заголовок раздела «Типизированный public API»В изученном creator-source API 1.9 есть:
GetPartyInt(...) / SetPartyInt(...)GetPartyString(...) / SetPartyString(...)GetPartyBool(...) / SetPartyBool(...)GetPartyFloat(...) / SetPartyFloat(...)В каждом вызове участвуют:
KingdomaddonIdpartyIdkeyvalue или fallbackRuntime, который проверял WBML, был новее — API 1.14.0. Версию изученных исходников и версию runtime нельзя смешивать.
Минимальный пример
Заголовок раздела «Минимальный пример»const string AddonId = "Example.PartyAddon";const string Key = "conference_count";
bool written = PoliticalWorldAPI.SetPartyInt( kingdom, AddonId, party.Id, Key, 3);
int count = PoliticalWorldAPI.GetPartyInt( kingdom, AddonId, party.Id, Key, 0);Для сохранений используй стабильный party.Id, а не позицию партии в списке.
Если партии с таким ID нет
Заголовок раздела «Если партии с таким ID нет»WBML-0003 специально проверил несуществующий party ID.
Runtime API 1.14.0 дал:
GetPartyInt → переданный fallbackGetPartyString → переданный fallbackGetPartyBool → переданный fallbackGetPartyFloat → переданный fallback
SetPartyInt → falseSetPartyString → falseSetPartyBool → falseSetPartyFloat → falseТо есть несуществующая партия не получает «фантомные» данные через setter.
Persistence после полного перезапуска WorldBox
Заголовок раздела «Persistence после полного перезапуска WorldBox»WBML-0003 полностью закрыл процесс WorldBox, запустил игру заново, загрузил сейв и снова нашёл ту же партию.
Без повторной записи вернулись:
party intparty Unicode stringparty boolparty floatИменно поэтому для протестированного стека эта ветка теперь имеет статус runtime Verified, а не просто «так выглядит по исходникам».
Что происходит с данными деактивированной партии
Заголовок раздела «Что происходит с данными деактивированной партии»В creator API есть lifecycle-операции для получения партий, включая неактивные, деактивации и реактивации.
WBML-0003 выбрал активную, не правящую партию, затем выполнил:
запись int/string/bool/float→ deactivate→ партия видна как active=False→ чтение всех четырёх значений→ reactivate→ active=True восстановленВсе выполненные assertions прошли.
Практический вывод:
Деактивация не стерла протестированные party-private данные.
Поэтому inactive-партию нельзя автоматически считать удалённой.
Как это устроено в изученном source
Заголовок раздела «Как это устроено в изученном source»Исходник составляет party-local ключ из party ID и локального ключа, а затем использует addon-private kingdom storage.
Концептуально:
addon namespace ↓party ID + local key ↓kingdom addon-private storageЭто описание реализации, а не инструкция вручную собирать внутренние save-ключи. Для обычного аддона граница совместимости — публичные методы API.
Непроверенная ветка: изоляция party A от party B
Заголовок раздела «Непроверенная ветка: изоляция party A от party B»Финал WBML-0003:
PASS=119FAIL=0SKIP=1SUITE RESULT: PARTIAL PASSЕдинственный SKIP относится к same-kingdom party-to-party isolation: в нужной фазе тестового мира не было второй подходящей партии.
Поэтому статус точный:
✅ party typed persistence после restart — verified✅ данные во время inactive — verified✅ fallback/rejection для missing party — verified🧪 изоляция party A от party B в одном kingdom — пока не доказана WBML-0003Частые ошибки новичка
Заголовок раздела «Частые ошибки новичка»Использовать отображаемое имя вместо ID
Заголовок раздела «Использовать отображаемое имя вместо ID»Имя может измениться. Для persistence нужен стабильный party ID.
Считать inactive равным deleted
Заголовок раздела «Считать inactive равным deleted»В WBML-0003 неактивная партия оставалась доступной и сохраняла протестированные данные.
Игнорировать bool от setter
Заголовок раздела «Игнорировать bool от setter»Если запись важна, проверяй возвращаемое значение.
Самому собирать внутренние storage keys
Заголовок раздела «Самому собирать внутренние storage keys»Не надо. Реализация может измениться, public API и существует как граница совместимости.