Форум Trainsim  

Вернуться   Форум Trainsim > Microsoft Train Simulator > MSTS - Маршруты

Ответ
 
Опции темы Опции просмотра
Старый 22.09.2021, 00:42   #676
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Костя, я о входном и говорю. На прошлом скрине у тебя другие показатели были. Да, маркеры так. Я писал: "для очистки совести". Там "взадсмотрящих" голов нет, вроде. Но, чтобы не было каких-нибудь непредвиденных сюрпризов с DISTANCE , о которых ты писал, вплотную к нужному маркеру - самое то. Что по аспектам? Как тебе тогда удалось получить DISTANCE 0 и 7? Идеи?

Добавлено через 7 минут
Цитата:
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; } }
Я вижу на табло все коды INFO -7. То есть, WORK1 не "хватает" никакой код по скрипту, который я разбирал. Поэтому next_INFO в том скрипте остаётся 0 (изначально заданный)

Добавлено через 3 минуты
Следующие скрипты, которые предлагаю "прозвонить" - это эти два. ИМХО, один из них должен давать тот самый зелёный, который мы не получаем.

Цитата:
Сообщение от roman5 Посмотреть сообщение
Скрытый текст:
Код:
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);

Скрытый текст:
Код:
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);
vicente вне форума   Ответить с цитированием
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА

 
Старый 22.09.2021, 01:54   #677
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
Я вижу на табло все коды INFO -7. То есть, WORK1 не "хватает" никакой код по скрипту, который я разбирал. Поэтому next_INFO в том скрипте остаётся 0 (изначально заданный)

next_INFO = 8 при объявлении и таким и остается, если INFO = 7, как у нас.

Немного комментов добавил в скрипт APK_3AB_YGR_YW_DISTANCE.

Скрытый текст:
Код:
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;

	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; }
		
		// либо SVET больше 0 - если разрещающий поездной сигнал DISTANCE впереди нижний - либо 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; }
		
		// у нас флаг SIGASP_CLEAR_2 у следующего - показывать зеленый опция
		// next_INFO = 8 для SIGASP_CLEAR_2, для остальных меньше
		
		
	}
	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; } // в случае включенного перегона в обратную сторону SIGASP_STOP_AND_PROCEED  ++++++++
		WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
		if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; } // в случае если перегон не включен в обратную, то SIGASP_STOP_AND_PROCEED
	}

	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;
	
	// POEZD=0 если next_sig_lr distance выдает аспект разрещающий поездной
	
	
	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; } //если STOP info следующая голова - не выбрана обычно опция зеленый огонь и им подобное

	// если входной сигнал
	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);


Добавлено через 14 минут
Цитата:
Сообщение от vicente Посмотреть сообщение
Следующие скрипты, которые предлагаю "прозвонить"
APK_4AB_YRG_YW_ALSN_Zel_B_Z выдает STOP.

Скрытый текст:
Код:
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; }  // normal mr = stop тут не попадаем
		WORK1 = next_sig_lr ( SIGFN_DISTANCE );
		if ( WORK1 ==# SIGASP_CLEAR_2 ) { SVET = 5; } if ( WORK1 ==# SIGASP_CLEAR_1 ) { SVET = 4; }  // SVET=5 так как SIGASP_CLEAR_2 Distance впереди
		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; } // POEZD = 0 будет
		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; }
	}
	// next_INFO = 8 так как опция "зеленый" в настройках следующего сигнала отмечена
	
	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; }  // перегон включен в обратную 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; }  // opp_POEZD = 0 встречный проходной горит по SIGASP_STOP Distance
	}

	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 ) {  // SVET = 5, next_INFO = 8, POEZD = 0
			state = SIGASP_CLEAR_2;
			if ( sig_feature( SIGFEAT_USER4 ) && SVET ==# 1 ) { state = SIGASP_APPROACH_1; }   // Zeltij ALSN na odin zeltij migajusij - мимо
			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; } // тут opp_ONE_WAY = 1  получаем SIGASP_STOP в состояние
	}
	if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD ==# 1 && block_state() ==# BLOCK_CLEAR ) { state = SIGASP_RESTRICTING; }
	draw_state = def_draw_state (state);


