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

vicente 20.09.2021 23:50

Ну,, это кому - как ;)
Я не просто так к отослал девятому пункту

КЕ 21.09.2021 00:10

[SPOILER][url=https://imgbb.com/][img]https://i.ibb.co/dLRLkXQ/Clipboard02.gif[/img][/url][/SPOILER]
Вот здесь табло слева показывает коды, идущие в РЦ от этого чётного входного светофора на Иванцево:

2 красных аспекта "1" [B]Dn[/B] и [B]Dv[/B] - коды DISTANCE, соответствующие видимому красному огню.
Nn и Nv - "0" и "2", аспекты NORMAL, и на мониторе пути будет виден более высший аспект "2" - RESTRICTING.

Табло справа - коды, приходящие по РЦ к этому входному от впередистоящего светофора (не виден за кривой).
Как видно по кодам, тот открыт - и NORMAL (в РЦ 2 значения - "0" и "7", сервисы едут по высшему, а низший передаёт доп. инфу), и по DISTANCE - "7". На Мониторе пути будет зелёный, видимый огонь тоже зеленый.

Станционный путь свободен. Ошибка работы входного очевидна.
[COLOR="Blue"]Но в РТС он работает правильно.[/COLOR]

roman5 21.09.2021 00:27

[QUOTE=КЕ;602093]
Станционный путь свободен. Ошибка работы входного очевидна.
[/QUOTE]
Давайте теперь попробуем разобрать все его скрипты этого входного, чтобы понять где ошибка в коде.

vicente 21.09.2021 02:55

Ну, я ставлю на то, что там не хватает какого-нибудь служебного маркера. Между входным и выходным.
У меня нет этого маршрута и сигнализации этой версии, так что, если хотите - скрипты всех девяти подобъектов Signal_Head в этом шейпе- в студию.

Начать предлагаю с NORMAL -голов. Почему у нас RESTRICTING 20, а не CLEAR_2 без ограничения скорости. Поэтому для начала сократим количество скриптов до пяти. То есть, выложите всё, что имеет в названии ALSN.

roman5 21.09.2021 03:05

[QUOTE=vicente;602096]скрипты всех девяти Signal_Head в этом шейпе- в студию.[/QUOTE]
[SPOILER][CODE]SignalShape (
"APK_4AB_YR_GY_I_Kv.s"
"APK_4AB_YR_GY_I_Kv"
SignalSubObjs ( 15
SignalSubObj ( 0
"SIGNAL" "Nastrojki predidusego signala:"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_3AB_YGR_YW_DISTANCE" )
)
SignalSubObj ( 1
"SIGNAL" " - Datj zelenij (inace 2 zeltih)"
SigSubType ( USER1 )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 2
"SIGNAL" "Dlja drugix ukazanij ispolzujte marker!"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_INFO_CLEAR_2" )
)
SignalSubObj ( 3
"SIGNAL" "Nastrojki etogo signala:"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_ALSN_KZ_0_B_0" )
)
SignalSubObj ( 4
"SIGNAL" " - Videlitj, esli ALSN kodiruetsa"
SigSubType ( USER2 )
SignalFlags ( OPTIONAL DEFAULT )
)
SignalSubObj ( 5
"SIGNAL" " - Verhnij zeltij iz dvuh mozet migatj"
SigSubType ( USER3 )
SignalFlags ( OPTIONAL DEFAULT )
)
SignalSubObj ( 6
"SIGNAL" " - Zeltij ALSN na odin zeltij migajusij"
SigSubType ( USER4 )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 7
"SIGNAL" "Odnostoronnij propusk poezda:"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_ALSN_KZ_20_B_20" )
)
SignalSubObj ( 8
"SIGNAL" " - Vhodnoj svetofor"
SigSubType ( GRADIENT_PLATE )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 9
"SIGNAL" " - Prohodnoj svetofor"
SigSubType ( NUMBER_PLATE )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 10
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_Priglasitelnij2" )
)
SignalSubObj ( 11
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_3AB_YGR_YW_ALSN_Z_40_B_40" )
)
SignalSubObj ( 12
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_3AB_YGR_YW_ALSN_Z_60_B_60" )
)
SignalSubObj ( 13
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_4AB_YRG_YW_ALSN_Zel_B_Z" )
)
SignalSubObj ( 14
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_4AB_YR_GY_Kv" )
)
)
)[/CODE][/SPOILER]

[SPOILER][CODE]SCRIPT APK_3AB_YGR_YW_DISTANCE

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float ONE_WAY; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

ONE_WAY = 0; SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( next_INFO ==# 4 ) { next_INFO = 8; }
if ( next_INFO ==# 5 ) { next_INFO = 8; }
if ( next_INFO ==# 6 ) { next_INFO = 8; }
if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) )
{ next_INFO = 8; }

state = SIGASP_STOP;
if ( next_INFO ==# 8 && POEZD ==# 0 && block_state() ==# BLOCK_CLEAR ) {
if ( SVET ==# 0 ) { state = SIGASP_CLEAR_1; }
if ( SVET ==# 1 ) { state = SIGASP_APPROACH_3; }
if ( SVET ==# 2 ) { state = SIGASP_CLEAR_2; }
if ( SVET ==# 3 ) { state = SIGASP_CLEAR_2; }
if ( SVET ==# 4 ) { state = SIGASP_CLEAR_2; }
if ( SVET ==# 5 ) { state = SIGASP_CLEAR_2; }
}
if ( next_INFO ==# 0 && POEZD ==# 0 && block_state() ==# BLOCK_CLEAR ) { state = SIGASP_APPROACH_1; }

if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( ( block_state() ==# BLOCK_OCCUPIED || POEZD !=# 0 ) && opp_POEZD !=# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
if ( opp_ONE_WAY ==# 1 || opp_POEZD ==# 2 ) { state = SIGASP_STOP_AND_PROCEED; }
}
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD ==# 1 ) {
state = SIGASP_STOP_AND_PROCEED;
}
draw_state = def_draw_state (state);

[/CODE][/SPOILER]

[SPOILER][CODE]SCRIPT APK_INFO_CLEAR_2

extern float sig_feature ();
extern float def_draw_state ();
extern float state;
extern float draw_state;

state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_USER1 ) ) { state = SIGASP_CLEAR_2; }
draw_state = def_draw_state (state);[/CODE][/SPOILER]



[SPOILER][CODE]SCRIPT APK_ALSN_KZ_0_B_0

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float ONE_WAY; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

ONE_WAY = 0; SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}
if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) ) { next_INFO = 8; }


state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}
if ( block_state() ==# BLOCK_CLEAR ) {
if ( POEZD !=# 0 || next_INFO ==# 7 ) {
state = SIGASP_STOP_AND_PROCEED;
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD ==# 1 && next_INFO ==# 7 ) { state = SIGASP_RESTRICTING; }
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_RESTRICTING; }
}
}
} else {
state = SIGASP_STOP_AND_PROCEED;
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD ==# 1 ) { state = SIGASP_RESTRICTING; }
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_RESTRICTING; }
}
}
if ( next_INFO ==# 3 ) { state = SIGASP_STOP; }
draw_state = def_draw_state (state);
[/CODE][/SPOILER]

[SPOILER][CODE]SCRIPT APK_ALSN_KZ_20_B_20

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float ONE_WAY; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

ONE_WAY = 0; SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) ) { next_INFO = 8; }

