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

LuaScript - для RS

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

Re: LuaScript - для RS

Сообщение BooYa » 03.09.2015, 02:37

i2GR, да насчет того, о чем ты говоришь, я знаю, и это естественно самый простой и логичный путь. Но я почему спрашивал то. Как известно, пассажирские вагоны топятся двумя способами: 1) Углем 2)От электрической цепи электровоза пинчами. И подобная функция позволила бы реализовать оба типа. Но локов я никаких не разрабатываю, существующие локи никто переделывать не будет, а уж какие-то зарубежные и подавно работать не будут. И это печалька(
Аватара пользователя
BooYa
 
Сообщения: 3748
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1556 раз.
Поблагодарили: 2968 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Linx » 03.09.2015, 08:36

Стесняюсь спросить... НАХУА?! Надо еще тогда сделать скрипт переполнения унитаза :)))
Дизайнер из Орла хочет познакомиться с бригадой ТЧ1 или ТЧ27. Маневры не предлагать :) | Простите, у вас кажется ригель отклеился!
Аватара пользователя
Linx
 
Сообщения: 1797
Зарегистрирован: 02.01.2006, 19:57
Откуда: Орел
Благодарил (а): 822 раз.
Поблагодарили: 1522 раз.
Блог: Просмотр блога (7)
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение Skif » 03.09.2015, 09:15

Спрошу по схожей тематике: если стоит задача отправить сообщение от локомотива по составу, как реализовать "сквозной проход" сообщения по поезду до хвостового вагона, вне зависимости от того, нужна обработка этого сообщения или нет? Т.е. можно ли вызывать SendConsistMessage из функции-обработчика для ретранслирования сообщения дальше по составу в том же направлении, не приведет ли это к зацикливанию вагона "сам на себя" ?
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение BooYa » 03.09.2015, 18:36

Linx писал(а):НАХУА?!

Захуа, что я хочу в РВ катать вагоны, которые и печкой будут дымить под тепловозом, и электричеством питаться от электровоза. Если есть возможность в игре это реализовать, почему нет то? Плюс, будет уже полноценная база работоспособных вагонов, на основе которой, кто-нибудь когда-нибудь в будущем, сможет сделать вагоны других типов, рестораны, почтово-багажные. Для всех сим это что-то своё, кому-то в кабине сидеть, кому-то по родным просторам ехать, а мне в пассажирском вагоне надобно, вот и делаю)

Skif писал(а):Спрошу по схожей тематике: если стоит задача отправить сообщение от локомотива по составу, как реализовать "сквозной проход" сообщения по поезду до хвостового вагона, вне зависимости от того, нужна обработка этого сообщения или нет? Т.е. можно ли вызывать SendConsistMessage из функции-обработчика для ретранслирования сообщения дальше по составу в том же направлении, не приведет ли это к зацикливанию вагона "сам на себя" ?

Можно. Как показывает практика, работает всё нормально (на примере скрипта по анимации тормозов на вагонах)
Аватара пользователя
BooYa
 
Сообщения: 3748
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1556 раз.
Поблагодарили: 2968 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение BooYa » 04.09.2015, 07:57

Итак, требуется консультация знатоков:

Возможно ли скриптом задать последовательность, при которой будет выполняться действие. А именно условие такое (для примера): вагон был сцеплен с обоих сторон (сумма проб в обоих направлениях = 2)
Код: Выделить всё
local front_probe = Call("SendConsistMessage", 0, 0, 0);
local rear_probe = Call("SendConsistMessage", 0, 0, 1);

front_probe + rear_probe == 2

и если при изначальном выполнении этого условия, происходит отцепка от вагона с одной из сторон

Код: Выделить всё
front_probe + rear_probe == 1


то выполняется действие (отправка по составу сообщения с целью изменить переменную).

Пока писал, додумал, что действию "front_probe + rear_probe" надо назначить переменную, но как задействовать её тогда, когда она перейдет из значения 2 в значение 1, а не из значения 0, например (одиночный вагон) в 1, или просто в значении 1 (потому что в хвосте есть еще один такой вагон, которому не нужно ничего посылать)


