![]() |
![]() |
![]() |
#2 |
Матёрый пользователь
Регистрация: 18.02.2008
Сообщений: 8,754
Вы сказали Спасибо: 1,426
Поблагодарили 2,403 раз(а) в 1,352 сообщениях
![]() |
![]()
как известно, скрипт Path Control зашифрованный, а значит смотреть мы его не можем. Поэтому предлагаю начать с описания возможностей, которые удалось реализовать нашему гениальному соотечественнику Евгению Варванину (Varzу) на примере z6, которая почти этим и занимается.
Итак, эта сигналка при "просчёте маршрутов" определяет какие стрелки надо переключать и за какими маркерами следить, чтобы собрать маршрут. Поэтому проверку "а можно ли собрать маршрут от выходного до входного" лучше предоставить ей (в перспективе - з7). Затем нужен глобальный массив, который содержит информацию о занятости (или не занятости) станционных путей (не маневровых), и, дублируя сигналку, проверяет "заявки на создание маршрута". Т.е. должна выполняться одновременно только 1 заявка на 1 путь, если он свободен. Кроме того, должен быть массив, содержащий ссылки (или идентификаторы) стрелок, а также текущее состояние стрелки (свободна, замкнута в маршруте и "замкнута в маршруте, но поезд проехал"). Всё это необходимо потому, что самый распростанённый метод "не собрался маршрут - жди 5 с" здесь лучше не использовать, т.к. приятнее (и много быстрее) проверять "если часть стрелок маршрута занято, то ждать сообщения о том, что наш поезд съехал со всех стрелок, которые будут использованы в новом маршруте". В идеале сигналка должна передавать список маршрутов, и правило должно даже после "удачной сборки" правилом должна его проверить, и в случае "запрета", который "неизвестно чем вызван", должно "вставать в режим ожидания" и ждать момента, когда на станции прибытия (отправления) произойдёт ещё одно "событие сигнализации", и тогд повторить попытку. А вообще всем интересующимся сигналками и маршрутами предлаегается внимательно изучить скрипты Z6 - это полезнее всего. Чтоб хоть что-то понять, скажу что поток, обрабатываемый функцией "AddHandler" становится "ловителем" всех сообщений, посылаемых объекту, стоящему 1 в аргументах этой функции, с "майорами" и "минорами" (основное и дополн. "имена" сообщения). 4 аргументом является название этого потока От себя добавлю, что стрелки RМM просто при прохождении любого сообщения, связанного с стрелкой, проверяют её направление (право или лево), и соответственно меняют остряк (и рычаг, если есть), не более... Напомню, каждая стрека рассылает всем сообщения о том, что а) на неё наехал поезд б) её перевели в) с неё съехал поезд и что-то ещё. Так что смотрите z6, а в API раздел justion, а также "мультипоточность"(multythreading), "сообщения" (messages) и раздел "хендлеры"
__________________
местный зомбяк |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|
|
![]() Что это? |