![]() |
Ну,, это кому - как ;)
Я не просто так к отослал девятому пункту |
[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] |
[QUOTE=КЕ;602093]
Станционный путь свободен. Ошибка работы входного очевидна. [/QUOTE] Давайте теперь попробуем разобрать все его скрипты этого входного, чтобы понять где ошибка в коде. |
Ну, я ставлю на то, что там не хватает какого-нибудь служебного маркера. Между входным и выходным.
У меня нет этого маршрута и сигнализации этой версии, так что, если хотите - скрипты всех девяти подобъектов Signal_Head в этом шейпе- в студию. Начать предлагаю с NORMAL -голов. Почему у нас RESTRICTING 20, а не CLEAR_2 без ограничения скорости. Поэтому для начала сократим количество скриптов до пяти. То есть, выложите всё, что имеет в названии ALSN. |
[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] |
[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] |
Ну, давайте попробуем выяснить: какая из 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 считая эту программу статической... |
[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. То есть в это условие не попадаем. |
[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] для удобства наблюдений. |
[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. |
[quote] запоминать переменные по принципу "условие - 1, условие - 0, не выполняется ни то, ни другое условие - переменная остаётся в последнем значении, т.е. запоминается".[/quote]
Опять маневры?:) |
[QUOTE=vicente;602115]
"Оппозит" - светофор "сзади по ходу" в противоположном направлении. Но, я хотел бы знать: где стоит маркер табло слева у тебя на скрине? [/QUOTE] Маркер стоит перед проходным светофором, конусом в сторону, в которую проходной светит. То есть снимает показания с проходного этого. [SPOILER][IMG]https://i.ibb.co/KWGBCjP/image.png[/IMG][/SPOILER] |
Да, всё правильно. Просто табло развёрнуто в другую сторону, поэтому не понял.
Кстати, насчёт POEZD !=# 0 || next_INFO ==# 7 ты тоже прав. Должно выполняться. Просмотрел, что нет фигурной скобки. В любом случае, это не эта голова даёт нам RESTRICTING [size="1"][color="Silver"]Добавлено через 2 минуты[/color][/size] Сложно всё. Нужно делать ещё одно табло (чтобы не крафтить новый шейп) для INFO. Скопироаать и переназвать шейп, прописать его в конфиге и написать ему скрипт [size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size] [QUOTE=КЕ;602119]Опять маневры?:)[/QUOTE] Ахаха! Ну, ты же маня знаешь! Они-самые. |
[QUOTE=vicente;602121]Нужно делать ещё одно табло (чтобы не крафтить новый шейп) для INFO. Скопироаать и переназвать шейп, прописать его в конфиге[/QUOTE]
Править шейп, то есть *.s файл ? Не достаточно поправить *.ace и дописать скрипты ? |
Нужно скопировать *.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