Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Скриптование сценариев

Обсуждение маршрутов, объектов, сценариев

Скриптование сценариев

Сообщение A1iv » 31.10.2015, 23:30

Начну печатать справочник по функционалу. Версия 0.1:

СПРАВОЧНИК:

Способы показа текстовых сообщений на экране
ТЕКСТОВЫЕ СООБЩЕНИЯ НА ЭКРАНЕ

Сообщения на экране нужны, в основном, для показа задания и др. информации машинисту, а также чтобы имитировать диалоги машиниста с кем-либо. Но, теоретически, могут использоваться для показа вычисленной информации вроде расстояний, времени, скоростей. В Railworks 2016 встречается 3 способа их показа:

1) SysCall ( "ScenarioManager:ShowMessage", "privet" );

Показ сообщения на экране (без каких-либо настроек). Не понимает русский, пишите транслитом.

2) SysCall ( "ScenarioManager:ShowAlertMessageExt", "9aa03d61-fd50-4cf5-9811-af7985e9448c", "Privet", 5, FALSE );

Показ сообщения в маленьком окне справа-вверху экрана. Его можно сделать "тревожным", добавив звук сирены и т.п. отдельным вызовом. Не понимает русские буквы, приходится писать транслитом. Параметры:
"9aa03d61-fd50-4cf5-9811-af7985e9448c" - ID этого сценария, отображаемое в названии папки этого сценария, например.
"Privet" - сообщение.
5 - время показа сообщения в секундах.
При FALSE время учитывается, окно само закроется по истечении времени.
При TRUE сообщение висит пока не закроешь окно, время игнорируется.

3) SysCall ( "ScenarioManager:ShowInfoMessageExt", "af7a2b92-ad57-4bdc-88be-eef5f7459b6a", "zadanie.html", 15, MSG_RIGHT + MSG_TOP, MSG_SMALL, FALSE );

Вызов для показа расширенного сообщения на экране. Расширенное оно потому, что записано в HTML файле, что позволяет изменять кодировку HTML файла (это позволяет показывать русские буквы на экране), создавать html-таблицы для выравнивания текста, менять шрифты, размеры шрифтов, добавлять картинки. Возможностей для редактирования HTML-файла немного, но они есть. Подробно об этом см. в статьях и мануалах и из готовых html-файлов, созданных другими. Например: Диспетчер

Параметры:

"af7a2b92-ad57-4bdc-88be-eef5f7459b6a" - ID этого сценария, отраженное в папке названия сценария, в частности, либо в xml-файле сценария. Подставить название папки сценария сюда.
"zadanie.html" - HTML файл с текстом диалога и картинкой(ами). Должен лежать в папке Ru вашего сценария, как и любой другой доп. медиа контент для сценария типа - звуки, картинки, видео. Картинка может лежать и в отд. папке внутри папки Ru.
15 - время для отображения диалога на экране в секундах, 0 - для бесконечного.
MSG_RIGHT + MSG_TOP - расположение сообщения на экране. Это комбинация справа-вверху. Другие доступные размеры можно посмотреть в учебном скрипте от RSC или в след. абзаце под названием "общие параметры для сообщений".
MSG_SMALL - размер сообщения на экране - небольшое. Другие доступные размеры можно посмотреть в списке.
FALSE - не ставить игру на паузу, TRUE - ставить на паузу при появлении сообщения.


ОБЩИЕ ПАРАМЕТРЫ ДЛЯ СООБЩЕНИЙ (СПИСОК):

-- Типы сообщений на экране
MT_INFO = 0 -- большое информационное
MT_ALERT = 1 -- краткое в правом верхнем углу

-- расположение сообщения на экране (можно комбинировать - написать "1 + 8" или словами-командами)
MSG_TOP = 1 -- вверху экрана
MSG_VCENTRE = 2 -- по центру
MSG_BOTTOM = 4 -- внизу
MSG_LEFT = 8 -- слева
MSG_CENTRE = 16 -- по центру
MSG_RIGHT = 32 -- справа

