Первое изменение контента
Измените локализованный текст прототипа и подтвердите результат запекания в примере Minimal Multiplayer.
Найдите исходники-владельцы
Урок намеренно отделяет авторские данные от поведения:
| Исходник | Ответственность |
|---|---|
Content/StarterContent.fopro |
прототипы игрока, NPC, предмета и локации, а также английский и русский текст |
Maps/TutorialMap.fomap |
идентификатор карты, размер и рабочий гекс |
Scripts/Tutorial.fos |
создание мира, взаимодействие и клиентское представление |
FOnlineMinimalMultiplayer.fomain |
сгенерированные входы baker, порядок языков и настройки среды выполнения |
Не редактируйте Build/*, Baking/*, сгенерированные метаданные или ресурсы
готового пакета для авторинга контента. Это выходные данные. Настройки,
принадлежащие проекту, находятся в generate_config.py; сгенерированный из них
.fomain должен оставаться воспроизводимым.
Переименуйте учебный предмет
Откройте
Content/StarterContent.fopro
и замените оба значения $Text у TutorialSupply. Не меняйте стабильное имя
прототипа:
[ProtoItem]
$Name = TutorialSupply
$Text engl = "Emergency cache"
$Text russ = "Аварийный контейнер"
Baking.BakeLanguages = engl russ делает английский базой нормализации этого
примера. Значения обоих языков создаются вместе, чтобы контракт контента не
зависел неявно от fallback.
Проверяемый smoke-сценарий и сценарий запуска готового пакета намеренно считают
видимое английское имя публичным ожиданием. В том же изменении обновите
клиентский маркер и в tutorial-smoke.json, и в package-smoke.json:
"tutorial_client_content=Emergency cache"
Проверка, обновлённая вместе с контентом, отличает намеренное переименование от отсутствующего или устаревшего результата запекания.
Запеките и проверьте
Выполните полную проверку из корня отдельного checkout примера:
python validate.py
Ожидаемые семантические свидетельства включают:
[tutorial-smoke] remote calls and replicated persistent property verified
[gameplay-test] scenario content-test: passed
tutorial_client_content=Emergency cache
tutorial_server_supply_collected=1
[gameplay-test] summary: suite=minimal-multiplayer-tutorial status=passed scenarios=2 passed=2 failed=0
В строках вывода процессов вокруг маркеров могут присутствовать метки runner.
Контрактом являются сами маркеры и итоговый статус passed.
Для checkout движка запустите python validate.py из
Examples/MinimalMultiplayer; скрипт выберет поддерживаемый host preset.
Чтобы визуально проверить русский текст, задайте переопределение
Client.Language равным russ в generate_config.py, заново сгенерируйте
проверяемый .fomain, пересоберите пресет проверки и запустите обычный
настольный клиент. Затем восстановите язык по умолчанию или намеренно
зафиксируйте его как политику проекта; выбор языка не должен находиться в
исходниках движка.
Безопасно добавляйте контент
Для нового прототипа или карты:
- Добавьте авторскую секцию в каталог, который потребляет соответствующий
ResourcePack. - Задайте стабильное
$Name; последующее изменение сохраняемого идентификатора является миграцией, а не косметическим переименованием. - Создайте данные для каждого языка из
Baking.BakeLanguages. - Ссылайтесь на объект через метаданные скрипта или проверенный
hstringв соответствии с контрактом API-владельца. - Расширьте тест контента, затем запеките ресурсы и запустите самый узкий маршрут, который их потребляет.
Полные контракты описаны в руководствах Формат прототипов, Формат карт и Текст и локализация.
Восстановление после ошибок
Unknown prototype: убедитесь, что расширение указано вBaking.ProtoFileExtensions, а содержащий файл каталог подключён к пакету ресурсовProtos.- Остаётся прежнее имя: не исправляйте сгенерированные данные или готовые
пакеты вручную; повторите проверяемое запекание и найдите пакет-владелец в
Baking/Baking.report.json. - Тест контента проходит, но клиентский маркер отсутствует: проверяйте пакет
ресурсов
Textsи вызовGame.GetText()в среде выполнения, а не только существование прототипа.
Продолжите с первого автоматизированного теста.