Bräuchte Hilfe bei einem Script.

  • Liebe Script-Spezialisten

    Wie kann ich verhindern , dass meine Animation 2 x ausgelöst wird ?

    Hier mal mein Script :


    /********************************************************

    * Script zum beladen und starten der Animation *

    * Nach dem Tutorial im Auran-Forum. *

    * Ursprünglich für Wasser, jetzt fuer Kohle. *

    *********************************************************/


    include "BaseIndustry.gs"

    include "world.gs"


    class anim_load isclass BaseIndustry

    {

    ProductQueue waterOutQueue;

    bool AILoad;

    Asset meAsset = GetAsset();

    bool TriggerSupportsStoppedLoad(Vehicle vehicle, string triggerName) {

    bool canLoad;

    Train myTrain = vehicle.GetMyTrain();

    canLoad = vehicle.CanLoadProductFromQueue(waterOutQueue);

    if (canLoad) {

    AILoad = (itc.GetTrainCommand(myTrain) == "LOAD" or itc.GetTrainCommand(myTrain) == "load");

    if (AILoad) return true;

    else if (myTrain.IsStopped()) return true;

    }

    return false;

    }


    void PerformStoppedLoad(Vehicle vehicle, string triggerName) {

    // Load water

    int spaceAvailable = waterOutQueue.GetQueueCount();

    // Startet anim

    SetMeshAnimationState("spin", true);

    Sleep(10);

    // Pause bevor der Wagen beladen wird

    LoadingReport report = CreateLoadingReport(waterOutQueue, spaceAvailable);

    report.sideFlags = LoadingReport.TOP_SIDE;

    vehicle.LoadProduct(report);

    Sleep(30);

    // so lange dauert die Anim ( eigentlich 40, aber 10 + 30 = 40 )

    SetMeshAnimationState("spin", false);

    // World.PlaySound(meAsset, "start.wav" , 100.0, 70, 100.0f, me, "");

    // World.PlaySound(meAsset, "end.wav" , 100.0, 70, 100.0f, me, "");

    if (AILoad)

    PostMessage(vehicle.GetMyTrain(), "HandleTrain", "Release", 1.0);

    }


    thread void waterFuelMain(void) {

    Message msg;

    Vehicle vehicle;

    string triggerName;


    wait()

    {

    // ?

    on "Scriptlet-Enabled", "1": {

    if (!scriptletEnabled) {

    scriptletEnabled = true;

    SetProcessEnabled("generate_water", true);

    }

    continue;

    }

    // ?

    on "Scriptlet-Enabled", "0": {

    if (scriptletEnabled) {

    scriptletEnabled = false;

    SetProcessEnabled("generate_water", false);

    }

    continue;

    }

    }

    }

    public void Init(void) {

    inherited();

    useGenericViewDetails = true;

    // initialize queues

    waterOutQueue = GetQueue("water");

    AddAssetToIndustryProductInfo("water", "water", "generate_water", false);


    waterFuelMain();

    }

    public void AppendDriverDestinations(string[] destNames, string[] destTracks) {

    StringTable stringTable = GetAsset().GetStringTable();

    destNames[destNames.size()] = stringTable.GetString("waterColumn");

    destTracks[destTracks.size()] = "water_column";

    }

    };


    Meine Anim dauert ca. 40 Sekunden.

    Das erste Sleep (10) habe ich eingefügt , damit der Wagen nicht sofort beladen wird.

    Das zweite ( 30 ) , damit die Anim bis Ende läuft.


    Und jetzt kommt , was mich ärgert .

    Sobald der Fahrregler wieder freigegeben wird , startet die Anim nochmals.

    So schnell kann ich den Wagen nicht vom Trigger fahren !


    Es wäre sehr nett , wenn mir jemand helfen könnte.

    Gruss Tilo

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • Dafür braucht es keinen Eintrag in einem Skript selbst.


    Schau Dir beispielsweise die Animation von einer Bahnübergang-Schranke an.

    Es muss in der config.txt ein Eintrag gemacht werden.

    Leider habe ich immer noch keinen Zugriff auf meine alten Daten und weiß ihn

    daher nicht. (Trainz Wiki müsste aber diesen Eintrag kennen)

    16066-signaturbild-ujb

    Früher war nicht alles besser.

    Es war nur unsere Zeit, unsere Kindheit und Jugend.

  • Das kann ich nicht so recht glauben.

    Bei meinen Schranken steht nirgendwo was besonderes.

    Sie sind als "Mocrossing" definiert. Dann regelt sich das automatisch.

    Und ich denke das wird bei anderen Schranken nicht anders sein.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • Ursache gefunden :

    Es ist nicht egal , wie ich meine Schienen anschliesse.

    Der Anschluss muss vom Objekt weg erfolgen.

    Ich hatte die Schienen an das Objekt herangezogen.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • Du verwirrst mich gerade ein wenig. Das macht aber nichts.


    Dass die Animation nur einmalig abläuft, steht in einem Parameter in der config.txt.

    (Eigentlich müssten hier alle anderen Objektbauer wissen, was ich meine.)

    Ansonsten muss ich Dich bitten, ein paar Tage zu warten, bis mein PC arbeitsfähig

    ist und ich mich wieder mit der Materie beschäftigen kann.

    16066-signaturbild-ujb

    Früher war nicht alles besser.

    Es war nur unsere Zeit, unsere Kindheit und Jugend.

  • Ich war auch verwirrt.

    Habe das Objekt 2 x aufgebaut und die Schienen andersherum angeschlossen.

    Dann ging es. Kann ich mir auch nicht erklären.


    Ich warte gerne ein paar Tage. :)


    LG Tilo

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • Ich habe nochmals nachgedacht und im WIKI gelesen.

    DAS ist der Grund , warum die Anim weiter läuft : SetMeshAnimationState("spin", false);

    Dieser Befahl läßt die Anim rückwärts laufen.
    Wenn ich ihn herausnehme , ist Ruhe.

    Das Dumme ist nur , daß sie beim nächsten Ladevorgang nicht mehr läuft.

    Der Waggon hingegen wird beladen.

    In der Config kann man das nicht beeinflussen , wohl nur im Script.


    Und was ich über die Verlegung der Schienen geschrieben habe . . . . . .

    Das kam mir selber komisch vor.

    Wahrscheinlich war ich übermüdet.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

  • Gerne . Werde Ich sofort machen !!


    Ick könnt dir knutschen. Jetzt gehts ! ! !:red_heart::red_heart::red_heart::red_heart::red_heart:


    Und ich Dummkopf habe Stunden verbracht , um das hinzubiegen.

    Leider habe ich keine Ahnung von C++ und muss also fast immer raten.

    Aber verstehen kann ich's noch nicht.

    Ich hatte es mit StopMeshAnimation("spin") versucht , aber das ging leider auch nicht.



    Meinen herzlichen Dank für deine hervorragende Hilfe , Mika.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt. (A. Einstein)

    2 Mal editiert, zuletzt von tilo_b ()