Добавлено через 5 минут
APK_4AB_YR_GY_Kv тоже STOP выдает.

Скрытый текст:
Код:
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; } // SVET = 5  distance следующего SIGASP_CLEAR_2 оба
		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; }
		
		// next_INFO флаг 8 тут остается,
	}
	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; }  // 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; } // opp_POEZD = 0, встречный проходной зажигается по SIGASP_STOP
	}

	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);
roman5 вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо roman5 за это полезное сообщение:
Старый 22.09.2021, 02:08   #678
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
Как тебе тогда удалось получить DISTANCE 0 и 7?
Не знаем - поезда ехал, моя смотрел.
Ничего не менялось - поезд был на подходе к входному светофору, трафиков в сцене нет, только табло стояли немного по-другому, на скрине - вся разница. Самому непонятно.
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо КЕ за это полезное сообщение:
Старый 23.09.2021, 18:27   #679
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Да, описался. 8, конечно.
Цитата:
Сообщение от roman5 Посмотреть сообщение
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; } // либо SVET больше 0 - если разрещающий поездной сигнал DISTANCE впереди нижний - либо POEZD на белый или красный_1
Почему нижний?

Вообще не рекомендую ловить состояние блока головами типа DISTANCE и делать на этом основании сигнальные выводы. "Козлёночком станешь" (ц)
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 23.09.2021, 18:33   #680
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Точно-точно! Дистансы могут и соврать.
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо КЕ за это полезное сообщение:
Старый 23.09.2021, 18:52   #681
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
SignalSubObj ( 2
"SIGNAL" "Dlja drugix ukazanij ispolzujte marker!"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_INFO_CLEAR_2" )
)
Цитата:
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);
Не даёт выбрать опцию "Dlja drugix ukazanij ispolzujte marker!", потому как не стоит опциональный флаг, ни флаг Default . Поэтому и птичка в настройках не кликабельна. Я так понимаю, шина INFO по умолчанию - CLEAR_2 , если не тыкаем между двумя светофорами маркер.

Добавлено через 7 минут
Поэтому, в нашем случае, например, предыдущему такому же светофору, будь он так установлен, информация по INFO - вообще фиолетова. Он его игнорит программой, причём сделано это явно с умыслом. А что там за выходной с главного пути стоит? Сколько там голов с INFO в названии?

Последний раз редактировалось vicente; 23.09.2021 в 18:55.
vicente вне форума   Ответить с цитированием
Старый 23.09.2021, 19:16   #682
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
А что там за выходной с главного пути стоит? Сколько там голов с INFO в названии?
Вот светофор:

Скрытый текст:
SignalShape (
"APK_4AB_YR_GW_Kr.s"
"APK_4AB_YR_GW_Kr"
SignalSubObjs ( 12
SignalSubObj ( 0
"SIGNAL" "Nastrojki predidusego signala:"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_3AB_YGR_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" ) /// INFO
)
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" " - Zeltij ALSN na odin zeltij migajusij"
SigSubType ( USER4 )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 6
"SIGNAL" "Odnostoronnij propusk poezda:"
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_ALSN_KZ_20_B_20" )
)
SignalSubObj ( 7
"SIGNAL" " - Vhodnoj svetofor"
SigSubType ( GRADIENT_PLATE )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 8
"SIGNAL" " - Prohodnoj svetofor"
SigSubType ( NUMBER_PLATE )
SignalFlags ( OPTIONAL )
)
SignalSubObj ( 9
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_4AB_YR_GW_Kr" )
)
SignalSubObj ( 10
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_3AB_YGR_ALSN_Z_60_B_60" )
)
SignalSubObj ( 11
"SIGNAL" " "
SigSubType ( SIGNAL_HEAD )
SigSubSType ( "APK_4AB_YRG_ALSN_Zel_B_Z" )
)
)
)
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо КЕ за это полезное сообщение:
Старый 23.09.2021, 19:19   #683
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Спасибо. Я так и думал. По INFO - постоянный CLEAR_2. То есть в скрипте next_INFO = 8. Зря табло делали. Мог бы и догадаться я. Прошу прощения
vicente вне форума   Ответить с цитированием
Старый 23.09.2021, 19:39   #684
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
Вообще не рекомендую ловить состояние блока головами типа DISTANCE и делать на этом основании сигнальные выводы.(ц)
А можно подробнее, для меня эти distance,info,normal как набор равнозначных объектов для хранения состояний. Я как раз и спрашивал выше про особенности.

