Приветствую.
Заметил, что наши сценаристы (Михаил (
Mikhail_72RUS) и Алексей (
Aleksei999)) за исключением Виталия (
djus) почему-то не пользуются удобным инструментом под названием
"универсальный скрипт" от Сергея (
sergz692). Как по мне, каждый раз прописывать инструкции в скрипте для нового сценария - это, мягко скажем, гемор. Появляются новые пользователи, желающие освоить создание сценариев. Поэтому решил написать небольшой гайд по использованию слегка доработанного "универсального скрипта" простым языком с примерами.
Выражаю благодарность:
Сергею (
sergz692) за написание универсального скрипта.
Свете за помощь по различным вопросам.
Приступим.
Для начала скачиваем
скрипт и кидаем его в папку сценария: RailWorks\Content\Routes\*уникальный номер маршрута*\Scenarios\*уникальный номер сценария*\
Если будете использовать всплывающие окна с диалогами, то в папке сценария создаём папку [Ru]. Там будут находиться html файлы с диалогами и звуковые файлы в формате wav, если вы планируете их использовать.
Запускаем в редакторе свой сценарий. Жмём на иконку "просмотр расписания" и далее на иконку "скрипт".
В открывшемся окне кликаем по кнопке "Reload". В верхней части должен появиться текст скрипта. Кликаем по кнопке "Compile/Generate MD5" и закрываем окно.
Всё, теперь наш сценарий может принимать и обрабатывать события (команды). В папке сценария добавились два файла. "ScenarioScript.luac" - откомпилированный код и файл контрольной суммы - "ScenarioScript.luac.MD5". Чтобы каждый раз при создании нового сценария не повторять вышеописанные действия, достаточно просто скопировать эти два файла в папку нового сценария. Файл "ScenarioScript.lua" нам больше не нужен, его можно удалить.
Переходим к самому интересному. К событиям (командам).
Привожу копию
поста sergz692 с небольшими дополнениями и изменениями:
Универсальный скрипт может принимать и обрабатывать следующие события:1. События-команды:"lock" - заблокировать управление поездом
"unlock" - разблокировать управление поездом
"stop" - применить аварийное торможение
"halt" - заглушить двигатель локомотива
"cab" - активировать камеру в кабине локомотива
"break" - досрочно завершить сценарий с неудачей
2. События, выводящие текстовые сообщения:"msgFileName=N" - выводит сообщение из файла "msgFileName.html",
в окне размера "s"=(l,r,s), в режиме "g"=(p,l,r,v,c), с таймаутом N, но не менее 5 с
Примеры:
"mlp000" - m (message) текстовое сообщение, l (large) в большом окне, p (pause) в режиме паузы, из файла "mlp000.html"
"mlg001" - текстовое сообщение в большом окне, без паузы, из файла "mlg001.html", с таймаутом 5 с
"mrp002" - m (message) текстовое сообщение, r (regular) в среднем окне, p (pause) в режиме паузы, из файла "mrp002.html"
"msl003=40" - m (message) текстовое сообщение, s (small) в малом окне, l (left) вверху слева, без паузы, из файла "msl003.html", с таймаутом 40 с
"msr004=10" - m (message) текстовое сообщение, s (small) в малом окне, r (right) внизу справа, без паузы, из файла "msr004.html", с таймаутом 10 с
"msv005=15" - текстовое сообщение внизу слева в малом окне, без паузы, из файла "msv005.html", с таймаутом 15 с
"msc006=7" - m (message) текстовое сообщение, s (small) в малом окне, c (centre) по центру, без паузы, из файла "msc006.html", с таймаутом 7 с
3. События, управляющие звуковыми сигналами:"signal*1*1234" - включает звуковой сигнал "1" - тифон, "2" - свисток локомотива "1234 - номер локомотива"
"offsgn*1*123456789" - отключает звуковой сигнал "1" (тифон) локомотива "123456789"
"svist*1234" - включает звуковой сигнал "свисток" на тепловозе 3ТЭ10М/2ТЭ10М номер "1234"
"offst*1234" - выключает звуковой сигнал "свисток" на тепловозе 3ТЭ10М/2ТЭ10М номер "1234"
"snd*message.wav" - воспроизводит звуковой файл message.wav
4. События, управляющие поездом:"engParName=C" - устанавливает управляющее значение C для параметра "ParName"
Примеры:
"engHeadlights=1" - включить головной прожектор
"engReverser=1" - реверсор в положение "вперёд", "-1" соответствует "назад", а для паровоза "%" от -0.75 до 0.75
"engRegulator=0.45" - регулятор в положение "45%", от 0 до 1
"engTrainBrakeControl=0" - тормоза поезда в "0%", от 0 до 1
5. События, управляющие камерой:"camCameraName=T" - активировать камеру "CameraName" на время T, если T не задано или 0,
время шоу определяется настройками камеры
Примеры для некоторых встроенных камер:
"camCouplingCamera" - камера сцепки
"camCabCamera" - камера в кабине, эквивалентно команде "cab"
"camTrackSideCamera" - боковая камера
"camFreeCamera" - свободная камера
"camYardCamera" - видимо то же, что и боковая
"camHeadOutCamera" - выглянуть из кабины сбоку
6. События, управляющие погодой:"wetWeatherEventChain" - запустить погодную цепочку с именем "WeatherEventChain"
Ну и, наверное, самое главное и удобное - это цепочки событий.Универсальный скрипт позволяет обрабатывать несколько событий последовательно, то есть по цепочке.
События в цепочке отделяются друг от друга знаком "+"
Если между знаками "+" находится число, то это задержка в секундах до исполнения следующего события в цепочке
Один знак "+" без указания задержки означает, что следующее событие в цепочке будет обработано через 0.1 с
Давайте рассмотрим пример такой цепочки взятой из сценария © №603 Москва-Москва ©.
lock+camCamera1+30+unlock+mrp000+cab+325+snd*radio.wav+msr000=10+60+wet603+snd*radio.wav+msl000=15Эта цепочка будет обработана универсальным скриптом следующим образом:
1. Событие - "lock" - будет заблокировано управление поездом для просмотра вступительного видеоролика.
2. Задержка 0.1 сек.
3. Событие - "camCamera1" - воспроизведение видеоролика продолжительностью 30 с.
4. Задержка 30 сек. - если не поставить задержку, то видео прервётся с продолжением обработки цепочки.
5. Событие - "unlock" - разблокировать управление поездом.
6. Событие - "mrp000" - вывод на экран текстового сообщения в окне среднего размера в режиме паузы из фала mrp000.html находящегося в папке [Ru].
7. Событие - "cab" - активируется камера в кабине локомотива.
8. Задержка 325 сек.
9. Событие - "snd*radio.wav" - воспроизводится звуковой файл radio.wav находящийся в папке [Ru].
10. Задержка 0.1 с
11. Событие - "msr000=10" - вывод на экран текстового сообщения в окне малого размера внизу справа из фала msr000.html находящегося в папке [Ru]. По истечении 10 сек. окно закроется.
12. Задержка 60 сек.
13. Событие - "wet603" - запуск погодной цепочки с именем "603". (
динамическая погода)
14. Задержка 0.1 сек.
15. Событие - "snd*radio.wav" - воспроизводится звуковой файл radio.wav находящийся в папке [Ru].
16. Задержка 0.1 сек.
17. Событие - "msl000=15" - вывод на экран текстового сообщения в окне малого размера вверху слева из фала msl000.html находящегося в папке [Ru]. По истечении 15 сек. окно закроется.
Как отрабатывает цепочка, можно посмотреть в видео под спойлером (первые 7 минут).
Так как эта цепочка обрабатывается в самом начале сценария, помещаем её в поле "триггер события" инструкции "Триггер".
Далее можно вставлять события в поле "триггер события - успех" различных инструкций.
Замечу.
Так можно делать только с расписанием игрока. Для
бота помещаем событие
только в инструкцию
"Триггер".
Давайте рассмотрим ещё один пример.
Допустим наш сценарий стартует в 12:00. Бот, которому мы хотим дать команду подать звуковой сигнал (тифон) перед отправлением, стартует в 12:30:10. Выбираем инструкцию "Триггер" и вписываем в поле "триггер события" следующую цепочку: +1805+signal*1*номер локомотива+1.5+offsgn*1*номер локомотива.
1. Задержка 1805 сек. - т.к. это первое событие для данного локомотива, то время задержки ставим от начала сценария (30 мин. 5 сек.)
2. Событие - "signal*1*номер локомотива" - подача звукового сигнала тифон, если поставить 2 - свисток (кроме локомотивов 3ТЭ10М/2ТЭ10М).
3. Задержка 1.5 сек. - продолжительность звукового сигнала.
4. Событие - "offsgn*1*номер локомотива" - выключение звукового сигнала.
Для подачи звукового сигнала свисток на локомотивах 3ТЭ10М/2ТЭ10М от DSB нужно применять другую цепочку:
svist*номер локомотива+1.5+offst*номер локомотива.
Как узнать номер локомотива? Двойной клик на локомотиве. В появившемся окне справа копируем номер ПС и вставляем в цепочку вместо текста "номер локомотива".
Заметьте, мы не написали ни одной строки скрипта. Сценаристу нужно только расставить события в редакторе сценария. Удобно?
Напоследок приведу цепочку для подачи звукового сигнала свист+тифон для ЭР1-159:
signal*1*номер ПС+0.3+offsgn*1*номер ПС+signal*1*номер ПС+1+offsgn*1*номер ПСНу как-то так. Может чего пропустил. Извиняйте, не со зла. Надеюсь кому-нибудь может пригодиться.