Ну, или посоветуйте, как реализовать следующее действия (выше было то, до чего додумался я)

Вначале скрипта имеем предустановку положений всех нодов и чайлдов в состоянии отопления на угле (пинчи на вагоне, идёт дымок из трубы) - спасибе Диме за этот способ, работает

Имеем состав, который топится углем, тянем его тепловозом. Доехали до электрифицированной линии - отцепляем тепловоз, цепляем пассажирский локомотив с пинчами (лок посылает вагонам сообщение про пинчи, запускается "эстафета", как мы её прозвали, до конца состава) - дым пропадает, подключаются пинчи - поехали дальше. Доехали до тепловозной ветки - отключаем электровоз и вот в этот момент нужно сделать так, чтобы первый вагон отправил по составу сообщение, которое и покажет снова тот самый дымок.
Аватара пользователя
BooYa
 
Сообщения: 3748
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1556 раз.
Поблагодарили: 2968 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Skif » 04.09.2015, 09:08

Это лучше сделать не первым вагоном, а "автосбросом" сообщения при отсутствии сообщения о электроотоплении - смотри, как у меня реализовано управление светом.

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

То есть:

1) Есть локомотив? Некая переменная, отвечающая за отопление электричеством, каждый такт будет устанавливаться в 1, так как локомотив шлет сообщение и оно принимается (и ретранслируется дальше эстафетой) вагоном.

2) Локомотив отцепился? Сообщения идти перестали - и мгновенно переменная сбросится в нуль.

Применительно к моему скрипту, можно (но я так пока не делаю - незачем) таким сбросом переменной OnStart вызвать "Блок однократной установки" в теле функции Update, который как раз подобной переменной и защищается от многократных вызовов и отвечает за установку тех параметров, которые нельзя установить в Initialise. Вот. И в этот блок однократной установки пропиши то состояние, что ты описал выше - пинчи подвешены, отопление угольное.

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

Re: LuaScript - для RS

Сообщение A1iv » 29.09.2015, 19:26

Как изменить кодировку внутри скрипта, чтоб показывали русские буквы в сообщении на экране? Изначальная кодировка скрипта ANSI и если ее поменять - кирдык, все не работает.
Аватара пользователя
A1iv
 
Сообщения: 442
Зарегистрирован: 27.10.2011, 03:30
Откуда: РФ, Тверская обл.
Благодарил (а): 506 раз.
Поблагодарили: 118 раз.
Блог: Просмотр блога (10)
Имя: Алексей

Re: LuaScript - для RS

Сообщение i2GR » 14.10.2015, 02:11

Помогите кто может.
Вопрос:
Код: Выделить всё
self.Position = Call( "*:GetControlValue", "ThrottleLvr", 0 )
logfile:write("\ntRegulator:Calculation_start12 "..tostring(self.Position))
SysCall("ScenarioManager:ShowAlertMessageExt", "p=="..tostring(tRegulator.Position)--[[.." ls "..tostring(self.LowSpeed).." lt "..tostring(self.LowTraction).." hs "..tostring(self.HighSpeed).." ht "..tostring(self.HighTraction), tostring(self.Value)]], 2, 1)

почему при условии что Call( "*:GetControlValue", "ThrottleLvr", 0 ) == 1 в Логфайле текст "tRegulator:Calculation_start12 1" а в алертмессадж "p==0"
??
строчки буквально подряд в коде
Аватара пользователя
i2GR
 
Сообщения: 540
Зарегистрирован: 04.09.2008, 16:59
Благодарил (а): 260 раз.
Поблагодарили: 303 раз.
Блог: Просмотр блога (4)
Имя: Игорь

Re: LuaScript - для RS

Сообщение BooYa » 14.10.2015, 16:30

Я вижу, что для записи в лог у тебя используется переменная self.Position, а для алертмесседжа - переменная tRegulator.Position . Из того куска что ты дал, неясно, почему переменная tRegulator.Position тоже должна быть = 1.
Аватара пользователя
BooYa
 
Сообщения: 3748
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1556 раз.
Поблагодарили: 2968 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Skif » 14.03.2016, 11:18

