Nu har jag tittat på koden och gjort ett tillägg som jag har testat. Det fungerar bra.
Komandot testar nu om det redan står ett tåg på triggern. Om det står ett tåg där så händer detta.
1. Om man valt "Any Train" så avslutas kommandot direkt.
2. Om man har angett ett visst lok, och loket överenstämmer med tågets lok, så avslutas kommandot.
Komandot uppför sig alltså precis likadant, som om/när tåget anländer till triggern.
Ingenting av originalkoden är ändrad. Det är bara två tillägg som behöver göras.
1. Klona kommandot först, så att det får din kuid.
2. Redigera filen
waitfortriggerschedulecommand.gs enligt nedan.
Efter raden
Message msg; och före raden
wait() lägger du in följande rad. Markerad med
röd text.
Kod:
Message msg;
train.PostMessage(train, "Train", "CheckTrigger", 2.0); // added by Sven
wait()
{
Sen måste du lägga till en "event handler" i wait() lopen. Allt mellan dom streckade linjerna ska med. Markerad med röd text. Kopiera och klistra.
Obs! De två första och de två sista raderna i nedanstående kod, är från originalkoden.
Kod:
wait()
{
// Check trigger added 110121 by Sven
// =======================================================================================
on "Train", "CheckTrigger":
{
MapObject nextItem = null;
Vehicle vehicle = null;
GSTrackSearch gst = trig.BeginTrackSearch(true);
int distance = gst.GetDistance();
while (!vehicle and (distance < 5))
{
nextItem = gst.SearchNext();
distance = gst.GetDistance();
if (nextItem)
vehicle = cast<Vehicle>nextItem;
}
if (!vehicle)
{
gst = trig.BeginTrackSearch(false);
distance = gst.GetDistance();
while (!vehicle and (distance < 5))
{
nextItem = gst.SearchNext();
distance = gst.GetDistance();
if (nextItem)
vehicle = cast<Vehicle>nextItem;
}
}
if (vehicle)
{
Train v_train = vehicle.GetMyTrain();
if (v_train and v_train.IsStopped())
{
Locomotive loco = v_train.GetFrontmostLocomotive();
if (loco and (loco.GetName() == trainId))
{
Interface.Print(loco.GetName()+" has entered trigger ''" +trig.GetName()+"''");
break;
}
else if (trainId == "")
{
Interface.Print("A train has entered trigger ''" +trig.GetName()+"''");
break;
}
}
}
train.PostMessage(train, "Train", "CheckTrigger", 2.0);
continue;
}
// Check trigger end.
// =======================================================================================
on "Object", "Enter", msg:
{
-