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

Создание скриптов сценария для TRS 2006

Обсуждение маршрутов, объектов, сценариев

Re: Создание скриптов сценария для TRS 2006

Сообщение TRam_ » 28.09.2009, 16:13

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

Re: Создание скриптов сценария для TRS 2006

Сообщение mzoo » 28.09.2009, 17:37

Дело в том,что если станция большая и мы на некий путь ставим вагоны и стрелка далеко,то при передачи управления скрипту, локомотив будет ехать долго, или надо смотреть где приблизительно закончится состав и ставить туда триггер, и в скрипте
писать условие, при наезде на триггер передать управление скрипту, если один состав то это еще более менее приемлемо а если их не сколько? Я понимаю, что можно сразу составить состав с локомотивом, а охото для большего реализма сделать маневровые работы на станции ну и.т.д.
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

Re: Создание скриптов сценария для TRS 2006

Сообщение AlexanderG » 28.09.2009, 19:11

Я честно пытался понять, но... Неожиданно мои глаза начали кровоточить и пришлось прекратить чтение :(
Join Dropbox and SHARE YOUR SHIT FOR FREE!
AlexanderG
 
Сообщения: 761
Зарегистрирован: 27.06.2009, 16:54
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Блог: Просмотр блога (2)
Имя: Александр

Re: Создание скриптов сценария для TRS 2006

Сообщение TRam_ » 28.09.2009, 21:12

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

писать условие, при наезде на триггер передать управление скрипту
так никто не запрещает делать правила для нескольких локов, маневрирующих одновременно...


Я понимаю, что можно сразу составить состав с локомотивом, а охото для большего реализма сделать маневровые работы на станции ну и.т.д.
так что мешает сделать всёс это не скриптом, а правилами? В том числе тем же driverSetup'ом и правилами Trigger rule, и SetJunction? В z7 есть команда машинисту "открыть маневровый сигнал" и "сменить приоритет" (тут 3 считается маневровым). Есть ещё команда машинисту wait которая позволяет синхронизировать события.

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

Re: Создание скриптов сценария для TRS 2006

Сообщение GSTrainz » 28.09.2009, 21:43

если стрелка далеко,то при передаче управления скрипту, локомотив будет ехать
train02.SetAutopilotMode(Train.CONTROL_SCRIPT);
train02.SetDCCThrottle(0.3);
на 3 скорости до момента сцепления.Если состав находится далеко от стрелки-то эта поездка будет долгой.
А если так:
train02.SetAutopilotMode(Train.CONTROL_SCRIPT);
train02.SetDCCThrottle(0.5);
Sleep (v);// v-время поездки train02 на 5 положении контроллера.Значение переменной подбираем исходя из длины прицепляемого состава.
train02.SetDCCThrottle(0.4);
Sleep (5);//едем 5 сек. на 4 скорости
train02.SetDCCThrottle(0.3);переключаемся на 3
Sleep (4);//едем 4 сек. на 3 скорости
train02.SetDCCThrottle(0.2);переключаемся на 2
Sleep (4);//едем 4 сек. на 2 скорости
train02.SetDCCThrottle(0.0);остановка (надеюсь,до состава не доехали)))
Sleep (15);//стоим 15 секунд
train02.SetDCCThrottle(0.2);и потихоньку подьезжаем под состав
TrainUtil.DoCoupleUp(train02,train01); до момента сцепления
train02.SetDCCThrottle(0.0);остановка
Аватара пользователя
GSTrainz
 
Сообщения: 634
Зарегистрирован: 28.09.2006, 21:42
Откуда: Феодосия
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Гена

Re: Создание скриптов сценария для TRS 2006

Сообщение AlexanderG » 29.09.2009, 00:20

А еще можно вместо эмпирически настраиваемых задержек сделать монитор, который будет контролировать расстояние до прицепляемого состава.
Join Dropbox and SHARE YOUR SHIT FOR FREE!
AlexanderG
 
Сообщения: 761
Зарегистрирован: 27.06.2009, 16:54
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Блог: Просмотр блога (2)
Имя: Александр

Re: Создание скриптов сценария для TRS 2006

Сообщение TRam_ » 29.09.2009, 00:58

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

Re: Создание скриптов сценария для TRS 2006

Сообщение mzoo » 29.09.2009, 13:03

Раз нет рабочих вариантов сцепки,кроме train02.SetAutopilotMode(Train.CONTROL_SCRIPT),то буду пока юзать его. Всем спасибо!
Если кто-то найдет еще варианты, как сцепить вагоны пишите, буду очень рад, еще раз всем спасибо.
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

Re: Создание скриптов сценария для TRS 2006

Сообщение AlexanderG » 30.09.2009, 11:39

Причем тут СетАвтопилотМод? Она всего лишь указывает способ управления поездом. Сцепкой занимается
Код: Выделить всё
TrainUtil.DoCoupleUp(train02,train01);
Join Dropbox and SHARE YOUR SHIT FOR FREE!
AlexanderG
 
Сообщения: 761
Зарегистрирован: 27.06.2009, 16:54
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Блог: Просмотр блога (2)
Имя: Александр

