| Этот пользователь сказал Спасибо TRam_ за это полезное сообщение: | 
 
 | 
	
		  
	 | 
		
			
  | 
	|||||||
| Сайт | ПРАВИЛА ФОРУМА | FAQ | Регистрация | Справка | Пользователи | Социальные группы | Календарь | Поиск | Сообщения за день | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Опции просмотра | 
| 
			
			 | 
		#31 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			kemal ,на int time=21.05 как ни странно,компилятор не ругается. 
		
		
		
		
		
		
		
		
			Просто так удобнее забивать график поездов в программу.Можно по другому: сразу ручками вбивать одной переменной значение часов,другой-минут.Но так не очень удобно.Вот я и спрашиваю:можно ли как-то целое значение переменной time присвоить одной переменной,а дробное-другой? TRam, тут наоборот-задача перевести привычное время расписания в еденицы,понятные скрипту(для отправления поезда по расписанию) Сейчас это так происходит: P=18,O=07;// поезд 5762 Феодосия-Кировское ,время отправления 18.07 (дополнительные переменные нужны потому,что для каждого поезда-свое время отправления для каждой станции) time=World.GetGameTime (); iHours=P,iMins=O; if (iHours < 12) fTime = 0.5 + (iHours / 24.0) + (iMins / 1440.0) + (iSecs / 86400.0); else fTime = ((iHours - 12) / 24.0) + (iMins / 1440.0) + (iSecs / 86400.0); while(time<fTime) // пока фактическое время меньше времени отправления-ждем { time=World.GetGameTime (); Sleep(1); } if ( soundvokzal !="_") Sleep (World.Play2DSound(SCN_dir,soundvokzal+".mp3"));// объявление об отправлении PS Неудачно взял для примера int time=21.05. Это не та переменная,что присутствует в фрагменте скрипта. Последний раз редактировалось GSTrainz; 03.02.2011 в 17:04.  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
|         
            
             | 
        |
| 
 
             Яndex
             
 
            Спонсор 
                Регистрация: 01.01.2007 
 
 
                
                    Сообщения: 500
                 
            Реклама показывается изредка по случайному принципу  | 
 
    
 
 
 
            
             | 
| 
			
			 | 
		#32 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			Так...Ну с этой ерундой вроде разобрался (не знаю,правильно ли) 
		
		
		
		
		
		
		
	float time=21.40; int hh=time; int min=(time-hh)*100; Interface.Print ("time="+time+" hh="+hh+" min="+min) ; результат: time=21.40 hh=21 min=39 (интересно,почему min= не 40?) Задача:пасс из 5 вагонов прибывает на 1 путь.В хвост-прицепка 10 вагонов.Остановиться надо ближе к выходному светофору на триггере "TE2C" Остановка раньше этого момента должна сопровождаться периодически повторяющимся сообщением информатора (у первой платформы протягивают пассажирский состав),чтобы подсказать игроку,что надо двигаться к светофору. int n=0; while(n<2) { while (train1.IsStopped()==false) n=1; Sleep (Math.Rand(2,5)); if ( Navigate.OnTrigger(me,train1,"TE2C",Navigate.TRIGG ER_ENTER)) n=3; if (n==1) Sleep (World.Play2DSound(SCN_dir, "ob_na_vokz_118"+".mp3")),Sleep (Math.Rand(5,10)); } // продолжение программы Вроде бы логически все верно и компилятор ошибок не выдает,но в игре вылетает ошибка ER_Timeout в строке while (train1.IsStopped()==false) n=1;  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#33 | 
| 
			
			 Матёрый пользователь 
			
			
			
				
			
			Регистрация: 18.02.2008 
				
				
				
					Сообщений: 8,759
				 
				 
