Страница 3 из 5
Re: Создание скриптов сценария для TRS 2006
Добавлено:
28.09.2009, 16:13
TRam_
просто не пойму, зачем это нужно, если со скриптовым управлением (Train.CONTROL_SCRIPT) всё работает. Ведь команды лучше делать с помощью правил, а значит и сценарий лучше написать, используя только правила. Попроси у агмайка правила "постановки состава на рельсы" и удаления состава с рельсов - ведь будет намного проще...
Re: Создание скриптов сценария для TRS 2006
Добавлено:
28.09.2009, 17:37
mzoo
Дело в том,что если станция большая и мы на некий путь ставим вагоны и стрелка далеко,то при передачи управления скрипту, локомотив будет ехать долго, или надо смотреть где приблизительно закончится состав и ставить туда триггер, и в скрипте
писать условие, при наезде на триггер передать управление скрипту, если один состав то это еще более менее приемлемо а если их не сколько? Я понимаю, что можно сразу составить состав с локомотивом, а охото для большего реализма сделать маневровые работы на станции ну и.т.д.
Re: Создание скриптов сценария для TRS 2006
Добавлено:
28.09.2009, 19:11
AlexanderG
Я честно пытался понять, но... Неожиданно мои глаза начали кровоточить и пришлось прекратить чтение
Re: Создание скриптов сценария для TRS 2006
Добавлено:
28.09.2009, 21:12
TRam_
стрелка далеко,то при передачи управления скрипту, локомотив будет ехать долго
объясни смысл этого предложения - я не понял.
писать условие, при наезде на триггер передать управление скрипту
так никто не запрещает делать правила для нескольких локов, маневрирующих одновременно...
Я понимаю, что можно сразу составить состав с локомотивом, а охото для большего реализма сделать маневровые работы на станции ну и.т.д.
так что мешает сделать всёс это не скриптом, а правилами? В том числе тем же driverSetup'ом и правилами Trigger rule, и SetJunction? В z7 есть команда машинисту "открыть маневровый сигнал" и "сменить приоритет" (тут 3 считается маневровым). Есть ещё команда машинисту wait которая позволяет синхронизировать события.
объясни по подробнее, что именно тебе требуется
Re: Создание скриптов сценария для TRS 2006
Добавлено:
28.09.2009, 21:43
GSTrainz
если стрелка далеко,то при передаче управления скрипту, локомотив будет ехать
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);остановка
Re: Создание скриптов сценария для TRS 2006
Добавлено:
29.09.2009, 00:20
AlexanderG
А еще можно вместо эмпирически настраиваемых задержек сделать монитор, который будет контролировать расстояние до прицепляемого состава.
Re: Создание скриптов сценария для TRS 2006
Добавлено:
29.09.2009, 00:58
TRam_
только для этого надо внимательно изучить и понять GSTrackSearch
Re: Создание скриптов сценария для TRS 2006
Добавлено:
29.09.2009, 13:03
mzoo
Раз нет рабочих вариантов сцепки,кроме train02.SetAutopilotMode(Train.CONTROL_SCRIPT),то буду пока юзать его. Всем спасибо!
Если кто-то найдет еще варианты, как сцепить вагоны пишите, буду очень рад, еще раз всем спасибо.
Re: Создание скриптов сценария для TRS 2006
Добавлено:
30.09.2009, 11:39
AlexanderG
Причем тут СетАвтопилотМод? Она всего лишь указывает способ управления поездом. Сцепкой занимается
- Код: Выделить всё
TrainUtil.DoCoupleUp(train02,train01);
Re: Создание скриптов сценария для TRS 2006
Добавлено:
30.09.2009, 15:27
mzoo
Локомотив при, 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);
Собираем маршрут и поездом будет управлять бот
Re: Создание скриптов сценария для TRS 2006
Добавлено:
11.10.2009, 11:31
GSTrainz
Нашел отличный способ решить проблему со сцепкой!
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 ) ;// ставим состав на тормоза
Re: Создание скриптов сценария для TRS 2006
Добавлено:
11.10.2009, 12:40
AlexanderG
Я боюсь, на второй позиции если будет ехать, долбанет вагоны. Лучше просто разогнать до 3...5км\ч, дальше выбегом сцепляться.
Re: Создание скриптов сценария для TRS 2006
Добавлено:
11.10.2009, 13:16
GSTrainz
Ну-это уже тонкости...Главное-в каком месте ни стояли бы на пути вагоны,локомотив всегда останавливается на определенном расстоянии от них.И это расстояние всегда одинаковое.
А если выбегом-тогда последние строки будут выглядеть так:
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 позиции) .А слишком раннее обращение к созданному(сцепленному) составу вырубало игру напрочь (вылет в винду)
Re: Создание скриптов сценария для TRS 2006
Добавлено:
11.10.2009, 14:12
TRam_
а что мешает спрашивать, что за поезд образовался?
например, так
Sleep (5);
train1.SetManualThrottle(0);
Vehicle V1=train1.GetVehicles()[0];
TrainUtil.DoCoupleUp(train1,train2);
Sleep (1);
train1=V1.GetMyTrain();
train1.SetTrainBrakes ( 4.0 ) ;
а вообще можно и самим сделать автопилот
- Код: Выделить всё
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;
}
}
Re: Создание скриптов сценария для TRS 2006
Добавлено:
11.10.2009, 15:33
AlexanderG
Правильный вариант работать будет. Хотя тут оба неправильные — что за радость из обработчика переходить на метку (1 вар)? Проще код из под метки внести в обработчик.
- Код: Выделить всё
wait()
{
on "Train","StoppedMoving":
{
break;
}
Ну а это просто делает конструкцию практически бессмысленной. Уж лучше монитор.