Минимальный проект FOnline
Это принадлежащий движку исполняемый starter и opt-in проект проверки. Он намеренно достаточно мал, чтобы описать его целиком:
CMakeLists.txtкомпонует FOnline через публичные helper-команды стадий и направляет одну server-only dependencyINTERFACEчерез текущий привязанный к ревизии integration listFO_SERVER_LIBS;CMakePresets.jsonпредоставляет отдельные пресеты конфигурации и smoke-теста для Windows x64 и Linux GCC;FOnlineStarter.fomainобъявляет один smoke sub-config и минимальные переиспользуемые пакеты ресурсов;Scripts/Starter.fosподписывается на событие запуска сервера и объявляет по одному remote call в каждом направлении;StarterServerExtension.cppдемонстрирует серверный нативный экспорт в скрипты и необязательный hook движка;run_starter_smoke.pyпроверяет таймаут, нативные и скриптовые маркеры жизненного цикла и парные запечённые метаданные remote call;validate.pyвыбирает поддерживаемый пресет хоста и запускает полный маршрут конфигурации, сборки и smoke-теста;Engine/предоставляется как ссылка или подмодуль validation wrapper либо checkout игрового проекта.
В проекте нет карт, криттеров, предметов, диалогов, GUI, аутентификации или продуктовой политики. Они принадлежат последующим руководствам и публичным демонстрационным репозиториям.
Автоматизированный smoke-тест
Из корня движка:
cd Examples/MinimalProject
python validate.py
Локальный validator использует инициализированный Engine/, конфигурирует и
собирает headless server и baker, запекает ресурсы, а затем запускает
RunStarterSmoke. Текущий обязательный workflow Engine этот маршрут не запускает.
Для успеха журнал сервера должен дойти до каждого маркера, а процесс — завершиться с нулевым кодом:
starter_native_extension_value=42
starter_server_started
starter_smoke_passed
Нативный маркер доказывает, что исходник роли SERVER был скомпилирован в
ServerLib, его объявление ExportMethod попало в codegen, а запечённый
AngelScript вызвал сгенерированную привязку Game.NativeStarterValue() во
время выполнения. Та же единица трансляции требует
FO_STARTER_PROJECT_DEPENDENCY=1, поэтому компиляция также доказывает передачу
server target INTERFACE через FO_SERVER_LIBS. Visibility hook
подтверждает обнаружение необязательного hook и подавление fallback при
генерации кода. Самодостаточный runner отклоняет процесс, который работает
дольше 60 секунд, завершается без любого маркера или создаёт несовместимые
контракты Metadata.fometa-server и Metadata.fometa-client. Запечённые
результаты должны содержать script.remote-call.server.StarterPing и
script.remote-call.client.StarterNotice; это проверяет тот же формат
MetadataBaker, который потребляет более полный генератор каталога
BuildTools/docs_metadata.py на стороне движка, не создавая зависимости
отдельного примера от этого инструмента документации. Маршрут Windows x64 был
успешно выполнен 31 июля 2026 года. Эти standalone build routes являются
opt-in local evidence и не входят в текущий обязательный workflow Engine.
FO_SERVER_LIBS является текущим привязанным к ревизии integration state, а не
helper-командой, объявленной в BuildTools/cmake/ProjectInterface.json.
Проверяйте его заново при каждом изменении pin Engine.
Намеренные ограничения
Starter не включает Config baker, потому что распространяемая конфигурация
требует полного явного набора настроек. Он также не импортирует все
CoreScripts движка: клиентские базовые модули зависят от принадлежащих проекту
настроек, enum и сгенерированных символов GUI. Это интеграционные контракты для
последующих примеров, а не скрытые предварительные требования starter.
Ручной checkout проекта
Чтобы использовать scaffold без validation wrapper движка, скопируйте этот
каталог в новый репозиторий и добавьте FOnline в Engine/. Выполните
конфигурацию из корня проекта с подходящими платформе и хосту инструментами,
соберите BakeResources и FOSTART_ServerHeadless, затем запустите
сгенерированный headless-сервер с аргументами:
-ApplyConfig <project-root>/FOnlineStarter.fomain -ApplySubConfig StarterSmoke
После инициализации Engine/ отдельный маршрут пресетов выглядит так:
# Debian/Ubuntu host prerequisites (first Linux run only)
Engine/BuildTools/prepare-workspace.sh linux-packages linux
# Cross-platform wrapper (Windows or Linux)
python validate.py
# Equivalent explicit commands
# Windows
cmake --preset windows
cmake --build --preset windows-smoke
# Linux
cmake --preset linux
cmake --build --preset linux-smoke
Workflows репозитория запускают ту же принадлежащую движку команду подготовки Linux перед проверкой, поэтому набор системных пакетов соответствует зафиксированной ревизии и не дублируется в YAML примера.
Пресет Windows намеренно оставляет выбор генератора CMake: CMake выбирает самую
новую установленную Visual Studio, тогда как фиксация Visual Studio 17 2022
отклонила бы совместимые более новые версии. Пресеты собирают только
headless-сервер и baker, необходимые для RunStarterSmoke; принадлежащие
проекту пресеты клиента, mapper, редактора, упаковки и развёртывания относятся
к последующим примерам. Не переименовывайте идентификаторы исходников и
конфигурации по одному. Изменяйте FO_DEV_NAME, FO_NICE_NAME, имя файла
.fomain и идентификаторы пакета или приложения вместе как одну операцию
начальной настройки проекта.
Проверенный первый урок — Первый headless-проект FOnline.