state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}
if ( block_state() ==# BLOCK_CLEAR ) {
if ( next_INFO ==# 2 && POEZD ==# 0 ) {
state = SIGASP_STOP_AND_PROCEED;
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_RESTRICTING; }
}
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) && next_INFO !=# 7 && POEZD ==# 0 ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_RESTRICTING; }
}
}
if ( next_INFO ==# 3 ) {
state = SIGASP_STOP_AND_PROCEED;
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_RESTRICTING; }
}
}
draw_state = def_draw_state (state);
[/CODE][/SPOILER]

[SPOILER][CODE]SCRIPT APK_Priglasitelnij2

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float sig_feature ();
float WORK1; float POEZD; float next_INFO;

POEZD = 0; next_INFO = 8;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING ) { next_INFO = 3; }
}

state = SIGASP_CLEAR_2;
if ( next_INFO ==# 2 && block_state() ==# BLOCK_CLEAR && POEZD ==# 0 ) { state = SIGASP_STOP; }
if ( next_INFO ==# 3 ) { state = SIGASP_STOP; }
draw_state = def_draw_state (state);
[/CODE][/SPOILER]

[SPOILER][CODE]SCRIPT APK_3AB_YGR_YW_ALSN_Z_40_B_40

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float ONE_WAY; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

ONE_WAY = 0; SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( next_INFO ==# 4 ) { next_INFO = 8; }
if ( next_INFO ==# 5 ) { next_INFO = 8; }
if ( next_INFO ==# 6 ) { next_INFO = 8; }
if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) ) { next_INFO = 8; }

state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}
if ( block_state() ==# BLOCK_CLEAR ) {
if ( next_INFO ==# 0 && POEZD ==# 0 ) {
state = SIGASP_APPROACH_1;
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
}
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_STOP; }
}
draw_state = def_draw_state (state);
[/CODE][/SPOILER]

[SPOILER][CODE]SCRIPT APK_3AB_YGR_YW_ALSN_Z_60_B_60

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float ONE_WAY; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

ONE_WAY = 0; SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( next_INFO ==# 4 ) { next_INFO = 8; }
if ( next_INFO ==# 5 ) { next_INFO = 8; }
if ( next_INFO ==# 6 ) { next_INFO = 8; }
if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) ) { next_INFO = 8; }

state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}
if ( block_state() ==# BLOCK_CLEAR ) {
if ( SVET ==# 0 && next_INFO ==# 8 && POEZD ==# 0 ) {
state = SIGASP_APPROACH_1;
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
}
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_STOP; }
}
draw_state = def_draw_state (state);
[/CODE][/SPOILER]

