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

Уголок Разработчика

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

Re: Уголок Разработчика

Сообщение sciff » 10.04.2012, 20:21

Максим, и ты расслабься. Я тебя и твой код не "критиковал", а просто указал на ошибку :)
Аватара пользователя
sciff
 
Сообщения: 900
Зарегистрирован: 21.12.2010, 01:51
Откуда: Дублин; Латвия
Благодарил (а): 391 раз.
Поблагодарили: 927 раз.
Блог: Просмотр блога (1)
Роль: Видео-оператор
Имя: Ян

Re: Уголок Разработчика

Сообщение Rokky » 11.04.2012, 08:21

Нитка Updаtе обновлюется автоматически? Например в ТРС такая нить обновлялась ежекадрово.
Не лезь туда, куда не просят, а если и просят, всё равно не лезь...... Убьёт.
Жизнь сложная штука.... Либо ты с ней... Либо она с тобой...
Аватара пользователя
Rokky
 
Сообщения: 123
Зарегистрирован: 20.09.2007, 20:02
Откуда: Казахстан, Экибастуз
Благодарил (а): 35 раз.
Поблагодарили: 212 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Дмитрий

Re: Уголок Разработчика

Сообщение i2GR » 11.04.2012, 10:28

В RW аналогично!
Ребят, зачем вы по__ались в комментах :haha: из-за того, что прекрасно описано в RSDevDoc 3.02 или на RW-wiki
Rokky, советую читать там. Там все описано системно и с норамльными примерами: какие функции должны содержаться в скрипте, какая из них за что отвечает, и как они взаимодействуют. Конечно есть нюансы, которые с первого раза не разберешь, но это вопрос личного отпыта.
Аватара пользователя
i2GR
 
Сообщения: 540
Зарегистрирован: 04.09.2008, 16:59
Благодарил (а): 260 раз.
Поблагодарили: 303 раз.
Блог: Просмотр блога (4)
Имя: Игорь

Re: Уголок Разработчика

Сообщение Rokky » 16.04.2012, 14:42

Как использовать OnConsistMessage? Например: есть пантограф и его анимация в скрипте выглядит так
Код: Выделить всё
Call("*:AddTime", "frontPnt",  15); --поднят
Call("*:AddTime", "frontPnt",  -15); --опущен
Call( "*:GetControlValue", "tm_tpoff4", 0 ) тумблер токоприёмника

так вот, как послать сообщение задней секции чтобы там ТП работал? Не могу понять для чего нужно это PANTO_MSID = 1207, точнее числовая составляющая этого параметра. Не хочется Aplly to consist из блюпринта, так как есть возможность реализации посекционной работы локомотива.

