Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   RTrainSim - Об игре (http://www.trainsim.ru/forum/forumdisplay.php?f=50)
-   -   Проблемы RTrainSim и их устранение (http://www.trainsim.ru/forum/showthread.php?t=15767)

Ted 16.10.2013 19:47

Потестил, причину нашёл.
В скриптах вот это
[CODE][B]#[/B]next_sig_lr(SIGFN_NORMAL)[/CODE]
что означает?
МСТС очевидно лишние символы игнорирует. У меня # рассматривается как неизвестное действие от next_sig_lr.

КЕ 16.10.2013 20:38

# - это округление до целого числа. Не знаю, зачем в МСТС это так установлено - всё равно в "рельсовой цепи" идут аспекты сигналов целыми числами: 0, 1, 2, 3, 4, 5, 6, 7.
[SPOILER][B]#next_sig_lr(SIGFN_NORMAL)[/B] - определение аспекта следующего ([B]next[/B]) сигнала по "верхнему" ([B]lr[/B]) значению (в РЦ могут идти одновременно "верхнее" и "нижнее" показание, например, у входных светофоров Тимаса идут аспекты 0 ("STOP") и, скажем, 7 ("боковая часть" в "0" и погашена, по прямой - зелёный).
Т.е. в этой записи в "РЦ" читается "верхний" аспект, тип проверяемого светофора - NORMAL (например, этот Тимасовский сигнал прочитается как "7" - "CLEAR_2")[/SPOILER]

Ted 17.10.2013 06:37

Ну, добавил оператор округления. Хотя, он явно ни к селу ни к городу... Нафига округлять, если там все операторы сравнения имеют целочисленную версию (==#,>#) Ни Тимас ни Слава Усов унарного оператора # не использовали. Нафига это надо?
Сижу дальше. this_sig_lr для последнего сигнала в цепи возвращало всегда STOP. Переделал, теперь просматривает текущий сигнал.

Вот, сейчас он отрабатывает...
[URL=http://img219.imagevenue.com/img.php?image=974251456_TestSig002_122_1183lo.jpg][IMG]http://img219.imagevenue.com/loc1183/th_974251456_TestSig002_122_1183lo.jpg[/IMG][/URL]

КЕ 17.10.2013 09:16

[SIZE="2"]Нет, эта "#" есть и у Славы, и у Тимаса, и у Алексея. Вот Усовская:
[B][COLOR="Green"][SIZE="1"]...
if (next_state ==[COLOR="Red"]#[/COLOR] SIGASP_STOP_AND_PROCEED
|| next_state ==[COLOR="Red"]#[/COLOR] SIGASP_RESTRICTING
|| next_state ==[COLOR="red"]#[/COLOR] SIGASP_STOP )
...[/SIZE][/COLOR][/B]
Тимасовская:
[B][COLOR="green"][SIZE="1"]...
if ((next_state ==[COLOR="red"]#[/COLOR] SIGASP_STOP) || ((next_sig_mr (SIGFN_NORMAL) ==[COLOR="red"]#[/COLOR] SIGASP_STOP_AND_PROCEED) && (next_state ==[COLOR="red"]#[/COLOR] SIGASP_RESTRICTING)))
{state = SIGASP_RESTRICTING;}
...[/SIZE][/COLOR][/B]
У Алексея тоже:
[SIZE="1"][COLOR="Teal"][B]...
if ( WORK1 ==[COLOR="Red"]#[/COLOR] SIGASP_CLEAR_2 ) { SVET = 5; }
if ( WORK1 ==[COLOR="red"]#[/COLOR] SIGASP_CLEAR_1 ) { SVET = 4; }
if ( WORK1 ==[COLOR="red"]#[/COLOR] SIGASP_APPROACH_3 ) { SVET = 3; }
if ( WORK1 ==[COLOR="red"]#[/COLOR] SIGASP_APPROACH_2 ) { SVET = 2; }
...[/B][/COLOR][/SIZE]
Я заменил "словесные" аспекты цифрами, остальное так же.
А [B]this_sig_lr[/B] использовал в светофорах с несколькими субъобъектами для контроля, например - светофор с маршрутным указателем, у которого цифра на МУ загорается только при разрешающем показании этого светофора.[/SIZE]

Ted 17.10.2013 09:29

Да нет же, это совершенно другое. Тут # - часть операторов сравнения!
[QUOTE=Kostian;427410][SIZE="2"]
Усовская:
[B][COLOR="Green"][SIZE="1"]...
if (next_state [COLOR="Red"]==#[/COLOR] SIGASP_STOP_AND_PROCEED
|| next_state [COLOR="Red"]==#[/COLOR] SIGASP_RESTRICTING
|| next_state [COLOR="red"]==#[/COLOR] SIGASP_STOP )
...[/SIZE][/COLOR][/B]

и Тимасовская
[B][COLOR="green"][SIZE="1"]...
if ((next_state [COLOR="red"]==#[/COLOR] SIGASP_STOP) || ((next_sig_mr (SIGFN_NORMAL) [COLOR="red"]==#[/COLOR] SIGASP_STOP_AND_PROCEED) && (next_state [COLOR="red"]==#[/COLOR] SIGASP_RESTRICTING)))
{state = SIGASP_RESTRICTING;}
...[/SIZE][/COLOR][/B]
[/QUOTE]
Это бинарные операторы целочисленного сравнения. Есть и операторы без #, но это попросту другие операторы.

КЕ 17.10.2013 09:54

Понял.
А вчерашнее [B]if(...#next_sig_lr(SIGFN_NORMAL)==...)[/B] - такое же сравнение, что и
[B][SIZE="1"]...
next_state = next_sig_lr (SIGFN_NORMAL);
if (next_state==#...)
...[/SIZE][/B]
только функция проверки задаётся "на ходу":), по ходу скрипта.
[SIZE="1"]Или я не о том?[/SIZE]

Ted 17.10.2013 10:06

Проблема была не в том, что на ходу задаётся.
Компилятор знает операторы ==, ==#,>,># и т.д., но он не знал оператора #.
Код "#next_sig_lr(SIGFN_NORMAL)==0" раскладывался в такое:
PUSH SIGFN_NORMAL
CALL next_sig_lr ;результат в AX
??? AX ; в AX 0
CMP AX,0 ; всегда равно
JNE else... ; на else он не переходил никогда

КЕ 17.10.2013 11:57

Ясно. Я-то думал, [B]#...==[/B] - то же , что и [B]#==[/B].
Ted, а вот в тестовом маршруте, который на скрине - там всё полностью расставлено, АЛСН-блоки перед каждым светофором?
И ещё вопрос - чем лучше открыть файл тайла -*.t?

Ted 18.10.2013 20:44

Всё расставлено, иначе они бы все жёлтым горели.
Дык... 16-ричным редактором каким-нить лучше всего, специализированных редакторов под него нет.

КЕ 20.10.2013 10:08

[QUOTE=Ted;427392][SIZE="1"]Ну, добавил оператор округления... Вот, сейчас он отрабатывает...[/SIZE][/QUOTE]
Ted, а это будет в следующем обновлении?

Арсений К. 29.10.2013 18:35

Как нужно устанавливать RTS? Скопировать содержимое папок GLOBAL, GUI, SOUND, TRAINS в соответствующие папки MSTS?

rts 29.10.2013 20:18

Арсений К.,да

Арсений К. 29.10.2013 21:30

А куда копировать содержимое папки SD?

rts 29.10.2013 21:48

Арсений К.,эту папку просто кинуть в папку RTS

sdv 31.10.2013 23:20

... [Было что-то написано]

[COLOR="Orange"][B]В следующий раз хорошо подумайте, прежде чем нажимать кнопку "Ответить".
Пока устное замечание. Следующее такое сообщение будет считаться флудом со всеми вытекающими. //MJack[/B][/COLOR]


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

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