Нужна помощь опытных скриптеров

Разработка и эксплуатация подвижного состава

Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 01.08.2013, 23:31

Как то наткнулся на вл10к по моему на trainzup модель классная но со скриптом для модели у них там что-то не получилось, я уже давно работаю над ним, восстановил почти все звуки лока, сделал кнопку темп рабочей, кнопку п2, и многое другое, хотелось бы реализовать кнопку ш (шунты и автонабор позиций при двойном клике на кнопку С, СП и П1, на П2 такой функции нет, у меня есть вся необходимая документация), но я не могу реализовать все, так как я не скриптер и вообще не имею отношения к программирования, и я надеюсь что на этом сайте мне помогут.
И так первый вопрос, уважаемые скриптеры как реализовать мне автонабор позиций? например я запустил лок, и я не хочу нажимать постоянно на клавиши лока, и хочу что бы лок сам себя вывел на ход позиции, для этого я должен выбрать силу тока, и нажать сперва 1 раз на кнопку С (переключаемся на 1 позицию) и затем еще раз на кнопку С для перехода в автонабор, при этом скорость переключения позиций не должен превышать 1 секунды между позицией и не допускать переключения позиции если ток не соответствует выбранной силе. И так мне надо реализовать строки скрипта: 1 - автопереключение позиций с интервалом в сек. 2 - все это заставить подчинятся определенно выборной силе тока. дабы не превышать выборного потолка. 3 - и все это заставить работать от двойного нажатия на клавишу С.
я очень надеюсь на помощь вашего сайта
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение TRam_ » 03.08.2013, 01:22

Ну тут два варианта - либо просить кого-то научить программированию (или учиться самому) либо просить кого-то это сделать полностью. Алгоритм работы слишком сложен, чтоб объяснить его скриптование "на пальцах".
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 13.08.2013, 20:45

Да, а ты вообще разбираешься в этом?
Ты можешь меня поучить, посоветовать что можно почитать или посмотреть?
Ну или хотя бы напиши пример того что должно получится)
Заранее Спасибо...
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение TRam_ » 13.08.2013, 20:57

Да, а ты вообще разбираешься в этом?
Вообще разбираюсь. В том числе в кабинных скриптах.

Ты можешь меня поучить, посоветовать что можно почитать или посмотреть?
Для начала ты должен сказать что ты понял в скриптах, если
восстановил почти все звуки лока, сделал кнопку темп рабочей, кнопку п2, и многое другое

То есть уже знаешь о том, как ловить нажатия кнопок, рычагов и т.п.

Просто если я тебе скажу "пропиши в enginespec все позиции и все шунты этих позиций, затем сделай поток который бы отлавливал двойные нажатия клавиш, и от этого потока запускал набор или сброс позиций". По поводу расчёта тока из силы тяги и скорости есть тут - http://www.tsmteam.ru/articles/modeliro ... oka-trainz
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 14.08.2013, 11:05

TRam_ писал(а):Вообще разбираюсь. В том числе в кабинных скриптах.

Это очень даже хорошо)))
TRam_ писал(а):То есть уже знаешь о том, как ловить нажатия кнопок, рычагов и т.п.

Ну в общих чертах да.
TRam_ писал(а):Просто если я тебе скажу "пропиши в enginespec все позиции и все шунты этих позиций

Так ну позиции допустим я уже сделал, все как положено, на 4 соединения, С (1-22), СП (23-39), П1 (40-53) и П2 (54-65) (throttle-power в этой категории или теге, точно не скажу как правильно называть надо), реостат также прописан отдельно С (1-15), СП (16-30) (dynamic-brake вот это реостат), а шунты необходимо прописывать как обыкновенную позицию в теге throttle-power?
TRam_ писал(а):затем сделай поток который бы отлавливал двойные нажатия клавиш

Насчет потока, можно по подробнее я просто не могу понять как это сделать?
TRam_ писал(а):По поводу расчёта тока из силы тяги и скорости есть тут - http://www.tsmteam.ru/articles/modeliro ... oka-trainz

Спасибо обязательно прочту..
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение TRam_ » 15.08.2013, 00:16

а шунты необходимо прописывать как обыкновенную позицию в теге throttle-power?
Да. И разместить их можешь где угодно (либо между соответствующими ходовыми и реостатными следующего соединения, либо вовсе в конце, а 65ой).