Re: Создание скриптов сценария для TRS 2006

Сообщение mzoo » 30.09.2009, 15:27

Локомотив при, train02.SetAutopilotMode(Train.CONTROL_AUTOPILOT); таком способе управления не обрабатывает команду, TrainUtil.DoCoupleUp(train02,train01); а при train02.SetAutopilotMode(Train.CONTROL_SCRIPT) мы указываем положения контролера
train02.SetDCCThrottle(0.4); и при таком раскладе локомотив будет ехать и ехать пока не врежется, даже запрещающие сигналы будет проезжать.И при таком управление можно сделать сцепку таким образом:
Допустим, мы собрали маршрут локомотиву под состав с управлением
SetAutopilotMode(Train.CONTROL_AUTOPILOT); все он поехал, далее проезжая последнею стрелку или триггер применяем Navigate.OnJunction(me,train02,"JST2",Navigate.JUNCTION_LEAVE);
train02.SetAutopilotMode(Train.CONTROL_SCRIPT)
train02.SetDCCThrottle(0.3); // Будет ехать на этой позиции до сцепки
TrainUtil.DoCoupleUp(train02,train01); //сцепка произошла
train02.SetDCCThrottle(0.0); // Стоп
train02.Turnaround(); //меняем направление
SetAutopilotMode(Train.CONTROL_AUTOPILOT);
Собираем маршрут и поездом будет управлять бот
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

Re: Создание скриптов сценария для TRS 2006

Сообщение GSTrainz » 11.10.2009, 11:31

Нашел отличный способ решить проблему со сцепкой!

train1.SetAutopilotMode(Train.CONTROL_SCRIPT);
train1.SetReverser (2); // рукоятка реверса вперед (0-назад,1 нейтраль)
train1.SetManualThrottle(4);//локомотив идет на 4 положении контроллера(игнорируя все сигналы)
Navigate.OnJunction(me,train1,"str1",Navigate.JUNCTION_LEAVE);//пока не проедет стрелку str1 (зайдет на путь под вагоны)
train1.SetAutopilotMode(train1.CONTROL_AUTOPILOT);// передаем управление автопилоту (локомотив будет ехать,пока до вагонов далеко.Когда до них осталось небольшое расстояние,автопилот остановит локомотив.
while (train1.IsStopped()==false) Sleep (2); // отслеживаем этот момент.
train1.SetAutopilotMode(Train.CONTROL_SCRIPT); // и передаем управление скрипту
train1.SetManualThrottle(2); // на втором положении контроллера подъезжаем под вагоны
TrainUtil.DoCoupleUp(train1,train2);// до момента сцепки.
train1.SetManualThrottle(0); // сбрасываем контроллер в 0
train1.SetTrainBrakes ( 4.0 ) ;// ставим состав на тормоза
Аватара пользователя
GSTrainz
 
Сообщения: 634
Зарегистрирован: 28.09.2006, 21:42
Откуда: Феодосия
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Гена

Re: Создание скриптов сценария для TRS 2006

Сообщение AlexanderG » 11.10.2009, 12:40

Я боюсь, на второй позиции если будет ехать, долбанет вагоны. Лучше просто разогнать до 3...5км\ч, дальше выбегом сцепляться.
Join Dropbox and SHARE YOUR SHIT FOR FREE!
AlexanderG
 
Сообщения: 761
Зарегистрирован: 27.06.2009, 16:54
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Блог: Просмотр блога (2)
Имя: Александр

Re: Создание скриптов сценария для TRS 2006

Сообщение GSTrainz » 11.10.2009, 13:16

Ну-это уже тонкости...Главное-в каком месте ни стояли бы на пути вагоны,локомотив всегда останавливается на определенном расстоянии от них.И это расстояние всегда одинаковое.
А если выбегом-тогда последние строки будут выглядеть так:
train1.SetManualThrottle(2);
Sleep (5);// 5 секунд разгоняемся
train1.SetManualThrottle(0);// сбрасываем контроллер в 0 и катимся
TrainUtil.DoCoupleUp(train1,train2);// до момента сцепки.
Sleep (5);// ждем 5 секунд
train1.SetTrainBrakes ( 4.0 ) ;// ставим состав на тормоза (первое обращение к сцепленному составу).
Надо будет по-эксперементировать.Я раньше подгонял локомотив под состав командой train1.SetDCCThrottle(0.3);После сцепления надо было сразу сбрасывать в 0(иначе лок тупо тянет дальше весь состав на 3 позиции) .А слишком раннее обращение к созданному(сцепленному) составу вырубало игру напрочь (вылет в винду)
Аватара пользователя
GSTrainz
 
Сообщения: 634
Зарегистрирован: 28.09.2006, 21:42
Откуда: Феодосия
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Гена

Re: Создание скриптов сценария для TRS 2006

Сообщение TRam_ » 11.10.2009, 14:12

а что мешает спрашивать, что за поезд образовался?


например, так

Sleep (5);
train1.SetManualThrottle(0);
Vehicle V1=train1.GetVehicles()[0];

