FOnline Engine
Current master GitHub
Документация Docs/ru/tutorials/first-project.md

Первый 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.

Два ограничения заданы намеренно:

  1. Пример не включает Config baker. Он предназначен для конфигурации распространяемой среды выполнения и требует явной инициализации каждой настройки движка.
  2. Пример не импортирует все 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 в отдельный репозиторий и Конвейер запекания перед добавлением типов ресурсов.

Введите запрос.