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

Скриптование ПС

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

Скриптование ПС

Сообщение kemal » 25.05.2009, 19:06

Понадобилось мне вагон проскриптовать... Сделал... Не работает...
Понял, что скриптование ПС имеет особенности. Вот их и хотелось бы обсудить в этой теме (в т.ч. и кабины)
Итак, вопрос первый: Имеется код:
Код: Выделить всё
 thread void ShowBrowser(void){
  Message msg;
  wait(){
   on "Browser-URL","",msg: {
    if(msg.src==mn and msg.minor[0,16]=="live://property/")LinkPropertyValue(msg.minor[16,]);
    mn.LoadHTMLString(GetContentViewDetails());
    continue;
   }
   on "Browser-Closed","",msg: {
    if (msg.src==mn) {mn=null;}
   }
  }
 // mn=null;
 }

 public void ViewDetails(Message msg){
  mn=Constructors.NewBrowser();
  mn.LoadHTMLString(GetContentViewDetails());
  mn.SetWindowRect(100,100,600,500);
  ShowBrowser();
 }

 public void Init(void){
  inherited();
  ST=GetAsset().GetStringTable();
  AddHandler(me,"MapObject","View-Details","ViewDetails");
 }

По идее, должно открыться окно View Details. Вот только оно сразу закрывается... Спрашивается, что тут не так? Точно такой же код на сценери объекте прекрасно работает.
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение varz » 25.05.2009, 21:32

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

в прилагаемом куске кода:
плюшка в моменте создания браузера в методе ViewDetails(...):

вот вариант в z7
public void ViewDetails(Message msg){
if(!mn){
mn=Constructors.NewBrowser();
}
mn.LoadHTMLString(me.GetAsset(),GetContentViewDetails());
int x=Math.Rand(0,20);
int y=Math.Rand(0,20);
mn.SetWindowRect(100+x,100+y,400+x,450+y);
ShowBrowser();
}
***
в z7 можно все, в ТРС не все можно.
Аватара пользователя
varz
 
Сообщения: 907
Зарегистрирован: 03.02.2006, 22:23
Откуда: Липецк
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Скриптование ПС

Сообщение TRam_ » 25.05.2009, 21:50

во-первых, требуется написать GetContentViewDetails() - процедуру, которая возвращает строку браузера (браузер, как и в html , тут представляет длинную строку с тегами). Отделять msg.minor[16,] вообще нельзя - трейнз не поймёт.

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

Re: Скриптование ПС

Сообщение kemal » 25.05.2009, 22:40

GetContentViewDetails() определено, msg.minor[16,] работает.
Точно такой же код на сценери объекте прекрасно работает.

У меня мысль, может там конфликт с дефолтным ViewDetails? Вообще, хорошо бы поковырять какой-нибудь ПС, но у них у всех скрипты закрыты :-(
varz,
Вот полный код:
Код: Выделить всё
include "locomotive.gs"
include "Soup.gs"

class t3_salazki_test isclass Locomotive{
 int type;
 StringTable ST;
 Browser mn;

 public string GetDescriptionHTML(void){
  string str;
  str="<html><body>";
  str=str+ST.GetString("type")+": <a href=\"live://property/type\">"+ST.GetString("type"+type)+"</a><br>";
  str=str+"</body></html>";
  return str;
 }

 string GetContentViewDetails(void){
  string str;
  str="<html><body><font color='#000000'>";
  str=str+ST.GetString("type")+": <a href=\"live://property/type\">"+ST.GetString("type"+type)+"</a><br>";
  str=str+"</font></body></html>";
  return str;
 }

 string GetPropertyType(string id){
  return "link";
 }

 public void LinkPropertyValue(string p_propertyID){
  if (p_propertyID == "type"){type++;type=type%4;}
 }

 public string GetPropertyValue(string p_propertyID){
  if (p_propertyID == "salazki"){//Если нас спрашивают, как должны среагировать салазки, то отвечаем (или не отвечаем (type==0)) исходя из значения type
   if(type==1)return "salazki0";
   if(type==2)return "salazki1";
   if(type==3){
    if(GetEngineSetting("throttle") and GetEngineSetting("dynamic-brake")==0)return "salazki1";
    else return "salazki0";
   }
  }
  return "";
 }

 public Soup GetProperties(void){
  Soup sp=inherited();
  sp.SetNamedTag("type",type);
  return sp;
 }

 public void SetProperties(Soup sp){
  inherited(sp);
  type = sp.GetNamedTagAsInt("type");
 }

 thread void ShowBrowser(void){
  Message msg;
  wait(){
   on "Browser-URL","",msg: {
    Interface.Print("("+msg.major+", "+msg.minor+")");
    if(msg.src==mn and msg.minor[0,16]=="live://property/")LinkPropertyValue(msg.minor[16,]);
    mn.LoadHTMLString(GetContentViewDetails());
    continue;
   }
   on "Browser-Closed","",msg: {
    Interface.Print("("+msg.major+", "+msg.minor+")");
    continue;
    if (msg.src==mn) {mn=null;}
   }
  }
 // mn=null;
 }

 public void ViewDetails(Message msg){
  mn=Constructors.NewBrowser();
  mn.LoadHTMLString(GetContentViewDetails());
  mn.SetWindowRect(100,100,600,500);
  ShowBrowser();
 }

 public void Init(void){
  inherited();
  ST=GetAsset().GetStringTable();
  AddHandler(me,"MapObject","View-Details","ViewDetails");
 }
};

Это тот самый экспериментальный вагон из темы про трамвайные стрелки.
ЗЫ А чего кабина? Просто я потом и за них возьмусь, вот и хотелось узнать, как их скриптовать и как они взаимодействуют с вагоном.
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение TRam_ » 26.05.2009, 16:42

кабину не трогаем - это святое.
совсем это уже не святое... Нет, было бы время, расписал бы свой ELCv2 "по полочкам", там все основные элементы (и браузер, и передача инфы "кабина-лок" через базу данных "CabineData" в обоих направлениях есть, и обработка клавиш... Единственное чего там нет - взаимодействия между локами)
Скрипт(ы - их всего 3 ) этот ОТКРЫТ!!!! ОТКРЫВАЕТСЯ блокнотом. Находится тут http://file002r.mylivepage.ru/chunk2/97 ... %2B394.rar (вместе с "вагоном-лабораторией", в которой самый простой браузер, который только можно придумать)


Скриптовать "наезд" вагона на стрелку можно 2 способами -
1) поставить хендлер на стрелку (ловля мессаджа от состава), котрый определяет источник мессаджа (т.е. поезд), ищет в нём нужный вагон и, например, открывает "public void function120()" , описанной в вагоне (либо "лично" пересылает вагону месседж, а вагон своим хендлером его ловит)

