Первый headless-проект FOnline
В этом руководстве запускается принадлежащий движку минимальный проект без другого игрового репозитория. В результате FOnline сконфигурирует и соберёт baker и headless-сервер, запечёт модуль AngelScript, запустит сервер с базой данных в памяти, выполнит стартовый callback проекта и штатно завершит работу.
Это первая поддерживаемая контрольная точка, а не готовая к игре сборка. В starter намеренно отсутствуют клиент, карта, криттер, предмет, диалог и GUI.
Предварительные требования
Используйте отдельный checkout FOnline с инициализированными подмодулями. Для validation wrapper требуются:
- Git;
- Python 3;
- CMake 3.22 или новее;
- поддерживаемый на платформе инструментарий C++20;
- платформенные зависимости из Рабочего процесса сборки.
Канонический scaffold находится в Examples/MinimalProject. Не используйте файлы внедряющей игры для прохождения этого руководства.
Запустите starter
В корне репозитория движка выполните команду для текущего хоста.
Windows x64:
cd Examples\MinimalProject
python validate.py
Linux x64:
cd Examples/MinimalProject
python3 validate.py
BuildTools заново создаёт Workspace/validation-project, копирует туда
канонический scaffold, связывает копию с текущим checkout движка,
конфигурирует и собирает сервер и baker, запекает ресурсы и запускает sub-config
StarterSmoke. Таймаут smoke-runner равен 60 секундам.
Подтвердите успех
Ближе к концу вывода сервер должен сообщить:
starter_project=FOnline Starter
starter_native_extension_value=42
starter_server_started
starter_smoke_passed
[starter-smoke] required lifecycle markers found
Команда должна завершиться с нулевым кодом. Нативное значение доказывает, что
серверный исходник C++ попал в ServerLib, codegen создал его скриптовую
привязку, а запечённый AngelScript её вызвал. Маркеры жизненного цикла
доказывают, что модуль подписался на Game.OnStart и выполнился после
инициализации сервера; недостаточно просто запустить и остановить нативный
процесс.
Сгенерированные файлы остаются в Workspace/:
Examples/MinimalProject/Build/windows/— дерево сборки и результатов Windows;Examples/MinimalProject/Build/linux/— дерево сборки и результатов Linux.
Изучите проект целиком
Starter достаточно мал, чтобы просмотреть его за один проход:
| Файл | Ответственность |
|---|---|
Examples/MinimalProject/CMakeLists.txt |
Компонует публичные стадии CMake FOnline и объявляет RunStarterSmoke. |
Examples/MinimalProject/FOnlineStarter.fomain |
Объявляет минимальные настройки среды выполнения, пакеты ресурсов и детерминированный smoke sub-config. |
Examples/MinimalProject/Scripts/Starter.fos |
Объявляет настройку проекта, подписывается на запуск сервера, выводит маркеры жизненного цикла и запрашивает успешное завершение smoke-теста. |
Examples/MinimalProject/StarterServerExtension.cpp |
Демонстрирует один серверный нативный экспорт в скрипты и один необязательный hook движка. |
Examples/MinimalProject/run_starter_smoke.py |
Проверяет таймаут, результат процесса, нативные и скриптовые маркеры жизненного цикла и запечённые метаданные remote call. |
Два ограничения заданы намеренно:
- Пример не включает
Configbaker. Он предназначен для конфигурации распространяемой среды выполнения и требует явной инициализации каждой настройки движка. - Пример не импортирует все
CoreScriptsдвижка. Некоторые клиентские базовые модули требуют принадлежащих проекту enum, настроек и сгенерированных символов GUI. Добавляйте их только вместе с соответствующими контрактами проекта.
Измените скрипт и проверьте результат
В Examples/MinimalProject/Scripts/Starter.fos измените строку, которую
возвращает GetProjectName(), не затрагивая обязательные smoke-маркеры. Ещё раз
выполните ту же команду проверки.
Новое значение должно появиться в строке starter_project=..., а после него —
оба обязательных маркера. Второй запуск доказывает, что изменённый исходник
AngelScript был скопирован и запечён заново, а не взят из устаревших данных
workspace.
Устранение неполадок
ConfigBakerException: Main config baking error: пакет ресурсовConfigдобавлен без полной конфигурации проекта. Уберите его на этой контрольной точке или инициализируйте полный контракт настроек до упаковки.Nothing was built in the module: после препроцессинга одна из генерируемых сторон среды выполнения стала пустой. Оставьте хотя бы одно корректное общее объявление или разделите модули проекта по поддерживаемым сторонам.- Отсутствуют символы
WorldTime,GuiScreenилиGuiScreens: полный каталогCoreScriptsимпортирован без принадлежащих проекту метаданных или сгенерированных контрактов GUI. [starter-smoke] server timed out: изучите предшествующий вывод запуска. Вероятно, скриптовый callback не запросил завершение или инициализация заблокировалась доGame.OnStart.- Нет маркеров жизненного цикла при нулевом коде завершения: считайте запуск
неуспешным;
run_starter_smoke.pyотклоняет такой результат.
Следующие шаги
Продолжите с первого игрового клиента, первого изменения контента и первого автоматизированного теста. Используйте Начало работы как общую карту документации, Встраивание FOnline в игровой проект перед превращением scaffold в отдельный репозиторий и Конвейер запекания перед добавлением типов ресурсов.