-- размер окна сообщения на экране (маленькое окно, среднее или большое)

В маленьком окне появится ползунок, если текста много.

MSG_SMALL = 0 (маленькое окно)
MSG_REG = 1 (среднее)
MSG_LRG = 2 (большое)

-- параметры картинок для html-сообщений

Размер ставьте в пределах 150*150 где-то, не более. Читает jpg, остальные форматы - не пробовал.

Переключение камер
ПЕРЕКЛЮЧЕНИЕ КАМЕР

В симуляторе есть множетсво камер, все их можно выбирать и переключаться между ними в любой момент. Камеры, которые часто используются в сценариях:

кинематографическая -- делаем вставки с полетом камеры, взгляд камеры на любой объект, вагон, локомотив.
камеры в кабине и вагоне -- переключение между кабинами локомотива, перемещение в вагон поезда
свободная камера -- для перемещения в любую точку на маршруте

4) SysCall ( "CameraManager:ActivateCamera", "Cam1", 0 );
Вызывает действие кинематограф. камеры Cam1 или др., созданной вами в редакторе сценария. Камера может быть движущаяся или неподвижная в зависимости от количества точек ее перестановки. Неподвижную можно использовать для вида типа панорама, общий обзор, либо для взгляда на конкретный объект на маршруте - все это делается в редакторе сценариев обычно.

Параметры:
"Cam1" - название кинематограф. камеры, что заданa вами в редакторе сценария.
0 - во время показа двигать мышкой нельзя, 1 - можно.
Блокируется только движение мышки, но не выбор локомотива и горячие клавиши, поэтому во время действия кинематограф. камер обычно всегда дополнительно ставится полная блокировка управления вызовом LockControl.

5) SysCall ( "CameraManager:ActivateCamera", "CabCamera", 30 );

Выбор любой камеры

Параметры:
"CabCamera" - тип камеры.
30 - количество секунд, отведенное на показ камеры. Если хотите остаться в таком виде, внутри кабины например, то введите отриц. значение навроде -1.

Камеры:
CouplingCamera - камера с видом на сцепку.
CabCamera - камера в кабине лока.
CarriageCamera - камера в салоне вагона. По умолчанию, это последний вагон пасс. состава. (Если Триггер-инструкция, она же ссылка на скрипт ваш или на встроенный,- в расписании поезда стоит в самом начале и без отсрочки по времени, то вы сразу находитесь в вагоне при старте сценария.)
FreeCamera - свободная камера перемещения по сценарию, внешняя. Используется совместно со спец. вызовом "CameraManager:JumpTo" для перемещения в любую точку на карте маршрута (см. в Разделе: Операции с камерами (помимо переключения). Координаты на маршруте смотреть в редакторе маршрута.
TrackSideCamera - камера с выборочным автоматически видом по ходу следования поезда.
YardCamera - камера вида высоко сверху типа "птичий полет".
HeadOutCamera (HeadOutCamera1 и 2) - камера сбоку локомотива, внешняя. Вызывается по сочетанию shift+2.
ExternalCamera - камера близкого действия с видом на локомотив.

6) SysCall ( "CameraManager:LookAt", "M62" );

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

Операции с камерами (помимо переключения):
ОПЕРАЦИИ С КАМЕРАМИ (помимо переключения)

7) SysCall ( "CameraManager:ActivateCamera", "FreeCamera", 0 );
SysCall ( "CameraManager:JumpTo", -78.38396, 40.53150, 10.00 );
Переносит камеру (вид) в указанную точку в параметрах Широта, Долгота, Высота над уровнем моря. Здесь нужны сразу два сист. вызова, чтобы это сработало. Координаты на маршруте смотреть в редакторе маршрута.

