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

LuaScript - для RS

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

Re: LuaScript - для RS

Сообщение Skif » 02.09.2017, 21:55

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


А так, эта, как и многие другие, проблемы, несколько проще решаются созданием для бота отдельного набора блюпринтов, ссылающихся на общие с полноценным локомотивом ресурсы.
Skif
 
Сообщения: 2871
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 263 раз.
Поблагодарили: 813 раз.
Блог: Просмотр блога (2)
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение Света » 02.09.2017, 22:15

А если я хочу захватить такой локомотив? Например, это свободный сценарий, я ставлю локомотивы на разных концах карты, беру один, еду через всю карту, там захватываю другой... а у него блюпринт с ограниченными возможностями...
Разве не проще всего лишь запретить боту обновлять контролы, которые он в нормальных обстоятельствах не использует?
Да и смысл делать лишнюю работу? Мне, например, вместо Shutdown = true всего-то понадобилось вписать Shutdown = isPlayerLoco, что с десять раз проще, чем делать дубликат конфига :)
ИМХО, должен быть всего один блюпринт. Локомотив, описанный в этом блюпринте должен работать независимо от его начального расположение, от того, кто им владеет - бот или игрок, независимо от типа сценария, запущенный или заглушенный, по желанию сценариста и/или игрока. Тем более, что это всё реализуемо.
Извиняться — не значит быть воспитанным. Быть воспитанным — значит не допускать того, за что необходимо извиняться. (с)
Аватара пользователя
Света
 
Сообщения: 214
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 103 раз.
Поблагодарили: 240 раз.
Блог: Просмотр блога (2)
Играю в: RailWorks
Роль: Разработчик

Re: LuaScript - для RS

Сообщение радиомастер » 03.09.2017, 21:05

Всем привет , возьмем к примеру электровоз . В нем есть оборудование , питающееся от контактной сети непосредственно , например вентилятор , компрессор . Предположим мы все заскриптовали , нажали все кнопки , рога подняли -
вентиляторы работают , опустили - не работают . Рога подняли - электровоз едет , опустили - не едет .
Теперь тоже самое на не электрифицированных путях . Рога подняли электровоз не едет , опустили - не едет , а вентиляторы работают при поднятых рогах и на тепловозных рельсах .Да и просто стрелка вольтметра будет показывать напряжение при поднятых рогах где угодно .То есть нужно как то вписать зависимость от того , а каких рельсах стоит электровоз . Так то он не поедет если что , но оборудование и звуки будут работать и без электрификации . Как определить скриптом состояние электрификации на рельсах , как например определяется текущее ограничение скорости , какой светофор впереди , ускорение , скорость и тд ? А то халтура тогда все наши электровозы , потому что будут гудеть вентилятором на тепловозных рельсах без проводов но с поднятыми рогами если все включить . Вот вл10к ? есть эта фича ? или чс2 . Нужен универсальный способ типа GetElectrification, только рабочий . Была у меня идея , но она несовместима с динамическим тормозом .
Света
Shutdown = isPlayerLoco это вообще что такое ? ничего в половине постов не понятно , на простой народ это явно не рассчитано .
Аватара пользователя
радиомастер
 
Сообщения: 2129
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1028 раз.
Поблагодарили: 1542 раз.
Блог: Просмотр блога (4)
Играю в: RailWorks
Роль: Разработчик
Имя: Костик

Re: LuaScript - для RS

Сообщение Света » 03.09.2017, 21:46

