Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   MSTS - Маршруты (http://www.trainsim.ru/forum/forumdisplay.php?f=19)
-   -   Сигнализация: конфигурация и скрипты (http://www.trainsim.ru/forum/showthread.php?t=13819)

КЕ 26.09.2021 22:47

[QUOTE=roman5;602354]А речь про какой лог, в скрипте не вижу [B]debug_out2 [/B]функций, сам msts вроде лог не делает. Или это про OR ?[/QUOTE]
Да, лог [B]OpenRails[/B] или [B]RTrainSim[/B] - удобно "косяки" искать.

roman5 26.09.2021 23:19

[QUOTE=vicente;602355]То, что они придумали - некий "текстовый" аспект (обзывай, как хочешь) и этими аспектами светофоры обмениваются как сообщениями.
[/QUOTE]
Ну это удобно для расширения функционала, отладки.

[QUOTE=vicente;602355]класс "наследуется" из нового файла source - ещё вопрос или я могу "снимать" нужные мне внешние функции через включение соответствующего совершенно другого *.cs -файла.[/QUOTE]
По идее да, но разве они недоступны в классе, от которого наследуешь свой класс ?

vicente 27.09.2021 11:35

Нет. Там урезано "под разработку". В смысле, им не нужна зависимость от next_sig_lr (SigFn_Type) - к этой функции не привязаться. Можно давать каждому аспекту "параллельно" ещё и текстовый аспект и сделать зависимость от этого текста, но преимуществ в этом я не вижу. Есть переменные в sigscr.dat . Но, это пока. Преимуществом может быть функционал С#, какие-то вещи, которые в sigscr.dat нельзя делать... Но, посмотрим. Пока что, программирование на С# даже в тестовые релизы не включено.

Predator 27.09.2021 12:12

[QUOTE=vicente;602341]Хм... похоже, маневровый NORMAL WR (?) . У него есть одна интересная деталь. А можно скриншот редактора сценариев и на нем указать место, на котором сделан предыдущий скрин и как-то выделить/обозначить PATH этого сервиса. Сразу обозначу подозрение. Если светофор - тот, о котором я говорю и дальше есть противошерстная стрелка не по марщруту - будет красный[/QUOTE]
[QUOTE=vicente;602343]Ждём уточнений, короче. ;)[/QUOTE]
Пара скринов из редактора сценария:
Скрин № 1:
[SPOILER][url=https://d.radikal.ru/d26/2109/b6/45274fa1a168.png][img]https://d.radikal.ru/d26/2109/b6/45274fa1a168t.jpg[/img][/url] [/SPOILER]
Скрин № 2:
[SPOILER][url=https://c.radikal.ru/c24/2109/f8/6edf8e9e8905.png][img]https://c.radikal.ru/c24/2109/f8/6edf8e9e8905t.jpg[/img][/url][/SPOILER]
Проблемный светофор:
[SPOILER][url=https://d.radikal.ru/d42/2109/4f/449f3193705b.png][img]https://d.radikal.ru/d42/2109/4f/449f3193705bt.jpg[/img][/url] [/SPOILER]

КЕ 27.09.2021 12:16

Светофоры не те расставлены. Нет смысла биться об эту "стену" - надо заменять светофоры и выпустить патч. Я серьезно.

vicente 27.09.2021 12:19

Этот светофор по скрипту не откроется на занятый путь.

КЕ 27.09.2021 12:22

Вот и нечего ему там делать.

Predator 27.09.2021 12:25

[QUOTE=vicente;602367]Этот светофор по скрипту не откроется на занятый путь.[/QUOTE]
Ввиду того, что стоит служебный вагон на этом пути?

КЕ 27.09.2021 12:57

Потому что это поездной светофор - открывается при свободности БУ.
А должны стоять маневровые - это тупиковая горловина, за выходной сигнал поездного движения нет.
Белый - это манёвры, а маневры - это движение и на занятый путь.
А у этого какой-то странный скрипт. Может открыться белым, но только на свободный путь.

Predator 27.09.2021 13:21

[QUOTE=КЕ;602370]Потому что это поездной светофор - открывается при свободности БУ.[/QUOTE]
Совершенно верно, пересобрал сцену, убрал служебный вагон, продлил путь до конечной точки и всё сработало, но поездной светофор так и остался гореть красным, хотя на мониторе пути зажёгся желтый с ограничением 20 км/ч.
Скрин № 1:
[SPOILER][url=https://a.radikal.ru/a13/2109/94/94e74069270b.png][img]https://a.radikal.ru/a13/2109/94/94e74069270bt.jpg[/img][/url] [/SPOILER]
Скрин № 2:
[SPOILER][url=https://c.radikal.ru/c10/2109/6f/fc76898ef249.png][img]https://c.radikal.ru/c10/2109/6f/fc76898ef249t.jpg[/img][/url][/SPOILER]
[QUOTE=КЕ;602370]
А у этого какой-то странный скрипт. Может открыться белым, но только на свободный путь.[/QUOTE]
Уже тестировал на маршруте?

КЕ 27.09.2021 13:27

[QUOTE=P.r.e.d.a.t.o.R;602374]Совершенно верно, пересобрал сцену, убрал служебный вагон, продлил путь до конечной точки и всё сработало, но поездной светофор так и остался гореть красным, хотя на мониторе пути зажёгся желтый с ограничением 20 км/ч.
[/QUOTE]
Потому что у этого светофора в конфиге не указаны расположение и размеры белого огня.
[QUOTE=P.r.e.d.a.t.o.R;602374]
Уже тестировал на маршруте?[/QUOTE]
Да, проверил. Так и есть.

vicente 27.09.2021 14:06

Я тут подумал... Оппозитные функции надо потестить "чистым" тестом. Да, ещё раз. Особенно тех сигналов, которые не по ходу поезда. В MSTS и в Open Rails

КЕ 27.09.2021 15:08

Комп налажу и потом займусь на чистом тестовом маршруте.
Да и в RTrainSim тоже.

vicente 27.09.2021 21:36

[QUOTE=КЕ;592752]
Он не сработает по [B]opp_sig_lr[/B], он в оппозитном положении вообще ничего не считывает с других сигналов. Может только менять свой аспект по BLOCK_STATE ().[/QUOTE]
Но, если нет между светофорами нет поезда, работать будет? Даже, если вообще нет поездов?

КЕ 27.09.2021 21:38

Это все надо будет потестировать. Чтоб уж точно выяснить.

vicente 28.09.2021 01:12

Протестировал в Open Rails. Нет, нигде я не ошибся. Только enabled светофоры "видят" по opp_sig_lr (). В свободной поездке, вообще - пока тестовый лок не проехал полностью оппозитный светофор, тот не "видел" открытый перед локом, а когда проезжал - менял аспект по скрипту. И только если состав был между соответствующими светофорами, эта "связка" работала. В Activity - только светофоры впереди тестового локомотива "видят" оппозит. И только на SignalNumClearAhead вперёд. Я поставил 6 табло на перегон, при SignalNumClearAhead 3 - если между оппозитом и локом было больше 3х табло - дальше уже не ловится.

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
Забил в табло сразу NORMAL, DISTANCE и INFO - у всех opp_sig_lr (SigFn_NORMAL) работало одинаково.

[size="1"][color="Silver"]Добавлено через 6 минут[/color][/size]
В MSTS может получиться "поймать", скажем, открытый входной - там светофоры противоположного направления [B]перед[/B] сервисом - enabled. К тому же сим расчитывает поезда на дорожках чуть по-другому.

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
...и эта фича с составом между светофорами может и не появиться. Хотя, с другой стороны, может случиться и так, как Костя указывал: "через сервис" вообще ничего не будет работать.

КЕ 28.09.2021 09:06

[QUOTE=vicente]... И только на SignalNumClearAhead вперёд. Я поставил 6 табло на перегон, при SignalNumClearAhead 3 - если между оппозитом и локом было больше 3х табло - дальше уже не ловится.
Забил в табло сразу NORMAL, DISTANCE и INFO - у всех opp_sig_lr (SigFn_NORMAL) работало одинаково.[/QUOTE]
Само табло - какого типа, REPEATER?
И оппозит - NORMAL?

vicente 28.09.2021 11:29

Дык, само табло я и настроил.
Верхний N - NORMAL
Нижний N - INFO
Верхний D - DISTANCE
Нижний D - тоже оставил инфо.
Всем прописал простой скрипт: state = 7 , если оппозит больше 0 (NORMAL - больше 1, иначе не было бы движения), иначе, соответственно, state =0 (у NORMAL - 1)

КЕ 28.09.2021 16:00

[quote] В Activity - только светофоры впереди тестового локомотива "видят" оппозит[/quote]
То есть только попутный (например, входной) может прочитать аспект оппозитного, и только когда ездючина между ними, так?
Да, Олег, ты не в курсе - в ОРТС есть ограничение количеству огней на тайле? В МСТС 512 было.

vicente 28.09.2021 17:11

[QUOTE=КЕ;602392] То есть только попутный (например, входной) может прочитать аспект оппозитного, и только когда ездючина между ними, так?.[/QUOTE]
Нет. Только попутные [B]впередистоящие[/B] светофоры в количества SignalNumClearAhead штук могут "ловить" информацию с оппозитов через функции opp_sig_lr (SigFn_Type), opp_sig_mr (SigFn_Type), id_sig_lr (sigid) и пр. opp_XX_XX() в Activity Mode. И это - тоже не всё. Если между светофорами есть SignalNumClearAhead светофоров противоположного направления, тоже перестают ловить. У меня ловят не входные, а маневровые. Когда ездючина приближается к входному, они ловят информацию с маркера, который я присобачил "спиной" к входному (маркеры основаниями друг к другу - эдакая обратно-смотрящая голова, которую я, возможно, "присобачу к входному в сдедующей сигналке - сейчас не хочу весь этот геморрой : изменение конфигурации и замена входных). Эти маркеры я, пока, на крупных станциях поставил с большим маневровым трафиком. На остальных маневровые "ловят" первый проходной - ему я ту же программу поставил.
В Explore Route, первый светофор за ездючиной тоже "ловит" оппозит. Но, только, когда ездючина его проезжает (не знаю: у меня только ЧМЭуха на тестовом была, может, как с block_state () у DISTANCE ов, только моторная голова учитывается - хз: если есть смысл проверять - оно бесполезно вообще). То есть, при подъезде к входному, на последнем блок-участке, можно первым проходным противоположного направления поймать.
[QUOTE=КЕ;602392]
Да, Олег, ты не в курсе - в ОРТС есть ограничение количеству огней на тайле? В МСТС 512 было.[/QUOTE]
Я и про MSTS не знал :D . Никогда с проблемой количества светофоров/огней не сталкивался :confused:

[size="1"][color="Silver"]Добавлено через 28 минут[/color][/size]
Ругается, гад, на скрипт мой в С#. Ругается, но видит мню :rofl::russian:
[SPOILER]
Warning: Skipped script folder C:\Train Simulator\ROUTES\CUSTOM_2\Script\Signal with error:
; expected, file: C:\Train Simulator\ROUTES\CUSTOM_2\Script\Signal\KRN23_RC_60.cs, line: 1, column: 13
; expected, file: C:\Train Simulator\ROUTES\CUSTOM_2\Script\Signal\KRN23_RC_60.cs, line: 2, column: 33[/SPOILER]

КЕ 28.09.2021 17:15

Применительно к сигналке "expected" что означает?

vicente 28.09.2021 18:28

Костя, то что я писал. Симулятор "предполагает", что там будет скрипт, поэтому и expected . К сигналке не имеет отношения. Только к самим файлам.

[size="1"][color="Silver"]Добавлено через 14 минут[/color][/size]
Только что "соорудил" таймер на светофор в Open Rails. Скриптом :russian::russian::russian:
Этот недо-С "петли" не признаёт. Несмотря на то, что for даже в инструкции кужувской присутствует, когда-то, очень давно пробовал его - не получалось ( может, мозги кривые, конечно, но в for трудно ошибиться). На днях попробовал While - парсер послал меня подальше. Сделал под if: загнал переменную в "запоминалку" переменных Open Rails-овскую. Под if (n <# 45) поставил n = n + 1; и результат - в "запоминалку". Считает :p Поиграл величинами, на 45 - ждёт 28-29 секунд, на 15 - 11-12, на 99 уже, как бы долго получается. Оставлю 45 пока. Теперь - самое главное- потестить не с сейва, а с loading - может быть офигительная вещь. В идеале, конечно, привязать это к флагам... и выбирать птичкой в редакторе: большая станция, маленькая станция и т.п.

[size="1"][color="Silver"]Добавлено через 6 минут[/color][/size]
Вот скрипт-черновик:
[SPOILER]
float next_state;
float sigid;
float wait_time;
float k;

if (!enabled || (block_state() !=# BLOCK_CLEAR) || !route_set() )
{
state = SIGASP_STOP;
if (block_state() ==# BLOCK_JN_OBSTRUCTED)
{
store_lvar(time, 0);
}
}
else
{
wait_time = this_sig_lvar(time);
next_state = next_sig_lr (SIGFN_NORMAL);
sigid = next_sig_id (SIGFN_NORMAL);
if ((next_state ==# -1) || ( wait_time <=# 99 ))
{
state = SIGASP_STOP;
wait_time = wait_time + 1;
store_lvar(time, wait_time);
}
else if (!train_requires_next_signal(sigid,1) || (next_state ==# SIGASP_RESTRICTING))
{
state = SIGASP_RESTRICTING;
}
// else if (!check_timing_trigger (45))
// {
// state = SIGASP_STOP;
// }
else
{
state = SIGASP_APPROACH_2;
}
}
draw_state = def_draw_state (state);
if ((state >=# SIGASP_APPROACH_1) && (next_state ># SIGASP_RESTRICTING))
{
draw_state = 2;
}
if ((state == SIGASP_STOP) && (this_sig_lr (SIGFN_NORMAL) ># SIGASP_STOP))
{
draw_state = 4;
}
[/SPOILER]

КЕ 28.09.2021 20:11

Я так ещё не пробовал, поэтому - что означают строки:

[B]store_lvar(time, 0)
sigid = next_sig_id (SIGFN_NORMAL);
store_lvar(time, wait_time);
train_requires_next_signal(sigid,1);[/B]

И как работа светофора будет выглядеть на практике? Задержка переключения огней?

[size="1"][color="Silver"]Добавлено через 4 минуты[/color][/size]
:DПомню, как-то давно получил мигающий огонь, считывая состояние второй головы в одном светофоре, и изменяя ее состояние в зависимости от первой, которая тоже меняла аспект в зависимости от второй.
Случайно ошибившись в скрипте, получил такой вот круговорот аспектов в светофоре!:D

vicente 28.09.2021 21:05

Костя, там нет ничего, что я не объяснял в этой теме.
Первая строка - "запоминалка". Первый аргумент - регистр, второй - звпоминаемое значение.
Вторая строка - "метит" светофор. Принцип - MSTS-овский: можно "метить" впередистоящий светофор, по оппозиту, ну и функцией next_Nsig_XX(SigFn_Type) - остоящий дальше следующего.
Третья строка - см. первая - то же самое.
Четвёртую строку я тоже в этой теме объяснял: включает ли маршрут сервиса следующий светофор или нет. В данном случае, используется для маневрового показания - сигнал выходной.
Да, задержка переключения. Меня бесит, когда светофор переключается, когда встречный ещё на стрелке. Выглядит отвратительно-нереалистично.Есть временной триггер (он отключен в примере) - внешний таймер. Но, он не работает когда игра "поднимается". "Завязывать" на него аспект 0 - чревато. После загрузки игры все светофоры, которые я сделал с ним - красные, трафики стоят, десятки трафиков вообще не стартовали. В общем, у меня два файла sigscr.dat : один с таймерами, второй - без. Я загружаю сцену без таймеров, сохраняюсь, подменяю файлы sigscr.dat и захожу снова с сейва. Не айс, короче, совсем не айс. Ещё пол-года назад разработчик кода обещал мне сделать что-то с данным безобразием, но... "как только будет время ". А, требовать чего-то от кого-то - не в моих правилах. Короче, если эта штука пройдёт "клинические испытания" - я буду очень рад. А официальный триггер я уже знаю куда "пристроить")))

На практике, как только встречный проходит стрелку (TrackPin секции пути) готовится маршрут - стрелка переводится. Без "оттяжки" поезду сразу же откроется сигнал. Задача задержки - симитировать освобождение РЦ и несколько секунд на срабатывание СЦБ. В реале это занимает где-то секунд 20, но есть станции с очень длинными горловинами, там должно брать больше времени. Поэтому я писал о возможности в будущем сделать опционально несколько таймеров с возможностью выбора в редакторе.

[size="1"][color="Silver"]Добавлено через 35 минут[/color][/size]
Нет. Плохо. Не фурычит. Похоже, с этим трюком - та же проблема, что и с таймерлм в коде игры. С сейва - считает, а при загрузке расписания... "невозможно разместить поезд". Эх...

КЕ 28.09.2021 21:18

Интересное дело! Я тоже слегка думал:D, как можно сделать какой-нибудь "delay", но пока не пробовал.
И вот эта строка интересна:
[B]if ((next_state ==# -1)... [/B]
Они всё-таки сделали такой аспект?

vicente 28.09.2021 22:12

Этот аспект и в MSTS прокатывает. Мы же вместе тестили :confused: на табло ещё 7 у тебя выдавал. Костя, Костя... :eek:
Ну, и в кабине тоже, будет З на АЛСН. Но, мне-то что? Я на них не езжу, на эти -1. На них у меня 0 на выходных завязан. А -1 даёт как раз тот маркер, который "жопой к входному" стоит и сигнализирует маневровым, что поезд приближается к станции с перегона и они должны ловить через оппозитную функцию информацию с него.

vicente 29.09.2021 08:55

[QUOTE=vicente;602397]
... "соорудил" таймер на светофор в Open Rails.
[/QUOTE]
В общем так.
"Клинические исследования" (пока) показывают следующее:
Фигня эта работает и при загрузке игры. Проблема в том, что такой "таймер" не привязан к игровому времени и, очевидно, при загрузке скрипт "пробегает" процедуру вычисления таким образом, что относительно игрового времени проходят долгие минуты, возможно даже десятки минут, пока он срабатывает и переходит в следующий блок. Это сильно тормозит события, поезда долго ожидают своих сигналов, задерживают следующие поезда в расписании которые должны появиться в тех же точках старта, а Open Rails ожидает освобождения нужных секций только 15 минут, затем выдаёт сообщение в логе "невозможно разместить AI".
Не знаю: имеет ли смысл копать "разницу во времени" .
Так как у нас делают сценарии, это может и не мешать.
Мне такая работа сигналки не подходит. Я так играю в Open Rails: весь трафик работает на всём маршруте.

КЕ 29.09.2021 09:18

Тогда только точки ожидания ставить... и то не везде, наверно.

vicente 29.09.2021 09:38

Не поможет. Точка ожидания в Open Rails "держит" светофор в закрытом положении. А, когда он так закрыт, мне не к чему "привязаться": все три функции-условия аспекта 0 не проверяются. Так что, точка ожидания только "добавит масла в огонь"

КЕ 29.09.2021 11:13

[QUOTE=vicente;602407]Этот аспект и в MSTS прокатывает. Мы же вместе тестили :confused: на табло ещё 7 у тебя выдавал. Костя, Костя... :eek:
Ну, и в кабине тоже, будет З на АЛСН. Но, мне-то что? Я на них не езжу, на эти -1. На них у меня 0 на выходных завязан. А -1 даёт как раз тот маркер, который "жопой к входному" стоит и сигнализирует маневровым, что поезд приближается к станции с перегона и они должны ловить через оппозитную функцию информацию с него.[/QUOTE]Этот оппозит как срабатывает, надежно?
А по "минус единице" - там, наверно, 8-битный регистр, и получается при чтении АЛСН-ом в результате сдвига влево с переносом, что - 1 == 7.))

roman5 29.09.2021 11:13

[QUOTE=vicente;602397]
Только что "соорудил" таймер на светофор в Open Rails. Скриптом [/QUOTE]
Отступы надо ставить в [B]if[/B],[B]while[/B], а то не читаемо. Обычно к этому приучают на первых курсах :D

vicente 29.09.2021 12:33

Рома пытается "уколоть" старика? :o
Мои первые курсы (они же и последние) были почти 30 лет назад. С тех пор я очень далёк от программирования - работаю совсем в другой сфере. Так что, как говорится, "всё, что ты знаешь, я давно забыл".
В общем, если есть предложения "по делу" - буду рад конкретике. Мы здесь делимся опытом, идеями, чтобы, может быть, что-то где-то когда-то получилось улучшить, а касаемо Open Rails (в курсе, что тема об MSTS ) - создать. Потому что, что-то я функционирующих сигнализаций на этом симуляторе не вижу в упор.
Оф оф

[size="1"][color="Silver"]Добавлено через 15 минут[/color][/size]
[QUOTE=КЕ;602412]Этот оппозит как срабатывает, надежно?[/QUOTE]
Да. Срабатывает, как я отчитывался: впереди по ходу. Маневровые поездной режим ловят. Там в другом загвоздка. В Open Rails стрелки после прохода ездючины остаются в том положении, в котором эта ездюлина их проследовала. Оппозит проверяет путь, естественно, по положннию стрелок. На станциях с большим трафиком (смены локов, маневры и т.д.) может сложиться ситуация, когда ездючина выедет на манёвры, сменит направление, а маневровый "по стрелкам" схватит поездной режим . А они у меня теперь в поездном режиме не отерываются вообще на занятый путь. Да и на свободный по синему - "за что боролись, на то и напоролись". У меня так и в MSTS без всяких оппозитов работало. А в Open Rails я не от хорошей жизни им открываться не даю. Deadlock не дремлет. Открытый светофор "стопорит" стрелки и, если в MSTS входной 0 на следующий 2 прокатывает "на ура", Open Rails такое не любит. Он считает, что если были условия на открытие сигнала - значит он "по делу" открыт. И спокойно резервирует секции для ездючин через закрытые светофоры. А сценаристов как заставить уводить точки разворота с главного хода? Полетят же камни!

roman5 29.09.2021 14:13

[QUOTE=vicente;602414]Мы здесь делимся опытом, идеями, чтобы, может быть, что-то где-то когда-то получилось улучшить, а касаемо Open Rails (в курсе, что тема об MSTS ) - создать. Потому что, что-то я функционирующих сигнализаций на этом симуляторе не вижу в упор.
[/QUOTE]
Я так понял, основное - реализовать сигналку, чтобы в OR можно было играть сцены, написанные в мстс.
Я тут после изучения сигналки на бмо 1.8 написал сценарий, удалось реализовать следующее:
1. Скрещение в Иванцево - встречный уходит на перегон.
2. Скрещение (встречный уходит на Иванцево) и обгон в Драчеево - скрещение криво реализовано, с Костино никак не дает отправить, стрелки не по маршруту - сделал трафик, который уходит на перегон с возвратом.
3. По Костино также скрещение на проход и обгон все тем же.

Так и не понял что в Костино такое, если выехал с Иванцево, оттуда не выпускает.

vicente 29.09.2021 14:43

MSTS?

roman5 29.09.2021 15:28

[QUOTE=vicente;602417]MSTS?[/QUOTE]
Ну да, сцену только в мстс тестил.

vicente 29.09.2021 16:17

По БМО, у меня нет 1.8 (и не хочу :D ), так что, помощник в маршруте я - никакой.

Интересно, всё-таки, с "запоминалкой" для MSTS. Если попробовать заявить две переменные, скажем, m и n . Вначале поставить безусловное равенство m = n ;, а дальше - if (условие) { n = 1;} else (другое условие) { n = 0; }, m будет "помнить" значение n когда ни одно из условий не выполняется?

roman5 29.09.2021 16:32

[QUOTE=vicente;602419]m будет "помнить" значение n когда ни одно из условий не [/QUOTE]
Да, ведь присваивание до [B]if[/B].
[CODE]
float m;float n;
m=5;
n=5;

// далее какой код, меняющий n

// тут m по прежнему 5

[/CODE]
Я правильно понял вопрос ?

[size="1"][color="Silver"]Добавлено через 4 минуты[/color][/size]
[QUOTE=vicente;602419]По БМО, у меня нет 1.8 (и не хочу :D )[/QUOTE]
Эхх, а я хотел узнать, как бороться с нежеланием симулятора прокладывать маршрут по узлам иногда. С сигналкой я понимаю как, я начинаю смотреть скрипт, чтобы понять почему так работает. А вот как бороться с внутренним алгоритмом прокладки маршрута не знаю.

vicente 29.09.2021 16:46

Да. Совершенно точно.
Проблема в том, что в обычном С/С++ - всё ясно. А здесь - нужно проверять.
Я, когда тестил оппозиты, на одном из тестов не получил вполне ожидаемый результат. Причина - до if у меня 2 строки "наоборот" стояли: сначала я снимал данные со светофора, а потом - определял этот светофор. Повторюсь: скрипт - статический. Я боюсь, что не сработает это постоянное присваивание m значения n "из-под" if. Именно из-за программы.

[size="1"][color="Silver"]Добавлено через 8 минут[/color][/size]
Хотя... нет. Немного не так. Вопрос был:
[QUOTE]
(...)
float m;
float n;
(...)

m = n;
if (block_state () !=# 0)
{
state = 1;
n = 1;
}
else if (next_sig_lr (SigFn_NORMAL) ==# 1)
{
state = 3;
n = 0;
}
else
{
state = 7;
}
[/QUOTE]
Когда не выполняется ни if, ни else if, будет ли m в последнем значении n?

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
Особое замечание по отступам: [B]с телефона их съедает сайт[/B], а мне недосуг рисовать. Так что... с Вами наши извинения :D

roman5 29.09.2021 16:58

[QUOTE=vicente;602422]
Когда не выполняется ни if, ни else if, будет ли m в последнем значении n?
[/QUOTE]
В m будет то значение, которое в нее сохранили последний раз, оно не изменится, если позже поменяешь значение n. У нас тут нету ни ссылок, ни указателей, обычные переменные, в которые "по значению" сохраняются.

Кстати еще по стилю скриптов, вместо цифр 0,1,2 стоит писать зарезервированные константы, то есть тут:
[B]if( block_state() != #0)[/B] пишем вместо 0 константу [B]Block_clear[/B]. По поводу [B]state[/B] тоже самое.
А то такой скрипт читаешь и нужно лезть в документацию, вспоминать в каком порядке там идут эти константы.

Кстати а чему изначально тут [B](...)[/B] эти переменные заданы. Они ведь там инициализируются ? Спрашиваю, чтобы понимать смысл сохранения перед [B]if[/B].

vicente 29.09.2021 18:00

Это я так коряво пытался обозначить, что там пропущееы заявления и это кусок скрипта (и так понятно, да, больше не буду... ;)

Кто-нибудь из вас может проверить эту байду в MSTS? Позязя...

[size="1"][color="Silver"]Добавлено через 42 минуты[/color][/size]
А я, для себя, "как только, так и сразу" проверю в Open Rails. Если будет запоминать - возможно, это решит мою проблему с таймерами при загрузке игры


Текущее время: 00:39. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim