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

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

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

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

Сообщение mzoo » 27.12.2008, 19:40

Привет всем!!!. У меня 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);
}
};
Помогите пожалуйста разобраться что я делаю не так, очень надо
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

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

Сообщение Sunrise » 28.12.2008, 21:03

Я не скриптер в ТРС, но нутром чую, что двойные скобки в этой строчке World.FindKUID("vl10a"); не нужны, ведь vl10a - переменная.

P.S. Выдранно из моих знаний по PHP.
:-)
Аватара пользователя
Sunrise
 
Сообщения: 374
Зарегистрирован: 26.12.2006, 19:15
Откуда: Днепропетровск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Имя: Иван

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

Сообщение TRam_ » 28.12.2008, 21:16

нет, там всё абсолютно правильно. "vl10a" - это строка, содержащая им куида. Вообще читайте АПИ. Там по этой функции написано

public native KUID World.FindKUID ( string name )

Obsolete method.

This method is OBSOLETE and only works from within a Scenario script. Use Asset.LookupKUIDTable() instead to find the KUID of an object by name.
(т.е. работает только в скрипте сценария)

т.е. для "не сценарийных" скриптов нужно пользоваться

public native KUID Asset.LookupKUIDTable ( string kuidTableAssetName )

Gets the KUID of the named item in this asset's kuid-table.

In the configuration of an asset, there might be a kuid-table container section that defines convenient names to correspond to the KUIDs of other assets.

For example, tag in an asset's kuid-table could be defined as having the name "coal" and a KUID of <KUID:44179:60013>, which is the KUID for the coal product type. This means you can now use "coal" for the kuidTableAssetName parameter in this method and it will return the associated KUID.

Note that this method will only succeed if the asset this object refers to has a matching entry in its kuid-table and won't work on other assets that don't have that entry.

Parameters:
kuidTableAssetName Name of the item in the kuid-table of this Asset to get the KUID of.

Returns :
Returns the named KUID from this asset's kuid-table if successful, null otherwise.
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

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

Сообщение Combine » 28.12.2008, 22:31

Код: Выделить всё
 KUID[] mytrainSpec = new KUID[0];

Создаешь массив без элементов?

Код: Выделить всё
 mytrainSpec[0] = WorldKUID("vl10a");
mytrainSpec[1] = mytrainSpec[0];

Потом пытаешься с несуществующими элементами работать? Странно, что оно не вылетает.
Аватара пользователя
Combine
 
Сообщения: 537
Зарегистрирован: 23.10.2006, 09:47
Откуда: Московская область
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Александр

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

Сообщение agmike » 29.12.2008, 00:25

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

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

Сообщение Combine » 29.12.2008, 00:47

А дело в том, что тут он размерность объявляет явно, так что массив самый что ни на есть статический.
Аватара пользователя
Combine
 
Сообщения: 537
Зарегистрирован: 23.10.2006, 09:47
Откуда: Московская область
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Александр

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

Сообщение mzoo » 29.12.2008, 14:51

А вот если сделать вот так:
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 не работает так как она не настроена, теперь
Вопрос а можно как не будь сделать так чтоб и сессия подгружалась.
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

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

Сообщение TRam_ » 29.12.2008, 15:13

что если попробовать

include "ScenarioBehavior.gs"
include "browser.gs"
include "locomotive.gs"
include "common.gs"

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

thread void main(void)
{
Monitor();
mytrainSpec[0] = Asset.LookupKUIDTable ("vl10a");
mytrainSpec[1] = mytrainSpec[0];
mytrain = World.CreateTrain(mytrainSpec,cast<TrackMark>Router.GetGameObject("msta2"),true);
mytrain.SetAutopilotMode(Train.CONTROL_MANUAL);
}
};
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

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

Сообщение GSTrainz » 29.12.2008, 15:16

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

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

Сообщение mzoo » 30.12.2008, 08:52

GSTrainz-Большое вам спасибо за файл, все заработало.
Сценариев к Абхазии у меня 3 штуки, два ваших и один RMM, смотрю их
что-то понятно, что-то нет, у меня с программированием не очень. Ну есть
большое желание разобраться в скриптах для Trainz.
И вот опять не могу догнать, в тот файл который вы дали я вставляю код для
Посадки машиниста в локомотив, он ругается на вот эту строчку
while (dcl[i].GetLocalisedName()!=DriverName and i< dcl.size() ) i++;
пробовал разные варианты ну что то не получается вот полностью скрипт
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;
string DriverName;
DriverCharacter[] dcl;
int i;

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);
Mytrain.GetVehicles()[1].Reverse(); //переворачиваем 2-ю секцию локомотива
Mytrain.SetTrainPriorityNumber(3); // маневровый
Sleep(5);
DriverName = "Adair";
dcl=World.GetDriverCharacterList();
while (dcl[i].GetLocalisedName()!=DriverName and i< dcl.size() ) i++; // ищем в списке машинистов Адаира
dcl[i].SetLocation(Mytrain.GetFrontmostLocomotive()); // и сажаем его в поезд (чтобы z6 работала)
Sleep(10);
World.SetCamera(Mytrain.GetFrontmostLocomotive(), World.CAMERA_INTERNAL);
Mytrain.SetAutopilotMode(Train.CONTROL_SCRIPT);
Mytrain.SetDCCThrottle(0.4);
Sleep(4);
Mytrain.SetDCCThrottle(0);
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();
}
};
И скажите где можно инфу по скриптам взять. И еще по поводу погоды и времени
Скажите что это за цифры с каких соображений ставится эти цифры.
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

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

Сообщение agmike » 30.12.2008, 10:09

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

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

Сообщение GSTrainz » 30.12.2008, 11:12

А до этого в настройках сессии ты "Adair" в список машинистов включал?
Строка while (dcl[i].GetLocalisedName()!=DriverName and i< dcl.size() ) i++;
перебирает список машинистов до тех пор,пока не находит DriverName = "Adair";
А если не находит-то наверное и выдает ошибку.
Аватара пользователя
GSTrainz
 
Сообщения: 634
Зарегистрирован: 28.09.2006, 21:42
Откуда: Феодосия
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Гена

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

Сообщение mzoo » 30.12.2008, 11:19

GSTrainz Нет, в настройках сессии я не чего не делал, только удалил Driver Setup,может быть из за этого.

а кто скажет где взять АПИ и ССГ.
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

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

Сообщение mzoo » 30.12.2008, 13:00

Понял что надо, в настройках сесии в Driver Setup добавлять всех машинистов которых
Используем в сценарии и тогда ошибки не будет.
mzoo
 
Сообщения: 19
Зарегистрирован: 24.12.2008, 14:45
Откуда: Нефтеюганск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Играю в: Auran Trainz
Имя: Roman

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

Сообщение Combine » 30.12.2008, 14:32

По поводу погоды смотри в world.Gs, насчет времени, 0.0 это полдень, 0.5 -- полночь, или наоборот, точно не помню.
Аватара пользователя
Combine
 
Сообщения: 537
Зарегистрирован: 23.10.2006, 09:47
Откуда: Московская область
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Александр

След.

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

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

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