Die Trigger-Funktionen in Abhängigkeit zu einer Region

  • Hey Leute,


    ich bin immer ein bisschen unschlüssig, was das Erstellen von Triggern betrifft.
    Es gibt ja die beiden Funktionen REGION_ENTER_AND_STOP_TRIGGER und REGION_ENTER_WITHOUT_STOP_TRIGGER, und ich habe da mal einen Haufen Fragen zu:


    Zunächst: Wo ist da der Unterschied? Habe schon zwei Sachen gelesen, die einen sagen, das Stop oder Without Stop bezieht sich auf den Helden, der weiterläuft oder stehen bleibt, andere sagen, es würde sich auf das Weiterlaufen oder anhalten des Triggers beziehen.


    Zweitens: Die Struktur. Meine Regionsskripts sehen immer so aus:


    Code
    funtion xy()
    *beliebiger Effekt*
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER, "Regionsname", nil);
    end;
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER, "Regionsname", "xy");


    Dazu die Fragen: Was ändert sich, wenn ich...
    ... im 1. Fall "AND_STOP_TRIGGER" verwende?
    ... im 2. Fall "AND_STOP_TRIGGER" verwende?
    ... in beiden Fällen "AND_STOP_TRIGGER" verwende?


    Und: Was bewirkt das "nil" in der 3. Zeile? Was passiert, wenn ich dort eine auf eine andere Funktion verweise?



    So, und jetzt kommt das eigentliche Problem, das sich mit allen Antworten auf diese Fragen lösen lassen müsste.
    Ich möchte eine Region, die prüft, ob ein Held eine bestimmte Eigenschaft hat. Hat er diese, geht ein Event los und der Trigger endet, hat er sie nicht, so kommt eine Nachricht und der Trigger geht nochmal los, wenn der Held die gleiche Region wieder betritt/durchläuft.
    Meiner Meinung nach müsste das so aussehen:


    Code
    function xy()
    if *Held hat Eigenschaft* then
    *beliebiges Event*
    Trigger( ***, "Regionsname", nil);
    else
    MessageBox(...);
    Trigger( ***, "Regionsname", nil);
    end;
    end;


    Die Frage ist nur, welchen Trigger-Typ muss ich jetzt für die *** jeweils einfügen? Oder muss ich das "nil" irgendwie ändern?


    Ne Menge Fragen, hoffe, dass ich die kommenden Antworten verstehe und nachvollziehen kann, im Editor-Script-Dokument versteh ich die Unterschiede leider net^^
    Schonmal danke im Voraus ;)


  • interessante Idee!
    mit



    würdest du bewirken, daß der erste Besucher die erste Funktion auslöst, der zweite die zweite, der dritte die dritte, und der 4. garnichts mehr;
    Problem wäre, daß der erste wohl nacheinander alle Funktionen auslösen würde, deshalb müßte man sich merken, welcher Held schon da war, und die nächsten Funktionen nur auslösen, wenn es ein anderer Held wird...

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Okay, also gibt sozusagen im Schema:

    Code
    Trigger(REGION_ENTER_AND/WITHOUT_STOP_TRIGGER, "Region", "Funktion");


    das, was bei "Funktion" eingetragen wird, die Funktion an, die ausgelöst wird, wenn der Trigger ausgelöst wird.


    Jetzt gibt auch alles viel mehr Sinn...
    Der Typ "REGION_ENTER_AND/WITHOUT_STOP_TRIGGER" hat also keinen Einfluss darauf, ob die Funktion weitergeführt wird, oder nicht?

  • stimmt
    ich weiß aber nicht, was passiert, wenn man REGION_ENTER_... mit und ohne Stop zur selben Region mixt ...also welcher Trigger zuerst oder üerhaupt ausgeführt werden würde ...
    Vielleicht testet das ja mal jemand (MENTAT ?), am besten mit der Wartefunktion zwischendurch

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Das folgende Script mit zwei verschiedenen Triggern zur selben Region habe ich gerade ausprobiert und anscheinend führt er die Funktion einfach zweimal aus, jedenfalls bekommt der Held 2 Erzengel. Außerdem bleibt der Held wegen des ersten Triggers natürlich stehen.


    function Held( heroname )
    AddHeroCreatures( heroname, CREATURE_ARCHANGEL, 1 );
    end;


    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "region", "Held" );
    Trigger( REGION_ENTER_WITHOUT_STOP_TRIGGER, "region", "Held" );

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty


  • mach doch mal sowas:


    function Held1( heroname )
    AddHeroCreatures( heroname, CREATURE_ARCHANGEL, 1 );
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "region", "nil" );
    Trigger( REGION_ENTER_WITHOUT_STOP_TRIGGER, "region", "nil" );
    end;


    function Held2( heroname )
    AddHeroCreatures( heroname, CREATURE_ARCHANGEL, 2 );
    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "region", "nil" );
    Trigger( REGION_ENTER_WITHOUT_STOP_TRIGGER, "region", "nil" );
    end;


    Trigger( REGION_ENTER_AND_STOP_TRIGGER, "region", "Held1" );
    Trigger( REGION_ENTER_WITHOUT_STOP_TRIGGER, "region", "Held2" );


    aber ich denke mal, daß dann der erste Trigger, der in der Zeile steht (also hier Held1 mit einem Engel) ausgeführt wird...
    oder eventuell beide, falls der 2.Trigger schon in die Warteschleife kommt, bevor er durch die erste Funktion abgeschaltet wird.

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Gerade getestet. Deine zweite Vermutung stimmt, also beide Funktionen werden ausgelöst und der Held bekommt insgesamt 3 Erzengel.

    Die kausale Unabhängigkeit der Quarks von unserer Rede ist kein Merkmal der Realität (im Sinne des Gegenteils der Welt des Scheins), sondern sie ist einfach ein unbezweifelter Bestandteil unseres Redens über Quarks.
    Richard Rorty

  • Okay, wenn ich also ein Script will, dass nach dem 1. Aktivieren endet, benutze ich dieses hier:

    Code
    function Kreatur(heroname)
    if heroname == "Jazaz" then
    AddHeroCreatures(heroname, 1,100);
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER, "Region", nil);
    end;
    end;
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER, "Region", "Kreatur");


    Will ich hingegen, dass das Script immer wieder zu aktivieren ist, dann nehme ich dieses:

    Code
    function Kreatur(heroname)
    if heroname == "Jazaz" then
    AddHeroCreatures(heroname, 1,100);
    end;
    end;
    Trigger(REGION_ENTER_WITHOUT_STOP_TRIGGER, "Region", "Kreatur");
  • ja, aber das 2. ist sinnlos, da der Held dann immer rein- und rauslaufen kann, und jedesmal was kriegt ... ;)

    lest Terry Pratchett(RIP) ... und Stephen King, John Katzenbach, Hohlbein, Frank Schätzing, Anne Rice, Andrzej Sapkowski, Anne Bishop, Bernhard Hennen, George R.R. Martin, Markus Heitz, ... (wurde ja langsam Zeit, dass was dazu kommt)

  • Man muss ihn ja nicht immer was kriegen lassen... mir geistert derzeit ein szenario im Kopf herum, bei dem der Held zunächst eine Mauer erreicht (Garrison-Walls), die undurchdringlich ist. Kommt er nah genug, so startet er einen Trigger, der ihm eine Nachricht zeigt, wo drin steht, dass die Mauer viel zu dick und zu hoch ist. Er bräuchte Sprengstoff.
    Im weiteren Verlauf des Spiels findet er i-wo ein Artefakt (nen Hammer oder i-n magisches Teil) und kriegt angezeigt, dass er damit vlt die Mauer knacken könnte.
    Jetzt geht der Held zurück und kaum kommt er nah genug, verschwindet die Mauer.
    Script dazu sollte so aussehen:


    Code
    function kabumm()
    if HasArtefact(...) then
    RemoveObject(Mauer);
    MessageBox(...);
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "Region", nil);
    else
    MessageBox(...);
    end;
    end;
    Trigger(REGION_ENTER_AND_STOP_TRIGGER, "Region", "kabumm");


    Müsste meiner Meinung nach auch so funktionieren, dass der Held jedes mal, wenn er wieder vor der Mauer steht, dieselbe Nachricht wieder angezeigt bekommt oder? Vlt schreib ich da ja auch nen Hinweis rein, damit der arme Spieler nicht verzweifelt, wie er die Kackmauer überwinden soll^^ und den Zauber "Unverzügliche Reise" werde ich auch noch bannen... :p

  • Forum

    Hat das Thema geschlossen.