радиомастер писал(а):Shutdown = isPlayerLoco это вообще что такое ? ничего в половине постов не понятно , на простой народ это явно не рассчитано
Ну конечно же, то что я пишу, рассчитано на тех, кто имеет общие представления о методике программирования. Иначе мне придется катать простыни по несколько метров - а смысл? Если вдруг в форуме появится интересующийся новичок и что-то не сможет понять, мне проще будет ответить на прямой конкретный вопрос, чем расписывать каждую строку, не имея уверенности, что это вообще кому-то надо. Ну и я в своих постах делаю посыл на то, что это предназначено для тех, кто скриптует локомотивы или сигналку, то есть уже имеет достаточные навыки скриптования :).
По поводу "Shutdown = isPlayerLoco". Я показываю это присвоение как пример ликвидации ошибки. Это не руководство к действию, а противопоставление идее делать отдельный блюпринт. Я показываю, что значительно проще решить проблему всего лишь заменив одно слово в скрипте.
А вообще это присвоение осуществляется в блоке нажатой кнопки глушения.
Вот как это происходит. Если нажать эту кнопку, запускается несколько процессов, и, в том числе, происходит это присвоение (раньше было "Shutdown = true", что означает "заглушить = да". В функции Update проверяется условие, и если Shutdown == true, то отрабатывается функция глушения. Когда процесс глушения заканчивается, происходит обратное присвоение - Shutdown = false, что означает "заглушить = нет" и мы больше не попадаем на функцию глушения, которая нам не нужна. Когда используется Shutdown = true, двигатель заглушится всегда (если он запущен, естественно). Чтобы бот не мог это сделать, мне пришлось использовать "Shutdown = isPlayerLoco". isPlayerLoco - это не мое изобретение, это как бы привычная переменная практически в каждом скрипте локомотива, который чуть круче дефолтного. Эта переменная имеет логический тип и если составом управляет игрок, ей присваивается значение "true", если бот - "false". Подставив эту переменную в присвоение "Shutdown = isPlayerLoco", мне удалось добиться того, что если игрок жмет кнопку, в переменную "Shutdown" грузится "да", если бот жмет кнопку - "нет". Поэтому под ботом нажатие кнопки ничего не меняет, но зато не пришлось прописывать никаких дополнительных условий.
радиомастер писал(а):Как определить скриптом состояние электрификации на рельсах
Никак, разве что в TS2017 появились новые вызовы.
В дополнениях от АР используется маркер нейтральной вставки на рельсах. Там кривое скриптовое решение, но оно работает. Других вариантов лично мне встречать не приходилось. ИМХО, самый адекватный вариант, позволяющий ещё и напряжение КС устанавливать и передавать на локомотив.
Вот ещё вариант. Установить "Regulator" на 100%, а тягой управлять, рассчитывая параметр Call ("SetPowerProportion", 0, 0). Если "Regulator" не равен 0, значит, ток есть. Но это настолько костыль, что мне даже писать это тяжело. Никогда такое не напишу в своем скрипте :D
Извиняться — не значит быть воспитанным. Быть воспитанным — значит не допускать того, за что необходимо извиняться. (с)
Аватара пользователя
Света
 
Сообщения: 214
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 103 раз.
Поблагодарили: 240 раз.
Блог: Просмотр блога (2)
Играю в: RailWorks
Роль: Разработчик

Re: LuaScript - для RS

Сообщение радиомастер » 03.09.2017, 21:51

Света писал(а):Установить "Regulator" на 100%,

радиомастер писал(а):но она несовместима с динамическим тормозом

Почти так же задумал , динамический тормоз не работает если Regulator не в 0 стоит в это время , а значит мы теряем процесс определения на каких рельсах стоим
Аватара пользователя
радиомастер
 
Сообщения: 2129
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1028 раз.
Поблагодарили: 1542 раз.
Блог: Просмотр блога (4)
Играю в: RailWorks
Роль: Разработчик
Имя: Костик

Re: LuaScript - для RS

Сообщение i2GR » 03.09.2017, 23:16

На неэлектропутях электролок не поедет. Поэтому теоретически (на uktrainsim был тред8), можно проверять нахождение на электропути тем, что каждым первым кадром задавать условия для тяги, а каждым вторым кадром, ее сбрасывать в ноль, если лок не под тягой. Но во 1-х, уменя не получилось пока, во 2-х, лок от таких проверок может паразитно поползти, и в 3-х, два типа электрификации таким способом не проверить, так что для себя я решил, что этот теоретический вариант - не вариант.
Маркерная технология? Пора все в сценарии на маркерах строить)
Аватара пользователя
i2GR
 
Сообщения: 438
Зарегистрирован: 04.09.2008, 16:59
Благодарил (а): 188 раз.
Поблагодарили: 262 раз.
Блог: Просмотр блога (4)
Имя: Игорь

Re: LuaScript - для RS

Сообщение Света » 03.09.2017, 23:25

i2GR писал(а):Маркерная технология? Пора все в сценарии на маркерах строить)

Речь не о сценарных маркерах, а маршрутных.
Если сделать такую систему, этих маркеров понадобится не так уже много - только на границы КС. Может, с десяток. Расставить - полчаса максимум. Раз расставить и всё.

i2GR писал(а):в 3-х, два типа электрификации таким способом не проверить

Во-о-от, потому маркеры в этом деле рулят )). Хотя бы даже потому, что при правильно поставленной задаче можно указать хоть и миллиарды типов КС, а если подойти к делу творчески, то ещё и получить информацию о таких токоразделах на локомотивные мониторы (если они есть) или, как минимум, обеспечить всплывающие окна, предупреждающие о приближении к таким местам.
Извиняться — не значит быть воспитанным. Быть воспитанным — значит не допускать того, за что необходимо извиняться. (с)
Аватара пользователя
Света
 
Сообщения: 214
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 103 раз.
Поблагодарили: 240 раз.
Блог: Просмотр блога (2)
Играю в: RailWorks
Роль: Разработчик