roman5 21.09.2021 03:06

[SPOILER][CODE]SCRIPT APK_4AB_YRG_YW_ALSN_Zel_B_Z

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float ONE_WAY; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

ONE_WAY = 0; SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( next_INFO ==# 4 ) { next_INFO = 8; }
if ( next_INFO ==# 5 ) { next_INFO = 8; }
if ( next_INFO ==# 6 ) { next_INFO = 8; }
if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) ) { next_INFO = 8; }

state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}
if ( block_state() ==# BLOCK_CLEAR ) {
if ( SVET !=# 0 && next_INFO ==# 8 && POEZD ==# 0 ) {
state = SIGASP_CLEAR_2;
if ( sig_feature( SIGFEAT_USER4 ) && SVET ==# 1 ) { state = SIGASP_APPROACH_1; }
if ( !sig_feature( SIGFEAT_USER2 ) ) { state = SIGASP_RESTRICTING; }
}
}

if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) { state = SIGASP_STOP; }
}
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD ==# 1 && block_state() ==# BLOCK_CLEAR ) { state = SIGASP_RESTRICTING; }
draw_state = def_draw_state (state);
[/CODE][/SPOILER]
[SPOILER][CODE]SCRIPT APK_4AB_YR_GY_Kv

extern float block_state ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float opp_sig_lr ();
extern float opp_sig_mr ();
extern float sig_feature ();
float WORK1; float SVET; float POEZD; float next_INFO; float opp_ONE_WAY; float opp_POEZD;

