Visa ett inlägg
Gammal 2006-08-29, 22:47   #204
svenolov
Medlem
 
Reg.datum: Apr 2004
Ort: Lom - Norway
Inlägg: 1 272
Standard

Citat:
Ursprungligen postat av SVoyager
To be able to call again "PerformMassStopped" once the doors are opened is the problem! Do you know how to do that?? or is there another way to make the station load/unload even after the train was fully stopped for a few seconds (förlåt för engelska.).
Du behöver inte ursäkta att du skriver på engelska. Jag personligen tycker bättre om engelska, när det gäller programmering. Det är min vardag.

Ja, jag har lösningen till detta. Denna funktion finns i ett object (static class) som följer med min dörrkontoll (MSL Door Control). Tyvärr kan jag inte publicera källkoden för denna funktion här på forumet på grund av att en del av koden i denna class är copyright-skyddad. Men du kan använda funktionen ändå om du inkluderar filen i ditt script. Filen heter msCommonStation.gse. Gör något liknande som nedan:

Kod:
include "GenericPassengerStation.gs"
include "msCommonStation.gs"
.
.
.
    Train ourTrain;
//  assign your train here to ourTrain variable
    .
    .
    .
    GenericPassengerStation ourStation; // the station which this train has stopped at

    Vehicle[] ourVehicles = ourTrain.GetVehicles();

    string triggerName; // current scenery trigger name at the station

    int platformIndex; // platform index for this trigger (not really used here)

 // Add a message handler to our loco so we can receive object-specific messages
 // ------------------------------------------------------------------------------------
    Sniff(ourVehicles[0], "SceneryTrigger", "", true); // vehicle[0] are always the loco

    Message msg;
    .
    .
    .
    wait()
    {
      on "SceneryTrigger", "Enter", msg:
      {
        ourStation = cast<GenericPassengerStation>msg.src;
          
        if (ourStation)
        {
       // Set passenger restriction, until we open the doors
       // ------------------------------------------------------------
          msStation.SetPassengersEnabled(ourTrain, ourStation, false);

       // Get the name of the trigger
       // ----------------------------------------------------------------------------------
          triggerName = ourStation.FindTriggerContainingNode(ourVehicles[0].GetId(), false);

       // Get information about the station based on the trigger
       // To update msStation object, we must call this function on every trigger event
       // -----------------------------------------------------------------------------
          platformIndex = msStation.GetPlatformIndex(triggerName);

        }
        continue;
      }
      on "SceneryTrigger", "Stopped", msg:
      .
      .
      .
När du känner till ourStation och triggerName kan du anropa dessa funktioner när du vill att passagerarna ska kliva ombord.
Kod:
    msStation.SetPassengersEnabled(ourTrain, ourStation, true); // remove passengers restriction
    msStation.PerformMassStoppedLoad(ourTrain, ourStation, triggerName, msStation.LOADING);
msStation.LOADING är en konstant som betyder 'UNLOAD and then LOAD'.

Titta gärna på min sourcecode för MSL Door Control. Du får med min tillåtelse använda msCommonStation för din C20 och du kan få all information vad denna class innehåller och hur du skall använda den.

Du kan ladda ner MSL Door Control här: http://217.197.57.186/forum/showthread.php?t=13225

Edit: You must call msStation.SetPassengersEnabled() before msStation.PerformMassStoppedLoad() to allow loading.
__________________
svenolov

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

Senast redigerad av svenolov den 2006-08-30 klockan 00:48.
svenolov besöker inte forumet just nu   Svara med citat