Насчет потока, можно по подробнее я просто не могу понять как это сделать?
Ну идея примерно такая.

1) для обработки двойного нажати.

Создаёшь в скрипте кабины глобальную переменную типа bool, которая бы обозначала, что "клавишу уже нажимали, с этого момента прошло мнее ** секунды".

Описываешь функцию типа thread void (собственно thread - это "нить" или "поток") - она будет выполняться "параллельно" вызвавшему её коду. В ней пишешь функцию Sleep со временем задержки, начиная с которого повторное нажатие клавиши не будет засчитываться за повторное . И в конце функции - возвращение той переменной типа bool значения false


Далее. В том месте, где у тебя реакция на нажатие клавиши (надеюсь что она не просто сравнение положения левера клавиши с нулём, а с учётом переменной, которая указывала предыдующее положение этой кнопки), пишешь, "если та переменная котороя bool , имеет true, то запустить поток набора (сброса) позиций". Это собственно означает что если мы нажали второй раз, а указание о двойном нажатии не успело сброситься, нужно запустить обработку двойного нажатия. Чуть ниже (но не в условии двойного нажатия) переменной bool присваевается значение true и вызывается поток (функция) сброса значения переменной bool с временной задержкой.


2) постепенный набор позиций до нужного тока.

тут описываешь ещё один поток ( thread void ) в котором стоит цикл с условием (это который while() ) и внутри цикла увеличиваются позиции и производится ожидание между ними (Sleep ). В условии - сравнение тягового тока с номером позиции, а также , возможно, блокировка от того, чтобы небыло конфликта между автоматическим набором и автоматическим сбросом.

Единственный "камень" здесь - сила тяги, а значит пересчитанный из неё тяговый ток, в trainz увеличивется постепенно (как в тепловозах, а не мгновенно как у электровозов) поэтому тут надо быть осторожным :) .
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 15.08.2013, 16:59

TRam_ писал(а):Да. И разместить их можешь где угодно (либо между соответствующими ходовыми и реостатными следующего соединения, либо вовсе в конце, а 65ой).

На сколько я знаю, шунты это понижение тока на якорь и повышение усилия там на что-то - и следовательно скорость увеличивается, и это действует на ходовую позицию в процентном соотношении, и я думал что это как то в скрипте расписывается, а не пишется ему еще одна позиция, а вот например ВЛ80с, ты например доходишь до 5 позиции и далее тебе доступно 3 шунта, ОП1, ОП2 и ОП3, и при использование их у тебя как была 5 позиция так и остается...

Добавлено спустя 10 минут 58 секунд:
TRam_, вот ссылка на видео, посмотри как тут все работает ,по крайней мере шунты
(
www.youtube.com Видео от : www.youtube.com
)
Ее делает Rokky для RW, вот техническую часть, хотелось бы примерно так все сделать, может быть ты бы мог с ним поговорить, может он что-то посоветовал :)
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение TRam_ » 15.08.2013, 21:52

, и я думал что это как то в скрипте расписывается, а не пишется ему еще одна позиция, а вот например ВЛ80с, ты например доходишь до 5 позиции и далее тебе доступно 3 шунта, ОП1, ОП2 и ОП3, и при использование их у тебя как была 5 позиция так и остается
можно вовсе использовать всего 1 единственную позицию, а силу тяги всех позиций задавать скриптом. Так сделано на ЧС8 (который с trainz.ru). В ВЛ80с на сколько я знаю шунты не реализованы (или может они только изменяют показания амперметров и вольтметра). Они есть в ВЛ10-1628 и в ЧС2 (в первом - как включение реостатной позиции следующего соединения, во втором - отдельными позициями).


Нечто похожее на ЧС8 сделал Rokky в RW, на сколько я понял, с использованием формулы силы тяги от скорости, позиции и степени ослабления поля.

это действует на ходовую позицию в процентном соотношении
тут есть не процентное соотношение, а ограничение ниже обычной. То есть если в позиции на данной скорости прописана тяга 25 тс, то можно задать 10 тс или вовсе её отключить.
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 16.08.2013, 15:28

Возможно ли написание скрипта где автонабор позиций будет зависеть не от кол-ва нажатий, а от времени удержания кнопки нажатой?
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение supermax » 16.08.2013, 21:16

TRam_ писал(а):Нечто похожее на ЧС8 сделал Rokky в RW

