
Представляю вашему вниманию заградительный светофор.
Версия - 1.0
Светофор умеет:
- Находить общий язык с другими объектами инфраструктуры;
- Читать программу, заданную сценаристом, в заданное время закрывать/открывать путь, отчитываться о проделанной работе через лог-файл;
- Взаимодействовать с локомотивом игрока.

Использование светофора при постройке маршрута
Светофор имеет немного необычный формат реализации, а именно - является одной моделью, внешний вид которой настраивается с помощью подключаемых аттрибутов; а в связи с особенностями работы заградительных светофоров, линковка также немного нестандартная.
Линковка светофора. Особенность работы заградительного светофора заключается в том, что при необходимости закрыть ограждаемый участок закрываются все обслуживающие его светофоры. Поэтому светофор оснащен двумя линками, один из которых (0) является рабочим и устанавливается традиционно, другой (1) - связным и используется для связи с другими светофорами группы.
При установке линка 1 необходимо придерживаться одного принципа - этот линк должен быть после линка 0 другого светофора группы и направлен в ту же сторону. Линк 1 последнего светофора должен быть после линка 0 первого, закольцовывая таким образом обмен. Количество светофоров при этом не ограничено.

Если ограждение осуществляет всего один светофор, то его линк 1 располагается после собственного линка 0.
Обозначение светофора на литерной табличке. Вводится в левое поле Identity (на вкладке свойств светофора). Доступны литеры "П", "З" (верхний регистр) и цифры 0-9. Принцип ввода обозначения уже привычный по сигналке Игоря (ака I2GR). Единственное отличие - отсутствие в конце обозначения служебных символов (~ и т.п.) - их вписывать не нужно.
Настройка внешнего вида светофора. По умолчанию светофор оборудован расположенной по центру головой, низко заканчивающуюся характерную окраску мачты (наклонные черно-белые полосы). Если необходимо изменить вид светофора, впишите в правое поле Identity (на вкладке свойств светофора) дополнительные атрибуты:
-h (окраска мачты будет заканчиваться выше);
-l (голова светофора будет смещена влево);
-r (голова светофора будет смещена вправо);
-b (светофор будет оборудован дополнительной большой соединительной коробкой).
Атрибутом является сочетание дефиса и командного символа. Можно вписывать несколько атрибутов.
Пример:
-h-b - высокая окраска, распределительная коробка;
-l-b - левое смещение головы, распределительная коробка;
-h-b-r - высокая окраска, распределительная коробка, правое смещение головы
Порядок и регистр написания атрибутов не имеют значения.
Настройки вступят в силу после рестарта сценария.

