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

Re: LuaScript - для RS

СообщениеДобавлено: 26.05.2017, 21:29
i2GR
Люди, да что вы там ТАКОЕ делаете то?!

Re: LuaScript - для RS

СообщениеДобавлено: 26.05.2017, 22:11
ista011
Кстати, есть у кого рабочий код тормозной магистрали состава и вагонного тормозного воздухораспределителя?

Re: LuaScript - для RS

СообщениеДобавлено: 26.05.2017, 23:15
i2GR
Нет, ибо не нужен от слова совсем

Re: LuaScript - для RS

СообщениеДобавлено: 27.05.2017, 10:59
Skif
У меня на тормоза написана "надстройка", фактически, Trainbrake и превратился в "воздухораспределитель" под управлением рукояток кранов и связывающей их логики разобщительных кранов и блокировок.

Но дальше полезть не получится - в отличие от ТРС, скрипты TS не могут непосредственно влиять на переменные давления в тормозной системе и пневматике в целом. Тормоза в игре забиты весьма жестко и весьма глючно, код практически целиком перекочевал из МСТС.

Re: LuaScript - для RS

СообщениеДобавлено: 27.05.2017, 11:34
ista011
Да у меня сейчас также, просто я отдельно от этого сделал тормозную магистраль и столкнулся с проблемой распределения воздуха по ней.

Re: LuaScript - для RS

СообщениеДобавлено: 27.05.2017, 14:16
Света
А в чём заключается проблема?
Я правильно понимаю, что "отдельно сделанная магистраль" - это сообщения, которые передаются из вагона управления по составу, с некоторой задержкой в каждом вагоне?

Re: LuaScript - для RS

СообщениеДобавлено: 27.05.2017, 14:45
ista011
Так надо чтобы в каждом вагоне было одно давление (воздух то по магистрали распределяется равномерно, хоть и с задержкой), а воздействует на магистраль каждый вагон.

Re: LuaScript - для RS

СообщениеДобавлено: 27.05.2017, 15:30
Света
Я не совсем понимаю, какой смысл указывать вагону, в котором нет кабины, и, соответственно, тормозного крана, какое давление в ТМ.
Единственная причина, при которой в этом есть смысл, ИМХО - если надо рассчитать скорость приложения тормозного усилия. Других вариантов не вижу, потому что даже если запихать в каждый вагон код воздухораспределителя и рассчитывать силу торможения для каждого вагона персонально, эти данные вагон использовать не сможет - работать будет TrainBrakeControl ведущего локомотива, остальные игнорируются, а при попытке считывать их значения будут возвращать или nil, или 0.
То есть, какой бы алгоритм не был, но полный расчет тормозов должен происходить исключительно в кабине управления, частичный (для синхронизации) - в неактивных кабинах, на случай смены кабины (хотя, проще синхронизировать ключевые значения через внутренний обмен и не делать дополнительные вычисления). Просто нет смысла делать по другому. ИМХО.
Другое дело, если создавать полную имитацию ТМ. Например, для создания стоп-крана. Тогда смысл в этом есть.
Ну а организовать передачу давления ТМ от ведущего вагона/локомотива совсем ведь не сложно. С помощью SendConsistMessage ().

Re: LuaScript - для RS

СообщениеДобавлено: 27.05.2017, 18:50
Skif
Организовать передачу несложно, но максимум, на что ее можно использовать - поставить в вагоне манометр. Например, в вагоне метро. В этом и выражаются реализованные через жопу (хард кодом) тормоза - системные контролы и переменные нельзя переопределить или модифицировать скриптом, как на ведущем, так и на ведомом подвижном составе. Если бы не так, можно было бы и стоп-кран сделать (с этим как раз проблем нет - передай от него сообщение на локомотив сорвать Emergency на Trainbrake) , и нормальную работу не только тормозов, но и поездных проводов у многосекционников и МВПС. Но увы.

Re: LuaScript - для RS

СообщениеДобавлено: 29.08.2017, 12:31
Света
Функция-драйвер для локомотивного светофора.

Re: LuaScript - для RS

СообщениеДобавлено: 29.08.2017, 14:41
i2GR
дешифратор был бы интереснее

Re: LuaScript - для RS

СообщениеДобавлено: 30.08.2017, 15:04
Света
Отказать - выше моих сил.

Дешифратор для версии 0.5

