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

LuaScript - для RS

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

Re: LuaScript - для RS

Сообщение Света » 22.04.2021, 11:03

Приветствую!
Представляю вниманию небезразличных пользователей новую головоломку. Вот график ускорения, снятый при разгоне электрички:
Изображение
Замеры сделаны в головном вагоне.
Как можно увидеть, есть общий тренд, когда при наборе позиций ускорение изменяется по пилообразному закону. Но в этот тренд примешиваются паразитные выбросы, которые и сделали мне головную боль. Мне нужно выловить моменты, когда значение ускорения или меняет свой знак, или очень сильно (все относительно, конечно) выбивается из общего ряда. Но, судя по графику (и по печальным результатам опытов), часто ускорение меняется по непонятным причинам, создавая некую вибрацию, и это полностью всё ломает.
Итак, в чем вопрос. Существует ли относительно простой способ, позволяющий выловить только те участки, когда значение проходит через пик, каким-то образом отсеивая ложные выбросы? При этом, оперировать можно только предыдущими значениями ускорения. Отслеживать превышение жестко заданного порога нельзя, т.е., сделать проверку, было ли превышение 0.9...1 - не вариант.
Есть ли у кого-нибудь какие-либо соображения по этой задачке?
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

Сообщение Света » 04.11.2021, 18:25

У меня вопрос.
Описание к скриптингу говорит, что обращаться к узлам модели можно по разному. Если взять, например, активацию нода у основной модели, то можно обратиться к нему напрямую:
Код: Выделить всё
Call ("ActivateNode", "tails", 1)

Если же надо обратится к узлу, который является частью дочерней модели, то уже в вызове перед двоеточием упоминается имя этой дочки из конфига:
Код: Выделить всё
Call ("ExtHeadLights:ActivateNode", "tails", 1)

С этим всё хорошо и без проблем. Но мне как-то попадалась информация, что таким же образом можно управлять узлом, который является частью дочерней модели, расположенной ещё ниже, то есть, дочкой дочки. Как-то так:
Код: Выделить всё
Call ("Дочка_1:Дочка_2:ActivateNode", "tails", 1)

На деле же это не сработало. А если выкинуть "Дочка_2", то вызов срабатывает, но только для одной "tails", то есть, если дочерних моделей несколько, из всех сработает лишь одна.
Собственно, в чем вопрос. Кто-нибудь пытался строить такие иерархии и управлять ими и был ли этот опыт успешен? Мне интересно, правда ли, что такое управление возможно в принципе и, если да - то что я делаю не так? Или же его выпилили со времен RW3?
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

Сообщение hellishfire » 04.11.2021, 20:09

Отвечу пока предварительно.

По моему опыту работает схема, где "Дочка_1" не упоминается.
Т.е. так:
Код: Выделить всё
Call ("Дочка_2:ActivateNode", "tails", 1)


А если взять живой пример, то вот так:

Код: Выделить всё
Call("ALSN:ActivateNode", "red", 0)
Call("ALSN:ActivateNode", "white", 1)

Где дочерний объект вложен в родительский "KLUB", который, в свою очередь, является дочерним для основного конфига.
Аватара пользователя
hellishfire
 
Сообщения: 674
Зарегистрирован: 14.12.2012, 20:50
Откуда: Москва
Благодарил (а): 927 раз.
Поблагодарили: 998 раз.
Блог: Просмотр блога (4)
Роль: Разработчик
Имя: Игорь

Re: LuaScript - для RS

Сообщение Света » 21.11.2021, 19:35

Если кто-то для контроля работы и отладки скриптов использует ведение лога с временными метками, возможно, эта информация будет полезна.
Чтобы из секунд сделать отформатированный текст (чч:мм:сс), раньше мной использовался такой вариант программы:
Код: Выделить всё
   stime=Call("GetSimulationTime");
   h = math.floor(stime/3600);
   if h<10 then hour = "0"..string.format("%.0f",h); else hour = string.format("%.0f",h);end
   m = math.floor((stime-h*3600)/60);
   if m<10 then minute = "0"..string.format("%.0f",m); else minute = string.format("%.0f",m);end
   s = math.floor(stime-h*3600-m*60);
   if s<10 then sec = "0"..string.format("%.0f",s); else sec = string.format("%.0f",s);end
   stime = hour..":"..minute..":"..sec;

