English Новый сайт

Расширенный поиск

[ Новые сообщения · Пользователи · Правила ]
Страница 1 из 11
Форум » SpaceEngine » Моддинг и дополнения » Введение в скрипты SE 0.980
Введение в скрипты SE 0.980
SpaceEngineerДата: Вторник, 13.09.2016, 20:05 | Сообщение # 1
Автор Space Engine
Группа: Администраторы
Российская Федерация
Сообщений: 5544
Награды: 54
Статус: Offline
Последнее обновление: 14.09.2016 (версия 0.9.8.0)

SpaceEngine хранит информацию обо всех заданных вручную ("каталожных") объектах в скрипт-файлах (с расширением *.sc) или в csv-файлах (*.csv), расположенных в виртуальной папке */catalogs/ (подробнее о папках SpaceEngine и pak-файлах здесь: Структура папок и pak-файлы). Оба формата файлов - простые текстовые документы, так что вы можете редактировать их с помощью блокнота (или лучше программы Notepad++, которую мы рекомендуем скачать и установить). Файлы csv также можно редактировать с помощью специализированного программного обеспечения (например Microsoft Excel, с некоторыми побочными эффектами). Каталог */catalogs/ содержит подкаталоги galaxies/, clusters/, nebulae/, stars/ и planets/, для каждого типа объекта.

Большинство звёзд в стандартной установке SpaceEngine хранятся в csv-файле data/catalogs/Catalogs0980.pak/stars/HIPPARCOS.csv, а галактик - в data/catalogs/Catalogs0980.pak/galaxies/NGC-IC.csv. Это звёздный каталог HIPPARCOS, содержащий около 110 000 звёзд, и каталог галактик NGC/IC - около 10 000 галактик. Другие объекты - галактики звёзды с дополнительными параметрами, двойные звёзды, чёрные дыры, звёздные скопления и туманности, объекты Солнечной системы, экзопланеты и их родительские звёзды - хранятся в нескольких sc-файлах в том же системном pak-файле. Эти системные файлы не должны редактироваться или изменяться каким-либо образом. Если вы хотите обновить звезду, удалить или добавить новую, создайте свой собственный sc или csv файл в папке addons/catalogs/stars/. SpaceEngine поддерживает функции для изменения и удаления звёзд или любых других объектов из стандартных каталогов, а так же для добавления новых. После завершения работы над каталогами, вы можете запаковать их в pak-файл и распространять аддон в таком виде (см. Структура папок и pak-файлы).

Формат csv для каталогов предназначен для создания больших каталогов с однообразными данными. Он более компактный и загружается быстрее, чем sc, но допускает ограниченное количество типов данных, которые могут быть указаны в нем. Это просто таблица со значениями, разделёнными запятыми. Формат sc предназначен для описания объектов с любыми возможными типами данных, которые только могут быть использованы в SpaceEngine. Это текстовый скрипт, использующий "теги" для описания объекта (галактики, звезды, планеты и т.д.) и различных его параметров.

Формат *.sc файлов

Давайте посмотрим на какой-нибудь из стандартных sc-файлов SpaceEngine. Например, вот описание Сатурна, находящееся в файле data/catalogs/Catalogs0980.pak/planets/SolarSys.sc:

Код
Planet    "Saturn"
{
    ParentBody     "Sol"
    Class          "GasGiant"

    Mass            95.162
    Radius          60268
    Oblateness      0.09796

    RotationPeriod  10.65622
    RotationOffset  358.922
    Obliquity       28.049
    EqAscendNode    169.53

    Color         ( 1.000 1.000 0.850 )
    Albedo          0.342
    AlbedoBond      0.342
    AlbedoGeom      0.47
    Brightness      1.8

    Surface
    {
  // Surface map author: Bjorn Jonsson
  DiffMap        "Saturn/Surface-BJ"
  DiffTileSize    256
  DiffTileBorder  0
  DayAmbient      0
    }

    NoClouds     true

    Atmosphere
    {
  Height   250  // km
  Model   "Earth"
  Bright   5.0
  Opacity  0.2
  SkyLight 0.002
  
  Composition // values in percent
  {
   H2   96.3
   He   3.25
   CH4  0.45
   NH3  0.0125
   C2H6 0.0007
  }
    }

    Aurora
    {
  Height       1000   // km
  TopColor    (1.5 0.0 0.8)
  BottomColor (1.0 0.1 0.0)

  NorthLat     90    // degrees
  NorthLon     0     // degrees
  NorthRadius  15000 // km
  NorthWidth   5000  // km
  NorthRings   3     // number of rings
  NorthBright  1.0

  SouthLat    -90    // degrees
  SouthLon     0     // degrees
  SouthRadius  16000 // km
  SouthWidth   5000  // km
  SouthRings   3     // number of rings
  SouthBright  1.0
    }

    Rings
    {
  // Rings texture author: Vladimir Romanyuk "SpaceEngineer"
  Texture        "Saturn-rings.*"
  InnerRadius     60284
  OuterRadius     356993
  FrontBright     1.0
  BackBright      5.0
  Brightness      1.5
    }

    Orbit
    {
  RefPlane       "Ecliptic"
  Period          29.4577
  SemiMajorAxis   9.5371
  Eccentricity    0.0542
  Inclination     2.4845
  AscendingNode   113.715
  LongOfPericen   92.432
  MeanLongitude   49.944
    }
}