TrainUtil.DoCoupleUp(train1,train2);
Sleep (1);
train1=V1.GetMyTrain();
train1.SetTrainBrakes ( 4.0 ) ;


а вообще можно и самим сделать автопилот :P


Код: Выделить всё
Vehicle[] v1=train1.GetVehicles();
Vehicle[] v2=train2.GetVehicles();

bool a=false,b=false;

int position=4;// текущая позиция контроллёра
float vel=0;// текущая скорость

train1.SetAutopilotMode(Train.CONTROL_SCRIPT);
train1.SetReverser (2);
train1.SetManualThrottle(position);

while(!(a and b))// пока не видно ни одного вагоона на расстоянии 40 м
   {
   Sleep(3);
   a=train1.TracksideIsInFront(cast<Trackside>v2[0],40); //определяем, находится ли первый вагон 2 поезда ближе, чем 40 м
   b=train1.TracksideIsInFront(cast<Trackside>v2[v2.size()-1/*последний элемент*/ ],40); //определяем, находится ли последний вагон 2 поезда ближе, чем 40 м
   
//автопилот

   vel=Math.Fabs(train1.GetVCelocity()*3.6);

   if(vel>18)// сильно быстро едем :) - превышаем 18 км\ч
      {
                        if(position>0)
      position--;
                        if(vel>19.5)      
         position=0;
      train1.SetManualThrottle(position);
      }

   if(vel<16 and position<5)// сильно медленно - едем меньше 16 км\ч
      {
      position++;
      train1.SetManualThrottle(position);
      }
    }


   train1.SetManualThrottle(0);
   Locomotive MyLoco=train1.GetFrontmostLocomotive();
   MyLoco.SetEngineSetting("loco-auto-brake",0.9);// тормозим локомотивным тормозом перед вагоном
   
   Sniff(train1,"Train","StoppedMoving",true);// запрос на пересылку нам сообщения о остановке
   
   wait()   // Ожидание остановки
   {
    on "Train","StoppedMoving":
      
      ;//после остановки продолжить
   }

   Sniff(train1,"Train","StoppedMoving",false);// отменяем запрос
   MyLoco.SetEngineSetting("loco-auto-brake",0);   

   train1.SetManualThrottle(2);


if(a)// в поле видимости 1 вагон поезда 2
   {
   vel=Math.Fabs(train1.GetVCelocity()*3.6);
   

   while(vel<2) // разгоняемся до 2 км/ч
      {
      vel=Math.Fabs(train1.GetVCelocity()*3.6);
      Sleep(0.5);
      }

   train1.SetManualThrottle(0);

   Sniff(v2[0],"Vehicle","Coupled",true);// запрос на пересылку нам сообщения о сцепке, от вагона, до которого 40 м
   
   TrainUtil.DoCoupleUp(train1,train2);

   wait()   // Ожидание сцепки
   {
    on "Vehicle","Coupled":
      ;//после сцепки продолжить
      }

   }

   Sniff(v2[0],"Vehicle","Coupled",false);
   
   }




if(b)// в поле видимости последний вагон поезда 2
   {
   vel=Math.Fabs(train1.GetVCelocity()*3.6);
   

   while(vel<2) // разгоняемся до 2 км/ч
      {
      vel=Math.Fabs(train1.GetVCelocity()*3.6);
      Sleep(0.5);
      }

   train1.SetManualThrottle(0);

   Sniff(v2[v2.size()-1],"Vehicle","Coupled",true);// запрос на пересылку нам сообщения о сцепке, от вагона, до которого 40 м
   
   TrainUtil.DoCoupleUp(train1,train2);

   wait()   // Ожидание сцепки
   {
    on "Vehicle","Coupled":
      {
      ;   //после сцепки продолжить
      }

   }
   Sniff(v2[v2.size()-1],"Vehicle","Coupled",true);
}
Sleep(0.1);

train1=v1[0].GetMyTrain();//получаем поезд, в котором 1 вагон

train1.SetTrainBrakes(4.0);


вообще конструкция

wait()
{
on "Train","StoppedMoving":
{
goto aq1;
}

}
aq1:

некрасива, но я не уверен, что будет работать её правильный вариант


wait()
{
on "Train","StoppedMoving":
{
break;
}

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

Re: Создание скриптов сценария для TRS 2006

Сообщение AlexanderG » 11.10.2009, 15:33

Правильный вариант работать будет. Хотя тут оба неправильные — что за радость из обработчика переходить на метку (1 вар)? Проще код из под метки внести в обработчик.

Код: Выделить всё
wait()
{
on "Train","StoppedMoving":
{
break;
}
Ну а это просто делает конструкцию практически бессмысленной. Уж лучше монитор.
Join Dropbox and SHARE YOUR SHIT FOR FREE!
AlexanderG
 
Сообщения: 761
Зарегистрирован: 27.06.2009, 16:54
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Блог: Просмотр блога (2)
Имя: Александр

Пред.След.

Вернуться в [TZ] Маршруты и сценарии

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

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