Инициализация:
Код: Выделить всё
    DataVersion = 0.5
   Sig_ST = {X = {10000, 10000, 10000, 10000}, Y = {10000, 10000, 10000, 10000}}
   SignMess = "0"
   gALSNSt = {X = "none", Y = "none"}
   gDistSig = {X = 0, Y = 0}
   pDistSig = {X = 0, Y = 0}
   gID = {X = "", Y = ""}
   ChFormat = {X = "none", Y = "none"}
   Timer ("ALSN_IN", 0.01)

Системная функция приема сообщений:
Код: Выделить всё
function OnCustomSignalMessage (ConsistMessage)

   SignMess = ConsistMessage
   SecurityDevicesLogic("code")
   
end

Блок дешифратора:
Код: Выделить всё
function SecurityDevicesLogic(argument)
   if argument == "code" then         -- прием и фильтрация кода. Добавить фильтр от других возможных кодов
      local ChFormat_pos = string.find (SignMess, "[~*=+]")
      local ChFormat_data = string.sub(SignMess, ChFormat_pos, ChFormat_pos)
      ID = string.sub(SignMess,11, ChFormat_pos-1);
      if DataVersion == "0.5" then
         Code = tonumber(string.sub(SignMess,1,2))
         Dist = tonumber(string.sub(SignMess,6,10))
         table.insert (Sig_ST.X, 1, Dist)
         table.remove (Sig_ST.X)
         local pval = 9999
         for k, val in ipairs (Sig_ST.X) do
            if val < pval then
               pval = val
            end
         end
         if pval == Dist then
            if Speed > -0.005 and not front then
               ChFormat.Res = ChFormat_data
               gALSNSt.Res, gDistSig.Res, gID.Res = Code, Dist, ID
               Timer ("ALSN_IN", 3, "restart")   -- контроль поступления сообщений
            end
         end
      elseif DataVersion == "0.6" then --другие каналы дешифратора

      elseif DataVersion == "0.7" then --другие каналы дешифратора

      end
   end
end


В таблицах дешифратора присутствует некоторая избыточность - это из-за того, что они используются совместно этим дешифратором и дешифратором 0.7 версии.

В переменную DataVersion необходимо загрузить версию используемой сигналки.

Результат помещается в таблицы:
- gALSNSt.Res - показания светофора;
- gDistSig.Res - расстояние до светофора;
- gID.Res - обозначение светофора (на литерной табличке);
- ChFormat.Res - "частота тока" для фильтра ("~", "*", "+", "=")

Дешифратор использует функцию Timer (). Завершение отсчета свидетельствует о прекращении приема кодов. Для этого в обработчике принятых кодов я сначала проверяю состояние таймера, а только потом, если отсчет не завершен, считываю данные из результатирующих таблиц.

Re: LuaScript - для RS

СообщениеДобавлено: 30.08.2017, 21:45
i2GR
да...тяжеленько понять, что происходит))

Re: LuaScript - для RS

СообщениеДобавлено: 02.09.2017, 18:40
Света
Если Вы сделали в Вашем локомотиве кнопку глушения двигателя или полного отключения всех систем, будьте готовы к тому, что этот локомотив будет заглушен, если в начале сценария он будет расположен дальше, чем за 3 км от игрока. В случае, если этот локомотив заспаунится в сценарии квик-драйва - он проедет мимо как призрак. Без дыма, без огней, а если скриптованная тяга - то ещё и молча...
А все потому, что у симулятора есть плохая привычка устанавливать все контролы в стартовое положение не во время инициализации, а когда игрок приблизится на расстояние 2300 метров от локомотива. И если кнопка отключения предусмотрена - она сработает.
Защита от такого самоуправства очень проста: повесить на такие критические органы управления дополнительные условия, проверяющие, игроку или боту принадлежит локомотив. И, если боту, то блокировать. Помогает )).

i2GR писал(а):да...тяжеленько понять, что происходит))
Если есть какие вопросы - без проблем, я помогу разобраться. Но расписывать построчно как-то не было желания - не факт, что кому-то этот модуль нужен, да и не тянет эта функция на завершенный блок :)

Re: LuaScript - для RS

СообщениеДобавлено: 02.09.2017, 21:55
Skif
Раньше была обратная проблема - чтобы неубиваемый лок заглушить в начале сценария, да так, чтобы гарантированно и желательно еще до старта этого самого сценария! )))


А так, эта, как и многие другие, проблемы, несколько проще решаются созданием для бота отдельного набора блюпринтов, ссылающихся на общие с полноценным локомотивом ресурсы.