Потому что, очевидно, нет хороших.
SS14 использует YAML для определения prototypes. Это как JSON, но на самом деле предназначен для написания существами, основанными на углероде, с умеренным интеллектом, вроде нас с вами.
Комментарии
Прежде всего, вы можете сделать однострочный комментарий, поставив #; всё после него игнорируется. Пример:
yml foo: bar # Look a comment.
Типы данных
Для наших целей в YAML есть что-то вроде 3 типов данных: строки, списки и словари. Если вы знаете о YAML достаточно, чтобы понимать, что это неправда, прокрутите вниз до объяснения.
Строка
Определить строку легко, просто напишите её.
yml hello
Отлично, вы мастер YAML, вы определили строку с содержимым hello.
Во многих случаях вы хотите использовать специальные символы, которые YAML может воспринять, например :. В этом случае следует заключить строку в кавычки:
yml "hello: hi"
Всё ещё одна строка.
Двойные кавычки (”) допускают escape-последовательности, такие как наш друг \n (новая строка); одинарные кавычки (’) — нет.
Список
Определение списка делается простым добавлением - перед чем-то, например строкой:
`yml
Это определяет список с 3 элементами: A, B и C. Вау!
Значения — это обычные строки, и вы можете делать с ними что угодно: кавычки и прочее.
Ужасные советы от Ygg:
Вы также можете определить YAML инлайн. Вместо вышеуказанного можно написать:
yml [A, B, C]
Инлайн YAML по соглашению не рекомендуется, особенно для определения списков компонентов в сущности. Обычно используется для обозначения простого одноэлементного списка, например:
yaml x: [ DoAct ]
Словарь
И наконец, словари, которые представляют собой просто отображение ключ/значение. Так что можно сделать A равно B и C равно D.
Просто используйте двоеточия (:) для определения, вот так:
yml A: B C: D
Вжух.
Значения (и ключи, и значения!) ТАКЖЕ являются обычными строками, так что можно и так:
yml "A": "B" "C": "D"
Чудеса современных технологий.
Ужасные советы от Ygg:
Как и списки, словари также можно определять инлайн.
Если вы думаете: «Погодите-ка, инлайн YAML — это просто JSON». Вы правы. YAML является надмножеством JSON, и вы можете анализировать JSON-файлы как YAML напрямую, если захотите.
Вложение вещей
Оказывается, вместо строк можно также использовать словари и списки.
Становится довольно сложно, но если вы просто делаете то, что разумно с точки зрения форматирования, всё будет в порядке.
Когда у вас есть список, вы можете поместить словарь в элемент, сделав отступ. Так можно сделать следующее:
`yml
Like this, first key on the same line.
На самом деле это просто имеет смысл.
Точно так же можно поместить список внутрь словаря, но в этом случае список должен начинаться на следующей строке:
`yml
A:
B:
Легко.
И да, можно смешивать:
Не ждите, что эти примеры prototypes будут актуальными для SS14. Они здесь только для демонстрации синтаксиса.
`yml
First, this entire thing is stored in a massive list. That’s why there’s a -.
We’re looking at one entry, a dictionary.
- type: entity # Simple key/value pairs.
id: SMES
name: SMES
description: Stores power in its super-magnetic cells
components:
AHA! A list in a key. Wow!
This list ALSO stores dictionaries.
- type: Sprite
sprite: Buildings/smes.rsi
scale: 2, 2
layers:
- state: smes
- state: smes-display
shader: unshaded
Input lights.
- shader: unshaded
state: smes-oc0
Charge meter.
- visible: false
shader: unshaded
state: smes-og1
Output lights.
- shader: unshaded
state: smes-op0
- type: Icon
sprite: Buildings/smes.rsi
state: smes
`
Примечания
YAML на самом деле имеет гораздо больше типов данных. YAML также является полным беспорядком. Есть как минимум 10+ способов определения строк. Вся спецификация занимает более 100 страниц и переусложнена.
Ужасные советы от Ygg:
Кстати, о типах данных:
`yml
behaviors:
- !type: HeartBehavior
`
На что ссылается !type?
На класс в SpaceStation14 и/или RobustToolbox.
На C#.
Это, конечно, сбивает с толку любой YAML-валидатор, пытающийся найти схему тегов YAML. Будьте осторожны при автоматическом форматировании .yml Resources.
SS14 не использует прямую десериализацию объектов, и YamlDotNet (библиотека, которую мы используем для парсинга YAML) достаточно любезен, чтобы обрабатывать скаляры только как строки. Он не пытается парсить строки как числа или что-то ещё при использовании API «YAML to LINQ» (который я называю «вменяемым, не полностью бесполезным для практического использования»). Парсинг чисел обрабатывается нашим собственным кодом на C# на месте, так что если код ожидает boolean, он правильно обработает rue и alse; если ожидает строку, он просто увидит её как строку. Последнее изменение 21 июня 2026 г.