Страница 15 из 18

Re: LuaScript - для RS

СообщениеДобавлено: 03.12.2017, 17:22
Skif
Учитывая, что метод Initialise тоже довольно странно отрабатывает некоторые начальные установки, дополнение весьма полезное.

Re: LuaScript - для RS

СообщениеДобавлено: 03.12.2017, 17:53
Света
Проверено, что Initialise() не отрабатывает вызовы установки контролов "SetControlValue" и команды прямого управления анимацией.

Re: LuaScript - для RS

СообщениеДобавлено: 03.12.2017, 18:05
Skif
Именно. Дизель на старте тоже нормально заглушить получится через раз.

А OCVC работает только с контролами, которые меняет игрок через интерфейс ввода, поэтому логику контролов я принудительно переопределяю в каждом кадре в Update.


Кстати, отмечен приятный плюс - LUA в TS поддерживает ко-рутины, что в некоторой мере позволяет выполнять асинхронные операции. Но как это может быть использовано в игре, требует уточнений. Для более внятной работы скриптов, TS бы сильно не помешал набор методов, определенных в современных игровых движках для повышения надежности - Awake, Destroy, LastUpdate, FixedUpdate и прочая. Вполне ожидаемо, что Initialise, отработав один раз при размещении локомотива в сцене в редакторе (движок не делает различий между сценами редактора и игровой с точки зрения скриптов, только что не запускает Update), с милой улыбкой не срабатывает, если из редактора перейти в геймплей. К счастью, можно написать полную замену этого метода самому (определив пользовательский метод, перегрузить Initialise не получится), и запустить его однократно или любое требуемое число раз из Update. Кстати, это можно использовать и для сохранения кадра скрипта или запуска на выбор "горячего" или "холодного" состояния локомотива, исходя из каких-либо настроек (не уверен, но возможно, это можно повесить на наличие прикрепленного игрока (иконки машиниста на локомотиве) или цифру динамического бортового номера).

Re: LuaScript - для RS

СообщениеДобавлено: 03.12.2017, 23:34
BooYa
Skif писал(а):Дизель на старте тоже нормально заглушить получится через раз.

Много раз запускал игру с глушеным локом, он как был глушеный, так и оставался. Через раз не было. И он не глушился на старте, а изначально был холодный. :dontknow:

Re: LuaScript - для RS

СообщениеДобавлено: 04.12.2017, 10:17
Skif
У моей машины дизель глушится вообще прямо в редакторе - но я долго этого добивался, чтобы отработать технологию.

Re: LuaScript - для RS

СообщениеДобавлено: 04.12.2017, 15:22
BooYa
Skif
Ну я описывал то, что лок даже в редакторе не глушится, он просто заглушен. Тыкнул его, и он как вагон поставился, и всё. Запустил игру, сел в лок, завёл и поехал.

Re: LuaScript - для RS

СообщениеДобавлено: 30.03.2018, 14:05
Света
Света писал(а):Раз уж пошел разговор о совместимости и разработках, прошу разработчиков при организации межлокомотивной связи бережно относится к этим константам:
Код: Выделить всё
   POSITION_DATA = 1818190202
   PROBE_COUPLINGS = 1818190203
   ENGINE_SYNCHRO_CONTROL = 1818190301
   ENGINE_LOCK_CONTROL = 1818190401
   ENGINE_STATE_QUERY = 1818190501
   ENGINE_REMOTE_CONTROL = 1818190601
   TRANSLATE_CONTROL_VALUE = 1818190701
   DEF_LEADING_LOCOMOTIVE = 1818190801
   INTERVIEW_CONSIST = 1818190901

Так как обмен ещё на стадии разработки, я не могу предоставить протоколы сообщений на каждую константу. По завершении обязательно все будет. А пока что, если понадобится согласование обмена, обращайтесь в ЛС, я опишу протокол на требуемую константу и расскажу, что и зачем используется :cofe:

Обещанное описание можно найти здесь

Re: LuaScript - для RS

СообщениеДобавлено: 30.03.2018, 14:27
Skif
Предлагаю полезное улучшение на будущее - раз уж с глушением тепловозов/электровозов разобрались, давайте прописывать и отключение источников света в режиме редактора. Делается по аналогии, в том же месте кода, скрытием узлов с лампочками. Быстрее будет работать редактор с вашим подвижным составом.

Re: LuaScript - для RS

СообщениеДобавлено: 30.03.2018, 15:02
Света
Код: Выделить всё
-- Список нодов внешнего освещения
TabLightNods = {
[1] = "head_l", [2] = "head_h", [3] = "lig_blr", [4] = "lig_blw", [5] = "lig_brr",
[6] = "lig_brw", [7] = "lig_flr", [8] = "lig_flw", [9] = "lig_frr", [10] = "lig_frw" }
-- Гашение
for k, val in ipairs (TabLightNods) do
   Call("ActivateNode", val, 0)
end

Re: LuaScript - для RS

