Наборы улучшений Train Simulator
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
может всё ж скачаете эти 50 мегабайт, а уж потом будет очевидно, что делать? Я скажу, что оттуда можно поставить. Потом я разъясню эпизод с срабатыванием экстренного тормоза, оттуда и будем плясать. Просто будет легче, если наглядно всё изучить. А так вопросов слишком много получается
может всё ж скачаете эти 50 мегабайт, а уж потом будет очевидно, что делать? Я скажу, что оттуда можно поставить. Потом я разъясню эпизод с срабатыванием экстренного тормоза, оттуда и будем плясать. Просто будет легче, если наглядно всё изучить. А так вопросов слишком много получается
Последний раз редактировалось Cross 07 авг 2015, 21:18, всего редактировалось 1 раз.
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Хорошо
.

Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света, не подойдёт. У нас должна быть такая ситуация:
Виртуальные функции - то, чем мы управляем рукоятями, обычно связаны с реальными (то, что мы отдаём в ядро сима).
Однако, в случае срабатывания экстренного, мы имеем то, что они друг с другом не связаны. Рукоять тяги стоит допустим на полной мощности, а реально тяга на 0, реверс стоит на вперёд, а реально он в нейтрали, рукоять тормоза в зарядке, а на самом деле он в экстренном.
Суть здесь заключается в том, что нужно сделать так, чтобы виртуальные контроллы совпали с реальными (то есть реверс в нейтрали, тяга в 0, тормоз в экстренном) прежде, чем они снова свяжутся с ними (синхронизируются) и будут связаны напрямую.
Почему не подходит скрипт инициализации (ключик извлечён)? Да потому, что контроллы там уже синхронизированы, пусть и стоят в нейтраль/0/экстренное, рукояти имеют управление. Нам же нужно, чтобы рукояти не работали, пока не проведём эту саму. синхронизацию.
Замечу, что Cross допустил ошибку - не нужно, чтобы все 3 условия были выполнены одновременно, для восстановления управления над каждой рукоятью достаточно, чтобы была синхронизирована только она. Иными словами, после применения тормозов в экстренное можно спокойно их отпустить, пусть рукояти тяги и реверса ещё и не работают.
Виртуальные функции - то, чем мы управляем рукоятями, обычно связаны с реальными (то, что мы отдаём в ядро сима).
Однако, в случае срабатывания экстренного, мы имеем то, что они друг с другом не связаны. Рукоять тяги стоит допустим на полной мощности, а реально тяга на 0, реверс стоит на вперёд, а реально он в нейтрали, рукоять тормоза в зарядке, а на самом деле он в экстренном.
Суть здесь заключается в том, что нужно сделать так, чтобы виртуальные контроллы совпали с реальными (то есть реверс в нейтрали, тяга в 0, тормоз в экстренном) прежде, чем они снова свяжутся с ними (синхронизируются) и будут связаны напрямую.
Почему не подходит скрипт инициализации (ключик извлечён)? Да потому, что контроллы там уже синхронизированы, пусть и стоят в нейтраль/0/экстренное, рукояти имеют управление. Нам же нужно, чтобы рукояти не работали, пока не проведём эту саму. синхронизацию.
Замечу, что Cross допустил ошибку - не нужно, чтобы все 3 условия были выполнены одновременно, для восстановления управления над каждой рукоятью достаточно, чтобы была синхронизирована только она. Иными словами, после применения тормозов в экстренное можно спокойно их отпустить, пусть рукояти тяги и реверса ещё и не работают.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
pROssO
я вчера подумал, что что-то не так. Действительно не нужно, чтобы все 3 действия были выполнены. Здесь тогда можно в любом порядке выполнить каждое из трёх действий, НО все они, я думаю, должны выполняться после выключения DSD сигнализации, в противном случае нам не удастся вернуть управление
я вчера подумал, что что-то не так. Действительно не нужно, чтобы все 3 действия были выполнены. Здесь тогда можно в любом порядке выполнить каждое из трёх действий, НО все они, я думаю, должны выполняться после выключения DSD сигнализации, в противном случае нам не удастся вернуть управление
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Мне не до конца понятно, как можно провести синхронизацию, если рукояти не работаютpROssO писал(а):... Нам же нужно, чтобы рукояти не работали, пока не проведём эту самую синхронизацию.