Покопавшись в скриптах Acell`ы, нашёл такую шнягу:

Код: Выделить всё
function Initialise ()
PANTO_MSID = 1207
end

function Update (time)
if (Call( "GetIsEngineWithKey") == 1) then   
   msg = PANTO_MSID
   argument = argument = Call( "*:GetControlValue", "PantographControl", 0 )
   Call( "SendConsistMessage", msg, argument, 0 )
   Call( "SendConsistMessage", msg, argument, 1 )
end -- of pantograph control
end

function OnConsistMessage ( msg, argument, direction )
if (Call( "GetIsEngineWithKey") == 0) then
if msg == PANTO_MSID then
   Call( "*:SetControlValue", "PantographControl", 0, argument  )
   Call( "SendConsistMessage", msg, argument, direction )
end
end
end


Объясните, пожалуйста, уже битый час голову ломаю, никак не догоню.
Не лезь туда, куда не просят, а если и просят, всё равно не лезь...... Убьёт.
Жизнь сложная штука.... Либо ты с ней... Либо она с тобой...
Аватара пользователя
Rokky
 
Сообщения: 123
Зарегистрирован: 20.09.2007, 20:02
Откуда: Казахстан, Экибастуз
Благодарил (а): 35 раз.
Поблагодарили: 212 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Дмитрий

Re: Уголок Разработчика

Сообщение Mr. Angelo » 16.04.2012, 16:24

PANTO_MSID = 1207 - это идентификатор сообщения. Цифры ничего конкретного не обозначают - каждый сам решает какой ID дать. По части скриптов сигалки - там определенные ID зарезервированы, о опять же в рамках одной системы сигнализации. Всё условно короче.
Message ID нужен для того чтобы обозначать тип сообщения. Это как поле "тема" в email-письмах, например в данном скрипте сообщения с ID=1207 используются для передачи по составу состояния токоприемника. А в состае есть другой ПС, который в своем скрипте может иметь событие OnConsistMessage, которое в качестве аргументов принимает параметры сообщения. Внутри того события мы смотрим - если ID сообщения какой надо, то мы делаем то что положено (смотрим в текст сообщения, там написано - поднять или опустить токоприемник, этим и занимаемся дальше по тексту скрипта). Если Message ID например другой, там какой-нибудь 2233, и мы его например зарезервировали для передачи давления ТЦ по составу (чтобы анимировать тормозную передачу), то сответствено уже обработкой занимается другая часть скрипта. Если какой-то левый Message ID - ничего не делаем например.
Аватара пользователя
Mr. Angelo
 
Сообщения: 3227
Зарегистрирован: 03.01.2004, 22:22
Откуда: Тюмень
Благодарил (а): 360 раз.
Поблагодарили: 526 раз.
Блог: Просмотр блога (9)
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД
Имя: Андрей

Re: Уголок Разработчика

Сообщение Skif » 16.04.2012, 16:42

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

Re: Уголок Разработчика

Сообщение Mr. Angelo » 16.04.2012, 17:00

Нет не адресная. Послать месседж конкретному юниту в составе нельзя. Месседж можно передать просто от одного юнита к следующему - в том или другом направлении. А вот если следующий юнит имеет в своем скрипте "ретранслятор" (пару строчек, которые по-умолчанию все подряд сообщения пересылают в том же направлении, в каком оно к ним пришло), то сообщение уйдет дальше, к следующему юниту. Заинтересованный в определенного рода сообщених юнит отлавливает их по Message ID.
Аватара пользователя
Mr. Angelo
 
Сообщения: 3227
Зарегистрирован: 03.01.2004, 22:22
Откуда: Тюмень
Благодарил (а): 360 раз.
Поблагодарили: 526 раз.
Блог: Просмотр блога (9)
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД
Имя: Андрей

Re: Уголок Разработчика

Сообщение Skif » 16.04.2012, 17:53

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

Re: Уголок Разработчика

Сообщение MJack » 18.04.2012, 16:03

Mr. Angelo писал(а):Месседж можно передать просто от одного юнита к следующему - в том или другом направлении. А вот если следующий юнит имеет в своем скрипте "ретранслятор", то сообщение уйдет дальше, к следующему юниту.

Если в скрипте [управления тормозами] перед "ретранслятором" добавить паузу (длина вагона / 340 м/с) то можно получить эффект "тормозной волны".
Изображение
Изображение
Аватара пользователя
MJack
 
Сообщения: 176
Зарегистрирован: 22.03.2010, 02:04
Откуда: Украина
Благодарил (а): 312 раз.
Поблагодарили: 89 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Евгений

Re: Уголок Разработчика

Сообщение Mr. Angelo » 18.04.2012, 18:58

MJack писал(а):Если в скрипте [управления тормозами] перед "ретранслятором" добавить паузу (длина вагона / 340 м/с) то можно получить эффект "тормозной волны".

Не совсем так. Тормоза - как работали так и работают, вмешаться в их работу из скрипта нельзя. А с помощью сообщений, в приведенном мною примере, передается только условный параметр "давление ТЦ" для того, чтобы анимировать тормозную передачу на каждом вагоне.
Аватара пользователя
Mr. Angelo
 
Сообщения: 3227
Зарегистрирован: 03.01.2004, 22:22
Откуда: Тюмень
Благодарил (а): 360 раз.
Поблагодарили: 526 раз.
Блог: Просмотр блога (9)
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД
Имя: Андрей

Re: Уголок Разработчика

Сообщение Rokky » 18.04.2012, 20:54

Можно ли рассчитать скорость проигрывания анимации через эту функцию Call("*:AddTime", "frontPnt", pnt1*15 );? В данном случае пант прыгает сразу на 15-тый кадр анимации без прохождения всей линейки. Пробовал я делать расчёт и поднимать его с нуля, но как-то быстро он взлетел, как-будто расчёт за секунду произошёл. pnt1 это переменная, которая принимает значения 1 и -1, в зависимости от включения тумблеров, 15 это количество кадров анимации. Не знаю как получить текущий кадр анимации.

Можно было бы не делать того что выше, но при использовании этой функции, в нитке Update, Call( "*:SetControlValue", "pantcontr, 0, pnt1 ); токоприёмник начинает подниматься - опускаться сам по себе, то есть, анимация проигрывается бесконечно по кругу. Здесь он прописан как внешняя анимация и повешен на тумблер, который управляется через скрипт. Если убрать из нитки Апдейт, то анимация не работает. Поэтому пришлось воткнуть эту функцию в Update.

В общем я в тупике, оставлю первый вариант и продолжу скриптовку дальше. Но хотелось бы увидеть ответы профи в скриптовании.
Не лезь туда, куда не просят, а если и просят, всё равно не лезь...... Убьёт.
Жизнь сложная штука.... Либо ты с ней... Либо она с тобой...
Аватара пользователя
Rokky
 
Сообщения: 123
Зарегистрирован: 20.09.2007, 20:02
Откуда: Казахстан, Экибастуз
Благодарил (а): 35 раз.
Поблагодарили: 212 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Дмитрий

Re: Уголок Разработчика

Сообщение Mr. Angelo » 18.04.2012, 21:49

Зачем такое городить? Надо токоприемник привязать к Control Values-у (конфиговая переменная) который будет иметь MIN 0 MAX 1, назвать например PantoState1 (отдельные для каждого токоприемника на секции), тип внешней анимации поставить Toggle. Скорость подъема будет зависеть от длины самой анимации в МАХе. Анимация должна быть только в одну сторону - от сложенного положения к поднятому. В этот PantoState1 будем писать 0 или 1 через SetControlValue.

Дима, ты рано полез в скриптовые дебри. Сами по себе возможности настройки конфига могут сделать некоторые фишки без всяких скриптов. Либо со скриптом, но коротким. А то, куда ты сейчас решил двинутся грозит тоннами "индусского кода".

Добавлено спустя 9 минут 50 секунд:
Собственно то что я описал, это стандартный способ анимации токоприемника, с той лишь разницей что анимацию мы вешаем не на стандартный Control Value, на который реагирует игра, а на другой. И скрипт нам нужен для чего? Для того чтобы между нажатием кнопки "токоприемник 1" (условно) и поднятием самого токоприемника проверить какие то условия - к примеру включени ли тумблер "токоприемники" (проверяем какое значение в Control Value этого тумблера, если 1 - значит включен, тогда и отдаем команду понднять токоприемник. ).
Аватара пользователя
Mr. Angelo
 
Сообщения: 3227
Зарегистрирован: 03.01.2004, 22:22
Откуда: Тюмень
Благодарил (а): 360 раз.
Поблагодарили: 526 раз.
Блог: Просмотр блога (9)
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД
Имя: Андрей

Re: Уголок Разработчика

Сообщение Rokky » 18.04.2012, 21:59

Mr. Angelo писал(а):Зачем такое городить? Надо токоприемник привязать к Control Values-у, тип внешней анимации поставить Toggle. Скорость подъема будет зависеть от длины самой анимации в МАХе.


Делал так, но ТП поднимается и спустя некоторое время опускается (просто опускается, независимо ни от чего) и я не знаю как это победить. Поэтому пришлось пару костылей вбить.

Добавлено спустя 3 минуты 18 секунд:
Mr. Angelo писал(а):Собственно то что я описал, это стандартный способ анимации токоприемника, с той лишь разницей что анимацию мы вешаем не на стандартный Control Value, на который реагирует игра, а на другой. И скрипт нам нужен для чего? Для того чтобы между нажатием кнопки "токоприемник 1" (условно) и поднятием самого токоприемника проверить какие то условия - к примеру включени ли тумблер "токоприемники" (проверяем какое значение в Control Value этого тумблера, если 1 - значит включен, тогда и отдаем команду понднять токоприемник. ).


Это примерно так и выглядит. Но проблема то в том, что он сам опускается.
Не лезь туда, куда не просят, а если и просят, всё равно не лезь...... Убьёт.
Жизнь сложная штука.... Либо ты с ней... Либо она с тобой...
Аватара пользователя
Rokky
 
Сообщения: 123
Зарегистрирован: 20.09.2007, 20:02
Откуда: Казахстан, Экибастуз
Благодарил (а): 35 раз.
Поблагодарили: 212 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Дмитрий

Re: Уголок Разработчика

Сообщение Mr. Angelo » 18.04.2012, 22:06

И как бы вот на этом принципе и строится вся кастомизация поведения органов управления локомотива. Если по дефолту контроллер напрямую привязан к визуальной рукоятке в кабине и кнопка клавиатуры, то в нашем случае мы создаем Псевдо-контроллер, у которого своя собственная переменная (Control Value), и именно к нему переназначаем визуальную рукоятку в кабине и кнопки клавы. И уже с помощью скрипта можем немного вмешаться в поведение. Типа пытаемся сдвинуть контроллер (точнее псевдо-контроллер), проверяем скриптом - находится ли реверсивка в рабочем положении, если нет - то не передаем никакого нового значения в реальный контроллер (к которому теперь у нас нет доступа ни мышкой ни клавой, он как бы не видим, это просто переменная на которую реагирует игра), а если реверсивка в рабочем полжении - копируем значение переменной псевдо-контроллера в реальный контроллер.

А насчет стандартной реализации анимации токоприемника - глянь файлы-примеры, там есть Sample Electric Engine.

P.S. А то что сам опускается, если ты делал тип анимации Toggle - то максимальное значение переменной должно быть ровно 1, если больше - то анимация как раз и будет сбрасываться на начальное положение.
Аватара пользователя
Mr. Angelo
 
Сообщения: 3227
Зарегистрирован: 03.01.2004, 22:22
Откуда: Тюмень
Благодарил (а): 360 раз.
Поблагодарили: 526 раз.
Блог: Просмотр блога (9)
Играю в: Train Simulator Classic
Роль: Сотрудник РЖД
Имя: Андрей

Re: Уголок Разработчика

Сообщение Rokky » 19.04.2012, 20:38

Mr. Angelo писал(а):А насчет стандартной реализации анимации токоприемника - глянь файлы-примеры, там есть Sample Electric Engine.


Смотрел, делал так же, но без результата. Там пант тупо завязан на кнопку, у меня же пантографами управляют 3 тумблера, 1 общий только на опускание и 2 на опускание/поднимание.

Mr. Angelo писал(а):P.S. А то что сам опускается, если ты делал тип анимации Toggle - то максимальное значение переменной должно быть ровно 1, если больше - то анимация как раз и будет сбрасываться на начальное положение.


Спасибо за подсказку, теперь хоть отправная точка есть, проще искать косяк будет.
Не лезь туда, куда не просят, а если и просят, всё равно не лезь...... Убьёт.
Жизнь сложная штука.... Либо ты с ней... Либо она с тобой...
Аватара пользователя
Rokky
 
Сообщения: 123
Зарегистрирован: 20.09.2007, 20:02
Откуда: Казахстан, Экибастуз
Благодарил (а): 35 раз.
Поблагодарили: 212 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Дмитрий

Пред.След.

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

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

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