Скрипт начинается с ключевого слова Planet и следующей за ней текстовой строкой "Saturn". После этого идут строки с параметрами, заключёнными в фигурные скобки. Эта конструкция Planet "Saturn" {...} называется тег, и играет важную роль в скриптах SE. Теги делят скрипт на логические секции, они могут также включать в себя другие теги (например, Surface {...}).

Теги могут быть именованными, например, тег Planet, или неименованные, например Surface. Именованный тег может иметь несколько имён (альтернативные имена), разделённые косой чертой '/'. Например: Star "ALF Cen/Toliman/Rigel Kentaurus/Gliese 559". Все эти имена идентифицируют один и тот же объект в SpaceEngine, они могут в равной степени использоваться для поиска объекта в игре, или в качестве ссылки на объект из других скриптов (например, вы должны указывать имя звезды в параметре ParentBody скрипта планеты - можно использовать одно из несколько альтернативных имён звезды).

Греческие буквы вводятся в имя объекта в виде аббревиатур: ALF, BET и т.д. Полный список аббревиатур:
ALF - α (альфа)
BET - β (бета)
GAM - γ (гамма)
DEL - δ (дельта)
EPS - ε (эпсилон)
ZET - ζ (зета)
ETA - η (эта)
TET - θ (тета)
IOT - ι (йота)
KAP - κ (каппа)
LAM - λ (лямбда)
MU - μ (мю)
NU - ν (ню)
KSI - ξ (кси)
OMI - ο (омикрон)
PI - π (пи)
RHO - ρ (ро)
SIG - σ (сигма)
TAU - τ (тау)
UPS - υ (ипсилон)
PHI - φ (фи)
CHI - χ (хи)
PSI - ψ (пси)
OME - ω (омега)

Параметр - это строка с именем параметра (ключевое слово) слева и значением параметра справа. Имя и значение должны быть разделены пробелами или через табуляциями. Допускается только один параметр в каждой строке скрипта. Параметры могут быть следующих типов:

текстовая строка: Class "GasGiant"
число: Mass 95.162
вектор: Color ( 1.000 1.000 0.850 ) или Color ( 1.000, 1.000, 0.850 )
число в формате 'град мин сек' или 'час мин сек': Dec 18 32 16.23
логический тип: NoClouds true или NoClouds 1

Поддерживаются комментарии в формате языка C/C++:
// однострочный комментарий
/* инлайн-комментарий */
Первый - это однострочный комментарий. Весь текст после символов // до конца строки считается комментарием и игнорируется. Второй - это инлайн или многострочный комментарий. Весь текст между символами /* и */ считается комментарием и игнорируется. Переводы строки также допускаются в этом типе комментария:
/* это пример
    многострочного
    комментария */


Добавление, обновление и удаление объектов в каталоги

Если вы опишете какой-то новый объект, используя sc-файл SpaceEngine, он будет добавлен в игру. Под "новым объектом" подразумевается объект, который не существовал ранее в SE (не был описан ни в одном из каталогов). Точнее, объект того же типа (например, звезда) и с тем же именем не существовал ранее в SE. Если объект того же типа и с таким же именем уже существует в SE, произойдёт его обновление или объединение с данными, которые вы предоставили в вашем новом скрипте. Порядок обновления (какие именно данные имеют приоритет) определяется датой изменения sc-файла или pak-файл, в который этот sc-файл запакован. Более новый файл имеет больший приоритет, поэтому некоторые данные из скрипта объекта в предыдущем файле будут заменены новыми данным. Если какие-то данные отсутствуют в предыдущем скрипте (например, масса планеты), но есть в новом, будут использоваться данные из нового скрипта.

Планетарные объекты (планеты, луны, астероиды, кометы и звёзды в кратных звёздных системах) идентифицируются немного сложнее. SpaceEngine позволяет задавать множество планетарных объектов с одним и тем же именем, но с различающимся родительским объектом (указанным в параметре ParentBody). Например, Солнечная система имеет два объекта с именем "Pandora": спутник Сатурна и астероид. Они имеют разные родительские объекты - соответственно Сатурн и Солнце, так что это - разные объекты в SE.

В процессе поиска одинаковых объектов, SpaceEngine сканирует все альтернативные имена, представленные в скрипте. Например, вы можете обновить старую звезду Star "ALF Cen/Toliman/Rigel Kentaurus/Gliese 559", описав новую звезду в тегом Star "Toliman/Bungula". SpaceEngine обнаружит, что это один и тот же объект, т.к. найдёт совпадающее имя "Toliman". Произойдёт обновление старой звезды новыми данными, указанными в новом скрипте, в том числе обновится имя звезды: SE добавит новое имя "Bungula" в список альтернативных имён, так что он станет "ALF Cen/Toliman/Bungula/Rigel Kentaurus/Gliese 559". Для планетарного объекта, как было отмечено, вы должны указать также родительский объект. SpaceEngine объединит планетарные объекты, только если совпадают имена самих объектов и имена их родителей (можно использовать любое из альтернативных имён родителя).