8) SysCall ("ScenarioManager:RestoreCameraToDefault", 3.0);
В кабине плавно возвращает вид камеры всегда на прежний (прямо перед собою). В это время делать ничего нельзя, управление заблокировано.
Используется для возврата камеры в нормальное положение после её принудительного взгляда на какой-нибудь орган управления локомотивом.
Аргументы:
3.0 - количество секунд на возврат камеры.

9) SysCall("ScenarioManager:LookAtControl", "Cablight1", 3.0, 4.0, 0.2);
Взгляд на орган управления локомотивом, в данном случае тумблер вкл. света в кабине BR 232. Возможен взгляд на не органы управления (двери, окна..), если они прописаны в шаблоне кабины, как "относящиеся к управлению".

Параметры:

3.0 - секунд на поворот камеры. -1 для мгновенного.
4.0 - тип камеры и степень ее свободы (кабинная). 5 - вагонная была бы. Лучше не трогать, не влияет ни на что.
0.2 - увеличение на 20%. 0 - без увеличения.

Названия основных органов управления локомотивом можно найти многими способами:

1 - в общем списке HUD-элементов - такие как Regulator, Reversor, Horn, Headlights и т.д. - всегда так называются у всех локомотивов, так как пишутся по шаблону.
2 - зависнув мышкой на элементе управления и прочитав название (часто оно совпадает с реальным названием)
3 - самый верный способ - посмотреть Шаблоны этого локомотива, где можно найти такие названия, как EngineBrakeControl, EngineStart, VirtualDynamicBrake, SifaOnOff и т.п. - названия всех органов управления локомотивом.
Для этого надо найти папку и файл с шаблоном управления локомотивом. Для BR232 это папка InputMappers, в ней файл BR232_Expert.bin - все органы управления локомотивом там прописаны.
(А чтобы открыть запакованный в BIN файл шаблона, нужно сделать ярлык на рабочий стол, ссылающийся на утилиту Railworks-а Serz.exe. Теперь положить Bin файл на рабочий стол и накинуть на ярлык serz.exe. Утилита выдаст удобочитаемый xml-файл шаблона. Его даже можно изменять и обратно конвертировать тем же способом в Bin - так изменяют положение камер локомотива и не только.)
4 - тоже хороший способ. В параметрах запуска симулятора в steam-клиенте прописать -ShowControlStateDialog . Теперь запустить симулятор в режиме окна, а не на весь экран. При посадке в любой локомотив в сценарии справа высветится окно с указанием названий органов управления локомотивом (и не только) и их текущими величинами (параметрами, аргументами).

Аудио/Видео/Анимация
АУДИО/ВИДЕО/АНИМАЦИЯ

10-11-12)
SysCall ( "ScenarioManager:PlayDialogueSound","DJSmash.wav");
SysCall ("ScenarioManager:StopDialogueSound","SunsPCM8.wav");
music = SysCall ("ScenarioManager:IsDialogueSoundPlaying","SunsPCM8.wav")

Вызовы функций аудиоплеера Railworks и служат для проигрывания звуков:

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

1 случай - стереофайл. Подойдет для любого звукового сообщения, музыки, озвучивания. То есть: Если проиграть файл в стерео, то он будет звучать как фоновая музыка, всюду.
Требования: положить звуковой файл формата wav или dav стерео в папку Ru вашего сценария. В системном вызове указать название файла и его формат.
Минусы: Часто звук слишком громкий, приходится регулировать громкость wav файла вручную. Звук фоновый, играет плеер.

2 случай - монофайл. Создание массива из звуков на всем маршруте с расстоянием 1*1 км от звука к звуку примерно.
Требования: положить звуковой файл формата wav или dav моно в папку Ru вашего сценария. В системном вызове указывается название файла и его формат.
Минусы: Придется регулировать громкость файла. Аргументы неизвестны. Можно было бы поставить звук в нужной точки без создания объекта "звук".

3 вызов: Выключение звука (и пауза) (испробовано на продолжительной моно и стерео-дорожке):
SysCall ("ScenarioManager:StopDialogueSound","SunsPCM8.wav");

