Svenska 3D-Tåg - Forum  
 

Om det här är ditt första besök, se till att gå till vår FAQ (finns även länk till FAQ i navigeringsmenyn ovan). Du kan behöva att registrera dig innan du kan posta (finns även en länk till registrering i navigeringsmenyn ovan). För att titta på inlägg, välj det forum som du vill besöka från de som är listade nedan.

Gå tillbaka   Svenska 3D-Tåg - Forum > N3V Trainz > Scenarios och scripts

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2011-01-21, 12:20   #1
ngtutp
Medlem
 
Reg.datum: Oct 2005
Ort: Sävsjö
Inlägg: 16
Standard Triggers

Hej

Kan en trigger känna av ett tåg även om de står stilla på en trigger?

Försöker få det att funka i driver setup att tåg a skall vänta på att tåg b skall aktivera trigger c.

Problemet är att om tåg b redan står på triggern så fattar inte tåg a det i sitt körschema


Tack på förhand
ngtutp besöker inte forumet just nu  
Svara med citat
Gammal 2011-01-21, 12:42   #2
Hobo
Medlem
 
Reg.datum: Oct 2010
Ort: Filipstad
Inlägg: 239
Standard

Kan du inte prova att köra loket precis förbi triggern, och där stanna? Då funkar det garanterat.
Jag är rätt säker på att loket måste passera innan den löser ut.

Såg plötsligt att det inte var så du menade riktigt, men det går att ställa in triggern så att den gäller endast "en gång". Om du kryssar ur den rutan, så kanske det funkar?

Senast redigerad av Hobo den 2011-01-21 klockan 12:44.
Hobo besöker inte forumet just nu   Svara med citat
Gammal 2011-01-21, 13:22   #3
ngtutp
Medlem
 
Reg.datum: Oct 2005
Ort: Sävsjö
Inlägg: 16
Standard

Citat:
Ursprungligen postat av Hobo Visa inlägg
Kan du inte prova att köra loket precis förbi triggern, och där stanna? Då funkar det garanterat.
Jag är rätt säker på att loket måste passera innan den löser ut.

Såg plötsligt att det inte var så du menade riktigt, men det går att ställa in triggern så att den gäller endast "en gång". Om du kryssar ur den rutan, så kanske det funkar?

Det går inte välja om du lägger in det i körschemat för en förare i "driver setup"
ngtutp besöker inte forumet just nu   Svara med citat
Gammal 2011-01-21, 14:33   #4
svenolov
Medlem
 
Reg.datum: Apr 2004
Ort: Lom - Norway
Inlägg: 1 272
Standard

Citat:
Ursprungligen postat av ngtutp Visa inlägg
Hej

Kan en trigger känna av ett tåg även om de står stilla på en trigger?

Försöker få det att funka i driver setup att tåg a skall vänta på att tåg b skall aktivera trigger c.

Problemet är att om tåg b redan står på triggern så fattar inte tåg a det i sitt körschema


Tack på förhand
1. Jag förmodar att tåg b redan står på triggern när du startar Driver. Rätt?
2. Eller att tåg b redan har stannat på triggern innan du ger instruktionen att tåg a ska vänta. Rätt?

Om något av ovanstående påståenden är rätt så måste triggern sända ett meddelande efter det att tåg a får instruktionen att vänta. Och det gör den inte. Triggern sänder sitt meddelande när lok b stannar, så tåg a måste ligga i "vänteläge" just i det ögonblicket.

Så svaret på din fråga är nej, om man inte ger den instruktionen att göra så (i ett skript). En trigger (som namnet antyder) triggar på dynamiska händelser, den ligger inte och sänder meddelanden hela tiden. Det är tre händelser som en trigger känner av. Meddelandet sänds endast en gång per händelse.

1. Enter. Sänder ett meddelande när ett tåg kommmer innanför triggerns radie.
2. Stopped. Sänder ett meddelande när ett tåg stannar och befinner sig innanför radien. Om tåget rör sig efter denna händelse och stannar igen utan att ha lämnat triggern, så sänds meddelandet på nytt.
3. Leave. Sänder ett meddelande när ett tåg lämnar triggerns radie.

EDIT: En sak till som är bra att känna till när det gäller en trigger. En triggers avkänningsområde är en cirkel (anges med en radie). Det betyder att den känner av ett område, snarare än en sträcka på spåret. Den kan alltså känna av flera spår, om spåren ligger inom samma cirkel (radie).