Можно отменить некоторые данные из предыдущего скрипта. Например, параметр NoClouds true отменяет теги Clouds { } в старых скриптах. Наоборот, теги Clouds { } в новом скрипте отменяет NoClouds true в старом.

Можно также изменить тип объекта, переопределив его другим тегом. Например, если в каком-то старом скрипте определена планета "Kek" таким образом: Planet "Kek", а вы создали новый скрипт, определив в нём тег Moon "Kek", то планета в игре станет луной. Изменение типа возможно только в пределах того множества типов, который поддерживается в данном каталоге. Это значит, что вы не можете описать галактику с именем "Saturn" в каталоге планет, используя тег Galaxy "Saturn". Он будет проигнорирован SE, так как тег Galaxy не допускается в каталоге планет. Вот список типов объектов (тегов), которые разрешены в соответствующих каталогах:

Каталог планет */catalogs/planets/*.sc: Star, Planet, Moon, DwarfPlanet, DwarfMoon, Asteroid, Comet, Barycenter
Каталог звёзд */catalogs/stars/*.sc: Star, StarBarycenter
Каталог галактик */catalogs/galaxies/*.sc: Galaxy, Quasar
Каталог звёздных скоплений */catalogs/clusters/*.sc: Cluster
Каталог туманностей */catalogs/nebuale/*.sc: Nebula

Можно удалить (точнее, отключить) какой-либо объект из старых каталогов. Используйте параметр Remove с именем того объекта, который вы хотите удалить. Например, Remove "Toliman". Он должен указываться вне тегов. Можно использовать любое из альтернативных имён объекта. Звёздный каталог также поддерживает параметр RemoveStar, который работает аналогично (для обратной совместимости). В каталоге планет вы должны использовать более сложную конструкцию: Remove "Saturn" { ParentBody "Sol" }. Поскольку, как уже говорилось, SpaceEngine идентифицирует планетарные объекты по их собственному имени и имени их родителя.

Удаление старых объектов может быть использовано для обновления стандартных каталогов SE. Например, звёздные каталоги всё ещё содержат много двойных звёзд, описанных как две одиночные звезды. Можно использовать параметр Remove в каталоге звёзд, чтобы удалить их, и в нём же описать барицентр системы. Затем в каталоге планет описать две звезды-компонента двойной, с соответствующими орбитами, и тем барицентром в качестве родителя. Подробнее см. Создание звёзд.

Примечание: параметр Remove действует на все файлы каталогов, независимо от их даты модификации. Так что применив его один раз, вы не сможете более создать объект того же типа с тем же именем. Это баг в текущей версии (0.9.8.0).

Проверка ошибок

SpaceEngine может писать предупреждения и сообщения об ошибках в лог-файл system/se.log при загрузке каталогов. Есть два способа включить ведение журнала: глобальный и в каждом файле каталога отдельно. Глобальный уровень протоколирования управляется параметрами CatalogLogLevel (для sc-файлов) и CsvLogLevel (для csv-файлов) в теге Log файла конфигурации config/main-user.cfg. Возможные значения уровня:

0 - ничего не писать в лог
1 - писать ошибки и предупреждения, используя меньший из уровней в main-user.cfg и в sc-файле, если он определён там
2 - писать всё, используя меньший из уровней в main-user.cfg и в sc-файле, если он определён там
3 - писать ошибки и предупреждения, игнорируя уровень в sc-файле
4 - писать всё, игнорируя уровень в sc-файле

Последние два используются, чтобы переопределить настройки уровня протоколирования во всех sc-файлах (так что они не могут быть использованы в параметре CsvLogLevel). Они предназначены для глобального поиска ошибок во всех каталогах.

Каждый sc-файл каталогов может иметь собственные настройки уровня протоколирования, заданный параметром LogLevel, указанный где-то в глобальном пространстве (т.е. вне тегов Star, StarBarycenter и пр.). Возможные значения:

0 - ничего не писать в лог
1 - писать ошибки и предупреждения
2 - писать всё

Пока вы работаете над каталогами, рекомендуется указать LogLevel 2 в ваших sc-файлах и CatalogLogLevel 2 в main-user.cfg. Таким образом вы будете иметь всю информацию о работе звёздного калькулятора в лог-файле (см. Создание звёзд). Если вам нужно видеть только возможные ошибки, укажите LogLevel 1 в sc-файле. Если в финальной версии ваших каталогов всё ещё выводятся какие-то ошибки или предупреждения (например, когда отсутствуют данные RA/Dec, и звёздный калькулятор генерирует их процедурно), рекомендуется указать в них LogLevel 0, так что лог-файлы других пользователей будут свободны от ошибок, связанных с вашими каталогами.
Форум » SpaceEngine » Моддинг и дополнения » Введение в скрипты SE 0.980
Страница 1 из 11
Поиск:

>