чито? Какой ЧС8? ВЛ10К, Володя, ВЛ10К.
TRam_ писал(а): с использованием формулы силы тяги от скорости, позиции и степени ослабления поля

Так и есть. Увы в РВ нельзя как в ТРС задавать 1 позиция - 1 кривая. Сделано всё прямолинейной кривой от точки 0 кН, до точки наивысшей тяги. А по этой кривой двигаем уже скриптом из массивов, в зависимости от позиции, поставлены ли шунты...
Mastercar2011 писал(а):Возможно ли написание скрипта где автонабор позиций будет зависеть не от кол-ва нажатий, а от времени удержания кнопки нажатой?

Раз Вы скриптуете ВЛ10К, то скажу я Вам главную вашу проблему: автонабор идёт не от времени удержания кнопки (так работает "темп"), а от 2-го нажатия по кнопке соединения. Пример: собираем сириес - жмём С, собралась 1-я позиция. Чтобы начать автонабор ещё раз нажимаем кнопку "С" пошёл автонабор. Также и на "СП". Кнопкой "-" снимаем автонабор, если необходимо. Тут всё сделано гениально на ВЛ10К :)
Mastercar2011 писал(а):а вот например ВЛ80с, ты например доходишь до 5 позиции и далее тебе доступно 3 шунта, ОП1, ОП2 и ОП3, и при использование их у тебя как была 5 позиция так и остается...

Применительно к ВЛ10К: шунты можно собирать только после ходовых (22/38/53 соответственно) нажатием кнопки "шунт". И по сути здесь не параллельно с реостатной позицией, а шунтирование надо прописывать как отдельную позицию. Как то так.
7 раз подумай - 1 раз напиши.
supermax
 
Сообщения: 596
Зарегистрирован: 24.08.2011, 14:03
Откуда: Краснодар
Благодарил (а): 66 раз.
Поблагодарили: 237 раз.
Блог: Просмотр блога (2)
Играю в: Train Simulator Classic
Имя: Максим

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 16.08.2013, 22:36

supermax писал(а):Раз Вы скриптуете ВЛ10К, то скажу я Вам главную вашу проблему: автонабор идёт не от времени удержания кнопки (так работает "темп"), а от 2-го нажатия по кнопке соединения. Пример: собираем сириес - жмём С, собралась 1-я позиция. Чтобы начать автонабор ещё раз нажимаем кнопку "С" пошёл автонабор. Также и на "СП". Кнопкой "-" снимаем автонабор, если необходимо. Тут всё сделано гениально на ВЛ10К

Спасибо конечно за инфу, но это все я знаю перечитал кучу инфы по нему, и общался с машинистами, вот как раз для кнопки "ТЕМП" мне это и нужно)
supermax писал(а):Применительно к ВЛ10К: шунты можно собирать только после ходовых (22/38/53 соответственно) нажатием кнопки "шунт". И по сути здесь не параллельно с реостатной позицией, а шунтирование надо прописывать как отдельную позицию. Как то так.

Хотелось бы знать как именно? Тяговые позиции (throttle-power), Реостатные позиции (dynamic-brake), а как шунты?

И вот еще вопросик, допустим я все это реализую, я про автонабор, а как его заставить переключаться через секунду, по позиции? Там еще надо ограничение по току сделать...
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение TRam_ » 18.08.2013, 02:54

чито? Какой ЧС8? ВЛ10К, Володя, ВЛ10К.
Алгоритм прямого управления тягой с помощью скрипта впервые был сделан в trainz, в ЧС8-042. http://trainz.ru/index.php?action=downl ... y=3&game=2 . Имел в виду именно это, а никак не то что Rokky делал ЧС8.

Сделано всё прямолинейной кривой от точки 0 кН, до точки наивысшей тяги.
я говорю что в ТРС такое тоже можно, и было сделано в ЧС8 для того, чтобы не прописывать кучу кривых. Потому что на ЧС8 шунты можно набирать на любой позиции. В отличие от постоянников типа ВЛ10*

Тяговые позиции (throttle-power)
в них, естественно.

а как его заставить переключаться через секунду, по позиции?
перечитай сообщение от 14.08 - там ответ.
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 18.08.2013, 13:44

TRam_ писал(а):1) для обработки двойного нажати.

Создаёшь в скрипте кабины глобальную переменную типа bool, которая бы обозначала, что "клавишу уже нажимали, с этого момента прошло мнее ** секунды".

