Ämne: Triggers
Visa ett inlägg
Gammal 2011-01-22, 14:20   #10
ngtutp
Medlem
 
Reg.datum: Oct 2005
Ort: Sävsjö
Inlägg: 16
Standard

Citat:
Ursprungligen postat av svenolov Visa inlägg
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:
      {
-



Hej

Det fungerade jättebra
Tack så oerhört mycket

Hälsningar Robin
ngtutp besöker inte forumet just nu   Svara med citat