FOnline Engine
Current master GitHub
Документация Docs/ru/reference/prototype-format/validation.md

Валидация формата прототипов

Сгенерированный справочник. Не редактируйте напрямую. Обновите BuildTools/PrototypeFormatInterface.json или владеющие метаданные движка, затем запустите python BuildTools/docs_prototype_format.py --write.

Индекс Синтаксис Свойства Валидация Каноническая JSON-модель Руководство

Эти правила обеспечиваются parser, registrators метаданных, serializer свойств или side-specific bake прототипов. Стабильные ID позволяют CI отслеживать изменения контракта.

Стабильный ID Правило Требование Примечания Авторитетный источник
prototype-format.rule.config-syntax Синтаксис конфигурации Используйте повторяемые INI-подобные секции, присваивания key = value, комментарии #, продолжение конечным обратным слешем после whitespace и добавление key += value, где оно уместно. Файлы прототипов используют общий parser ConfigFile; символы комментария в кавычках или после экранирования остаются частью значения. Source/Common/ConfigFile.cpp
prototype-format.rule.file-filter Фильтр расширений В ProtoBaker попадают только файлы, чьё расширение входит в Baking.ProtoFileExtensions. Каталоги и условные имена расширений не выбирают тип прототипа; его выбирает секция. Source/Tools/ProtoBaker.cpp
prototype-format.rule.identity-per-type Идентичность и дубликаты ID прототипа после миграции должен быть уникален внутри разрешённого типа во всём входе pack. Один текстовый ID может существовать в разных типах прототипов; дубликаты в одном типе приводят к ошибке bake. Source/Tools/ProtoBaker.cpp
prototype-format.rule.identifier-characters Зарезервированные символы ID ID прототипов не могут содержать / или $, поскольку оба символа зарезервированы для адресации вложенных секций. Baker отклоняет оба символа после применения fallback к имени файла и до хеширования или проверки дубликатов. Source/Tools/ProtoBaker.cpp
prototype-format.rule.inheritance-scope Область наследования Каждый родитель должен разрешаться внутри того же типа прототипа и текущего входа pack. Родители могут быть объявлены в другом файле, но родитель другого типа или отсутствующий родитель приводят к ошибке bake. Source/Tools/ProtoBaker.cpp
prototype-format.rule.inheritance-precedence Приоритет наследования Объединяйте предков в глубину, затем родителей слева направо и дочерний прототип последним; поздние значения свойств заменяют ранние. Управляющие директивы с префиксом $ не копируются в объединённую карту свойств. Source/Tools/ProtoBaker.cpp
prototype-format.rule.acyclic-inheritance Ациклическое наследование Граф родителей прототипов должен быть ациклическим. ProtoBaker и ProtoTextBaker отслеживают active parent path и отклоняют self-cycle, парный и более длинные циклы при любой repeated-parent policy. Source/Tools/ProtoBaker.cpp
prototype-format.rule.repeated-ancestors Повторяющиеся ancestors Parent, достигнутый по нескольким inheritance paths, добавляет поля только при первом достижении; Baking.AllowRepeatedProtoParents определяет, пропустить или отклонить поздний повтор. Default permissive; задайте option false, если проект должен отклонять каждый inheritance diamond. ProtoBaker и ProtoTextBaker применяют одно правило. Source/Tools/ProtoBaker.cpp
prototype-format.rule.property-resolution Разрешение свойств Каждый неуправляющий ключ должен разрешаться в свойство, доступное текущей стороне bake. Неизвестные, отключённые для стороны, virtual и temporary свойства отклоняются; свойства только противоположной стороны пропускаются для этой стороны. Source/Common/Properties.cpp
prototype-format.rule.strict-values Строгие текстовые значения Значения свойств должны разбираться согласно типу метаданных без переполнения, неизвестных enum или ссылок на прототипы, неконечных чисел и неверной структуры коллекций. Авторитетным источником для текстовых значений scalar, enum, struct, array, dictionary, RefType, FixedType и Proto служит serializer свойств. Source/Common/PropertiesSerializer.cpp
prototype-format.rule.init-script-signature Сигнатуры callbacks InitScript Непустое встроенное свойство InitScript у Item, Critter, Map или Location должно разрешаться в глобальный void callback, принимающий тип этой сущности и bool firstTime. Server baking проверяет метаданные ScriptFuncType каждого заданного callback и до runtime отклоняет отсутствующие функции или несовпадающие сигнатуры. Source/Tools/Baker.cpp
prototype-format.rule.proto-reference Ссылки на прототипы Ссылки свойств на сущности FixedType и Proto должны разрешаться после миграции, кроме nullable-свойства с пустым авторским значением. Для удалённого или переименованного ID нужна явная миграция Proto на допустимую цель или Remove согласно владеющей политике persistence. Source/Common/PropertiesSerializer.cpp
prototype-format.rule.proto-migration Миграция прототипов Правила миграции Proto применяются к объявленным ID, ID родителей, lookup и сохраняемым ссылкам до окончательного разрешения. Задавайте миграции в нативных или проектных метаданных через ///@ MigrationRule Proto <Type> <Old> <NewOrRemove>. Source/Tools/ProtoBaker.cpp
prototype-format.rule.side-specific-output Выходы отдельных сторон Один набор исходников отдельно разбирается и сериализуется для метаданных сервера, клиента и Mapper. Исходное свойство может иметь смысл на одной стороне и пропускаться на другой; server output также проверяет свойства script callbacks. Source/Tools/ProtoBaker.cpp

Текущее ограничение диагностики

Граф родителей должен быть ациклическим. Текущий baker рекурсивно раскрывает родителей без отдельной диагностики цикла, поэтому встраивающим проектам следует проверять циклы до baking и держать цепочки наследования короткими. Это документированное ограничение реализации, а не поддержка циклического поведения.

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