СообщениеДобавлено: 30.03.2018, 15:12
Skif
Да, можно и так. Тут много вариантов, в зависимости от того, как собрана модель. У моих, например, имена световых узлов не нумерованные, поэтому в цикле их не вырубишь. Я выключаю и включаю построчно. Полезная пометочка мне на будущее - раз они все равно управляются через контролы кабины, узлы можно и тупо пронумеровать, а не обозначить именами.

Re: LuaScript - для RS

СообщениеДобавлено: 05.05.2018, 17:04
Света
Скрипт - генератор для автоматизированного создания номеров ПС.

Re: LuaScript - для RS

СообщениеДобавлено: 16.09.2018, 20:12
Света
По поводу сообщений с идентификатором 4 (REQUEST_TO_PASS_DANGER).
Я говорю о скрипте для путевых объектов на базе signal blueprint.
Есть стандартизированная форма функции OnSignalMessage (message, parameter, direction, linkIndex), при которой происходит сверка на несколько предопределенных типов сообщений, а остальные просто пересылаются дальше. В самом укороченном виде это выгляди так:
Код: Выделить всё
-------------------------------------------------------------------------------------
-- ON SIGNAL MESSAGE
-- Handles messages from other signals.
function OnSignalMessage (message, parameter, direction, linkIndex)

   -- SIGNAL RESET
   if message == RESET_SIGNAL_STATE then
      -- Resets signal state, if scenario is reset
      Initialise ()
   elseif
      -- другие идентификаторы --
   else   
      Call ("SendSignalMessage", message, parameter, -direction, 1, linkIndex)
   end
   
end -- end function OnSignalMessage

Такое решение обладает серьезным недостатком. Запрос на проезд закрытого светофора, отсылаемый игроком, приходит на линк 0 с минусовой стороны, т.е., с противоположной от локомотива игрока! Если этот запрос не обрабатывается в скрипте, он будет просто переслан в противоположную от светофора сторону.
Чтобы с этим бороться и чтобы созданные путевые объекты не блокировали запросы REQUEST_TO_PASS_DANGER, надо следовать двум правилам.
Первое - оснастить все сообщения с идентификатором 4, отсылаемые маркерами или светофорами, каким-нибудь параметром (parameter). Так как движок передает сообщение с пустым параметром, уже будет видно, кто отправитель, особенно если в строке параметра это будет конкретно указано.
Второе - реверсировать сообщение. Причем, реверсировать его в тех случаях, когда оно приходит на линк 0 и не имеет параметра, т.е., является движковым:
Код: Выделить всё
-------------------------------------------------------------------------------------
-- ON SIGNAL MESSAGE
-- Handles messages from other signals.
function OnSignalMessage (message, parameter, direction, linkIndex)

   -- SIGNAL RESET
   if message == RESET_SIGNAL_STATE then
      -- Resets signal state, if scenario is reset
      Initialise ()
   elseif message == REQUEST_TO_PASS_DANGER then
      Call ("SendSignalMessage", REQUEST_TO_PASS_DANGER, parameter, ((linkIndex == 0 and parameter ~= "") and 1 or -direction), 1, linkIndex)
   elseif
      -- другие идентификаторы --
   else   
      Call ("SendSignalMessage", message, parameter, -direction, 1, linkIndex)
   end
   
end -- end function OnSignalMessage

Re: LuaScript - для RS

СообщениеДобавлено: 16.09.2018, 20:54
i2GR
Решение найдено. Осталось выяснить, решение какой проблемы B)

Re: LuaScript - для RS

СообщениеДобавлено: 16.09.2018, 21:06
Света
Это же просто.
Света писал(а):Запрос на проезд закрытого светофора, отсылаемый игроком, приходит на линк 0 с минусовой стороны, т.е., с противоположной от локомотива игрока! Если этот запрос не обрабатывается в скрипте, он будет просто переслан в противоположную от светофора сторону.
Так как запрос пересылается перехватившим его линком в противоположную сторону от светофора, который требуется открыть, очевидно, что светофор останется закрытым. В этом и заключается проблема: я жму ТАВ, а светофор не открывается, потому что между ним и моим локомотивом стоит маркер, который отзеркаливает мои запросы в никуда.

Re: LuaScript - для RS

СообщениеДобавлено: 27.09.2018, 13:16
Света
Это не некропостинг, если что.
ufox писал(а):У меня не получается заставить писать сообщения в лог.
Mr. Angelo писал(а):Есть такая проблема. Раньше писал, LogMate грабил все логи. А после какого-то обновления перестало.
Так что остается только писать в файл

У меня тоже какое-то время не получалось. На самом деле выводить сообщения скрипта в Logmate можно и сейчас, как минимум в TS2015. Для этого надо в CommandLine вписать команду -lua-debug-messages.
Изображение
Что мне нравится - это указание координат мира и пути к главному конфигу для отправителя сообщения. В случае сообщения об ошибке найти виновника совсем просто :D