Дальше -
Опять таки, нужно сделать КАК: машинист должен установить каждую рукоять в правильное положение или это должно происходить автоматически? На данный момент я понимаю так: до тех пор, пока не нажата педаль DSD, пищит свисток, рукояти (управляемые машинистом) заблокированы, т.е. не двигаются. После того, как нажать педаль DSD, свисток отключается, рукояти можно двигать, но они ни на что не влияют до тех пор, пока не будут установлены в правильные положения. После установки в правильное положение, каждая рукоять получает управление независимо от положения остальных.pROssO писал(а):нужно сделать так, чтобы виртуальные контроллы совпали с реальными (то есть реверс в нейтрали, тяга в 0, тормоз в экстренном) прежде, чем они снова свяжутся с ними (синхронизируются) и будут связаны напрямую...
--- добавлено позже в 08 авг 2015, 10:19 ---
P.S. Если проблема только в этом, то я думаю, что саму вязь условий-переходов я смогу набросать. После ассемблера это вообще не проблема

Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
патч скачан уже?
вот там есть кусок кода в скрипте:
Здесь условие, что по истечении 5-ти секунд, пока пищит DSD, если ничего не предпринять, тогда срабатывает экстренное торможение, регулятор тяги ставится на ноль, реверс ставится на ноль. Они так и работают, но не блокируются. Ещё раз повторяю, нам нужна блокировка движковых функций, движковых, не виртуальных. На виртуальных у нас завязаны ручки, которые мы двигаем и их не нужно блокировать. Нам нужно рассинхрон сделать, чтобы двигая ручки, те не оказывали воздействия на движковые функции до тех пор, пока не выполнится условие отключения педалью DSD. Как только это мы сделали, чтобы вернуть контроль над тормозом, мы передвигаем рукоять в положение "экстренное", тогда ручка синхронизируется с параметром движкового тормоза. Ручку тяги на ноль, тогда она снова связывается с её движковой функцией Regulator. И ручку реверса нужно так же поставить на нейтраль, тогда она свяжется с базовой функцией Reverser
патч скачан уже?
вот там есть кусок кода в скрипте:
Код: Выделить всё
-- If DSD warning has been active for 5 seconds with no response then cut power and trigger emergency brake
if gDSDStartCount > DSDDELAY + 5 and not isDSDTriggered and not isSafetyIsolated then
isDSDTriggered = true
Call( "*:SetControlValue", "EmergencyBrake", 0, 1 )
Call( "*:SetControlValue", "Regulator", 0, 0 )
Call( "*:SetControlValue", "Reverser", 0, 0 )
end
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Нет, патч не скачан. Для моего нэта это неподъемный груз, нужно просить, чтобы скачали, короче, это долгая песня. Пока я разбираюсь с тем фрагментом, что Вы мне дали, и этот блок (-- If DSD warning has been active for 5 seconds) меня уже успел заинтересовать
. Несколько трудновато разобраться, потому что мне не понятно что описывают большинство переменных и какие значения в каких случаях должны быть. С комментариями было бы легче, ну ладно, может и так что-то получится. А Вы можете дать фрагмент кода, где описывается, к примеру, проверка передвижения какой-нибудь рукояти и её воздействие на движковые функции? И ещё вопрос, какая функция этой строки: alert("Class 47", "DSD Enabled", 1) - это отладочная вставка в код или вывод сообщения на монитор локомотива?
Нет, патч не скачан. Для моего нэта это неподъемный груз, нужно просить, чтобы скачали, короче, это долгая песня. Пока я разбираюсь с тем фрагментом, что Вы мне дали, и этот блок (-- If DSD warning has been active for 5 seconds) меня уже успел заинтересовать

Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
Вот здесь я вставил полный код скрипта.
http://railworks2.ru/viewtopic.php?f=37 ... 360#p79915
Скопируйте его в Notepad++, если таковой имеется, там подсветка синтаксиса есть, будет легче ориентироваться.
И с самого начала я поясню все функции и переменные.
функция этой строки: alert("Class 47", "DSD Enabled", 1) это вывод информации о состоянии работы системы DSD. В данном случае указывает на то, что она активна
Вот здесь я вставил полный код скрипта.
http://railworks2.ru/viewtopic.php?f=37 ... 360#p79915
Скопируйте его в Notepad++, если таковой имеется, там подсветка синтаксиса есть, будет легче ориентироваться.
И с самого начала я поясню все функции и переменные.
функция этой строки: alert("Class 47", "DSD Enabled", 1) это вывод информации о состоянии работы системы DSD. В данном случае указывает на то, что она активна
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Есть у меня Notepad, там я этот скрипт и исследую
. Меня вот какой момент интересует: мы можем через команду скрипта управлять раздельно реальным контролом и виртуальным? Эта строка
ставит рукоять регулятора тяги на 0. Это понятно. А мы можем сделать подобной командой то же с реальным регулятором тяги? Не трогая рукоять? Или как раз в этом и заключается проблема?
Есть у меня Notepad, там я этот скрипт и исследую