Re: LuaScript - для RS

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

Я делал так , чтобы вместо 0 Regulator был установлен на 0,00001 , то есть очень маленькая тяга .Ток при этом тоже небольшой , но есть . Электровоз (трамвай) не едет при этом. Но вот реверс должен так же стоять не в 0 . Динамический тормоз не работает (из-за того , что Regulator не в настоящем 0 ) . Задумка была просто грандиозная
Аватара пользователя
радиомастер
 
Сообщения: 2129
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1028 раз.
Поблагодарили: 1542 раз.
Блог: Просмотр блога (4)
Играю в: RailWorks
Роль: Разработчик
Имя: Костик

Re: LuaScript - для RS

Сообщение Света » 04.09.2017, 14:28

Система информирования локомотива.
По команде выводит данные о составе:
Изображение
Данные по количеству вагонов и осях можно получить только в том случае, если вагон эти данные передаст, поэтому в составе должны быть вагоны, умеющие понимать и обрабатывать запросы информатора. Если же в составе окажется вагон, который этого не умеет, информация будет немного урезанной:
Изображение

Поэтому просьба ко всем разработчикам вагонов - если вы по какой-либо причине не хотите передавать на доработку свои модели Андрею (ака BooYa), пожалуйста, сделайте правки самостоятельно. Ничего сложного в этом нет.

Для того, чтобы научить вагон общаться с локомотивом, необходимо:
1. В функцию Initialise () вставить несколько констант и переменных:
Код: Выделить всё
   PROBE_COUPLINGS = 1818190203
   INTERVIEW_CONSIST = 1818190901

   WAGON_LENGHT = 13.9 -- габарит  вагона, метров
   AMOUNT_AXLE = 4 -- количество осей вагона, штук
   
   prevLength = 0
   front = false
   rear = false

2. В функцию OnConsistMessage (msg, argument, direction) добавить условие:
Код: Выделить всё
function OnConsistMessage (msg, argument, direction)
   if ... then
      ...--другие условия
   elseif msg == INTERVIEW_CONSIST then
      local tab_data = string.split(argument, ":")
      if tab_data[1] == "inquiry" then
         if not front or not rear then
            argument = "data_capture:1:"..WAGON_LENGHT..":"..TotalMass..":"..AMOUNT_AXLE
            Call ("SendConsistMessage", msg, argument, 1 - direction)
         else
            Call ("SendConsistMessage", msg, argument, direction)
         end
      elseif tab_data[1] == "data_capture" then
         local current_amount_wagon = tonumber(tab_data[2]) + 1
         local current_total_lenght = tonumber(tab_data[3]) + WAGON_LENGHT
         local current_total_mass = tonumber(tab_data[4]) + TotalMass
         local current_amount_axle = tonumber(tab_data[5]) + AMOUNT_AXLE
         if not front or not rear then
            argument = "answer:"..current_amount_wagon..":"..current_total_lenght..":"..current_total_mass..":"..current_amount_axle
            Call ("SendConsistMessage", msg, argument, 1 - direction)
         else
            argument = "data_capture:"..current_amount_wagon..":"..current_total_lenght..":"..current_total_mass..":"..current_amount_axle
            Call ("SendConsistMessage", msg, argument, direction)
         end
      else
         Call ("SendConsistMessage", msg, argument, direction)
      end
   elseif msg == PROBE_COUPLINGS then
      return
   else -- If unknown message type, just repeat message in specified direction
      Call ("SendConsistMessage", msg, argument, direction)
   end
end -- OnConsistMessage ( msg, argument, direction )

3. В функцию Update (time) в любое место добавить строки:
Код: Выделить всё
function Update (time)

   TotalMass = Call ("GetTotalMass")
   Length = Call("GetConsistLength")

   if Length ~= prevLength then
      prevLength = Length
      front = Call("SendConsistMessage", PROBE_COUPLINGS, "blah", 0) == 1
      rear = Call("SendConsistMessage", PROBE_COUPLINGS, "blah", 1) == 1
   end

end -- Update (time)

4. В любое место скрипта добавить новую функцию:
Код: Выделить всё
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

Заинтересованным предоставлю код, предназначенный для установки в локомотив. К сожалению, этот код не является автономным, поэтому я не могу его привести как модуль, который достаточно вставить в функцию.
Извиняться — не значит быть воспитанным. Быть воспитанным — значит не допускать того, за что необходимо извиняться. (с)
Аватара пользователя
Света
 
Сообщения: 214
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 103 раз.
Поблагодарили: 240 раз.
Блог: Просмотр блога (2)
Играю в: RailWorks
Роль: Разработчик

