Что надо, чтобы принять "коды" АЛСН? Надо установить в разрабатываемый локомотив приемник-дешифратор. Я предоставляю готовый блок, который надо только подключить и активировать.
Подключить - это разместить скомпилированный скрипт рядом с главным скриптом (engine_script) локомотива и прописать в этом главном скрипте ссылку и вызов инициализации. Активировать - это прописать специальный код, разблокирующий защиту.
Итак, подключение.
Разместите файл скрипта рядом с главным скриптом локомотива. В самом начале главного скрипта впишите функцию require:
- Код: Выделить всё
require "Assets/...ваш путь.../Module_ALSN_DSB240319.out"
Теперь надо проинициализировать и разблокировать дешифратор. Для этого в функции Initialise () вашего скрипта надо сделать вызов:
- Код: Выделить всё
InitModuleALSN (код), где код - это разблокирующий ключ
Все, модуль подключен и готов к работе.
Использование.
Основной блок дешифратора срабатывает при получении сообщений от трансмиттеров. Поэтому располагаем рабочий вызов в теле функции OnCustomSignalMessage (ConsistMessage):
- Код: Выделить всё
function OnCustomSignalMessage (ConsistMessage)
if string.sub (ConsistMessage, 1, 9) == "DSB250319" then
local TB = CallModuleALSN (ConsistMessage, rev, lenght) or {"none"}
if TB[1] == "none" then return end
...
ваш обработчик
...
end
end -- OnCustomSignalMessage (message)
Как можно видеть в коде, основа - вызов CallModuleALSN (ConsistMessage, rev, lenght). В этом вызове в функцию передается само сообщение, rev - это положение реверсивной рукоятки (если вперед, т.е., если надо принять коды спереди, передаем 0, если назад - 1); lenght - это длина состава. Если в скрипте нет глобальной переменной, содержащей значение длины состава, можно ничего не передавать, функция сама выполнит запрос.
Функция CallModuleALSN (ConsistMessage, rev, lenght), в случае успешного декодирования, возвращает таблицу с раскодированными данными, в приведенном примере это будет локальная таблица TB. В данной версии (1.0) это такие данные:
- Код: Выделить всё
TB.signal - ID светофора
TB.anim - показания
TB.state - состояние
TB.aspect - аспект ("0" = "green", "1" = "yellow", "2" = "yellow", "3" = "yellow-red", "11" = "yellow", "-1" = "yellow-red")
TB.als_en - уровень АЛС-ЕН
TB.frequency - частота
TB.type - тип передатчика
TB.station - название станции
TB.distance - расстояние к светофору
Сообщения от трансмиттеров поступают с периодичностью 1 сек +/-1%. Все данные в возвращаемой таблице - в формате строки.
Логирование.
Если что-то пошло не так, создайте папку Log в корневой папке игры. Если модуль декодера обнаружит ошибку, он сгенерирует в этой папке лог-файл, куда выведет информацию о ней.
Разблокировка.
Для того, чтобы декодер начал работать, его нужно разблокировать. Зачем? Ну, это такая защита. Чтобы скрипт могли использовать только те разработчики, кому известен разблокирующий ключ. Все для того, чтобы укозники не могли прикрутить этот скрипт в свои корыта. Поэтому, если вы укозник, сожалею, что вам пришлось аж сюда читать. Если же вы разработчик, имеющий позитивную репутацию на форуме - вообще никаких проблем, пишите в ЛС, я дам ключ.
Сразу предостерегаю любителей проявлять щедрость. Разблокирующий ключ содержит в себе информацию о том, кому он был передан. Следовательно, если на укозах всплывет поделка с декодером, я очень просто смогу узнать, кому был передан оригинал декодера и кто, таким образом, нарушил условия договора. Мне всего лишь надо будет скачать эту поделку и запустить её в специальном режиме.
А, об условиях договора на использование. Первое условие уже, собственно, озвучено - категорический запрет на разглашение разблокирующего ключа. Второе условие - запрет на переименование модуля декодера.
Скачать модуль декодера можно здесь.