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

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

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

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

Сообщение Konst-81 » 07.03.2018, 11:46

Konst-81 писал(а):Всем хорош ТЭМ-2, но... Активация тифона через SysCall ("имя ТЭМ-2:SetControlValue", "Horn", 0, 1); выполняется, а свисток через SysCall ("имя ТЭМ-2:SetControlValue", "Bell", 0, 1); нет :( Прошу разработчиков ПС и просто знающих людей помочь найти решение. Думаю что в скрипте поезда используется другая переменная ( например - svistok )

Изучая тему http://railworks2.ru/viewtopic.php?f=37 ... &start=420 благодаря скрипту от Светы, найден ответ на собственный вопрос ( в котором догадка оказалась верна :D ). Активация свистка в ТЭМ-2 выполняется через переменную Whistle - с англ. "свисток".
SysCall ("имя ТЭМ-2:SetControlValue", "Whistle", 0, 1);
Надеюсь, кому-то будет полезно...
Konst-81
 
Сообщения: 8
Зарегистрирован: 25.02.2018, 19:27
Откуда: Тирасполь, Приднестровье
Благодарил (а): 20 раз.
Поблагодарили: 1 раз.
Играю в: Train Simulator Classic
Имя: Константин

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

Сообщение A1iv » 07.03.2018, 20:25

Можно открыть проект локомотива и посмотреть как там что назвали из органов управления, а потом задействовать это скриптом.
Аватара пользователя
A1iv
 
Сообщения: 442
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Благодарил (а): 506 раз.
Поблагодарили: 118 раз.
Блог: Просмотр блога (10)
Имя: Алексей

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

Сообщение Skif » 07.03.2018, 20:48

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

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

Сообщение Konst-81 » 07.03.2018, 23:53

Уважаемый Алексей, прошу более подробно описать процесс опознавания органов управления. Имя файла, расширение, чем открыть, где и что искать? Вопрос с активацией звуковых сигналов ЧС-7 пока не решен, поэтому попробую найти. Простите за возможно глупые вопросы, но познания близки к нулевому уровню...
Konst-81
 
Сообщения: 8
Зарегистрирован: 25.02.2018, 19:27
Откуда: Тирасполь, Приднестровье
Благодарил (а): 20 раз.
Поблагодарили: 1 раз.
Играю в: Train Simulator Classic
Имя: Константин

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

Сообщение hellishfire » 09.03.2018, 18:57

Konst-81
Надо открывать .bin файл локомотива и искать в нём контрол, отвечающий за сигнал, если он есть. В траффиковом ЧС7, ЧС2К и ВЛ11 звуков вообще нет, к сожалению.

Открывать .bin можно либо RWTools(надо отдельно скачивать бесплатную программу), либо прогонять через serz.exe, который есть в папке Railworks - он из bin сделает xml и наоборот.
Аватара пользователя
hellishfire
 
Сообщения: 674
Зарегистрирован: 14.12.2012, 20:50
Откуда: Москва
Благодарил (а): 927 раз.
Поблагодарили: 998 раз.
Блог: Просмотр блога (4)
Роль: Разработчик
Имя: Игорь

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

Сообщение Konst-81 » 10.03.2018, 12:52

hellishfire
Есть ЧС7-080 и ЧС7-088 с чешской кабиной https://www.youtube.com/watch?v=zWzpA6vWhog и реализованной звуковой сигнализацией. Благодаря Вам определил: для подачи свистка прописываем "Pistala", а для тифона - "Houkacka" . Всем огромное спасибо!
Konst-81
 
Сообщения: 8
Зарегистрирован: 25.02.2018, 19:27
Откуда: Тирасполь, Приднестровье
Благодарил (а): 20 раз.
Поблагодарили: 1 раз.
Играю в: Train Simulator Classic
Имя: Константин

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

Сообщение A1iv » 11.03.2018, 10:00

У меня другой вопрос возник в свое время: как определить расстояние до встречного поезда, до светофора и вообще до чего-либо?
А от konst-81 ждем сценарий раз все получилось.
Аватара пользователя
A1iv
 
Сообщения: 442
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Благодарил (а): 506 раз.
Поблагодарили: 118 раз.
Блог: Просмотр блога (10)
Имя: Алексей

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

Сообщение Konst-81 » 23.03.2018, 13:30

Предлагаю Вам свой вариант функции подачи звуковых сигналов, исполняемых через триггер инструкции в расписании сценария, с учётом имеющихся на данный момент названий контролов и их значений.

function OnEvent( event )
if string.sub (event,1,6) == "signal" then
SignMode = tonumber(string.sub(event,7,7));
DurSign = tonumber(string.sub(event,8,9)) / 10;
NumberRV = string.sub (event,10,13);
Mode = {{"Horn", "Houkacka"},{"Whistle", "Pistala" ,"Bell"}};
if SysCall(NumberRV..":ControlExists", Mode[SignMode][1], 0) == 1 then
VarMode = 1;
elseif SysCall(NumberRV..":ControlExists", Mode[SignMode][2], 0) == 1 then
VarMode = 2;
elseif SysCall(NumberRV..":ControlExists", Mode[SignMode][3], 0) == 1 then
VarMode = 3;
else VarMode = 0;
end
if VarMode ~= 0 then
SysCall (NumberRV..":SetControlValue", Mode[SignMode][VarMode], 0, 1);
SysCall ("ScenarioManager:TriggerDeferredEvent", "OffSignal", DurSign );
end
end
if event == "OffSignal" then
SysCall (NumberRV..":SetControlValue", Mode[SignMode][VarMode], 0, 0);
end
end

Активация функции представляется выражением вида:
signalxyyzzzz - где:
signal - проверяемое кодовое слово активации функции;
х - принимает значения: 1 - для тифона, 2 - для свистка;
yy - величина продолжительности звукового сигнала/10;
zzzz - номер локомотива, присвоенный в ниспадающем меню с правой стороны экрана, вызванном двойным щелчком левой кнопки мыши по нему.
Пример: signal1203248 - активация тифона (1) на 2 секунды (20) локомотивом с номером 3248;
signal2054301 - активация свистка (2) на 0,5 секунды (05) локомотивом с номером 4301.
К сожалению, пока что не найдено решение для возможности активации определенного количества звуковых сигналов, поэтому данный вопрос решается последовательным указанием соответствующим количеством триггеров инструкций в расписании сценария. Использование данной функции накладывает ограничение на одновременную подачу сигнала одним ботом, которое решается копированием тела функции с заменой имен переменных (достаточно изменить регистр в названии переменной, к примеру, signal заменить на Signal, и т.д.). Полагаю, этого будет достаточно, если, конечно, Вы не собрались создать "Локомотивный хор" :D
Из недостатков, замеченных мной, могу отметить, что при присвоении номера локомотивам ТЭМ-2 пропадают надписи номера локомотива на боковых поверхностях кабины :dontknow:
За помощь в освоении LUA и "работе над ошибками" огромную благодарность выражаю Свете!
Konst-81
 
Сообщения: 8
Зарегистрирован: 25.02.2018, 19:27
Откуда: Тирасполь, Приднестровье
Благодарил (а): 20 раз.
Поблагодарили: 1 раз.
Играю в: Train Simulator Classic
Имя: Константин

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

Сообщение Skif » 23.03.2018, 15:02

Проблема выдачи "кодовых" сигналов локомотивом решается созданием звуковых oneshot-ов в его конфиге (только в конфиге бота-траффика, если таковой имеется), и активацией соответствующих контролов. Записать нужные звуки - раз плюнуть из стандартных для локомотива. Можете насвистеть самостоятельно в игре и сграбить, можете смонтировать в аудиоредакторе.

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

001 - один короткий
002 - два коротких
003 - три коротких
004 - один длинный

и т.д.

Можно выдать эти сигналы и скриптом (мой ТУ7А точно выдаст - у него паттерны для свистка и тифона очень короткие и позволяют "продудеть" любой сигнал) , но это надо заморочиться и написать метод, который при вызове отыграет нужный сигнал. Прогресс метода можно хранить в контроле или переменной. Написать методы под каждый сигнал - и дудеть не надудеться.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Имя: Дмитрий

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

Сообщение Света » 23.03.2018, 15:58

Skif, это всё верно, но есть одно "но" - все эти примочки может сделать только тот, кто разрабатывает локомотив. А Konst-81 ищет универсальный метод, как заставить исполнить художественный свист любой локомотив, независимо от того, есть в нем шаблоны сигналов или нет.
Понятно, что намного проще добавить несколько oneshot-ов. Но, допустим, Konst-81 будет писать сценарий, в котором надо будет, чтобы какой-то из уже опубликованных локомотивов подал серию "003 - три коротких". Вот заходим мы в форум, видим пост "господа разработчики, пожалуйста, добавьте в локомотивы А, В и С несколько oneshot-ов, список прилагается". Реакцию пользователей описать?
Ну и ещё один момент. Лично я точно не буду добавлять такие oneshot-ы. Из-за экономии "веса" модели, желания оптимизации и отсутствия единого стандарта. По поводу того, чтобы добавить обработчик в скрипте (с активацией по унифицированному контролу) - можно поговорить. Кто возьмется разработать стандарт, чтобы потом комплектовать все локомотивы таким обработчиком? Я скрипт напишу, не вопрос.
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

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

Сообщение Skif » 23.03.2018, 17:06

Чтобы разрабатывать стандарты, нужна контент-студия модмейкеров, а не форум гениев-одиночек с мотором.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Имя: Дмитрий

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

Сообщение Света » 23.03.2018, 17:24

Да ладно :D
Неужели для того, чтобы написать пост "предлагаю каждый локомотив укомплектовать контролом "SuperTifon" со значениями 0-9 и вот этим куском скрипта, это нужно для того-то и того-то" нужна контент-студия модмейкеров?
Это во-первых.
А во-вторых - если нужна контент-студия модмейкеров, то что мешает этим заморочиться и создать такую студию? Почему чехи, итальянцы, немцы, американцы, британцы, китайцы могут это сделать и только мы какие-то особенные? Можно, конечно ждать доброго дядю, который придет под рождество и напишет здесь о том, что вот вам, ребята, контент-студия модмейкеров, за то, что так красиво и терпеливо её дожидались. Берите и пользуйтесь :slyn:
А можно попытаться решить вопрос конструктивно.
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

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

Сообщение Skif » 23.03.2018, 18:33

Пытались уже 20 раз, воз и ныне там. Предлагаю в 21-ый не начинать, за конструктивными предложениями - в л.с., так как свой блог я в этом году планирую открывать определенно - есть что выкладывать, и весьма нужное.

Пост, разумеется, написать можно, но все равно каждый девелопер-одиночка сделает в итоге по своему.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Имя: Дмитрий

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

Сообщение aleksei999 » 18.12.2020, 17:17

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

Код: Выделить всё
СКРИПТ ПОДАЧИ 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


Всем здрасти! Я воспользовался этим скриптом,все как бы получилось. В данный момент пишу сценарий по НСК,так вот, что: Прописал данный скрипт боту 3ТЭ10М-0037 подать сигнал два раза и через некоторое время еще раз---все ОК,сигналы ботом подаются в заданное мною время. Далее захотелось еще ,чтобы ЭР-1-159 по прибытии тоже подала сигнал,прописал ей такой же скрипт,ессно изменил номер электрички,----итог,электричка по прибытии в заданное ей время подает сигнал,но он не выключается вообще! :( Решил проверить,на этом же месте создаю новый сценарий,ставлю поезд игрока,и эту же электричку-бота на то же место старта,все, из ПС больше ничего нет. Электричка подала сигнал на две секунды как ей и было прописано,сигнал отключился,все нормально. Может кто знает,почему так? :dontknow: Строго не судите,только начал осваивать скрипты)
aleksei999
 
Сообщения: 422
Зарегистрирован: 05.04.2019, 19:08
Откуда: ТУЛА
Благодарил (а): 618 раз.
Поблагодарили: 645 раз.
Играю в: Train Simulator Classic
Имя: Алексей

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

Сообщение Света » 18.12.2020, 17:52

Раз при второй попытке электричка отработала нормально, значит проблема была в скрипте сценария. Не видя скрипт судить сложно, причин может быть много, начиная от невыполнившегося события (инициирующего выключение сигнала), и заканчивая опечаткой в коде (например, неправильный регистр в именах или строковом значении). Опечатку можно найти просто внимательно разбирая код, а выполнение события можно проконтролировать, если дописать вывод всплывающих сообщений: есть сообщение в нужное время - значит, событие произошло.
Код: Выделить всё
SysCall ("ScenarioManager:ShowAlertMessageExt", "имя события", "текст", 5, 1)
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Пред.След.

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

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

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