ПЕРЕВОД С НЕМЕЦКОГО САИТА НА РУССКИИ ЯЗЫК.  Сценарий системы:
Сценарий системы OMSI делает возможным для декорации объектов и особенно транспортные средства могут быть оборудованы отдельными системами, которые обмениваются данными через переменные и вызовы функций с главной программой и графические и звуковые системы.
Статус сценария системы, описанной здесь соответствует OMSI 1.01.
Файлы сценария системы
Сценарий система включает в себя следующие файлы:
    Сценарий файлы с исполняемым кодом (*. КНО)
    Список переменных и Stringvarlist файлов в каталоге программы OMSI \ для определения системных переменных
    Список переменных и Stringvarlist файлы для определения пользовательских переменных
    Constfile файлы для определения пользовательских констант и таблиц функций
Помимо определения файлов, системных переменных, все файлы, необходимые для каждого транспортного средства / пейзаж объекта (в следующем: объект) быть зарегистрированы в файле конфигурации.
Для этого имеются команды [сценарий], [varnamelist], [stringvarnamelist] и [constfile]. Первая запись каждой команды является количество файлов на соответствующие имена файлов следуют (включая путь относительно файла конфигурации. Имена файлов не имеют значения, если они должным образом зарегистрированы в списках.
Функция соответствующих файлов, описывающих язык сценариев обсуждается в курсе.
Основы языка сценариев
Система OMSI сценариев работает с обратной польской нотации. В этом случае оператор стоит за двумя операндами; Проще говоря, это означает, что функция "1 + 2" приведен вместо следующим образом: "1 + 2". Более сложный пример: "(1 + 2) * (4 + 5)" соответствует "1 2 + 4 * 5 +".
Очень важным является тот факт, что текст OMSI файлы и, в частности, язык сценариев с учетом регистра! То есть это всегда обращать внимание на верхний и нижний регистр!
Стек и зарегистрируйтесь
При обработке сценария OMSI имеет стек строку и стек для чисел с плавающей точкой. Ниже приводится "Стек" всегда означало стек с плавающей точкой, в противном случае говорят о "строка-стек".
Оба стека содержит 8 слотов памяти, которые нумеруются от 0 до 7. Каждый сценарий операции можно добавить один или несколько новых значений в любом из стека (нажатие), новое значение установлено в положение 0 и все последующие значения "двигаться вверх место", или они могут иметь одно или несколько значений из стека вытащить (POP / толкай) или только читать (взгляд).
Для временного хранения номера, есть еще восемь индексироваться ячеек памяти, которые могут быть непосредственно чтения или записи, которые находятся в так называемом регистре - есть только один регистр для чисел с плавающей точкой.
Пример операции
Пример: Операция 1 + 4 Код для этого:
1 4 +
В таблице ниже показано, как эта ведет себя стека:
Операция: стек: 0 1 2 3 4 ...
-------------------------------------------------- ---------------------------
Перед: 0 0 0 0 0
"1" 1 0 0 0 0
"4" 4 1 0 0 0
"+" 5 0 0 0 0
В начальном состоянии стека нулями (или неизвестным / случайных значений). Команда "1" толкает один в верхней части стека и сдвигает все другие значения (нули) к задней части. Команда "4" толкает четыре на 0 Пространство и все следующие значения, то есть, в частности, один на следующий курс. Следующим шагом является "+", два верхних значения берутся из стека - другими словами 4 и 1 - и суммируются. Результат (5) вновь заносится в стек. Два оригинальных номеров больше не доступны в стеке.
Второй пример:
(1 + 2) * (4 + 5) должен быть указан как уже упоминалось следующим образом:
1 2 + 4 + 5 *
Стек работает следующим образом
Операция: стек: 0 1 2 3 4 ...
-------------------------------------------------- ---------------------------
Перед: 0 0 0 0 0
"1" 1 0 0 0 0
"2" 2 1 0 0 0
"+" 3 0 0 0 0
"4" 4 3 0 0 0
"5" 5 4 3 0 0
"+" 9 3 0 0 0
"*" 27 0 0 0 0
Так что в конце концов это правильный результат в стек 0 площадь!
Числа с плавающей точкой и строки
OMSI сценария система работает только с плавающей точкой типов данных (с одинарной точностью со знаком) и String. Оба типа данных имеют отдельные стеки. Таким образом, обработка чисел с плавающей точкой и строки обычно работают независимо друг рядом с другом. Однако, может случиться так, что некоторые функции, такие как Преобразовании числа в строку и, следовательно, иметь одновременный доступ к обоим разделам.
О булевых переменных, было отменено. Для логических значений, численные значения 0 и 1 используются в целом.
Сценарий ключевые слова
Комментарии
Аннотации можно осуществить только при очень переднем апостроф ['] установлен в животном ладят строки:
«Я строке комментария
   "Я не строка комментария!
Точки входа и выхода, макросы и триггеры
Все команды должны быть в пределах от одного входа и одна точка выхода.
Точка входа отмечен одной из следующих ключевых слов:
    {} Кадр В ходе каждого кадра OMSI звонков о данной точки входа к раме с помощью сценариев обработки кадра, если оно существует.
    {} Init При инициализации OMSI звонки об этой точкой входа в сценарий инициализации.
    Frame_ai {} Это вариант {кадр} точку входа, которая затем вызывается в транспортных средствах, когда они не в центре внимания пользователя, например, если они так же АИ-дорожных транспортных средств. Однако эта точка входа не имеется, но только кадр {}, то она называется альтернативно. В этой точке входа объекта пейзажи не применяются.
    {Макрос: имя} точка входа вызывает подраздел (макро), которые всегда должны быть определены после вызова.
    {Триггера: имя} Эта точка входа вызывается основной программы, когда имя пользователя является комбинацией клавиш или мыши событие с именем зовет - есть определенные триггеры, которые вызываются непосредственно из основной программы, например, Если в OMSI автобусы AI, дисплей изменений и т.д.
{End} является универсальной точкой выхода. Он всегда должен завершить блок открыт с одной из этих команд.
Макро вызова
Доступ к нему осуществляется через макрос (M.L.name). Из вызов макроса всегда должно быть сделано до его определения. В противном случае OMSI сообщает, что макрос не был найден.
Распределение сценарий на несколько файлов
Для простых сценариев (например, чистые транспортные средства ИИ или пейзажи объектов), достаточно в целом * ШОС файл, чтобы создать, какой кадр {} ... {End} -., И необязательно один инициализации {} {... End} блок имеет.
Если это так, однако, полный сценарий транспортного средства, то целесообразно для различных подсистем для создания отдельных файлов. Оно должно быть следующим:
    Существует основной сценарий и необходимые файлы подсистемы. Основным будет содержать {кадр} - и {} инициализации блоков, но только вызов макросов, которые определены в подсистеме файлов.
    Для каждой подсистемы есть *. Sco файла и в зависимости от ваших потребностей и список переменных Constfile с принадлежностью к системе переменных. Это также вызывает триггер для ключей команды сортируются.
    Макросы должны быть разумно названы: {макрос: subsystem_frame} и {макрос: subsystem_init}.
    Так что макросы вызываются основной сценарий, это должно быть названо в списке сценариев в объектный файл конфигурации в первую очередь. Порядок скрипты вместе, должны быть выбраны так, чтобы все звонки файла всеобъемлющих макро всегда перед каждым макроопределения.
Ограничение, что макросы всегда должны быть определены после вызова, хотя иногда может быть помехой, но это очень эффективная защита от зацикливания и круговые аргументы.
Триггер
Как уже было написано, {триггера: имя} ... {End} сечение разному от главной программы, которая будет названа. К ним относятся:
    Запускаем по клавиатуре. Если комбинация клавиш с именем называют tastkomb является триггером {:} tastkomb вызывается при нажатии кнопки и триггер {:} tastkomb_off, когда кнопка будет отпущена.
    Отпустите кнопку мыши. Если сетка щелкнули на кнопке [MouseEvent] обозначение mouse_ev, то {триггер: mouse_ev} Вызывается при нажатии кнопки мыши, {триггер: mouse_ev_drag}, пока кнопка мыши удерживается и {триггер: mouse_ev_off}, когда кнопка мыши отпущена будет.
    Есть также ряд системных триггеров.
Операции
Операции со стеком
STACKDUMP%% Возвращает из диалогового окна с плавающей точкой стек содержания. Поэтому следует, конечно, используются только в целях отладки.
s0, s1, ..., s7 сохранения текущего значения в стеке определяется количеством регистров. Значение остается в стеке
l0, l1, ..., l7 загрузка соответствующего значения регистров и переход к стеку. Значение регистра сохраняется.
г дублируется на вершине стека, все другие стек добавляется в конец.
Записывает строку $ MSG верхнее значение стека в отладочной OMSI линии - будь то пользователь, А. И. транспортного средства или объект пейзажа.
$ D дублируется стека значение строки похожи на "D".
Логические операции
Логические операции работают по принципу 0 = False, все остальное верно.
И &&, то есть если один из двух верхних значений стека равен 0, Ergbnis 0, в противном случае один
| | ИЛИ
! Отрицание
Операции сравнения
Сравнение операции сравнения значений в двух местах каждый вершины стека, а затем добавить в зависимости от результата "1" или "0" в верхней части стека. Größer-/Kleinerzeichen есть в соответствии с порядком, в котором значения заданного ранее. Это означает:
4 2> верно, потому что внутренняя операция, выполняемая в данном случае "4> 2".
= "1", если вершины стека равны, в противном случае "0".
<"1", если значение стека один стек значение меньше 0, в противном случае "0".
> ... больше ...
<= ... меньшим или равным ...
> = ... больше или равно ...
$ = Как "=" только для двух верхних строк стек-курсах.
$ <Меньше (строка). Неравное операций со строками проверить алфавитном порядке. "А", таким образом, меньше "B".
> Больше (строка).
$ <= Меньше или равно (строка).
> = Больше или равно (строка).
Математические операции
+ Plus
- Минус (стека 1 - 0 стека, так что в принципе, как и в большей / меньшей операций)
* Время
/ Общие (1 стек / стек 0)
% Остаток от деления (с плавающей точкой расширена следующим образом: Stack0 - ОТБР (STACK1 / Stack0) * STACK1)
/ - / Изменения знака
греха Sine
мин выбирая меньшее из двух наибольших значений стека
Широкий выбор большего из двух верхних значений стека
Опыт экспоненциальная функция с основанием е (е ^ Stack0)
SQRT Квадратный корень
SQR площади
SGN возврата знака, в зависимости от -1, 0 или +1
Круг числа пи-пи
случайное случайное целое число 0 <= X <Stack0
ABS возвращает абсолютное значение
ОТБР округления до ближайшего целого числа
Операции со строками
"Вздор" бла вставкой строки, на верхней строке стека пространства
+ $ Объединение двух строк. "Омнибус", "симулятор" + $ результат "омнибус симулятор"
$ * Вершине стека строка повторяется, пока в результате символ не является едва больше или равно вершине стека значение. Например, "ню" $ 6 * является "nununu"
$ Длина задает количество символов в верхней части стека обратно строку в стек.
$ CutBegin режет stack0 символов вперед от вершины стека из строки.
$ CUTEND Режет stack0 знаков в обратном направлении от вершины стека из строки.
$ SetLengthR Регулировка длины строки на вершине стека stack0 к правому краю персонажи с самого начала или пробелы добавляются.
$ SetLengthL Регулировка длины строки на вершине стека stack0 слева, по символам, или пробелы удаляются в конце добавляет.
$ IntToStr раундов stack0 и преобразует полученную целую в строку.
$ IntToStrEnh расширенная версия IntToStr. Здесь, в верхней части стека строка используется для определения формата преобразования строк: первый символ в строке используется для заполнения недостающих символов, следующие символы должны быть числом показано указывает на местах. Пример: 35 "5" $ IntToStrEnh приводит к "35" и 123456789 "011" $ IntToStrEnh приводит к «00123456789». Если есть ошибки, "ERROR" отображается.
$ StrToFloat преобразует вершину стека строку в число с плавающей точкой, если это возможно. В противном случае -1 написано.
Доступ к переменным
Различие проводится в системных переменных и локальных переменных. Системные переменные OMSI пор, локальных переменных сохраняются для данного автомобиля / объекта.
На локальных переменных всегда есть причина для искоренения переменные, которые предопределены OMSI. Кроме того, любое количество переменных могут быть добавлены с помощью списке переменных файлов.
(LSvarname) Загружает имяПеременной системной переменной в вершине стека пространства
(LLvarname) загружает локальный переменная имяПеременной в верхней части стека
(L. $ перем.) Загружает локальный имяПеременной переменную строку в верхнее пространство стека строку
(SLvarname) Магазины пера в верхней части стека в локальной переменной
(P $. Varname) Сохраняет строку стека первое место в местном имяПеременной переменная строкой
Подробное описание каждого из предопределенных системных переменных и локальных переменных можно найти здесь: Система и предопределенные локальные переменные
Константы и функции
Локальные константы и кусочно-линейных функций в постоянном файлов (constfiles, _constfile.txt ~) определены. Структура каждого файла соответствует константе файла конфигурации. Есть только три ключевых слов. Следует отметить: До сих пор, без обязательств, но только числа с плавающей точкой не могут быть определены как константы.
[Уст] определяет новую постоянную и его значение для:
[Уст]
название
стоимость
Пример:
[Уст]
производительность
200
[Newcurve] происходит определение новой (кусочно-линейная) функция:
[Newcurve]
название
[ПНТ] добавляет определенные ранее [newcurve], чтобы новая пара XY. Каждая функция, как правило, иметь по крайней мере две пары. Порядок пар должна быть восходящей в х-направлении!
[ПНТ]
X
год
Пример:
[Newcurve]
Drehzahl_Drehmoment_Kennlinie
[ПНТ]
50
0
[ПНТ]
300
400
[ПНТ]
1000
600
Константы загружаются на (CLkonstantenname) команды в стеке.
Функции доступны через (FLfunktionsname) команды. Значение ранее расположенный на верхней позиции стека всегда передается в качестве параметра х и в результате у значение функции будут храниться на верхней части стека. Является ли X-значение, выходящее за пределы определены [ПНТ] записей вершин, значение Y из ближайших вершин используется всегда. Функция будет увеличиваться по горизонтали до бесконечности перед первой и после последней вершины.
Звук Trigger
Звук триггерами, не следует путать с триггерами упомянутые выше!
Скорее, они дают возможность напрямую воспроизводить звук, который вы хотите. Есть два варианта:
(TLsoundtriggername) является простой триггер звука. Таким образом, выбранный звук воспроизводится (один раз).
(TFsoundtriggername) является звуковой файл триггер с функцией обмена. В этом случае вершины стека строки считывается и используется как имя файла, путь к файлу интерпретируется относительно папки звукового объекта.
Пример:
Предполагая, что звуковой файл "diese.wav" и связан с триггером мой курок, затем играет
(T.L.MeinTrigger)
файл "diese.wav» и от
"Andere.wav" (T.F.MeinTrigger)
файл "andere.wav". В качестве альтернативы (TLsoundtriggername) можно командой (TFsoundtriggername) "пустая строка" в стек (то есть строка: "").
Системная макрокоманда
Современные методы позволяют скрипты следующие опции связи с OMSI:
    Чтение значений системы и встроенных локальных переменных
    Запись значений на этих же
    Полученные от клавиатуры, мыши или системы триггеров
Наконец, есть еще один способ общения с основной программы, так называемые системы макросов, которые иногда называют неточно как "функции обратного вызова".
В некоторых случаях необходимо, чтобы сценарий получает значения из OMSI, которые присутствуют в больших баз данных и, следовательно, не могут быть переданы через предопределенных переменных, например содержание Hofdatei. Теперь вот система макросов вступают в игру.
Эта работа сценария взаимно очень похожи на местные, пользовательские макросы: Calling (MVmacroname) вызывает макрос на системе ("V" первоначально обозначало "автомобиль-Macro", но одинаково хорошо применим в декорациях объекты), в ходе выполнения Значения, полученные из двух стеков и / или записи. Список всех системных макросов можно найти здесь: Система макросов
Условные и петли
Единственный поток управления программой возможна только с если условие в то время.
Если условие
"Это должно быть одним из условий, например:
    (L.L.bla) = 1
    {Если}
'В этом разделе выполняется, когда бла = 1:
        2 3 +
    {Иначе}
'Этот раздел выполняется иначе:
        3 4 +
    {ENDIF}
    (S.L.blub)
{End}
Это первое условие формулируется и затем ключевое слово, если {} следует, должно быть ясно: во-первых, оно должно на вершине стека, значение сохраняется, а затем следует ключевое слово, если {}, которая проверяет эту величину. Здесь, как и && и | | равенство нулю эквивалентно False, то все остальные значения представляют истинный.
Так, если в приведенном выше примере имеет значение 1 бла, реветь установлен в 5, в противном случае значение 7
Вложение, если условие, чтобы служить в качестве замены (несуществующего) "Иначе, если" конструкции:
"Это должно быть одним из условий, например:
    (L.L.bla) = 1
    {Если}
'В этом разделе выполняется, когда бла = 1:
        2 3 +
    {Иначе}
    (L.L.bla) 5 =
    {Если}
'В этом разделе выполняется, когда Foo = 5:
        3 4 +
    {Иначе}
'Этот раздел выполняется иначе:
        13
    {ENDIF}
    {ENDIF}
    (S.L.blub)
{End}
Она должна обратить особое внимание на двойные {ENDIF}! При этом:
    бла = 1 ==> = 5 реветь
    бла = 5 ==> = 7 реветь
    еще ==> = 13 реветь