Это прямо в исходном виде. Я не знаю, кто автор, так как понятия не имею, откуда вообще ко мне попал скрипт с этим фрагментом. Но спасибо этому человеку, так как этот кусочек, в немного измененном виде, несколько лет работал в моих скриптах.
Все же, мне хотелось как-то сократить и упростить этот кусок. В первую очередь, для ускорения его работы, я переписала его под локальные переменные:
Код: Выделить всё
   local stime=Call ("GetSimulationTime")
   local h = math.floor (stime/3600)
   if h<10 then hour = "0"..string.format ("%.0f", h) else hour = string.format ("%.0f", h) end
   local m = math.floor ((stime-h*3600)/60)
   if m<10 then minute = "0"..string.format ("%.0f", m) else minute = string.format ("%.0f", m) end
   local s = math.floor (stime-h*3600-m*60)
   if s<10 then sec = "0"..string.format ("%.0f", s) else sec = string.format("%.0f", s) end
   stime = hour..":"..minute..":"..sec

Потом был ещё один вариант, переход на табличную сборку, для оптимизации расхода памяти:
Код: Выделить всё
   stime, t_time = Call ("GetSimulationTime"), {}
   local h = math.floor (stime / 3600)
   local m = math.floor ((stime - h * 3600) / 60)
   local s = math.floor (stime - h * 3600 - m * 60)
   table.insert (t_time, string.format("%02d", h))
   table.insert (t_time, string.format("%02d", m))
   table.insert (t_time, string.format("%02d", s))
   stime = table.concat (t_time, ":")

Потом я открыла для себя ещё один метод:
Код: Выделить всё
   local stime = os.date ("!%X", Call("GetSimulationTime"))

Возникает вопрос - зачем изобретать велосипед, если есть стандартная функция, почему же её не использовать? Но речь не о том. Я больше об оптимизации. Итак, вариант 1 потратил на работу 8.17 условных тиков, вариант 2 - 7.84, вариант 3 - 9.3, вариант 4 - 0.75. Ещё раз: вариант, в котором использована базовая функция конвертирования времени работала в 11(!) раз быстрее, чем та, что гуляет по сети и, наверняка, есть у каждого скриптера.
Как-то так.
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

Сообщение hellishfire » 22.11.2021, 23:38

Спасибо!

Для КЛУБа подойдёт такая же конструкция, но с другим вызовом:

Код: Выделить всё
local stime = os.date ("!%X", SysCall("ScenarioManager:GetTimeOfDay"))
Аватара пользователя
hellishfire
 
Сообщения: 674
Зарегистрирован: 14.12.2012, 20:50
Откуда: Москва
Благодарил (а): 927 раз.
Поблагодарили: 998 раз.
Блог: Просмотр блога (4)
Роль: Разработчик
Имя: Игорь

Re: LuaScript - для RS

Сообщение hellishfire » 17.02.2022, 21:49

Совершенству нет предела
На блоке БИЛ у времени разделитель - точка, а не двоеточие, так что надо добавить немного магии усложнить конструкцию.
У меня значения засылаются сразу в сеттекст, поэтому в переменной нет необходимости.
Код: Выделить всё
Call("Time:SetText", string.gsub(os.date ("!%X", SysCall("ScenarioManager:GetTimeOfDay")),":", "."), 0)
Аватара пользователя
hellishfire
 
Сообщения: 674
Зарегистрирован: 14.12.2012, 20:50
Откуда: Москва
Благодарил (а): 927 раз.
Поблагодарили: 998 раз.
Блог: Просмотр блога (4)
Роль: Разработчик
Имя: Игорь

Re: LuaScript - для RS

Сообщение Света » 18.04.2022, 18:54