Код: Выделить всё
Call( "*:SetControlValue", "Regulator", 0, 0 )
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
а нам не нужно ставить рукоять в ноль, если сработала аварийка. Тогда получится так, что ручка резко окажется в нулевом положении и её сместить не получится. Она должна свободно двигаться, но не взаимодействовать с Regulator до тех пор, пока не будет сброшена DSD и не поставлена ручка в ноль. Даже если мы сбросили DSD, а ручка в положении больше нуля, всё равно управление не возвращается, а как только в ноль поставили, то сразу всё заработало. Как-то так
а нам не нужно ставить рукоять в ноль, если сработала аварийка. Тогда получится так, что ручка резко окажется в нулевом положении и её сместить не получится. Она должна свободно двигаться, но не взаимодействовать с Regulator до тех пор, пока не будет сброшена DSD и не поставлена ручка в ноль. Даже если мы сбросили DSD, а ручка в положении больше нуля, всё равно управление не возвращается, а как только в ноль поставили, то сразу всё заработало. Как-то так
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Я вот о чем. Меня интересует именно взаимодействие рукояти, которую мы двигаем и реакция реального контрола. А именно, можем мы вклиниться в этот процесс или нет. Как я понимаю, при смене положения виртуального контрола переменная, которая описывает его положение получает новое значение. Не могу себе представить, чтобы это было не так. Значит, где-то должна быть функция, в которой изменение этой переменной отслеживается и передается на реальный контрол. И эта функция меня интересует сейчас наиболее, потому что именно её доступность определяет, сработает тот метод, который я хочу предложить, или нет.
--- добавлено позже в 08 авг 2015, 15:23 ---
Я вот о чем. Меня интересует именно взаимодействие рукояти, которую мы двигаем и реакция реального контрола. А именно, можем мы вклиниться в этот процесс или нет. Как я понимаю, при смене положения виртуального контрола переменная, которая описывает его положение получает новое значение. Не могу себе представить, чтобы это было не так. Значит, где-то должна быть функция, в которой изменение этой переменной отслеживается и передается на реальный контрол. И эта функция меня интересует сейчас наиболее, потому что именно её доступность определяет, сработает тот метод, который я хочу предложить, или нет.
--- добавлено позже в 08 авг 2015, 15:23 ---
Вот, это меня и интересует: каким образом ручки оказывают воздействие на движковые функции? Мы можем править это место программы?Cross писал(а):Нам нужно рассинхрон сделать, чтобы двигая ручки, те не оказывали воздействия на движковые функции
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
значит поясняю на примере работы тормоза и как он связан с движковой функцией
первая функция инициализации, она служит для инициализации переменных
здесь:
эта функция нужна для наших контроллов и их взаимодействий
значит поясняю на примере работы тормоза и как он связан с движковой функцией
первая функция инициализации, она служит для инициализации переменных
здесь:
Код: Выделить всё
function Initialise ()
gBrakeState = 0 -- эта штука служит связующим звеном между движковым и виртуальным тормозом.
end
Код: Выделить всё
function OnControlValueChange ( name, index, value )
if name == "VirtualBrake" then -- это имя виртуального тормоза в бинарнике локомотива
gBrakeState = Call( "*:GetControlValue", "VirtualBrake", 0) -- это переменная наша, которая получает значение из контролла VirtualBrake
Call( "*:SetControlValue", "TrainBrakeControl", 0, gBrakeState ) -- это движковая функция, которая устанавливает значения от переменной gBrakeState
Таким образом получается закольцовывание и связь двух контроллов
end
end
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Если мы в этот фрагмент сделаем врезку:
Получится эту связь разорвать, или нет?
Если мы в этот фрагмент сделаем врезку:
Код: Выделить всё
function OnControlValueChange ( name, index, value )
if name == "VirtualBrake" then -- это имя виртуального тормоза в бинарнике локомотива
gBrakeState = Call( "*:GetControlValue", "VirtualBrake", 0) -- это переменная наша, которая получает значение из контролла
...
if (условие) then
Call( "*:SetControlValue", "TrainBrakeControl", 0, gBrakeState ) -- это движковая функция, которая получает значения от переменной gBrakeState
end
...
end
end
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
в общем даю новую ориентировку. Я тут покапался чуть и у меня получилось разорвать связь.
Далее кусок кода на тревожку и таймер, по истечении которого срывает стоп кран.
Но при всём этом есть проблема. Я далее пишу условие, что если выключить DSD пищалку, тогда, если перевести контрол ручки VirtualBrake в положение 1, то есть экстренное, тогда gBrakeLock = false -- то есть проверка снова возвращается в FALSE и по идее здесь должна быть синхронизация, но её не происходит и тормоз блокирован безнадёжно...
в общем даю новую ориентировку. Я тут покапался чуть и у меня получилось разорвать связь.
Код: Выделить всё
function Initialise ()
gBrakeState = 0 -- эта штука служит связующим звеном между движковым и виртуальным тормозом.
gBrakeLock = false -- данная переменная служит проверочным звеном (по умолчанию выключена)
end
Код: Выделить всё
function OnControlValueChange ( name, index, value )
if name == "VirtualBrake" then
gBrakeState = Call( "*:GetControlValue", "VirtualBrake", 0) -- это переменная наша, которая получает значение из контролла VirtualBrake
if gBrakeLock == false then -- это наша проверка и ниже выполняемое условие
Call( "*:SetControlValue", "TrainBrakeControl", 0, gBrakeState ) -- само условие связи на установку значений, полученных от VirtualBrake через gBrakeState
end
end
end
Код: Выделить всё
if gDSDStartCount > DSDDELAY + 5 and not isDSDTriggered and not isSafetyIsolated then
isDSDTriggered = true
Call( "*:SetControlValue", "TrainBrakeControl", 0, 1 )
Call( "*:SetControlValue", "Regulator", 0, 0 )
Call( "*:SetControlValue", "Reverser", 0, 0 )
gBrakeLock = true -- видим, что значение приобрело TRUE, а условие на синхронизацию было FALSE. То есть так мы рассинхрон сделали и теперь ручка тормоза двигается, но сам движковый тормоз в экстренном и заблокирован.
end
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Кажется, я вижу один момент, который может не понравиться движку: пока ручка VirtualBrake придет в положение 1, движок успеет "наловить" целую кучу промежуточных значений. Предлагаю ввести ещё одну переменную и ещё одно условие, и, таким образом, сделать синхронизацию "чистой", т.е. восстановить связь тогда (и только тогда), когда положения реальных и виртуальных контролов будут полностью совпадать:
Инициируем
Запускаем при аварийной остановке:
Контролируем:
Здесь у меня сомнения по этой строке но суть, я думаю, Вы поймете
.
--- добавлено позже в 08 авг 2015, 21:44 ---
Если этот вариант прокатит, у меня есть идея, как его немного упростить, чтобы обойтись 1 переменной вместо двух
.
Инициируем
Код: Выделить всё
function Initialise ()
gBrakeState = 0 -- эта штука служит связующим звеном между движковым и виртуальным тормозом.
gBrakeLock = false -- данная переменная служит проверочным звеном (по умолчанию выключена)
gBrakeLock_2 = false -- данная переменная служит добавочным проверочным звеном (по умолчанию выключена)
end
Код: Выделить всё
if gDSDStartCount > DSDDELAY + 5 and not isDSDTriggered and not isSafetyIsolated then
isDSDTriggered = true
Call( "*:SetControlValue", "TrainBrakeControl", 0, 1 )
Call( "*:SetControlValue", "Regulator", 0, 0 )
Call( "*:SetControlValue", "Reverser", 0, 0 )
gBrakeLock = true -- видим, что значение приобрело TRUE, а условие на синхронизацию было FALSE. То есть так мы рассинхрон сделали и теперь ручка тормоза двигается, но сам движковый тормоз в экстренном и заблокирован.
gBrakeLock_2 = true
end
Код: Выделить всё
function OnControlValueChange ( name, index, value )
if name == "VirtualBrake" then
gBrakeState = Call( "*:GetControlValue", "VirtualBrake", 0) -- это переменная наша, которая получает значение из контролла VirtualBrake
if (gBrakeLock == false) and (gBrakeLock_2 == false) then -- Если оба блока сняты,
Call( "*:SetControlValue", "TrainBrakeControl", 0, gBrakeState ) -- разрешаем передачу состояния ручки реальному контролу
elseif (gBrakeLock == false) then --Иначе проверяем в чем проблема. Невыполнение условия показывает, что педаль DSD не нажата. Значит просто выходим с проверки, нам здесь делать нечего.
if (gBrakeState == TrainBrakeControl) then --А если педаль DSD была нажата, проверяем, поставлена ли ручка в правильное положение
gBrakeLock_2 = false --и если да, то отключаем второй блок.
end
end
end
end
Код: Выделить всё
if gBrakeState == TrainBrakeControl then

