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

LuaScript - для RS

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

Re: LuaScript - для RS

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

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

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

Re: LuaScript - для RS

Сообщение Skif » 27.09.2018, 13:44

А еще можно просто писать данные в текстовый файл - и читать его асинхронно внешним софтом!


На основе этого метода работает моя система пульта для TS. Единственный на рынке желдорсим, который позволяет оживить приборную доску.
Skif
 
Сообщения: 3601
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 391 раз.
Поблагодарили: 1012 раз.
Блог: Просмотр блога (3)
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение радиомастер » 16.10.2018, 19:58

Подскажите пожалуйста вот с чем . Имеется три переменных назовем test1, test2 и test3
Как их объединить и отправить одним сообщением сразу , типа так
Код: Выделить всё
Call( "SendConsistMessage", MSGID, test1test2test3,1 )

а на приеме как то разделить чтобы опять на выходе получились test1, test2 и test3 . типа так
Код: Выделить всё
if ( msg == MSGID ) then
      test1 = tonumber(string.sub(argument, 1, 5))
      test2 = tonumber(string.sub(argument, 6,10))
      test3 = tonumber(string.sub(argument, 11, 15))

Напишите простой пример и попроще , мне очень нужно , а то я в координатах и точках запутался много всего туда сюда отправляется (это для трамвая по СМЕ)
Аватара пользователя
радиомастер
 
Сообщения: 2252
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1165 раз.
Поблагодарили: 1672 раз.
Блог: Просмотр блога (4)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Костик

Re: LuaScript - для RS

Сообщение Света » 16.10.2018, 20:49

Вариант, может и не проще, но надежнее.
Отсылка. Все переменные записываются в одну строку, разделенные двоеточиями и отсылаются:
Код: Выделить всё
local message = test1..":"..test2..":"..test3
Call ("SendConsistMessage", MSGID, message, 1)

В месте приема эта строка разбивается на отдельные фрагменты, которые помещаются в специально созданную таблицу (table_tests) по порядку:
Код: Выделить всё
if (msg == MSGID) then
   local table_tests = string.split (argument, ":")
   test1 = tonumber (table_tests[1])
   test2 = tonumber (table_tests[2])
   test3 = tonumber (table_tests[3])
end

Тот кусок, что был в строке первым, будет в ячейке №1, второй - в ячейке №2 и т.д.. Преимущества метода - переменные test1, test2 и test3 никогда не перепутаются, так как они всегда будут рассортированы в порядке, по которому склеивались в строку. При этом их не надо форматировать, так как длина на имеет значения, хоть 1, хоть 1.001 - все будет разделено корректно.
Вот использованная функция string.split ():
Код: Выделить всё
function string:split(delimiter)
   local result = { }
   local from  = 1
   local index = 1
   local delim_from, delim_to = string.find( self, delimiter, from  )

   while delim_from do
      result[index] = string.sub(self, from , delim_from - 1)
      from  = delim_to + 1
      delim_from, delim_to = string.find( self, delimiter, from  )
      index = index + 1
   end

   result[index] = string.sub(self, from)

   return result
end
Её надо вставить в любое место скрипта.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 480
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 234 раз.
Поблагодарили: 473 раз.
Блог: Просмотр блога (7)
Играю в: Train Simulator 2018
Роль: Разработчик

Re: LuaScript - для RS

Сообщение радиомастер » 16.10.2018, 20:54

А две точки перед и за двоеточием обязательно ?
Аватара пользователя
радиомастер
 
Сообщения: 2252
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1165 раз.
Поблагодарили: 1672 раз.
Блог: Просмотр блога (4)
Играю в: Train Simulator 2018
Роль: Разработчик
Имя: Костик

Re: LuaScript - для RS

Сообщение Света » 16.10.2018, 20:58

Да, это оператор, указывающий, что данные, между которыми находятся эти точки, надо соединить в одну строку. В результате получится одна строка "test1:test2:test3". Двоеточия же в этой строке - это метки, указывающие места, по которым надо разбивать строку.
Никогда не опускай руки, ведь впереди тебя ждет еще так много поводов опустить руки, а ты уже опустил руки.
Аватара пользователя
Света
 
Сообщения: 480
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 234 раз.
Поблагодарили: 473 раз.
Блог: Просмотр блога (7)
Играю в: Train Simulator 2018
Роль: Разработчик

Пред.

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

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

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 1