PDA

Просмотр полной версии : Создание скриптов для TRS 2006


Roman-L
27.12.2008, 21:32
Привет всем!!!. У меня TRS 2006 Вот очень сильно хочу разобраться как делать сценарии с помощью скриптов. Прочитал много информации, смотрел примеры ну что у меня не чего получается, уже неделю долблюсь сделать простой скрипт просто поставить
поезд на маркер и управлять им потом.
Для этого я создал маршрут простой две станции A и B, затем создал сессию
Для него. Затем в Content Manager импортирую скрипт, жму Ctrl+M захожу
В Trainz в редактор маршрутов выбираю свою сессию в созданном маршруте
Потом в правилах сессии добавляю скрипт сохраняю. Перехожу в Driver
Выбираю свой маршрут и ту сессию где скрипт все загружается но поезда нет
Вот сам скрипт и конфиг:

kind "behavior"
username testsc
script testsc
class testsc
kuid <kuid:200108:0005>
region Russia
category-region-0 RU
category-era-0 1990s
category-class YS

kuid-table {

Default <kuid:-2:1091>
vl10a <kuid2:166294:260:1>
}
description "Script"

Cкрипт:
nclude "ScenarioBehavior.gs"
include "browser.gs"
include "locomotive.gs"

game class testsc isclass ScenarioBehavior
{
Train mytrain;
KUID[] mytrainSpec = new KUID[0];

thread void main(void)
{
Monitor();
mytrainSpec[0] = World.FindKUID("vl10a");
mytrainSpec[1] = mytrainSpec[0];
mytrain = World.CreateTrain(mytrainSpec,"msta2",true);
mytrain.SetAutopilotMode(Train.CONTROL_MANUAL);
}
};
Помогите пожалуйста разобраться что я делаю не так, очень надо

Combine
27.12.2008, 22:03
KUID[] mytrainSpec = new KUID[0]; Это что? Создаешь массив без элементов?
mytrainSpec[0] = World.FindKUID("vl10a");
mytrainSpec[1] = mytrainSpec[0]; Опять же, пытаешься работать с несуществующими элементами.
script testsc
class testsc Попробуй заключить в кавычки.

genesis
29.12.2008, 00:38
behavior - кайнд правила сессии, а не сценария

Roman-L
29.12.2008, 14:54
А вот если сделать вот так:
kind "activity"
username "testsc"
scriptlibrary "testsc"
scriptclass "testsc"

kuid <kuid:200108:0011>
region "Russia"
category-region-0 "RU"
category-era-0 "1990s"
category-class "YS"
description "Script"
asset-filename "Mashinist"
kuid-table {
test-script-map <kuid:-2:1091>
vl10a vl10a <kuid2:166294:260:1>
}
Скрипт
include "trainz.gs"
include "navigate.gs"
include "train.gs"
include "turntable.gs"
include "junction.gs"

game class testsc isclass Scenario
{

Train mytrain;
bool JunctionHand = true;

KUID[] mytrainSpec = new KUID[0];

bool Load(string data)
{
if(!World.LoadMap(World.FindKUID("test-script-map")))
{
Interface.Log("Error loading scenario map");
return false;
}
Interface.AdjustScore(1000);

return true;
}
thread void main(void)
{
sostav[0] = World.FindKUID("vl10a");
sostav[1] = sostav[0];
mytrain = World.CreateTrain(sostav,"msta2",true);
World.SetCamera(mytrain.GetVehicles()[0],World.CAMERA_INTERNAL);
Sleep(10);
}
};

То в TRS2006 в Driver в разделе Scenario появляется скрипт все работает нормально
Появляется локомотив, ну так не совсем подходит так, как загружается карта без
Сессии и соответственно сигналка z6 не работает так как она не настроена, теперь
Вопрос а можно как не будь сделать так чтоб и сессия подгружалась.

Combine
29.12.2008, 16:38
Думаю, да, есть правило Custom Script для сессий.

Roman-L
30.12.2008, 09:02
Большое спасибо GSTrainz он Подсказал как это делаеться, вот скрипт:
include "ScenarioBehavior.gs"
include "locomotive.gs"


class testsc isclass ScenarioBehavior
{
bool objectRunningDriver =false;
// Функция переключения стрелки

void ChangeJunc(string jName,int dir){
Navigate.LockJunction(jName,dir,true);
}

thread void SecondThread()
{

KUID[] sostav = new KUID[0];

Train Mytrain;


KUID SN = GetAsset().LookupKUIDTable("testsc");
Asset SCN_dir = World.FindAsset(SN);

World.SetGameTime (0.800);// время
Interface.ShowOnScreenHelp (false) ;// убираем светящиеся левера
World.SetWeather (2,1);// погода

sostav=new KUID[0];
sostav[0]=GetAsset().LookupKUIDTable("vl10a");
sostav[1]=GetAsset().LookupKUIDTable("vl10a");
Mytrain=World.CreateTrain(sostav,"msta2",true); //Ставим поезд на маркер с именем msta2
Mytrain.GetVehicles()[1].Reverse(); //переворачиваем 2-ю секцию локомотива
Mytrain.SetTrainPriorityNumber(3); // маневровый
World.SetCamera(Mytrain.GetFrontmostLocomotive(), World.CAMERA_INTERNAL);
Mytrain.SetAutopilotMode(Train.CONTROL_MANUAL);
Sleep(20);
}

public void RunInDriver(){
if(World.GetCurrentModule()!=World.DRIVER_MODULE){
return;
}
SecondThread();

}

public void RunInSurveyor(){
if(World.GetCurrentModule()!=World.SURVEYOR_MODULE ){
return;
}
}

void ModuleInitHandler(Message msg){
if (objectRunningDriver)
return;

if (World.GetCurrentModule() == World.DRIVER_MODULE)
{
objectRunningDriver =true;
RunInDriver();
}
}

public void Init(Asset self)
{
inherited(self);
AddHandler(me, "World", "ModuleInit", "ModuleInitHandler");

RunInSurveyor();
}

};
Этот скрипт получается как правило сессии

genesis
30.12.2008, 10:13
так он и должен в этом случае быть правилом сессии