В качестве апдейта.

Пойман серьезный баг режима Quick Drive в TS2015 и (вероятно) в TS2016 !

Скриптеры, будьте внимательны - по наблюдениям, функция Setup, отвечающая за предустановку значений (вызывается однократно при запуске сценария, причем и в редакторе, если зайти сначала в Build, а не сразу в Drive), В РЕЖИМЕ QUICK DRIVE НЕ ВЫЗЫВАЕТСЯ.

Если это не учесть, в "быстрой поездке" можете получить внезапно перекрытые краны, отсутствие оборотов дизеля или температуры воды. Из-за того, что контролы встанут в свои дефолтные значения, прописанные в основном блюпринте локомотива.

Вагоны не болеют, у них все нормально.

Для локомотивов мы вылечили так: создали глобальную переменную-флаг IsFirstCall = 0

В конце функции Setup присваиваем ей значение 1:

Setup()

-- предустановка параметров локомотива




IsFirstCall = 1;
-- конец предустановки
end

. В теле основной функции Update() сделали в самом начале кода блок

if (IsFirstCall == 0) then

-- Если функция Setup() не отработала и требуется предустановка локомотива, то выполнить:
.
.
.
.
.
.
-- Здесь повторить весь код функции Setup(). Возможно, сработает и просто вызов функции Setup(); Не проверяли. Для игровых скриптов некритично,
-- сколько строчек кода выполнится в итоге - скорость обработки одинакова при вызове функции и при выполнении аналогичного ей содержимого непосредственно в теле функции Update.

IsFirstCall = 1; -- конец предустановки. Больше на этот блок кода выходить не требуется.
end


Далее следует остальная часть тела функции Update.




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

Re: LuaScript - для RS

Сообщение i2GR » 14.03.2016, 11:58

а
Код: Выделить всё
if (IsFirstCall == 0) then
     Setup()
     IsFirstCall = 1
end

не проще?
Аватара пользователя
i2GR
 
Сообщения: 540
Зарегистрирован: 04.09.2008, 16:59
Благодарил (а): 260 раз.
Поблагодарили: 303 раз.
Блог: Просмотр блога (4)
Имя: Игорь

Re: LuaScript - для RS

Сообщение Skif » 14.03.2016, 12:13

Описано в тексте.

Если системную функцию можно вызвать из тела Update - то разумеется, проще. Но мы не проверяли - некогда было. Проверим в спокойной обстановке, если сработает - так и перепишем. Требовался гарантированный результат за десять минут правки кода в весьма нервозном окружении.
Skif
 
Сообщения: 3750
Зарегистрирован: 01.10.2009, 17:42
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Имя: Дмитрий

Re: LuaScript - для RS

Сообщение BooYa » 14.03.2016, 17:02

Там в форуме отписались по скриптованию, то я не совсем согласна с таким решением, потому что если инициализация дала сбой (или если её вообще не было), то очень большая вероятность, что IsFirstCall будет равно не "0", а "nil", (собственно, я вообще не понимаю, почему должен быть 0) и условие if (IsFirstCall == 0) then не выполнится. Предложи, пусть в блоке Setup() этой переменной присваивается значение "true", а в условии будет if (IsFirstCall ~= true) then. Это сделает инициализацию обязательной во ВСЕХ случаях, если нет четкого подтверждения о её корректном завершении.
Аватара пользователя
BooYa
 
Сообщения: 3748
Зарегистрирован: 24.01.2010, 16:30
Откуда: Екатеринбург
Благодарил (а): 1556 раз.
Поблагодарили: 2968 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Андрей

Re: LuaScript - для RS

Сообщение Skif » 14.03.2016, 17:07

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

Re: LuaScript - для RS

Сообщение BooYa » 23.03.2016, 04:12

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

Сообщение, например (12 символов):
Код: Выделить всё
PINCH_3000V_MSGID_L = 181819417901;

попросту не работает. При верной логике скрипта.

Стоило мне заменить это сообщение на (10 символов)
Код: Выделить всё
PINCH_3000V_MSGID_L = 1818190612;

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

Пред.След.

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

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

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