Om man bara är intresserad av vad som händer på ett visst spår, ska man använda en Trackmark istället. Avkänningsområdet för en Trackmark anges också med en radie, men den känner bara av spåret som den är placerad på. En Trackmark känner också av rikningen i förhållande till ett tåg, medan en Trigger inte är riktningskänslig.
__________________
svenolov

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

Senast redigerad av svenolov den 2011-01-21 klockan 15:16.
svenolov besöker inte forumet just nu   Svara med citat
Gammal 2011-01-21, 15:02   #5
ngtutp
Medlem
 
Reg.datum: Oct 2005
Ort: Sävsjö
Inlägg: 16
Standard

Citat:
Ursprungligen postat av svenolov Visa inlägg
1. Jag förmodar att tåg b redan står på triggern när du startar Driver. Rätt?
2. Eller att tåg b redan har stannat på triggern innan du ger instruktionen att tåg a ska vänta. Rätt?

Om något av ovanstående påståenden är rätt så måste triggern sända ett meddelande efter det att tåg a får instruktionen att vänta. Och det gör den inte. Triggern sänder sitt meddelande när lok b stannar, så tåg a måste ligga i "vänteläge" just i det ögonblicket.

Så svaret på din fråga är nej, om man inte ger den instruktionen att göra så (i ett skript). En trigger (som namnet antyder) triggar på dynamiska händelser, den ligger inte och sänder meddelanden hela tiden. Det är tre händelser som en trigger känner av. Meddelandet sänds endast en gång per händelse.

1. Enter. Sänder ett meddelande när ett tåg kommmer inanför triggerns radie.
2. Stopped. Sänder ett meddelande när ett tåg stannar och befinner sig innanför radien. Om tåget rör sig efter denna händelse och stannar igen utan att ha lämnat triggern, så sänds meddelandet på nytt.
3. Leave. Sänder ett meddelande när ett tåg lämnar triggerns radie.
Tack för ditt svar!

Ditt andra påstående är rätt att tåg b redan står på trigger c när instruktionen för tåg a att han skall vänta på att tåg b skall trigga trigger c.

Är det lätt att ändra i scriptet så han ligger å sänder hela tiden då ett tåg befinner sig på en trigger?

Tack på förhand
ngtutp besöker inte forumet just nu   Svara med citat
Gammal 2011-01-21, 16:20   #6
svenolov
Medlem
 
Reg.datum: Apr 2004
Ort: Lom - Norway
Inlägg: 1 272
Standard

Citat:
Ursprungligen postat av ngtutp Visa inlägg
Tack för ditt svar!

Ditt andra påstående är rätt att tåg b redan står på trigger c när instruktionen för tåg a att han skall vänta på att tåg b skall trigga trigger c.

Är det lätt att ändra i scriptet så han ligger å sänder hela tiden då ett tåg befinner sig på en trigger?

Tack på förhand
Jag tror inte att det är lösningen i ditt fall. Det skulle få oanade konsevenser i andra sammanhang. Nej, det är beteendet på den regel/kommando (rule/driver command), som tåg a använder sig av, som ska modifieras. Nu vet jag inte vilken regel/kommando som du använder, så det är svårt att ge ett generellt svar.
__________________
svenolov

I Trainz vet man att det omöjliga är möjligt (bevingade ord myntade av Nisse).
svenolov besöker inte forumet just nu   Svara med citat
Gammal 2011-01-21, 17:37   #7
ngtutp
Medlem
 
Reg.datum: Oct 2005
Ort: Sävsjö
Inlägg: 16
Standard

Citat:
Ursprungligen postat av svenolov Visa inlägg
Jag tror inte att det är lösningen i ditt fall. Det skulle få oanade konsevenser i andra sammanhang. Nej, det är beteendet på den regel/kommando (rule/driver command), som tåg a använder sig av, som ska modifieras. Nu vet jag inte vilken regel/kommando som du använder, så det är svårt att ge ett generellt svar.

Jag använder mig utav "WaitForTrigger" <KUID2:57344:80001:2>

Ha de så bra
ngtutp besöker inte forumet just nu   Svara med citat
Gammal 2011-01-21, 19:21   #8
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
Ok, jag ska titta på den och återkommer med ett bättre svar.
__________________
svenolov

I Trainz vet man att det omöjliga är möjligt (bevingade ord myntade av Nisse).
svenolov besöker inte forumet just nu   Svara med citat
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
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
Svara


Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av
Forumhopp



Alla tider är GMT +2. Klockan är nu 02:30.


Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
© Svenska 3D-Tåg 2001-2009