Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

LuaScript - для RS

Другие вопросы и проблемы разработки дополнений

Re: LuaScript - для RS

Сообщение Skif » 03.12.2017, 17:22

Учитывая, что метод Initialise тоже довольно странно отрабатывает некоторые начальные установки, дополнение весьма полезное.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение Света » 03.12.2017, 17:53

Проверено, что Initialise() не отрабатывает вызовы установки контролов "SetControlValue" и команды прямого управления анимацией.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Re: LuaScript - для RS

Сообщение Skif » 03.12.2017, 18:05

Именно. Дизель на старте тоже нормально заглушить получится через раз.

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


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

Re: LuaScript - для RS

Сообщение BooYa » 03.12.2017, 23:34

Skif писал(а):Дизель на старте тоже нормально заглушить получится через раз.

Много раз запускал игру с глушеным локом, он как был глушеный, так и оставался. Через раз не было. И он не глушился на старте, а изначально был холодный. :dontknow:
Аватара пользователя
BooYa
 
Сообщения: 3499
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1346 раз.
Поблагодарили: 2664 раз.
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Skif » 04.12.2017, 10:17

У моей машины дизель глушится вообще прямо в редакторе - но я долго этого добивался, чтобы отработать технологию.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение BooYa » 04.12.2017, 15:22

Skif
Ну я описывал то, что лок даже в редакторе не глушится, он просто заглушен. Тыкнул его, и он как вагон поставился, и всё. Запустил игру, сел в лок, завёл и поехал.
Аватара пользователя
BooYa
 
Сообщения: 3499
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1346 раз.
Поблагодарили: 2664 раз.
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Андрей

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:

Обещанное описание можно найти здесь
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Re: LuaScript - для RS

Сообщение Skif » 30.03.2018, 14:27

Предлагаю полезное улучшение на будущее - раз уж с глушением тепловозов/электровозов разобрались, давайте прописывать и отключение источников света в режиме редактора. Делается по аналогии, в том же месте кода, скрытием узлов с лампочками. Быстрее будет работать редактор с вашим подвижным составом.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Имя: Дмитрий

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
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Re: LuaScript - для RS

Сообщение Skif » 30.03.2018, 15:12

Да, можно и так. Тут много вариантов, в зависимости от того, как собрана модель. У моих, например, имена световых узлов не нумерованные, поэтому в цикле их не вырубишь. Я выключаю и включаю построчно. Полезная пометочка мне на будущее - раз они все равно управляются через контролы кабины, узлы можно и тупо пронумеровать, а не обозначить именами.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение Света » 05.05.2018, 17:04

Скрипт - генератор для автоматизированного создания номеров ПС.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

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
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Re: LuaScript - для RS

Сообщение i2GR » 16.09.2018, 20:54

Решение найдено. Осталось выяснить, решение какой проблемы B)
Аватара пользователя
i2GR
 
Сообщения: 540
Зарегистрирован: 04.09.2008, 16:59
Благодарил (а): 260 раз.
Поблагодарили: 302 раз.
Блог: Просмотр блога (4)
Имя: Игорь

Re: LuaScript - для RS

Сообщение Света » 16.09.2018, 21:06

Это же просто.
Света писал(а):Запрос на проезд закрытого светофора, отсылаемый игроком, приходит на линк 0 с минусовой стороны, т.е., с противоположной от локомотива игрока! Если этот запрос не обрабатывается в скрипте, он будет просто переслан в противоположную от светофора сторону.
Так как запрос пересылается перехватившим его линком в противоположную сторону от светофора, который требуется открыть, очевидно, что светофор останется закрытым. В этом и заключается проблема: я жму ТАВ, а светофор не открывается, потому что между ним и моим локомотивом стоит маркер, который отзеркаливает мои запросы в никуда.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Re: LuaScript - для RS

Сообщение Света » 27.09.2018, 13:16

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

У меня тоже какое-то время не получалось. На самом деле выводить сообщения скрипта в Logmate можно и сейчас, как минимум в TS2015. Для этого надо в CommandLine вписать команду -lua-debug-messages.
Изображение
Что мне нравится - это указание координат мира и пути к главному конфигу для отправителя сообщения. В случае сообщения об ошибке найти виновника совсем просто :D
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 1096
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 816 раз.
Поблагодарили: 1339 раз.
Блог: Просмотр блога (21)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Пандора

Пред.След.

Вернуться в [RW] Другие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.Ru [Bot] и гости: 1