Вы сказали Спасибо: 1,426 
	
		
			
				Поблагодарили 2,405 раз(а) в 1,354 сообщениях
			
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			логически неверно. Ты скобки неверно поставил. 
		
		
		
		
		
		
			int n=0; while(n<2) { while (train1.IsStopped()==false) {if ( Navigate.OnTrigger(me,train1,"TE2C",Navigate.TRIGG ER_ENTER)) n=3;if (n==1) Sleep (World.Play2DSound(SCN_dir, "ob_na_vokz_118"+".mp3"));Sleep (Math.Rand(5,10)); } 
				__________________ 
		
		
		
		
	местный зомбяк  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| Этот пользователь сказал Спасибо TRam_ за это полезное сообщение: | 
| 
			
			 | 
		#34 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			Спасибо.Теперь ошибка ушла.Но задачка все равно не решена.Получается,что пока поезд не наедет на "TE2C"-ничего не происходит сколько не останавливайся.А потом,при наезде на триггер сразу идет продолжение программы.Попробовал по другому:поставил триггер "TE1C" с зоной действия на участке,где останавливаться рано. 
		
		
		
		
		
		
		
		
			while(n<2) { while (train1.IsStopped()==false) { n=1; Sleep (Math.Rand(2,5)); } if ( Navigate.OnTrigger(me,train1,"TE1C",Navigate.TRIGG ER_ENTER)) n=1; else n=3; if (n==1) Sleep (World.Play2DSound(SCN_dir, "ob_na_vokz_118"+".mp3")); Sleep (Math.Rand(5,10)); } Остановился там,где не надо-зазвучало сообщение информатора.При возобновлении движения информатор замолчал.Съехал с триггера TE1C но,вопреки ожиданию,программа не продолжила работу.(а ведь,по идее должна была сработать строка else n=3; ) Осадил состав назад(снова наехал на триггер TE1C) и остановился-вновь зазвучало сообщение информатора... Последний раз редактировалось GSTrainz; 11.02.2011 в 14:46.  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#35 | |
| 
			
			 Матёрый пользователь 
			
			
			
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
 Код: 
	Message msg;
Sniff(train1, "Trigger", "Stopped", true);
PostMessage(me, "TimerTick", "", 0.1);
wait()
{
    on "Trigger", "Stopped", msg:
    {
        if (msg.src != Router.GetGameObject("TE1C")
            or msg.dst != train1)
        {
            continue;
        }
        break;
    }
    on "TimerTick", "":
    {
        while (train1.IsStopped())
            World.Play2DSound(SCN_dir, "ob_na_vokz_118"+".mp3");
        PostMessage(me, "TimerTick", "", Math.Rand(5.0, 10.0));
        continue;
    }
}
msg = null;
Sniff(train1, "Trigger", "Stopped", false);
Последний раз редактировалось genesis; 11.02.2011 в 20:33.  | 
|
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| Этот пользователь сказал Спасибо genesis за это полезное сообщение: | 
| 
			
			 | 
		#36 | |
| 
			
			 Матёрый пользователь 
			
			
			
				
			
			Регистрация: 18.02.2008 
				
				
				
					Сообщений: 8,759
				 
				 
Вы сказали Спасибо: 1,426 
	
		
			
				Поблагодарили 2,405 раз(а) в 1,354 сообщениях
			
		
	 
![]()  | 
	
	
	
		
		
			
			 Цитата: 
	
 { if (train1.IsStopped()) World.Play2DSound(SCN_dir, "ob_na_vokz_118"+".mp3"); PostMessage(me, "TimerTick", "", Math.Rand(5.0, 10.0)); continue; } 
				__________________ 
		
		
		
		
	местный зомбяк  | 
|
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#37 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			Спасибо,genesis!Спасибо TRam!Все заработало! 
		
		
		
		
		
		
		
		
			А можно ли это решение оформить как подпрограмму?Если да,то как это сделать?(ну,чтоб при каждом похожем случае не копипастить в текст программы одно и то-же,за исключением названия триггера) Последний раз редактировалось GSTrainz; 12.02.2011 в 03:02.  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#38 | 
| 
			
			 Матёрый пользователь 
			
			
			
				
			
			Регистрация: 18.02.2008 
				
				
				
					Сообщений: 8,759
				 
				 
Вы сказали Спасибо: 1,426 
	
		
			
				Поблагодарили 2,405 раз(а) в 1,354 сообщениях
			
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			наверно как-то так... 
		
		
		
		
		
		
			Код: 
	void WaitForTrain(Asset SCN_dir, Train train1, string ObjectName, string SoundName)
{
Message msg;
Sniff(train1, "Trigger", "Stopped", true);
PostMessage(me, "TimerTick", "", 0.1);
wait()
{
    on "Trigger", "Stopped", msg:
    {
        if (msg.src != Router.GetGameObject(ObjectName)
            or msg.dst != train1)
        {
            continue;
        }
        break;
    }
    on "TimerTick", "":
    {
        if (train1.IsStopped())
            World.Play2DSound(SCN_dir, SoundName);
        PostMessage(me, "TimerTick", "", Math.Rand(5.0, 10.0));
        continue;
    }
}
msg = null;
Sniff(train1, "Trigger", "Stopped", false);
}
				__________________ 
		
		
		
		
	местный зомбяк  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| Этот пользователь сказал Спасибо TRam_ за это полезное сообщение: | 
| 
			
			 | 
		#39 | 
| 
			
			 Матёрый пользователь 
			
			
			
			
	 | 
	
	
	
		
		
			
			 
			
			Если эта функция вызвана из потока, то проблем не будет.
		 
		
		
		
		
		
		
		
	 | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#40 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			Все ок,спасибо! 
		
		
		
		
		
		
		
	Новая задачка: в сценарии грузовые поезда создаются таким образом(упрощенно): dltr2=Math.Rand(20,70);// длина состава KUID[] sostav2=new KUID[0]; for (is = 0; is<dltr2; ++is) { snvag=Math.Rand(20,110);// номер вагона // хопер-дозаторы 21-30 // цистерны четырехосные 31-50 // цистерны восьмиосные 51-60 // платформы 61-70 // полувагоны 71-80 // хоперы-минераловозы 81-90 // рефрежераторы 91-100 // крытые 101-110 sostav2[is]=GetAsset().LookupKUIDTable("vag"+snvag); } train2=World.CreateTrain(sostav2,"ST",true); Можно ли как-то назначать определенным вагонам грузы?(например,если snvag = платформа,то загрузить на этот вагон груз для платформы)Где вообще брать эти грузы?Их куиды то-же надо вносить в конфиг сценария?  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#41 | 
| 
			
			 Пользователь 
			
			
			
			
	 | 
	
	
	
		
		
			
			 
			
			Да, каждый груз - строчка в kuid-table конфига. 
		
		
		
		
		
		
			В качестве примера как я создавал грузовой поезд и заправлял тепловоз: Код: 
	kuids=new KUID[0];
kuids[0]=self.LookupKUIDTable("2te116");
k=new KUID[0];
for(i=0;i<3;i++)k[i]=self.LookupKUIDTable("tank"+i);
for(i=1;i<6;i++)kuids[i]=k[Math.Rand(0,2)];
Train2=World.CreateTrain(kuids,"c_4ch",true);
for(i=1;i<6;i++)if(Math.Rand(0,1))Train2.GetVehicles()[i].Reverse();
Train2.GetFrontmostLocomotive().GetQueue("fuel").CreateProduct(World.FindAsset(self.LookupKUIDTable("fuel")), 3000);
d=World.AddDriverCharacter(World.FindAsset(self.LookupKUIDTable("driver2")));
d.SetLocation(Train2.GetFrontmostLocomotive());
d.SetLocalisedName("Driver2");
Train2.SetTrainPriorityNumber(2);
				__________________ 
		
		
		
		
	<kuid:216981:******>  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| Этот пользователь сказал Спасибо kemal за это полезное сообщение: | 
| 
			
			 | 
		#42 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			kemal, а можно по-подробнее относительно этой строки: 
		
		
		
		
		
		
		
	Train2.GetFrontmostLocomotive().GetQueue("fuel").C reateProduct(World.FindAsset(self.LookupKUIDTable( "fuel")), 3000); Что должно быть в "шапке" сценария,что бы компилятор на нее не ругался?  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#43 | 
| 
			
			 Матёрый пользователь 
			
			
			
				
			
			Регистрация: 18.02.2008 
				
				
				
					Сообщений: 8,759
				 
				 
Вы сказали Спасибо: 1,426 
	
		
			
				Поблагодарили 2,405 раз(а) в 1,354 сообщениях
			
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			вот так ничего не будет требовать 
		
		
		
		
		
		
			Код: 
	Train2.GetFrontmostLocomotive().GetQueue("fuel").CreateProduct(World.FindAsset(Train2.GetFrontmostLocomotive().GetAsset().LookupKUIDTable( "fuel")), 3000);
				__________________ 
		
		
		
		
	местный зомбяк  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| Этот пользователь сказал Спасибо TRam_ за это полезное сообщение: | 
| 
			
			 | 
		#44 | 
| 
			
			 Пользователь 
			
			
			
			
	 | 
	
	
	
		
		
			
			 
			
			Вроде ведь проверял, всё правильно было. Откуда эти пробелы берутся??? Мистика... 
		
		
		
		
		
		
			Единственно, что тут можно добавить, так это то, что я обычно делаю глобальную переменную self типа Asset. Ну и строчку в Init: self=GetAsset(); 
				__________________ 
		
		
		
		
	<kuid:216981:******>  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
| 
			
			 | 
		#45 | 
| 
			
			 Опытный 
			
			
			
			Регистрация: 14.09.2007 
				
				
				
					Сообщений: 110
				 
				 
Вы сказали Спасибо: 6 
	
		
			Поблагодарили 1 раз в 1 сообщении
		
	 
![]()  | 
	
	
	
		
		
			
			 
			
			Понятно.Это относительно заправки локомотива.А вот что до назначения грузов вагону-так ничего не понятно... 
		
		
		
		
		
		
		
	Такая еще проблема возникла.Под состав осаживаются вагоны. Надо добавить звуки ,cогласно регламенту переговоров составителя с машинистом. на расстоянии между составами примерно 250м ( "места на 10 вагонов") на расстоянии 125м - "места на 5 вагонов,тише") на расстоянии 3м-"остановка" Осаживаемый состав-train1.Состав,к которому прицепка-train2. bool a=false; Vehicle one2; one2=train2.GetVehicles()[0]; while(!(a)) a=train1.TracksideIsInFront(one2,250),Sleep(1); a=false; World.Play2DSound(SCN_dir, "m_na_10_vag"+".mp3");//10 вагонов while(!(a)) a=train1.TracksideIsInFront(one2,125),Sleep(1); a=false; World.Play2DSound(SCN_dir, "m_na_5_vag"+".mp3");//5 вагонов while(!(a)) a=train1.TracksideIsInFront(one2,3),Sleep(1); a=false; World.Play2DSound(SCN_dir, "ostanovka"+".mp3");//остановка На тестовой карте все идеально работает,но вот на основной...Расстояние измеряется до первого от train2 Track объекта(будь то триггер,светофор или деревянный настил)на рельсах. В чем может быть проблема и как ее решить?  | 
| 
		 | 
	
	
	
		
		
		
		
			 
		
		
		
		
		
		
		
			
		
		
		
	 | 
![]()  | 
	
	
		
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | |
| Опции просмотра | |
		
  | 
	
		
  | 
			 
			Похожие темы
		 | 
	||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение | 
| Регистрация на AURAN | ALFMASTER | TrainZ — Об игре | 32 | 31.08.2012 21:12 | 
| Помогите разобраться с правилами с сайта Auran! | NickLon | TrainZ - Маршруты и сценарии | 4 | 25.12.2008 04:20 | 
| Как заполучить оригинальный диск с сайта Auran? | VicNik | TrainZ — Об игре | 2 | 17.03.2008 16:19 | 
| О стрелках в TrainZ Auran | Диспетчер-регулятор | TrainZ — Об игре | 2 | 10.07.2007 21:26 | 
| 
 | 
![]() Что это?  |