MSTS при постановке точки разворота "энейблит" сигнал вне маршрута сервиса? Ты уверен, что он это делает через
enabled () ? У меня проходные от этой функции не завися вообще - автоблокировка же. Только на первый проходной ставлю флаг и он, в случае
!enabled выдаёт
RESTRICTING , чтобы по нему выходной давал тоже
RESTRICTING. Вроде, работало это. Много времени прошло уже. Кроме указанного тобой случая "по удалению", когда
RESTRICTING невозможно было дать из-за того, что MSTS "энейблит" два светофора после проследования сервиса. В Open Rails сфетофор становится
!enabled сразу после проследования, и если нет маршрута по удалению - остаётся таковым.
В Open Rails проблем с белыми RES на выходных у меня проблем не было вообще. Единственная, можно сказать, "смазка" была - в окне диспетчера этот первый проходной был красным (в симуляции я это "подправил" постановкой
draw_state в зависимости от занятости пергона и состояния следующих сигналов).
"Нулевая" стрелка, которая нормально "смотрит" в сторону? Да, это решает.
Вот скрипт проходного
Цитата:
SCRIPT KRN23_YGR_3
extern float block_state ();
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float enabled;
extern float sig_feature ();
float next_state;
float has_gradient_plate;
float has_number_plate;
has_number_plate = sig_feature (SIGFEAT_NUMBER_PLATE);
has_gradient_plate = sig_feature (SIGFEAT_GRADIENT_PLATE);
next_state = next_sig_lr (SIGFN_NORMAL);
if (!enabled && has_number_plate)
{
state = SIGASP_RESTRICTING;
if (block_state() !=# BLOCK_CLEAR)
{
draw_state = 0;
}
else if ((next_state ==# SIGASP_STOP) || (next_state ==# SIGASP_STOP_AND_PROCEED) || (next_state ==# SIGASP_RESTRICTING))
{
draw_state = 1;
}
else
{
draw_state = 2;
}
}
else if (block_state() !=# BLOCK_CLEAR)
{
state = SIGASP_STOP; draw_state = 0;
}
else
{
if ((next_state ==# SIGASP_STOP) || (next_state ==# SIGASP_STOP_AND_PROCEED) || (next_state ==# SIGASP_RESTRICTING))
{
state = SIGASP_APPROACH_1; draw_state = 1;
}
else
{
state = SIGASP_CLEAR_2; draw_state = 2;
if (next_state ==# SIGASP_APPROACH_2) draw_state = 4;
else if ((next_state ==# SIGASP_APPROACH_3) || (next_state ==# SIGASP_CLEAR_1)) draw_state = 5;
}
}
|