2) ставить "дистанционно" хендлер на поезд (ловля мессаджа от стрелки), и вызывать процедуру вагона. Единственная проблема - при расцепке и сцепке объект "поезд" удаляется, и хендлер на "новообразовавшийся поезд" надо вешать заново.

А вообще мессаги (месседжи) такие -

(части месседжа_____объект-источник__объект назначения)
Major | Minor | Source | Destination
"Junction" | "Toggled" | junction | broadcast ("рассылка" всем объектам при переводе стрелки)
"Junction" | "InnerEnter" | junction | train
"Junction" | "Enter" | junction | train (высылается стрелкой тому поезду, который наехал)
"Junction" | "Stopped" | junction | train
"Junction" | "InnerLeave" | junction | train
"Junction" | "Leave" | junction | train
"Object" | "InnerEnter" | train | junction
"Object" | "Enter" | train | junction (высылается наехавшим поездом стрелке)
"Object" | "Stopped" | train | junction
"Object" | "InnerLeave" | train | junction
"Object" | "Leave" | train | junction
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: Скриптование ПС

Сообщение kemal » 26.05.2009, 17:32

TRam_
За скрипты спасибо, буду смотреть.

Вот только причём здесь наезд на стрелку?...
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение TRam_ » 26.05.2009, 20:14

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

Re: Скриптование ПС

Сообщение kemal » 26.05.2009, 21:33

Заменил строчку
mn.LoadHTMLString(GetContentViewDetails());
на
mn.LoadHTMLString(me.GetAsset(),GetContentViewDetails());
И что такая замена означает??
Теперь окно не закрывается при открывании. Но вот другая беда: цикл в ShowBrowser срабатывает по 2 раза... Что с ним можено сделать?
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение kemal » 08.03.2010, 23:40

Продолжаю изучать скриптование ПС. Понадобилось мне сделать справа внизу панельку, в которую можно было бы выводить всякую полезную инфу. Как это делается? Понятно, что браузером, но как именно?
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение AlexanderG » 09.03.2010, 22:37

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

Re: Скриптование ПС

Сообщение kemal » 09.03.2010, 22:42

Спасибо, кэп!

Спрашивается как и когда его создавать, как содержимое менять. И главное откуда (кабина/лок)
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение TRam_ » 09.03.2010, 22:46

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

Re: Скриптование ПС

Сообщение kemal » 11.03.2010, 19:05

Я вот думаю, может его в Attach() кабины создавать? Всё равно нам этот браузер не нужен, когда мы в другом ПС.

ЗЫ а как ведут себя кабины, когда их две?
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Скриптование ПС

Сообщение TRam_ » 11.03.2010, 19:46

Как я помню, работает только та, на вагоне которой ты находишься. Остальные спят/деструктурированы (это надо тестить)

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

Re: Скриптование ПС

Сообщение agmike » 11.03.2010, 20:25

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

След.

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

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

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