Ämne: Triggers
Visa ett inlägg
Gammal 2011-01-22, 03:18   #9
svenolov
Medlem
 
Reg.datum: Apr 2004
Ort: Lom - Norway
Inlägg: 1 272
Standard

Citat:
Ursprungligen postat av ngtutp Visa inlägg
Jag använder mig utav "WaitForTrigger" <KUID2:57344:80001:2>

Ha de så bra
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:
      {
-
__________________
svenolov

I Trainz vet man att det omöjliga är möjligt (bevingade ord myntade av Nisse).

Senast redigerad av svenolov den 2011-01-22 klockan 03:34.
svenolov besöker inte forumet just nu   Svara med citat