Форум 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)

КЕ 27.04.2020 01:14

[B]next_sig_id[/B] - это что-то новое! Что за функция?
[B]if (!train_requires_next_signal(sigid,1))[/B] - что за условие?

vicente 27.04.2020 01:38

Это новые функции, которые были внесены в Open Rails. Нехватка аспектов ощущается не только у нас ;)
[B]sigid[/B] определяет объект, с которого нужно считать дополнительную информацию. Строкой [QUOTE]sigid = next_sig_id (SIGFN_NORMAL);[/QUOTE] я "пометил" следующий светофор типа [B]NORMAL[/B]. Это не единственный вариант. Можно выбирать не только этот тип, но и другие. Можно "метить" подобъекты и снимать с них информацию. Есть также функция [B][I]next_[B]n[/B]sig_id(SigFn_TYPE,[B]n[/B])[/I][/B] на подобии функции [B][I]next_[B]n[/B]sig_lr (SigFn_TYPE,[B]n[/B])[/I][/B], о которой я уже рассказывал. Работает точно также - на светофор, находящийся на удалении [B]n[/B].
[B]train_requires_next_signal(sigid,position)[/B] - функция, проверяющая проходит ли [I]Path[/I] через сигнал, идентифицированный параметром [B]sigid[/B]

КЕ 27.04.2020 01:44

То есть эту "метку" ставить на первый проходной в нашем случае?
if (!train_requires_next_signal(sigid,1)) - число "1" означает проверку первого от нас светофора?

vicente 27.04.2020 01:46

На сам светофор не надо ничего ставить. Я его функцией "пометил" с выходного

КЕ 27.04.2020 01:48

А, понял - выбираем нужный светофор, а потом по ходу дела проверяем, проходит путь сервиса через него или нет. Здорово!
Просто, как все гениальное!!! )))
В принципе, я сегодня нулевыми стрелками делал то же самое! )))

vicente 27.04.2020 01:59

Вот этого, как раз, я пока не соображу: можно или не можно...
"Долблюсь" как раз с этим. Поэтому и про оппозиты спрашивал. Мне надо передать от выходного (того самого, что на скрипте [B]KRN25_YR_YW [/B]) противостоящему маневровому информацию о том, что выходной открылся белым. Маневровый должен обработать эту информацию, передав её всем своим "головам" и запомнить. И после того, как манёвры выедут с пути станции, ограждённого этим выходным, "знать", что нужно открываться маневровым показанием. Более того, мне нужно, чтобы, в [B]Timetable Mode[/B], в случае команд [B]$forms, $triggers[/B] и так далее, этот маневровый "помнил" в каком режиме он находится. Потому что [B]$forms, $triggers[/B] "и так далее" - это пропадание сервиса и возникновение на его месте другого. В смысле, если я проложу путь на станцию, и на ней сделаю [B]$forms / $triggers[/B] - выходной с пути , на котором будет выполяться команда останется закрытым до возникновения нового сервиса. А, закрытым он будет, потому что [B]!enabled[/B].

КЕ 27.04.2020 02:04

Не знаю, как в OR, но в МСТС - как я ни бился, запомнить состояние не получалось... При каких-то изменениях в одной сигнальной точке остальные тоже отрабатывают свой скрипт, обновляются, и маневровый режим терялся в момент прохода сервиса через какую-либо сигнальную точку, даже если ее аспект не менялся...

Нет никакой внешней переменной, об'единяющей все светофоры, которую можно было бы устанавливать и сбрасывать командой из скрипта (что-то отдаленно похожее есть в RTS, но там [B]signal_mode[/B] устанавливается и сбрасывается игроком вручную (сочетанием клавиш по ходу игры), а скрипты ее только считывают). А мы можем только менять аспекты сигнальных голов, и больше ничего...

Ну вот только если только попробовать у противостоящего маневрика это:

if (opp_sig_lr (SIGFN_NORMAL) ==2)
{
state =2;
}

и больше ничего! ))

При загрузке сценария исходно все аспекты по нулям, а потом он перейдет в RESTRICTING, да так и останется (?)...

vicente 27.04.2020 02:22

[QUOTE=КЕ;592745]То есть эту "метку" ставить на первый проходной в нашем случае?
if (!train_requires_next_signal(sigid,1)) - число "1" означает проверку первого от нас светофора?[/QUOTE]
"[B]position[/B]" ("число 1") здесь означает другое. Что [I]Path[/I] [B]пересекает[/B] этот светофор. То есть заходит за него.
Если позиция = 0, проверяется, достигает ли маршрут требуемого сигнала;
если позиция = 1; проверяется, выходит ли маршрут за пределы требуемого сигнала.
[зачем им нужен "0" - я хз :confused:]

[size="1"][color="Silver"]Добавлено через 7 минут[/color][/size]
[QUOTE=КЕ;592749]Не знаю, как в OR, но в МСТС как я ни бился, запомнить состояние не получалось. При каких-то изменениях в одной сигнальной точке остальные тоже отрабатывают свой скрипт, обновляются, и маневровый режим терялся в момент прохода сервиса через какую-либо сигнальную точку, даже если аспект не менялся...

Если только попробовать

if (opp_sig_lr (SIGFN_NORMAL) ==2)
{
state =2;
}