Цитата:
Сообщение от vicente Посмотреть сообщение

Почему нижний?
Ну да, наиболее разрешающий аспект там.

Покопал сигналку, info используют для настройки входных, выходных - то есть на боковой и подобное. Самое интересное это distance там. Проходные это состояние спрашивают друг у друга по цепи. Состоянием stop_and_proceed идет переключение перегона. Самое интересное - это функциональная голова входных distance.

Проходные зажигаются по stop, а по stop_and_proceed гаснут distance.
Входные Иванцево и Драчеево имеют один скрипт для обработки: APK_3AB_YGR_YW_DISTANCE

Если входной выдаст distance stop_and_proceed, то проходные попутные его подхватят, на другом конце в Драчеево это как-то перекинется на встречное направление - пока не понял где и как, но видимо в логике distance входного Драчеево.

Добавлено через 2 минуты
Цитата:
Сообщение от vicente Посмотреть сообщение
шина INFO по умолчанию - CLEAR_2
Именно так, на все пути, по умолчанию, выдавать 2 желтых. А ниже этой головы в этих служебных APK_Sluz_INFO_Link_Marker, для настройки путей, на которые зеленый давать.
roman5 вне форума   Ответить с цитированием
Старый 23.09.2021, 20:00   #685
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
next_INFO = 8
А разве сим может правильно работать при значениях аспектов больше 7?

Добавлено через 5 минут
Цитата:
Сообщение от roman5 Посмотреть сообщение
А можно подробнее, для меня эти distance,info,normal как набор равнозначных объектов для хранения состояний.
Они не равнозначны! (хотя хотелось бы!)
Грубо говоря, NORMAL опрашивается постоянно, DISTANCE немного реже, остальные ещё реже.
Цитата:
Закодировать все необходимые данные для обмена между сигнальными точками только 8 "поездными" кодами невозможно, особенно учитывая, что они созданы для управления движением, а не для передачи служебной информации СЦБ.

DISTANCE выбран как наиболее стабильный и достаточно часто обновляемый, после NORMAL. Далее по тексту канал "D".
Взято отсюда.
__________________
next_state == 7;

Последний раз редактировалось КЕ; 23.09.2021 в 21:26.
КЕ вне форума   Ответить с цитированием
Старый 23.09.2021, 21:03   #686
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от КЕ Посмотреть сообщение
А разве сим может правильно работать при значениях аспектов больше 7?
Там хитро сделано. 8 задаётся изначально. Передаются обычные аспекты 0-7, в случае если ни одно из условий не соблюдается, остаётся 8, а также - часть из того, что передаётся, позже приравнивается тоже к 8-ми.
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 23.09.2021, 21:17   #687
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Помнится, мы с Игорем пробовали со state = 8;, но разные симы по-разному воспринимали такой аспект.
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Старый 23.09.2021, 21:27   #688
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Костя, нет там аспекта 8. next_INFO - просто переменная внутри скрипта
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 23.09.2021, 21:27   #689
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от КЕ Посмотреть сообщение
Помнится, мы с Игорем пробовали со state = 8;, но разные симы по-разному воспринимали такой аспект.
Там не аспект 8, а локальная переменная.
roman5 вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо roman5 за это полезное сообщение:
Старый 23.09.2021, 21:28   #690
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

А, да, действительно!
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипты Вл ~sejo~ TrainZ - Подвижной состав 2 25.09.2010 18:11
Как эта конфигурация ? vita IT, компьютеры, электроника 9 02.06.2009 00:26
Заказы на скрипты TRam_ TrainZ — Об игре 5 03.04.2009 16:25
MSTS-конфигурация компьютера GeneZone MSTS - Об игре 6 03.03.2008 21:03
Trainz 2006 SP1 Конфигурация PC vita TrainZ — Об игре 18 11.02.2008 00:11


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


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim
TopList Нажми для появления дома Trainsim на карте Intermap
Что это?