Есть проблема.
Я запускаю батник командой os.execute ("Run.bat"). В батнике прописано путь и имя файла, который надо создать. Но мне нужно, чтобы путь можно было изменить на лету. Собственно, в чем вопрос: а) могу ли я в команду os.execute дописать требуемый мне новый путь и б) как внутри самого батника прочесть этот путь и применить? С операционкой и батниками я совсем на "Вы", поэтому мне надо, по возможности, очень доступное объяснение.
Спасибо за помощь!
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

Сообщение stoune » 18.04.2022, 21:23

Хм, я может не верно понял, что требуется, поэтому если что извини. Я так понимаю нам нужно писать в БАТ файл путь, который нам нужен, и после этого запустить его. Я если что далёк от ЛУА в РВ, но возникла мысль, делать как с ЛОГ файлами. Чтоб ЛУА создавал не .txt, а .bat файл, писал в него то что нам нужно (как это делается с логами), и потом соответственно запускал его. Просто мысль, сорян если что :)
Ну а чтение, конструкция как у чтения .txt файла настроек локомотивов? .bat это же текстовый файл по сути, просто умеющий автоматически кормить свой текст в командную строку.
А ещё сами .bat файлы умеют понимать относительные пути (например умеют найти файл на уровень выше, вне зависимости от того на каком диске и как глубоко в папках лежит сам .bat)
Upd. Перечитал вопрос и понял, что задача стоит во время выполнения bat файла менять путь, это невозможно. Насколько я знаю bat это строго заданная последовательность команд, которая во время выполнения(после запуска) меняться на лету уже не может. Но есть костыль, это один bat создаёт второй уже изменённый bat, и потом его запускает.
Аватара пользователя
stoune
 
Сообщения: 348
Зарегистрирован: 14.07.2020, 01:41
Благодарил (а): 414 раз.
Поблагодарили: 620 раз.
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД

Re: LuaScript - для RS

Сообщение Света » 18.04.2022, 23:51

stoune писал(а):я может не верно понял, что требуется
Ты правильно понял. Этот способ, что ты описал, скорее всего и придется применить, так как других я не вижу. Хотя, это, как раз, что, чего мне хотелось избежать... Именно создание и сохранение как самого батника, так и передающего текстовика мне не нравится.

stoune писал(а):понял, что задача стоит во время выполнения bat файла менять путь
Не. Во время работы не надо. Я хочу, чтобы был батник. В нужный мне момент времени я дала ему команду на запуск и адрес, где разместить созданный им текстовик. Батник получил этот адрес и в процессе работы создал файл по указанному пути. Потом я снова запускаю этот же батник, дав ему другой адрес. Он выполнил опять свою программу и создал файл уже в новом месте.

Добавлено спустя 7 минут 14 секунд:
Совсем забыла, кроме описанного ещё нужен "тихий запуск" этого батника, т.е., команды, которые прописываются именно в нем, без дополнительных библиотек и внешних скриптов. Так что если кто-то знает, как это мутить, вот самое время придти на помощь.
Да, понимаю, что хочу много всего и сразу, но вот такие дела, надо, причем срочно...
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

Сообщение stoune » 19.04.2022, 01:21

Света писал(а):Совсем забыла, кроме описанного ещё нужен "тихий запуск" этого батника

Решение у каждой команды, именно команды, для bat писать ключ -s
Это позволить не спрашивать у пользователя разрешение на выполнение команды (копировать/заменить/удалить.....)
Сейчас не вспомню, есть ещё ключ на вообще фоновый запуск bat, без "юзер"-ГУИ окошка. Но не вспомню..
Но и у этого всего есть стоп-фактор. Это антивирусные программы, которые с недоверием относятся на создание и любые действие с исполняемыми файлами (.bat в том числе)
Аватара пользователя
stoune
 
Сообщения: 348
Зарегистрирован: 14.07.2020, 01:41
Благодарил (а): 414 раз.
Поблагодарили: 620 раз.
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД

Пред.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2