Задействование светофора в сценарии
Так как в симуляторе не происходят события, при которых мог бы сработать заградительный светофор, единственный способ его использования - сценарный. Для решения этой задачи предназначен маркер, передающий команду светофору. Его необходимо устанавливать перед светофором, которым этот маркер должен управлять.
Передаваемая команда вписывается в окошко вкладки, всплывающей при двойном клике по маркеру. Структура сценарной команды: "тип_команды-начало-конец-[атрибуты (опционально)]".
Тип сценарной команды. В данной версии есть 2 типа сценарных команд - время и приближение. Для обозначения используются символы "t" и "a". "t" предписывает светофору закрыться/открыться в указанное время, "a" - закрыться при приближении состава в заданный промежуток времени и открыться, когда этот промежуток закончится.
Начало/конец. Это время, когда светофор должен закрыться/открыться. Можно использовать два формата указания времени - задать конкретно время срабатывания, либо указать отсчет времени до срабатывания. Для того, чтобы указать время срабатывания, используется традиционный формат написания времени: "hh:mm:ss" (короткий вид - "mm:ss"). Прочитав такой формат написания, светофор будет ожидать наступления этого времени в игре, после чего отреагирует. Если же указать просто число (без разделителей), то светофор запустит обратный отсчет, по истечении которого сработает.
Пример:
10:15:35 - светофор сработает в 10 часов 15 минут 35 секунд игрового времени
5749 - светофор сработает спустя 5749 секунд (1 час 35 минут 49 секунд) с момента активации команды.
25 - светофор сработает спустя 25 секунд с момента активации команды.
Атрибуты предназначены для дополнительных настроек команды, к которой они приписаны. В данной версии возможны 2 атрибута: "-tab" и "-d(число)".
-tab - атрибут, разрешающий игроку самостоятельно открыть закрытый светофор. Если снабдить команду этим атрибутом, игрок сможет открыть закрытый светофор в любое время. В противном случае запрос "TAB" будет передан дальше по маршруту.
-d(число) - атрибут, позволяющий указать расстояние, на котором светофор отреагирует на приближающийся состав. Работает совместно с типом команды "a". Значение расстояния указывается после символа d. Диапазон значений - от 1 до 1250.
Примеры команд:
t-00:00:05-10-tab - закрыться по времени в 5 секунд после полуночи, через 10 секунд открыться, игрок может открыть "ТАВ"-ом;
a-15:45:00-600-d56-tab - начиная с 15:45 в течении 10 минут (600 сек) отслеживать приближение состава к светофору. Если состав приблизился менее, чем за 56 метров (d56), закрыться. По истечении 10 минут от начала отслеживания открыться. Или раньше, если игрок сделает запрос "ТАВ".
a-15-16:00:00 - через 15 сек после активации команды начать отслеживать приближение состава. Если состав замечен, закрыться (максимальное расстояние 1250 м), открыться (или прекратить отслеживание, если состава не было) в 4 часа вечера игрового времени. На запросы от игрока не реагировать.
Кроме сценарных команд есть служебная команда "log". Приняв такую команду, светофор начнет писать лог-файл. Место расположения логов - папка Log в корневой папке игры. Название лог-файла - "Zagr_Signal - 'имя_светофора'". Если папки Log нет, её нужно создать. Лог начинает писаться с момента активации команды "log", поэтому рекомендую вписывать эту команду самой первой в окне управляющего маркера.
Пример:
log,t-00:00:05-10-tab
log,a-15-16:00:00
Команды (как уже видно с предыдущего примера) пишутся через запятую, без пробелов. Количество команд не ограничено. Регистр не имеет значения. Каждая команда активируется после выполнения предыдущей.
Пример:
log,t-00:00:05-10-tab,a-15-16:00:00,t-01:25:05-01:45:00

Примечание: Из-за некоторой погрешности в отсчете сценарного времени возможно незначительное запаздывание/опережение в работе светофора.
Воздействие светофора на ПС
Согласно моим исследованиям, участие заградительных светофоров в работе АЛСН заключается в прерывании передачи кодовых посылок от светофора к локомотиву. Окончательного решения как именно это происходит (замыканием или разрывом рельсовой цепи) мне найти не удалось, но технически в любом случае результатом является потеря локомотивным дешифратором кодов. Кроме того, так как данный светофор не является частью основной сигналки, а лишь дополняет её, было принято решение делать его совершенно независимым, следовательно на сообщения АЛСН от сигналки он не воздействует.
Поэтому светофор отслеживает перемещение ПС в своей зоне обслуживания и дает знать локомотиву, в какие моменты коды надо принимать, а в какие - нет. Сами же сообщения на локомотив поступают по прежнему. Исходя из этого, в обработчике кодов АЛСН локомотива была введена переменная, блокирующая поступающие сообщения непосредственно в дешифраторе.
Для тех, кто пожелает воспользоваться этим решением и научить свой локомотив взаимодействовать с данными светофорами, даю написанные мной функции:
Если у кого-нибудь возникнет желание написать собственный обработчик, то вот сообщения, передаваемые светофором:
"FSA-Controllers:Zagrad:transfer:имя_светофора:длина_ПС:расстояние_к_ПС:состояние_светофора (2-закрыт)" - передается посекундно при закрытом светофоре.
"FSA-Controllers:Zagrad:exit:имя_светофора:длина_ПС" - отсылается разово ПС, покинувшему отключенный блок-участок.
Установка
Светофор в игре. Скриншоты


Данное дополнение разработано совместно с Андреем (ака BooYa), за что Андрею от меня огромная благодарность!
Также выражаю благодарность:
- Неизвестному (к сожалению) автору исходной модели с форума trainzup.com (если Вы автор, отпишитесь, пожалуйста);
- Косте (ака радиомастер) (модель маркера);
- Артёму (ака dison202,) (консультационная и не только помощь);
- Александру (ака Sanek_KRSK) (ссылка на исходную модель).


Дополнения оттестированы в свободном и стандартном сценариях. Если всё-же обнаружится какой-нибудь недостаток в работе, прошу сразу же сообщать для его устранения. Конфликтов с инфраструктурой не выявлено. Лог чист.
Принимаются пожелания по добавлению новых команд/возможностей.
Update: Данный мод представлен в финальной версии, обновлений и техподдержки не будет. Причина - не актуально.