Описываешь функцию типа thread void (собственно thread - это "нить" или "поток") - она будет выполняться "параллельно" вызвавшему её коду. В ней пишешь функцию Sleep со временем задержки, начиная с которого повторное нажатие клавиши не будет засчитываться за повторное . И в конце функции - возвращение той переменной типа bool значения false


Далее. В том месте, где у тебя реакция на нажатие клавиши (надеюсь что она не просто сравнение положения левера клавиши с нулём, а с учётом переменной, которая указывала предыдующее положение этой кнопки), пишешь, "если та переменная котороя bool , имеет true, то запустить поток набора (сброса) позиций". Это собственно означает что если мы нажали второй раз, а указание о двойном нажатии не успело сброситься, нужно запустить обработку двойного нажатия. Чуть ниже (но не в условии двойного нажатия) переменной bool присваевается значение true и вызывается поток (функция) сброса значения переменной bool с временной задержкой.


2) постепенный набор позиций до нужного тока.

тут описываешь ещё один поток ( thread void ) в котором стоит цикл с условием (это который while() ) и внутри цикла увеличиваются позиции и производится ожидание между ними (Sleep ). В условии - сравнение тягового тока с номером позиции, а также , возможно, блокировка от того, чтобы небыло конфликта между автоматическим набором и автоматическим сбросом.

В общем как это все сложно, и не совсем понятно, может вы бы мне хоть кусочек написали скрипта, а там может быть до меня бы и дошло что и как делать...

Добавлено спустя 1 минуту 44 секунды:
По идее систематика мне понятна, но мне не хватает знаний языка чтоб это написать...
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Нужна помощь опытных скриптеров

Сообщение TRam_ » 18.08.2013, 13:50

оставь тут тот кусок своего скрипта, в котором у тебя производится набор позиций
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Нужна помощь опытных скриптеров

Сообщение Mastercar2011 » 18.08.2013, 22:34

Код: Выделить всё
if (p_control.GetName() == "kn_temp")
    {
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 21)
   {
    loco.SetEngineSetting("throttle", 22);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 20)
   {
    loco.SetEngineSetting("throttle", 22);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 19)
   {
    loco.SetEngineSetting("throttle", 21);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 18)
   {
    loco.SetEngineSetting("throttle", 20);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 17)
   {
    loco.SetEngineSetting("throttle", 19);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 16)
   {
    loco.SetEngineSetting("throttle", 18);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 15)
   {
    loco.SetEngineSetting("throttle", 17);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 14)
   {
    loco.SetEngineSetting("throttle", 16);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 13)
   {
    loco.SetEngineSetting("throttle", 15);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 12)
   {
    loco.SetEngineSetting("throttle", 14);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 11)
   {
    loco.SetEngineSetting("throttle", 13);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 10)
   {
    loco.SetEngineSetting("throttle", 12);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 9)
   {
    loco.SetEngineSetting("throttle", 11);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 8)
   {
    loco.SetEngineSetting("throttle", 10);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 7)
   {
    loco.SetEngineSetting("throttle", 9);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 6)
   {
    loco.SetEngineSetting("throttle", 8);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 5)
   {
    loco.SetEngineSetting("throttle", 7);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 4)
   {
    loco.SetEngineSetting("throttle", 6);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 3)
   {
    loco.SetEngineSetting("throttle", 5);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 2)
   {
    loco.SetEngineSetting("throttle", 4);
    }
    if (i_value == 1.0 and loco.GetEngineSetting("throttle") == 1)
   {
    loco.SetEngineSetting("throttle", 3);
    }
         }

Добавлено спустя 1 минуту 14 секунд:
Вот например так я расписал клавишу "ТЕМП" для соединения "С"

Добавлено спустя 2 минуты 27 секунд:
И она даботает, была позиция 1, я нажал "ТЕМП" стало 3, и т.д. А надо при удержании клавиши, начинать набор, пока не отпущу, с любой позиции в пределах 1-21, макс до 22, в сек по позиции)) Думаю вам это не составе труда)

 ! Vasi4 писал(а):
Для того что бы запостить код на форуме есть специальный тег [code]
Mastercar2011
 
Сообщения: 12
Зарегистрирован: 26.07.2013, 21:50
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

След.

Вернуться в [TZ] Подвижной состав

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

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