SVET = 0; POEZD = 0; next_INFO = 8; opp_POEZD = 0; opp_ONE_WAY = 0;
if ( block_state() !=# BLOCK_JN_OBSTRUCTED ) {
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==# SIGASP_APPROACH_3 ) { SVET = 3; } if ( WORK1 ==# SIGASP_APPROACH_2 ) { SVET = 2; }
if ( WORK1 ==# SIGASP_APPROACH_1 ) { SVET = 1; }
if ( WORK1 ==# SIGASP_RESTRICTING ) { POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; } if ( WORK1 ==# SIGASP_APPROACH_3 ) { next_INFO = 6; }
if ( WORK1 ==# SIGASP_APPROACH_2 ) { next_INFO = 5; } if ( WORK1 ==# SIGASP_APPROACH_1 ) { next_INFO = 4; }
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { next_INFO = 2; } if ( WORK1 ==# SIGASP_RESTRICTING )
{ next_INFO = 3; } if ( WORK1 ==# SIGASP_STOP ) { next_INFO = 0; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}

if ( next_INFO ==# 4 ) { next_INFO = 8; }
if ( next_INFO ==# 5 ) { next_INFO = 8; }
if ( next_INFO ==# 6 ) { next_INFO = 8; }
if ( next_INFO ==# 3 && sig_feature( SIGFEAT_NUMBER_PLATE ) )
{ next_INFO = 8; }

state = SIGASP_STOP;
if ( next_INFO ==# 8 && POEZD ==# 0 && block_state() ==# BLOCK_CLEAR ) {
if ( SVET ==# 0 ) { state = SIGASP_STOP_AND_PROCEED; }
if ( SVET ==# 1 ) { state = SIGASP_RESTRICTING; }
if ( SVET ==# 2 ) { state = SIGASP_CLEAR_1; }
if ( SVET ==# 3 ) { state = SIGASP_APPROACH_1; }
if ( SVET ==# 4 ) { state = SIGASP_APPROACH_1; }
if ( SVET ==# 5 ) { state = SIGASP_APPROACH_2; }
}
if ( next_INFO ==# 0 && POEZD ==# 0 && block_state() ==# BLOCK_CLEAR ) {
if ( SVET ==# 0 ) { state = SIGASP_CLEAR_2; }
if ( SVET !=# 0 ) { state = SIGASP_APPROACH_3; }
if ( !sig_feature( SIGFEAT_USER3 ) ) { state = SIGASP_CLEAR_2; }
}

if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD ==# 1 ) { state = SIGASP_STOP; }
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) &&
( opp_POEZD ==# 2 || opp_ONE_WAY ==# 1 ) ) { state = SIGASP_STOP; }
draw_state = def_draw_state (state);
[/CODE][/SPOILER]

vicente 21.09.2021 04:22

Ну, давайте попробуем выяснить: какая из NORMAL голов выдаёт нам наш RESTRICTING . Это сложно, но возможно. В MSTS единственная информация, которую можно передать от одной сигнальной головы к другой - аспекты.

Первая голова типа NORMAL - APK_ALSN_KZ_0_B_0.
Так как sig_feature USER2 у нас выбрана в настройках светофора (скрин из TSRE5 от [B]roman5[/B]) и блок, как вы утверждаете, своюоден, методом исключения, голова даст RESTRICTING только когда opp_POEZD 2, или opp_ONE_WAY 1..
opp_ONE_WAY будет 1 когда сигнал NORMAL "сзади" входного по ходу движения будет наиболее запрещающим аспектом (нижним) давать STOP_AND_PROCEED.
opp_POEZD будет 2 когда голова DISTANCE, расположенная так же, наиболее разрешающим аспектом (вехним) будет в RESTRICTING.

[size="1"][color="Silver"]Добавлено через 5 минут[/color][/size]
Так что, Костя, пожалуйста, поставь ещё одно табло так, чтобы оно смотрело "назад". И, да. Лёша использует и DISTANCE и INFO в своей сигнализации. Так что, сигнальные головы в табло не должны быть этих типов. Надо поменять их на что-нибудь другое. SHUNTING, REPEATER...

[size="1"][color="Silver"]Добавлено через 18 минут[/color][/size]
[Ушел спать]
Я в предыдущих постах говорил о "религии"... Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С. Буржуи называют эту программу "с натяжкой Quake C" - С очень ограниченный в функционале. Я всегда боялся даже присваивать переменным начальные значения в sigscr.dat считая эту программу статической...

roman5 21.09.2021 06:41

[QUOTE=vicente;602100]Лёша использует и DISTANCE и INFO в своей сигнализации. Так что, сигнальные головы в табло не должны быть этих типов. Надо поменять их на что-нибудь другое. SHUNTING, REPEATER...
[/QUOTE]
В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.

[QUOTE=vicente;602100]
Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С. [/QUOTE]
Хочешь сказать, что она может быть не локальной [CODE]float WORK1;[/CODE], а глобальной, то есть один скрипт будет писать в нее, другой прочитает из нее ( в С++ эта называется проблемой обращения с общей памятью - мьютексы ).

[size="1"][color="Silver"]Добавлено через 21 минуту[/color][/size]
[QUOTE=vicente;602100]
opp_ONE_WAY будет 1 когда сигнал NORMAL "сзади" входного по ходу движения будет наиболее запрещающим аспектом (нижним) давать STOP_AND_PROCEED.
[/QUOTE]
Похоже так.
[SPOILER][IMG]https://i.ibb.co/PTjq4kT/image.png[/IMG][/SPOILER]

[size="1"][color="Silver"]Добавлено через 13 минут[/color][/size]
[QUOTE=vicente;602100]методом исключения, голова даст RESTRICTING только когда opp_POEZD 2, или opp_ONE_WAY 1..
[/QUOTE]
А там ведь еще условие
[CODE]if ( POEZD !=# 0 || next_INFO ==# 7 )[/CODE]

[B]POEZD [/B] будет не 0, если

[CODE]WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }[/CODE]

Но DISTANCE next сигнала на табло SIGASP_CLEAR_2.

Потом:
[CODE]WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; }[/CODE]

На табло нет INFO, я добавил вывод в лог, поправив скрипт Табло:

[CODE]SCRIPT N_DASP
extern float state;
extern float next_sig_mr();
extern float next_sig_lr();
extern float draw_state;
extern float def_draw_state;
extern float debug_header();
extern float debug_out();
extern float debug_out2();
float WORK1;

state = next_sig_mr (SIGFN_DISTANCE);
draw_state = def_draw_state (state);
debug_header();


WORK1 = next_sig_mr ( SIGFN_DISTANCE );
debug_out2 (2001, WORK1);

WORK1 = next_sig_lr(SIGFN_DISTANCE);
debug_out2(2002,WORK1);

WORK1 = next_sig_mr(SIGFN_NORMAL);
debug_out2(2003,WORK1);

WORK1 = next_sig_lr(SIGFN_NORMAL);
debug_out2(2004,WORK1);

WORK1 = next_sig_mr(SIGFN_INFO);
debug_out2(2005,WORK1);

WORK1 = next_sig_lr(SIGFN_INFO);
debug_out2(2006,WORK1);[/CODE]

Получил в логе:
2001.000000 7.000000
2002.000000 7.000000
2003.000000 0.000000
2004.000000 7.000000
2005.000000 7.000000
2006.000000 7.000000

То есть по INFO голове идет SIGASP_CLEAR_2, по обоим аспектам lr,mr.
То есть в это условие не попадаем.

КЕ 21.09.2021 09:31

[QUOTE=vicente;602100]... Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С... Я всегда боялся даже присваивать переменным начальные значения в sigscr.dat считая эту программу статической...[/QUOTE]
Может быть, Леше это удалось.
Я, например, сколько ни пытался сохранять переменные (для манёвров) - бесполезно, они не работают. Или сбрасываются при опросе сигнальных точек, или вообще не реагируют.
[SPOILER][url=https://ibb.co/L0TCP62][img]https://i.ibb.co/S6kKx09/Clipboard03.gif[/img][/url][/SPOILER] Табло только показывает в левых столбцах коды DISTANCE, а само - REPEATER. Вот поставил обратносмотрящее - левое. Скинул [B]Roman5[/B] свой "БМО" c [I]YardCam[/I] для удобства наблюдений.

vicente 21.09.2021 12:54

[QUOTE=roman5;602103]В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.[/QUOTE]
Я не помнил: какие типы голов на табло. Я с телефона всё это делаю.

[QUOTE=roman5;602103]
Хочешь сказать, что она может быть не локальной (...), а глобальной, то есть один скрипт будет писать в нее, другой прочитает из нее ( в С++ эта называется проблемой обращения с общей памятью - мьютексы ). [/QUOTE]
В неё пишется 4 раза. 2 со следующего/их сигнала/ов (головы DISTANCE и NORMAL, теоретически, могут быть на разных сигналах, я не смотрел всю конфигурацию сигнализации на этот предмет). Я говорю о том, что в реальном времени, если несколько условий для WORK1 будут одинаковыми, соответствующие переменные получат соответствующие значения одновременно. Но, возможно, автор всё просчитал, и так и должно работать. Я бы сделал по-другому: WORK1, WORK2 и т.д. Но, я не Автор :D

Костя, я как раз пол-года назад задумался над новой сигнализацией с совершенно новой логикой и собирался запоминать переменные по принципу "условие - 1, условие - 0, не выполняется ни то, ни другое условие - переменная остаётся в последнем значении, т.е. запоминается". Не вижу причин, что не будет работать. Но, до сигнализации так и не добрался пока - жизнь закрутилась и пришлось отложить на неопределённый срок.

[QUOTE=roman5;602103] Похоже так. [/QUOTE]
"Оппозит" - светофор "сзади по ходу" в противоположном направлении. Но, я хотел бы знать: где стоит маркер табло слева у тебя на скрине?

[QUOTE=roman5;602103]
А там ведь еще условие
[CODE]if ( POEZD !=# 0 || next_INFO ==# 7 )[/CODE]

[B]POEZD [/B] будет не 0, если

[CODE]WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }[/CODE]

Но DISTANCE next сигнала на табло SIGASP_CLEAR_2.

Потом:
[CODE]WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; }[/CODE]
[/QUOTE]
Мы ищем сейчас: какой из NORMAL -ов даёт этот наиболее разрешающий RESTRICTING. STOP_AND_PROCEED - более запрещающий и нас он сейчас не интересует.
[QUOTE=roman5;602103]
То есть в это условие не попадаем.[/QUOTE]
Надо искать сигнальную голову, подпадающую под все условия и дающую аспект 2.

[size="1"][color="Silver"]Добавлено через 28 минут[/color][/size]
Повторяю/поясняю:
[QUOTE]if ( block_state() ==# BLOCK_CLEAR ) { if ( POEZD !=# 0 || next_INFO ==# 7 ) { state = SIGASP_STOP_AND_PROCEED; [/QUOTE]
...даёт STOP_AND_PROCEED, а не требуемый RESTRICTING , поэтому это условие не выполняется. Данная сигнальная голова, когда блок впереди не занят и нет враждебной стрелки, даст RESTRICTING только в случае, который я описал в предыдущем посте.

[size="1"][color="Silver"]Добавлено через 4 минуты[/color][/size]
Судя по [URL="http://www.trainsim.ru/forum/showpost.php?p=602109&postcount=654"]скрину[/URL], приведенному [B]КЕ[/B], эта сигнальная голова - "чиста". Попробуйте просчитать следующую голову с ALSN.

КЕ 21.09.2021 12:58

[quote] запоминать переменные по принципу "условие - 1, условие - 0, не выполняется ни то, ни другое условие - переменная остаётся в последнем значении, т.е. запоминается".[/quote]
Опять маневры?:)

roman5 21.09.2021 13:25

[QUOTE=vicente;602115]
"Оппозит" - светофор "сзади по ходу" в противоположном направлении. Но, я хотел бы знать: где стоит маркер табло слева у тебя на скрине?
[/QUOTE]
Маркер стоит перед проходным светофором, конусом в сторону, в которую проходной светит. То есть снимает показания с проходного этого.
[SPOILER][IMG]https://i.ibb.co/KWGBCjP/image.png[/IMG][/SPOILER]

vicente 21.09.2021 13:40

Да, всё правильно. Просто табло развёрнуто в другую сторону, поэтому не понял.
Кстати, насчёт POEZD !=# 0 || next_INFO ==# 7 ты тоже прав. Должно выполняться. Просмотрел, что нет фигурной скобки. В любом случае, это не эта голова даёт нам RESTRICTING

[size="1"][color="Silver"]Добавлено через 2 минуты[/color][/size]
Сложно всё. Нужно делать ещё одно табло (чтобы не крафтить новый шейп) для INFO. Скопироаать и переназвать шейп, прописать его в конфиге и написать ему скрипт

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
[QUOTE=КЕ;602119]Опять маневры?:)[/QUOTE]

Ахаха!
Ну, ты же маня знаешь! Они-самые.

roman5 21.09.2021 13:52

[QUOTE=vicente;602121]Нужно делать ещё одно табло (чтобы не крафтить новый шейп) для INFO. Скопироаать и переназвать шейп, прописать его в конфиге[/QUOTE]
Править шейп, то есть *.s файл ? Не достаточно поправить *.ace и дописать скрипты ?

vicente 21.09.2021 14:27

Нужно скопировать *.s, переименовав его (скажем, добавив "_INFO". Скопировать *.sd файл, переименовав его также, как и *.s. Не забыть открыть его в блокноте и изменить имя *.s файла на новое. Прописать новые сигнальные головы в sigcfg.dat, а также говый SignalShape, не забывая при этом уведичит на "1" общее количество шейпов и количество новый SignalHeads на сколько новых голов добавлено. Написать скрипты для новых голов по аналогии с существующими. Если уж совсем делать "как нужно" и, чтобы не путать табло между собой, можно подправить и *.асе

[size="1"][color="Silver"]Добавлено через 20 минут[/color][/size]
Но, для того, чтобы шейп обращался к другому *.асе, нужно править сам файл *.s. Если не ошибаюсь, это Костино табло. Так что, исходник у него должен быть. В крайнем случае, расконверт через SFM (если *.s сжат) и правка в блокноте ссылки на файл текстуры.


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

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