--- добавлено позже в 08 авг 2015, 21:44 ---
Если этот вариант прокатит, у меня есть идея, как его немного упростить, чтобы обойтись 1 переменной вместо двух

Последний раз редактировалось Света 08 авг 2015, 22:06, всего редактировалось 1 раз.
Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
не понимаю каким образом вторая проверка обеспечит работу синхронизации. В скриптах от Class 156 как-то подход с одной проверкой на false и true работает. У меня же только одноразово блокирует управление и не синхронизирует по новой.
Всё, я отдыхать, иначе кошмары будут сниться
Всё, я отдыхать, иначе кошмары будут сниться

*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Значит, все же, какая-то разница между этими локомотивами есть
. Смысл двойного блокирования в том, что не допускается связь между контролами все то время, пока они рассинхронизированы. Получается, что в момент разрыва связи положение реального контрола соответствует положению виртуального, а когда связь восстановится, соответствие положений не изменится. Те есть, с точки зрения движка, разрыва как бы и не было. Если этого не сделать, то, ИМХО, это то же самое, что переключать скоростя не выжимая сцепление. В любом случае, хуже точно не станет, а другого варианта, почему связь не восстанавливается, у меня пока нет.
Значит, все же, какая-то разница между этими локомотивами есть

Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
ещё потом подумаю и, вероятно, меня осенит и я допилю наконец-то скрипт. Там ещё надо сделать визуальные отображения, когда срабатывают системы бдительности. Эта штука есть в последних локомотивах у армстронгов и помогает отследить срабатывание DSD, AWS, если игрок находится снаружи локомотива. Забегаю вперёд)
*Train Simulator 2018*


Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Cross
Есть ещё один вариант, при котором разрыва вообще формально не будет
. Для этого мне надо знать сколько значений может иметь переменная gBrakeState; правда, этот вариант достаточно громоздкий. Хотя мне очень хотелось бы, чтобы Вы рассмотрели первый вариант, чтобы продолжать поиски только в том случае, если он не прокатит.
Есть ещё один вариант, при котором разрыва вообще формально не будет

Сильные люди - это не те, у которых всё хорошо, а те, у которых всё хорошо несмотря ни на что.
Re: Патчи для ПС, мини правки, замена сценариев на стандарт
Света
gBrakeState берёт значения движкового TrainBrakeControl и может быть от 0 до 1 с десятыми, сотыми и тысячными долями. Не туда копаем просто. Здесь в чём-то другом соль. Или я код не в том месте пишу, либо чего-то там не хватает.
gBrakeState берёт значения движкового TrainBrakeControl и может быть от 0 до 1 с десятыми, сотыми и тысячными долями. Не туда копаем просто. Здесь в чём-то другом соль. Или я код не в том месте пишу, либо чего-то там не хватает.
*Train Simulator 2018*