и больше ничего! )))[/QUOTE]
У меня была другая идея. Заявить переменную, скажем, float shunt;
Вписать ей действие [I]shunt = shunt +0;[/I], в случае, если на выходном появляется 2, давать [I]shunt = 1[/I], найти условие, при котором возвращать [I]shunt = 0[/I], скажем, поезд прехал маневровый в сторону станции по block_stste () через BLOCK_OCCUPIED - как я уже писал, в ORTS состояние блока учитывает направление движения. Но, я не могу поймать "оппозит"!!!
Сейчас буду пробовать через [I]sigid[/I] фуекцией [B]sigid = opp_sig_id(SIGFN_Type, <n>) [/B] (этот <n> мне тоже непонятен. ИМХО - очепятка просто)

КЕ 27.04.2020 02:39

Переменная [B]float shunt[/B] - не сбросится в ноль при перезагрузке сервисов?
Я так делал, но такая же внутренняя переменная при движении сервиса "терялась" при реверсе движения или еще как-то, как я писал чуть выше.

[quote]надо передать от выходного (того самого, что на скрипте KRN25_YR_YW ) противостоящему маневровому информацию о том, что выходной открылся белым[/quote]
- сервис должен идти по сигналу на выходном, а маневровый "смотрит" вслед сервису? Он не сработает по [B]opp_sig_lr[/B], он в оппозитном положении вообще ничего не считывает с других сигналов. Может только менять свой аспект по BLOCK_STATE ().

vicente 27.04.2020 03:01

Не знаю. Может, я что-то делаю не так...
И
Не должен сбрасываться. Светофор связан с сервисами постольку-поскольку. Через функции. Всё это я собираюсь делать когда светофор [I]!enabled[/I] - сервис движется в другом направлении, он будет [I]!enabled[/I]. И, когда сервис проехал светофор - тот становится снова [I]!enabled[/I]. Вопрос в том, корректно ли так писать скрипт.

КЕ 27.04.2020 03:16

Я использовал оппозиты (маркеры-"датчики" на пути) только для определения занятости БУ, считывая их аспект, меняющийся через функцию BLOCK_STATE (). Они больше ничего не могут.

vicente 27.04.2020 03:19

DISTANCE?

КЕ 27.04.2020 03:33

И нормалы тоже так.
Хотя в последних версиях ОР надо проверять.
[B]sigid = opp_sig_id(SIGFN_Type, <n>)[/B] - сработает? Получится оппозитно проверить путь до какого-то сигнала - после реверса, когда сервис уже прошел наиболее отдаленную точку пути - точку разворота, и пошел по горловине в сторону станции?

vicente 27.04.2020 04:02

Сработало :D
В смысле что-то изменилось. Со скриптом не то. Не открывается.
[B]<n>[/B] я не ставил. Мне кажется, это очепятка у Буржуев

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

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
Вот скрипт
[QUOTE] sigid = opp_sig_id (SIGFN_NORMAL)
next_state = next_sig_lr (SIGFN_NORMAL);
opp_state = ID_SIG_LR (sigid);
shunt_state = shunt_state + 0;

if (!enabled && (opp_state ==# SIGASP_RESTRICTING))
{
shunt_state = 1;
}
if (!enabled && (block_state() ==# BLOCK_OCCUPIED))
{
shunt_state = 0;
}
if (route_set () )
{
state = SIGASP_STOP;
if (enabled && (shunt_state ==# 1))
{
state = SIGASP_RESTRICTING;
}
else if (enabled && (block_state() ==# BLOCK_CLEAR))
{
state = next_state;
}
draw_state = def_draw_state (state);
}
else
{
state = SIGASP_STOP; draw_state = 0;
if (this_sig_lr (SIGFN_NORMAL) ># SIGASP_STOP)
{
draw_state = 2;
}
}
[/QUOTE]

[size="1"][color="Silver"]Добавлено через 9 минут[/color][/size]
Вот маневровый на выходном.
[IMG][URL=http://piccy.info/view3/13776164/db1d3866c221148533c0f5924b726434/][IMG]http://i.piccy.info/i9/5b8d4218b78f48e17253872d1060de79/1587945631/25229/1373151/RunActivityLAA_2020_04_27_02_55_46_38_500.jpg[/IMG][/URL][URL=http://i.piccy.info/a3c/2020-04-27-00-00/i9-13776164/477x350-r][IMG]http://i.piccy.info/a3/2020-04-27-00-00/i9-13776164/477x350-r/i.gif[/IMG][/URL][/IMG]
Я снял а [B]number_plate[/B] и проходные за станцией - в обычном режиме

[size="1"][color="Silver"]Добавлено через 3 минуты[/color][/size]
Дополнительные строки в скрипте - до [B]if (route_set())[/B]
[IMG][URL=http://piccy.info/view3/13776165/3e1315e11a34f34718bf4e8ca07b156f/][IMG]http://i.piccy.info/i9/c843cc2bceafbab840dff503ed3343a8/1587945774/26555/1373151/RunActivityLAA_2020_04_27_02_56_49_76_500.jpg[/IMG][/URL][URL=http://i.piccy.info/a3c/2020-04-27-00-02/i9-13776165/477x350-r][IMG]http://i.piccy.info/a3/2020-04-27-00-02/i9-13776165/477x350-r/i.gif[/IMG][/URL][/IMG]
Без этого должно было открыть паровозику STOP_AND_PROCEED на свободный путь со следующим красным. Что-то пошло не так.

КЕ 27.04.2020 09:53

Странно!! Смотрю скрины с телефона - все нормально, а с ноута через телефон - вместо картинок - "[I][U]Your IP is blacklisted[/U][/I]"...:confused:
Что-то тот сайт хернёй занимается...


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

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