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

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

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

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

Сообщение TRam_ » 11.10.2009, 15:37

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

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

Сообщение agmike » 11.10.2009, 18:09

Код: Выделить всё
    wait()
    {
      on "Train", "StoppedMoving":
      ;
    }
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

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

Сообщение TRam_ » 11.10.2009, 21:24

да, долгое время тупил по поводу конструкции :beak:

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

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

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

Сообщение GSTrainz » 11.10.2009, 23:27

TRam_, большое спасибо!!!Я теперь могу отслеживать расстояние до вагонов и,в зависимости от него получать подсказки сцепщика!(если я осаживаю состав "вслепую")
А насчет "ждать,пока состав остановится":
while (train1.IsStopped()==false) ; // разве это не то-же самое,что и
wait(){on "Train", "StoppedMoving":{continue;} }

Программа ведь в обеих случаях ждет выполнения условия ,что поезд остановился.
Аватара пользователя
GSTrainz
 
Сообщения: 634
Зарегистрирован: 28.09.2006, 21:42
Откуда: Феодосия
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Гена

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

Сообщение TRam_ » 12.10.2009, 00:15

while (train1.IsStopped()==false) ; // разве это не то-же самое,что и
wait(){on "Train", "StoppedMoving":{continue;} }



тут надо так

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

continue заставит ждать следующего сообщения, и следующего, и следующего.... Короче это будет цикл без выхода

Код: Выделить всё
wait(){
on "Train", "StoppedMoving":
   {
   if(train1.IsStopped()==false) //поезд остановился, но не этот. Надо ждать следующего сообщения
       continue;
//в остальных случаях (если наш поезд остановился), продолжать выполнение дальше
   }
}
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

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

Сообщение AlexanderG » 12.10.2009, 01:17

Код: Выделить всё
wait(){
on "Train", "StoppedMoving":
   {
   if(train1.IsStopped()==false) //поезд остановился, но не этот. Надо ждать следующего сообщения
       continue;
//в остальных случаях (если наш поезд остановился), продолжать выполнение дальше
   }
}
Кстати да, надо еще осуществлять проверку, что остановился именно наш поезд. Подумываю над набором правил\команд:
1) Смена приоритета правилом. Нужно потому, т.к. у игрока в процессе игры приоритет сменить невозможно (автоматически).
2) Проба тормозов. Правило и команда (команду пробовал делать, почти работает). Суть в том, что скрипт ждет появления давления в ТЦ хвостового вагона и выдает речевое сообщение. Опять же, команда для ботов (хотя, по сути, не нужна) и правило для игрока.
3) Прицепка. Правило и команда. Медленно подкатывает к составу, останавливается за 10м, продувает ТМ (через SetBrakePipeEfficiency()), сцепляется.

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

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

Сообщение agmike » 12.10.2009, 14:38

Народ, не страдайте херней. Sniff уже ловит сообщения данного и только данного поезда, зачем же тогда проверять он ли это? Да еще и такой дибильной конструкцией
Код: Выделить всё
if (train1.IsStopped() == false)

Если уж так, то
Код: Выделить всё
if (!train1.IsStopped())


Вот же, аналогичный и простейший вариант:
Код: Выделить всё
    wait()
    {
      on "Train", "StoppedMoving":
      ;
    }


Что касается
while (train1.IsStopped()==false) ;
то оно просто тормознет игру навеки.
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

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

Сообщение TRam_ » 12.10.2009, 15:41

я привык к

Код: Выделить всё
 wait()
    {
      on "Train", "StoppedMoving": {}
    }


и тупанул насчёт приёмника сообщений

из API
"Train" "StoppedMoving" - от train к train


значит, здесь Sniff обязателен

"Vehicle" "Coupled" - от coupled vehicle к broadcast


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

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

Сообщение AlexanderG » 12.10.2009, 16:22

долгое время тупил

не замечал

и тупанул

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

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

Сообщение TRam_ » 12.10.2009, 16:38

Код: Выделить всё
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))// пока не видно ни одного вагоона на расстоянии 100 м
   {
   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(vel>19.5)      
         position=0;
      position--;
      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);
vel=Math.Fabs(train1.GetVCelocity()*3.6);
   

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

train1.SetManualThrottle(0);



Vehicle v2=v1[0];

TrainUtil.DoCoupleUp(train1,train2);

Vehicle[] vehArr;
int i;
bool exists=false;

wait()   // Ожидание остановки
   {
    on "Vehicle","Coupled":
      {
      exists=false;
      i=0;

      //проверяем, оказался ли первый вагон поезда train2 сцепенным с первым вагоном поезда train1
      
      vehArr = v2[0].GеtMyTrain().GetVehicles();

      while(i<vehArr.size() and !exists)// перебираем все номера вагонов, пока не найдём вагон поезда train1
         {
         if(vehArr[i]==v1[0])   //содержится ли 1 вагон поезда train1 в поезде с вагоном v2[0] (из поезда train2)   
            exists=true;
         i++;
         }
      if(!exists)   //поезда не сцепились - ждать следующего сообщения
         continue;
      }
   }


Sleep(0.1);

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

train1.SetTrainBrakes(4.0);



долгое время тупил

не замечал

и тупану
:up: слово-паразит

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

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

Сообщение agmike » 12.10.2009, 17:11

Кстати, вспомнил интересную фичу: если ждем одного сообщения, wait() можно не писать:

// что-то полезное //
on "Message major", "Minor":
// еще больше полезного //
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

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

Сообщение TRam_ » 12.10.2009, 21:41

сразу придумывается схема "не дождались сообщения"

float maxtime=60;
bool not_reсeived=false;

Sleep(60);
not_reсeived=true;


on "Message major", "Minor":

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

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

Сообщение AlexanderG » 12.10.2009, 23:59

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

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

Сообщение GSTrainz » 13.10.2009, 01:25

От жеж теоретики!)))
Вот рабочий сценарий (карта ,сессия и правило-сценарий)
http://ifolder.ru/14467128
все нормально работает.Пробуйте вносить в него свои изменения.У меня ничего не получается-компилятор ошибки выдает.
Такая проблема обнаружилась:не хочет локомотив накатом ехать.
Когда выполняется train1.SetManualThrottle(0);
автоматически врубаются тормоза...Такое впечатление,что нет никакой разницы между
train1.SetDCCThrottle(0.0); и train1.SetManualThrottle(0);
Аватара пользователя
GSTrainz
 
Сообщения: 634
Зарегистрирован: 28.09.2006, 21:42
Откуда: Феодосия
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Гена

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

Сообщение TRam_ » 13.10.2009, 02:06

попробуй

Locomotive MyLoco=train1.GetFrontmostLocomotive();
MyLoco.SetEngineSetting("throttle",0);
MyLoco.SetEngineSetting("train-auto-brake",0);


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

Пред.След.

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

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

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