Re: LuaScript - для RS

Сообщение sfateev » 04.09.2017, 18:09

Только слово "количество" всё-таки "quantity" или "amount" (как в в коде), а не "quality" (как на скринах), если быть точным :)
Аватара пользователя
sfateev
 
Сообщения: 833
Зарегистрирован: 29.05.2006, 10:07
Откуда: Москва
Благодарил (а): 515 раз.
Поблагодарили: 68 раз.
Имя: Святослав

Re: LuaScript - для RS

Сообщение Света » 04.09.2017, 19:25

Исправлю. Недосмотр. Спасибо :blush2:
Извиняться — не значит быть воспитанным. Быть воспитанным — значит не допускать того, за что необходимо извиняться. (с)
Аватара пользователя
Света
 
Сообщения: 214
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 103 раз.
Поблагодарили: 240 раз.
Блог: Просмотр блога (2)
Играю в: RailWorks
Роль: Разработчик

Re: LuaScript - для RS

Сообщение BooYa » 05.09.2017, 22:33

Света, спасибо за скрипт.

По поводу написания на английском я тебя немного поправлю:
В английском языке вагоны, ездящие по рельсам, называют карами (car). ЕМНИП, то количество вагонов выглядит как "Number of cars" (число вагонов, дословно). Так будет грамотнее, чем quantity или amount. И нам и иностранцам. Соответственно, Number of axles тоже.
Далее, lenght of wagons и weight of wagons - некорректные фразы. Длина и веса не вагонов, а поезда. Правильно будет написать Train lenght и Train weight.

Итого:
Train lenght
Train weight
Number of cars
Number of axles
Изображение
Аватара пользователя
BooYa
 
Сообщения: 2138
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 599 раз.
Поблагодарили: 1711 раз.
Играю в: RailWorks
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Света » 05.09.2017, 23:20

BooYa писал(а):Длина и веса не вагонов, а поезда.
С этого места поподробнее, пожалуйста... разве считается не вес и длина только вагонов? Я в скрипте специально отнимаю длину локомотивов и их вес перед выводом. Это неправильно? :blush2:
Насчет фраз - исправлю, не проблема (вижу, гугл-переводчик не намного лучше, чем я, знает английский :D ).
Извиняться — не значит быть воспитанным. Быть воспитанным — значит не допускать того, за что необходимо извиняться. (с)
Аватара пользователя
Света
 
Сообщения: 214
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 103 раз.
Поблагодарили: 240 раз.
Блог: Просмотр блога (2)
Играю в: RailWorks
Роль: Разработчик

Re: LuaScript - для RS

Сообщение BooYa » 05.09.2017, 23:52

Света писал(а):С этого места поподробнее, пожалуйста... разве считается не вес и длина только вагонов? Я в скрипте специально отнимаю длину локомотивов и их вес перед выводом. Это неправильно?

Насколько я понял, правильно всё. Считается вес вагонов, но называется это - вес поезда. Потому что поезд - это как раз собранные вагоны в состав. Например, если есть поезд номер такой-то, то если перецепить у него локомотив - номер поезда-то не изменится. Также можно встретить фразу "Локомотив такой-то с поездом номер такой-то". Как-то так, если я ошибся, поправьте спецы.

Света писал(а):вижу, гугл-переводчик не намного лучше, чем я, знает английский

Не совсем так. Гугл переводчик может переводить достаточно хорошо, но есть один нюанс. Нужно знать, как строятся английские фразы и еще небольшие нюансы грамматики, чтобы по русски писать понятно для переводчика. Если очень поверхностно - по русски в переводчик надо писать русские слова, но предложения строить криво, как в английском. Ну и плюсом уже от себя дописывать известные предлоги итд, чтобы его поправлять. Сходу так пример не приведу, но в данной ситуации с вагонами, нужно было знать, что в данном контексте в английском говорится "число того-то", а не количество. И гугл тебе бы тебе правильно выдал. Т.е. чтобы норм переводить с помощью гуглопереводчика, надо знать английский получше, чем London is the Capital of Great Britain.
Количество в отношении вагонов, в какой-нибудь накладной бы употребилось. Было бы написано что-то типа. Gondola. QTY: 64.
Изображение
Аватара пользователя
BooYa
 
Сообщения: 2138
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 599 раз.
Поблагодарили: 1711 раз.
Играю в: RailWorks
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Skif » 06.09.2017, 00:16

Длина, вес и число осей состава указывается без учета локомотива. Локомотив в путевом листе описывается отдельно.
Skif
 
Сообщения: 2871
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 263 раз.
Поблагодарили: 813 раз.
Блог: Просмотр блога (2)
Имя: Дмитрий

Пред.

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

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

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