Корректно работает с проигрыванием от 15 секунд длины аудио и выше. При меньшем времени от начала проигрывания до его прекращения, может удлинить звучание до 15 секунд, затем только произойдет пауза/стоп.

4 вызов: Проверка играет ли такой-то звук/музыка:
music = SysCall ("ScenarioManager:IsDialogueSoundPlaying","SunsPCM8.wav")

При использовании вернет значение:
1 - играет (true), 0 - не играет (false)

13) SysCall ( "Object1:PlayAnim", "Anim1", 0, 1.0 );

Якобы для проигрывания анимации анимационного объекта один раз. В сценарных скриптах не встречалось.

Параметры:
Anim1 - название анимации объекта

14) SysCall ( "ScenarioManager:PlayVideoMessage","video.ogv", 2, 0, 15, 0);

Вызов видеоплеера Railworks. Предназначен для проигрывания видео в сценариях.

Требования:
Формат видео - OGV (OGG video), в который можно сконвертировать в программе any video converter. Файл видео нужно положить в папку Ru вашего сценария. Битрейт видео и аудио читается любой.

Параметры:
Первое значение - размер видео. 0 - на весь экран. 1 - средний экран, 2 - маленький экран слева-вверху у угла, 3 - четверть экрана, начинающаяся от левого верхнего угла
Второе значение - ставить ли игру на паузу во время видео. 0 - не ставить, 1 - ставить.
Третье значение - количество кнопок и элементов видеоплеера на экране:
1-проиграть, 2-пауза, 3 - проиграть и пауза, 4 - стоп, 5 - проиграть и стоп, 6 - пауза и стоп, 7 - проиграть, пауза и стоп, 8 - показ шкалы длины видео, 15 - шкала длины видео и 3 кнопки видеоплеера на экране.
Четвертое значение - ?

Эти же параметры в буквенном варианте:

Экран:
FULLSCREEN = 0
FRONT_AND_CENTERED = 1
VIDEO_CALL = 2
Функции плеера:
PLAY = 1
PAUSE = 2
STOP = 4
SEEK = 8
Пауза:
PAUSE_GAME = 1
DONT_PAUSE_GAME = 0

Примеры буквенного написания параметров в вызове:

SysCall("ScenarioManager:PlayVideoMessage", "файл.ogv", VIDEO_CALL, DONT_PAUSE_GAME, 0, 0);
SysCall("ScenarioManager:PlayVideoMessage", "файл.ogv", FULLSCREEN, PAUSE_GAME, (PLAY + PAUSE + SEEK), 0);


Продолжение следует..
Последний раз редактировалось A1iv 09.01.2016, 04:29, всего редактировалось 6 раз(а).
Save Donbass people from Kiev agression. Ушел на TSW.
Аватара пользователя
A1iv
 
Сообщения: 400
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Благодарил (а): 525 раз.
Поблагодарили: 114 раз.
Блог: Просмотр блога (10)
Играю в: RailWorks
Имя: Алексей

Re: Скриптование сценариев

Сообщение hellishfire » 31.10.2015, 23:55

Отличная тема!

Очень интересует реализация свистков у ботов. Сам хотел это раскопать, но руки так и не дошли.
hellishfire
 
Сообщения: 135
Зарегистрирован: 14.12.2012, 20:50
Откуда: Москва
Благодарил (а): 197 раз.
Поблагодарили: 114 раз.
Играю в: RailWorks
Роль: Разработчик
Имя: Игорь

Re: Скриптование сценариев

Сообщение Skif » 01.11.2015, 12:36

Присоединяюсь касаемо свистков. Надо добавить этот код в свои машины.
Skif
 
Сообщения: 2933
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 280 раз.
Поблагодарили: 840 раз.
Блог: Просмотр блога (2)
Имя: Дмитрий

Re: Скриптование сценариев

Сообщение BooYa » 01.11.2015, 18:16

