Форум Trainsim  

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

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

Ну,, это кому - как
Я не просто так к отослал девятому пункту
vicente вне форума   Ответить с цитированием
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


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

 
Старый 21.09.2021, 00:10   #647
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Скрытый текст:

Вот здесь табло слева показывает коды, идущие в РЦ от этого чётного входного светофора на Иванцево:

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

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

Станционный путь свободен. Ошибка работы входного очевидна.
Но в РТС он работает правильно.
__________________
next_state == 7;

Последний раз редактировалось КЕ; 21.09.2021 в 01:57.
КЕ вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо КЕ за это полезное сообщение:
Старый 21.09.2021, 00:27   #648
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от КЕ Посмотреть сообщение
Станционный путь свободен. Ошибка работы входного очевидна.
Давайте теперь попробуем разобрать все его скрипты этого входного, чтобы понять где ошибка в коде.
roman5 вне форума   Ответить с цитированием
Старый 21.09.2021, 02:55   #649
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

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

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

Последний раз редактировалось vicente; 21.09.2021 в 03:01.
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 21.09.2021, 03:05   #650
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
скрипты всех девяти Signal_Head в этом шейпе- в студию.
Скрытый текст:
Код:
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" )
			)
		)
	)


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


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




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


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


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


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


Скрытый текст:
Код:
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);
roman5 вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо roman5 за это полезное сообщение:
Старый 21.09.2021, 03:06   #651
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
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);
roman5 вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо roman5 за это полезное сообщение:
Старый 21.09.2021, 04:22   #652
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

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

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

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

Добавлено через 18 минут
[Ушел спать]
Я в предыдущих постах говорил о "религии"... Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С. Буржуи называют эту программу "с натяжкой Quake C" - С очень ограниченный в функционале. Я всегда боялся даже присваивать переменным начальные значения в sigscr.dat считая эту программу статической...
vicente вне форума   Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо vicente за это полезное сообщение:
Старый 21.09.2021, 06:41   #653
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
Лёша использует и DISTANCE и INFO в своей сигнализации. Так что, сигнальные головы в табло не должны быть этих типов. Надо поменять их на что-нибудь другое. SHUNTING, REPEATER...
В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.

Цитата:
Сообщение от vicente Посмотреть сообщение
Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С.
Хочешь сказать, что она может быть не локальной
Код:
float WORK1;
, а глобальной, то есть один скрипт будет писать в нее, другой прочитает из нее ( в С++ эта называется проблемой обращения с общей памятью - мьютексы ).

Добавлено через 21 минуту
Цитата:
Сообщение от vicente Посмотреть сообщение
opp_ONE_WAY будет 1 когда сигнал NORMAL "сзади" входного по ходу движения будет наиболее запрещающим аспектом (нижним) давать STOP_AND_PROCEED.
Похоже так.
Скрытый текст:


Добавлено через 13 минут
Цитата:
Сообщение от vicente Посмотреть сообщение
методом исключения, голова даст RESTRICTING только когда opp_POEZD 2, или opp_ONE_WAY 1..
А там ведь еще условие
Код:
if ( POEZD !=# 0 || next_INFO ==# 7 )
POEZD будет не 0, если

Код:
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
 if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
Но DISTANCE next сигнала на табло SIGASP_CLEAR_2.

Потом:
Код:
WORK1 = next_sig_mr ( SIGFN_INFO );
		if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; }
На табло нет INFO, я добавил вывод в лог, поправив скрипт Табло:

Код:
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);
Получил в логе:
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.
То есть в это условие не попадаем.

Последний раз редактировалось roman5; 21.09.2021 в 06:10.
roman5 вне форума   Ответить с цитированием
Старый 21.09.2021, 09:31   #654
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
... Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С... Я всегда боялся даже присваивать переменным начальные значения в sigscr.dat считая эту программу статической...
Может быть, Леше это удалось.
Я, например, сколько ни пытался сохранять переменные (для манёвров) - бесполезно, они не работают. Или сбрасываются при опросе сигнальных точек, или вообще не реагируют.
Скрытый текст:
Табло только показывает в левых столбцах коды DISTANCE, а само - REPEATER. Вот поставил обратносмотрящее - левое. Скинул Roman5 свой "БМО" c YardCam для удобства наблюдений.
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо КЕ за это полезное сообщение:
Старый 21.09.2021, 12:54   #655
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от roman5 Посмотреть сообщение
В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.
Я не помнил: какие типы голов на табло. Я с телефона всё это делаю.

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

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

Цитата:
Сообщение от roman5 Посмотреть сообщение
Похоже так.
"Оппозит" - светофор "сзади по ходу" в противоположном направлении. Но, я хотел бы знать: где стоит маркер табло слева у тебя на скрине?

Цитата:
Сообщение от roman5 Посмотреть сообщение
А там ведь еще условие
Код:
if ( POEZD !=# 0 || next_INFO ==# 7 )
POEZD будет не 0, если

Код:
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
 if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
Но DISTANCE next сигнала на табло SIGASP_CLEAR_2.

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

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

Добавлено через 4 минуты
Судя по скрину, приведенному КЕ, эта сигнальная голова - "чиста". Попробуйте просчитать следующую голову с ALSN.
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 21.09.2021, 12:58   #656
КЕ
Разработчик
 
Аватар для КЕ
 
Регистрация: 05.04.2011
Адрес: Малыгинская эстакада
Сообщений: 3,981
Вы сказали Спасибо: 8,664
Поблагодарили 2,510 раз(а) в 1,132 сообщениях
КЕ стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
запоминать переменные по принципу "условие - 1, условие - 0, не выполняется ни то, ни другое условие - переменная остаётся в последнем значении, т.е. запоминается".
Опять маневры?
__________________
next_state == 7;
КЕ вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо КЕ за это полезное сообщение:
Старый 21.09.2021, 13:25   #657
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
"Оппозит" - светофор "сзади по ходу" в противоположном направлении. Но, я хотел бы знать: где стоит маркер табло слева у тебя на скрине?
Маркер стоит перед проходным светофором, конусом в сторону, в которую проходной светит. То есть снимает показания с проходного этого.
Скрытый текст:
roman5 вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо roman5 за это полезное сообщение:
Старый 21.09.2021, 13:40   #658
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

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

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

Добавлено через 1 минуту
Цитата:
Сообщение от КЕ Посмотреть сообщение
Опять маневры?
Ахаха!
Ну, ты же маня знаешь! Они-самые.
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 21.09.2021, 13:52   #659
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
Нужно делать ещё одно табло (чтобы не крафтить новый шейп) для INFO. Скопироаать и переназвать шейп, прописать его в конфиге
Править шейп, то есть *.s файл ? Не достаточно поправить *.ace и дописать скрипты ?
roman5 вне форума   Ответить с цитированием
Старый 21.09.2021, 14:27   #660
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,765
Вы сказали Спасибо: 899
Поблагодарили 1,213 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

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

Добавлено через 20 минут
Но, для того, чтобы шейп обращался к другому *.асе, нужно править сам файл *.s. Если не ошибаюсь, это Костино табло. Так что, исходник у него должен быть. В крайнем случае, расконверт через SFM (если *.s сжат) и правка в блокноте ссылки на файл текстуры.
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Ответ


Здесь присутствуют: 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:12. Часовой пояс GMT +4.


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