Вы просматриваете: Скриптовый язык Omsi

Введение

 

Для расширения функциональности автобусов и объектов карты а так же для написания новых возможностей в симулятор Omsi встроен специальный скриптовый язык. 

Поддерживается работа как числами с плавающей запятой так и со строковыми переменными, позволяя выводить тот или иной текст на специальное текстовое поле.

 

Основные понятия

 

Синтаксис языка представляет собой совокупность описаний для каждой переменной или макроса:

 

(L.L.peremennaya) - Load Local, загрузить числовые данные из peremennaya.

(S.L.peremennaya) - Save Local, сохранить числовые данные в peremennaya. 

(L.S.peremennaya) - Load System, загрузить системную peremennaya.

(L.$.peremennaya) - Load String загрузить строковые данные из peremennaya.

(S.$.peremennaya) - Save String, сохранить строковые данные в peremennaya.

(С.L.postoyannaya) - Вызвать значение постоянной.

(F.L.krivaya) - Вызвать кривую.

(T.L.zvuk) - Вызвать воспоизведение звука (отсылка к описанию в sound файле).

 

Так же используются математические символы, такие как: +, *, -, /. 

А так же: ! - не, && - и, || - или (в основном применяются в условиях). > - больше, < - меньше, >= - больше или равно, <= - меньше либо равно.

Строковые и числовые данные можно сохранять в стеки. Всего стеков 7, описываются как:

s0 -s7

 

и загружать данные из них посредством

l0 -l7

Код можно писать как в одной строчке так и в столбик (что гораздо удобнее)

 

Пример кода:

(L.L.per_1) (L.L.per_2) * (L.L.per_3) / (L.L.per_4) + (S.L.per_5)

или

(L.L.per_1)

(L.L.per_2) *

(L.L.per_3) /

(L.L.per_4) +

(S.L.per_5)

 

Загрузили переменную per_1 и умножили на значение per_2, затем разделили на per_3, прибавили к этому per_4 и сохранили результат в per_5.

 

Стеки очень похожи на работу с переменными:

(L.L.per_1) (L.L.per_2) * s0

(L.L.per_3) (L.L.per_4) + s1

s0 s1 / s2

 

Загрузили переменную per_1 и умножили на значение из per_2, сохранили результат в стеке 0.

Загрузили значение из per_3, прибавили per_4, сохранили в стеке 1.

Загрузили значение стека 0, разделили на значение стека 1 и сохранили результат в стеке 2.

 

Условия {if}

 

Условия помогают выполнить тот или иной код в зависимости от того, какое условие было задано. 

Основные теги это {if} {else} {endif}

 

Рассмотрим простой пример условия:

(L.L.per_1) 1 =

          {if}

                    3 (S.L.per_2)

{endif}

Если значение переменной per_1 равно 1, то сохраняем значение 3 в переменной per_2.

 

(L.L.per_2) 0 =

          {if}

                    1 (S.L.per_3)

          {else}

                    0 (S.L.per_3)

{endif}

Если значение переменной per_2 равно ноль, то сохраняем в per_3 значение 1, иначе сохраняем в per_3 значение 0. 

 

Поддерживаются условия с вложенностью:

 

(L.L.per_2) 0 =

          {if}

                    (L.L.per_3) 1 =

                                       {if}

                             3  (S.L.per_4)

{endif}

{endif}

 

Второе условие per_3 выполнится когда первое уловие per_2 будет равно ноль. 

 

Основные теги

 

Ниже я рассмотрю основные теги, в которые помещается код:

                                                                      

{init}

 

Тег инициализации. Пишется самым первым в начале файла, либо в с самом первом файле автобуса (напр. MAN_SD80_main.osc). Обычно в него помещаются функции, необходимые для первичного занесения в них данных. В {init} так же может ссылаться на макросы инициализации. 

 

Пример:

 

{init}

          1 (S.L.peremennaya_1)

          2 (S.L.peremennaya_2)

          (L.L.peremennaya_1)  (L.L.peremennaya_2) + (L.L.peremennaya_3)

          (M.L.init_2)

{end}

где задаем первичное значение переменных peremennaya_1, peremennaya_2 и далее складываем их, где заносим значение в переменную peremennaya_3, затем вызываем инициализацию других переменных в init_2.

 

{frame}

 

Код, который должен отслеживать изменения в переменных (функциях) пишется именно тут. Он будет непрерывно находиться в памяти и выполнять условия, заносить данные. В данный тег обычно заносятся условия. Так же в этом теге может быть отсылка на сторонние подпрограммы - макросы.

 

Пример:

 

{frame}

(L.L.peremennaya_1) = 0

          {if}

                    2 (S.L.peremennaya_2)

          {else}

                    (L.L.peremennaya_1)  (L.L.peremennaya_2) + (L.L.peremennaya_3)

          {endif}

          (M.L.frame_test)

{end}

 

Объявляем фрейм и выполняем в нем условие, далее вызываем дополнительный фрейм(отсылка к макросу) frame_test.

 

 

OmsiMods.ru - Development Zone, посвященный разработкам для автобусного симулятора OMSI Der Omnibussimulator.
Интересные статьи, разработки и советы.

Помните, все изменения вы делаете на свой страх и риск, я не несу ответственности за порчу файлов или иные повреждения, связанные с материалами, предоставленными на сайте.

При копировании статей указывайте ссылку!
Меню сайта
Omsi Der Omnibussimulator
Скриптинг Omsi
Мои разработки
Релизные версии Omsi
Omsi 1:
 Omsi 1.00
 Omsi 1.01
 Omsi 1.04
 Omsi 1.05
 Omsi 1.06

Omsi 2:
 Omsi 2.0.0.0 (private beta)
 Omsi 2.0.4.0
 Omsi 2.0.6.0
 Omsi 2.0.8.0
 Omsi 2.0.14.0
 Omsi 2.0.24.0
 Omsi 2.1.4.0
 Omsi 2.1.12.0
 Omsi 2.1.993.0
 Omsi 2.2.15.0
 Omsi 2.2.17.0
 Omsi 2.2.20.0
 Omsi 2.2.21.0
 Omsi 2.2.27.0
Друзья сайта
Это интересно