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

LuaScript - для RS

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

Re: LuaScript - для RS

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

А если я хочу захватить такой локомотив? Например, это свободный сценарий, я ставлю локомотивы на разных концах карты, беру один, еду через всю карту, там захватываю другой... а у него блюпринт с ограниченными возможностями...
Разве не проще всего лишь запретить боту обновлять контролы, которые он в нормальных обстоятельствах не использует?
Да и смысл делать лишнюю работу? Мне, например, вместо Shutdown = true всего-то понадобилось вписать Shutdown = isPlayerLoco, что с десять раз проще, чем делать дубликат конфига :)
ИМХО, должен быть всего один блюпринт. Локомотив, описанный в этом блюпринте должен работать независимо от его начального расположение, от того, кто им владеет - бот или игрок, независимо от типа сценария, запущенный или заглушенный, по желанию сценариста и/или игрока. Тем более, что это всё реализуемо.
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

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

Всем привет , возьмем к примеру электровоз . В нем есть оборудование , питающееся от контактной сети непосредственно , например вентилятор , компрессор . Предположим мы все заскриптовали , нажали все кнопки , рога подняли -
вентиляторы работают , опустили - не работают . Рога подняли - электровоз едет , опустили - не едет .
Теперь тоже самое на не электрифицированных путях . Рога подняли электровоз не едет , опустили - не едет , а вентиляторы работают при поднятых рогах и на тепловозных рельсах .Да и просто стрелка вольтметра будет показывать напряжение при поднятых рогах где угодно .То есть нужно как то вписать зависимость от того , а каких рельсах стоит электровоз . Так то он не поедет если что , но оборудование и звуки будут работать и без электрификации . Как определить скриптом состояние электрификации на рельсах , как например определяется текущее ограничение скорости , какой светофор впереди , ускорение , скорость и тд ? А то халтура тогда все наши электровозы , потому что будут гудеть вентилятором на тепловозных рельсах без проводов но с поднятыми рогами если все включить . Вот вл10к ? есть эта фича ? или чс2 . Нужен универсальный способ типа GetElectrification, только рабочий . Была у меня идея , но она несовместима с динамическим тормозом .
Света
Shutdown = isPlayerLoco это вообще что такое ? ничего в половине постов не понятно , на простой народ это явно не рассчитано .
Объекты от радиомастера для RailWorks бесплатно Способ поддержки ПСБ 2200 0303 3116 4229 Save DONBASS People from Kiev Agression
Аватара пользователя
радиомастер
 
Сообщения: 2378
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1371 раз.
Поблагодарили: 1888 раз.
Блог: Просмотр блога (4)
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Костик

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
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

Re: LuaScript - для RS

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

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

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

Почти так же задумал , динамический тормоз не работает если Regulator не в 0 стоит в это время , а значит мы теряем процесс определения на каких рельсах стоим
Объекты от радиомастера для RailWorks бесплатно Способ поддержки ПСБ 2200 0303 3116 4229 Save DONBASS People from Kiev Agression
Аватара пользователя
радиомастер
 
Сообщения: 2378
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1371 раз.
Поблагодарили: 1888 раз.
Блог: Просмотр блога (4)
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Костик

Re: LuaScript - для RS

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

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

Re: LuaScript - для RS

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

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

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

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

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

Re: LuaScript - для RS

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

Я делал так , чтобы вместо 0 Regulator был установлен на 0,00001 , то есть очень маленькая тяга .Ток при этом тоже небольшой , но есть . Электровоз (трамвай) не едет при этом. Но вот реверс должен так же стоять не в 0 . Динамический тормоз не работает (из-за того , что Regulator не в настоящем 0 ) . Задумка была просто грандиозная
Объекты от радиомастера для RailWorks бесплатно Способ поддержки ПСБ 2200 0303 3116 4229 Save DONBASS People from Kiev Agression
Аватара пользователя
радиомастер
 
Сообщения: 2378
Зарегистрирован: 23.10.2010, 18:42
Откуда: Макеевка
Благодарил (а): 1371 раз.
Поблагодарили: 1888 раз.
Блог: Просмотр блога (4)
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Костик

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

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

Re: LuaScript - для RS

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

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

Re: LuaScript - для RS

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

Исправлю. Недосмотр. Спасибо :blush2:
Забанена по собственному желанию. По важным вопросам связаться со мной можно через почту divovigna@gmail.com
Аватара пользователя
Света
 
Сообщения: 1338
Зарегистрирован: 18.06.2016, 19:38
Благодарил (а): 983 раз.
Поблагодарили: 1805 раз.
Играю в: Train Simulator Classic
Имя: Пандора

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
 
Сообщения: 3748
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1556 раз.
Поблагодарили: 2968 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

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

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

Re: LuaScript - для RS

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

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

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

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

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

Re: LuaScript - для RS

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

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

Re: LuaScript - для RS

Сообщение Света » 03.12.2017, 13:55

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

Пред.След.

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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 4