Skif, а причем тут твои машины? Скрипт в данном случае для сценария.
Изображение
Аватара пользователя
BooYa
 
Сообщения: 2185
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 624 раз.
Поблагодарили: 1725 раз.
Играю в: RailWorks
Роль: Разработчик
Имя: Андрей

Re: Скриптование сценариев

Сообщение Skif » 01.11.2015, 19:44

Если не ошибаюсь, нужны и соответствующие фрагменты кода в скрипты локомотивов - если у него весь трафик, конечно, не сигналит одним и тем же звуком, а не родными. Я могу написать паттерны кода, воспроизводящие у локомотива любой из общепринятых звуковых сигналов. Это достаточно просто - установлением контрола, ответственного за звук сигнала, во включенное состояние на заданное число секунд и пауза между такими вызовами.
Skif
 
Сообщения: 2933
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 280 раз.
Поблагодарили: 840 раз.
Блог: Просмотр блога (2)
Имя: Дмитрий

Re: Скриптование сценариев

Сообщение BooYa » 01.11.2015, 21:30

Skif, как я понял, скрипт в сценарии просто "нажимает" кнопку гудка. У всех тепловозов есть гудок, скрипт просто инициирует его запуск. Пусть автор прокомментирует эту ситуацию, стало интересно
Изображение
Аватара пользователя
BooYa
 
Сообщения: 2185
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 624 раз.
Поблагодарили: 1725 раз.
Играю в: RailWorks
Роль: Разработчик
Имя: Андрей

Re: Скриптование сценариев

Сообщение A1iv » 02.11.2015, 21:59

Просто нажимается гудок в кабине через SetControlvalue и т.п. А может еще есть способ, но не понятно зачем нагнетать ситуацию.
Save Donbass people from Kiev agression. Ушел на TSW.
Аватара пользователя
A1iv
 
Сообщения: 400
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Благодарил (а): 525 раз.
Поблагодарили: 114 раз.
Блог: Просмотр блога (10)
Играю в: RailWorks
Имя: Алексей

Re: Скриптование сценариев

Сообщение A1iv » 09.01.2016, 04:37

Вот скрипт гудка (для наших сценаристов). Ну и новость, что справочник начал печатать по функционалу в сценариях (см. первое сообщение).

Код: Выделить всё
СКРИПТ ПОДАЧИ AI-ботом или игроком тифона 2 секунды

-- by A1iv, Railunion, 2015
-- скрипт подачи тифона для поезда игрока, либо бота
-- название локомотива "M62" присвоено вручную в редакторе сценариев и вызов обращен к нему
-- боты при подаче ими тифона не конфликтуют


function OnEvent ( event )

  if event == "introM62" then    -- подача тифона и вызов отложенного события OffTifon
    SysCall ("M62:SetControlValue", "Horn", 0, 1);
    SysCall ("ScenarioManager:TriggerDeferredEvent", "OffTifon", 2 );
    return TRUE;
  end
  if event == "OffTifon" then     -- выключение тифона спустя 2 сек
    SysCall ("M62:SetControlValue", "Horn", 0, 0);
    return TRUE;
  end

  return FALSE;
end



-- ВАРИАНТ 2 (проще)

function OnTifon()
    SysCall ("BR232:SetControlValue", "Horn", 0, 1);
    SysCall ("ScenarioManager:TriggerDeferredEvent", "OffTifon", 2 );
end
function OffTifon()
   SysCall ("BR232:SetControlValue", "Horn", 0, 0);
end

function OnEvent(event)

  if event == "test" then
    OnTifon()
  end
  if event == "OffTifon" then
    OffTifon()
  end
end

Save Donbass people from Kiev agression. Ушел на TSW.
Аватара пользователя
A1iv
 
Сообщения: 400
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Благодарил (а): 525 раз.
Поблагодарили: 114 раз.
Блог: Просмотр блога (10)
Играю в: RailWorks
Имя: Алексей


Вернуться в [RW] Маршруты и сценарии

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3