Eine Variable von einem Skript ins andere übertragen und nutzen, geht das???

  • Hi leute...


    Ich bin grad an einem Map skript, es läuft auch soweit, also Trigger wird erkannt, kann im Trigger meinen Befehl ausführen. Das ist das eine Skript, dann ist in der zip ein weiteres Skript verbaut, auch mit einem onCreate in der map, das einen bestimmten Ablauf machen soll.


    Das ganze habe ich so gelöst wie bei rafftnix seinen MapTools (glaube beim MapFruitChangeTrigger ist es auch so), also das onCreate heißt in der Map einmal


    MapTest.onCreateTrigger und das andere Skript verwendet MapTest.onCreateSkript


    Es laufen wie gesagt beide skripte ohne Fehler, der Ablauf passiert genau wie in der LUA definiert und der Trigger geht auch.


    Jetzt meine Frage, kann ich eine variable aus dem Trigger skript in das Ablauf skript einbauen und übertragen (z.b. nach jeden ablauf den wert aus dem Trigger holen)????


    Der sinn ist folgender, das MapTest.onCreateSkript soll mehrfach auf der Map verbaut sein (ist es bei den Test auch), jetzt möchte ich im Trigger aber auf alle Teile zugreifen, heißt, wenn ich im Trigger eine Taste drücke, soll die variable = false werden und soll vom anderen Skript dann erkannt werden, damit ich mit dem einen Trigger den Ablauf stoppen kann. Um nicht mit jeden Teil was für das Ablauf skript verwendet wird, einen Trigger auf der Map zu platzieren, also nicht 10 Trigger, sondern einen für alle.

  • Solange du die Variable global deklarierst solltest du von alle anderen Scripten drauf zugreifen können. Wenn du beim laden des Scripts schon drauf zugreifst musst du auf der Reihenfolge achten (kennt man ja von den Spezis), ansonsten sollte es egal sein.

  • local und globale... locale variablen sind es nur wenn ein local davor steht. Alle anderen sind global.


    Ich habe kein local davor stehen.
    Die variable habe ich jetzt einfach mal self.test genannt, sie steht beim laden des skriptes auf true, wenn ich im trigger eine taste drücke setze ich sie auf false...


    Im 2. skript steht die variable am anfang des update teils, nur wenn sie true ist soll er den durchlauf fortsetzen. Leider macht er es nicht, der ablauf bleibt wird nach wievor durchgeführt. Im 2. skript habe ich die variable auch im load teil stehen, dort auch auf true, oder reicht es wenn sie im ersten Skript geladen wird?

  • Nur mit self kommst du nicht weit, weil jeder Trigger ein eigenes Objekt ist und entsprechend einen eigenen Variablenbereich hat. Man kann da zwar auch von woanders drauf zugreifen, dann brauchst du aber die TriggerID und musst du genau wissen, wo die variable gespeichert ist.
    Was du brauchst ist eine wirklich globale Variable, wo du von überall drauf zugreifen kannst. Da deklarierst du außerhalb der Funktionen eine Variable, die du dann benutzen kannst.
    Beispiel:


    Code
    globaleVariable = true;--deine globale Variable
    TestTrigger={}; --die Tabelle wo deine Trigger drin sind--die functions vom Triggerfunction TextTrigger:onCreate(id)end;function TestTrigger:delete()end;function TestTrigger:triggerCallback(parameter)
    if globaleVariable then--was auch immer da passieren sollend;end;

    Sollte das Prinzip denk ich mal gut genug erklären.






    Edit: irgendwie funktioniert das mit dem BB-Code für LUA nicht, der haut alles durcheinander.

  • Jetzt kommt mir sofort dein User Bild in den Kopf...^^ jetzt kommen mir die augen raus...;)!


    Warum ist das jetzt auch nur eine locale Variable, im grunde! Ich werd ja noch ganz wuschig jetzt... bisher dachte ich schon immer das locale wirklich nur die sind, wo ein "local" vor steht..., dann erklärt mir bassaddict, das ich eine "wirklich gloabaleVariable" brauche... und nun???...kommst du... ;(


    Es funktioniert ja, mit bassaddict seinem tip, aber kannst du es trotzdem etwas erklären??

  • Jede Mod-zip hat ihr eigenes environment. Guckt mal auf http://www.lua.org/manual/5.1/manual.html unter 2.3 nach.


    Innerhalb des environments (in diesem Fall innerhalb der zip) kann man einfach so auf Variablen zugreifen, wenn du von außerhalb zugreifen willst, musst du den Namen des environments vor die Variable setzen. Insofern könnte man die Variable auch als lokal bezeichnen, da sie nur innerhalb ihres environments verfügbar ist.

  • Ok, solange sie für die zip eine globale Variable ist, habe ich das verstanden. Und reicht mir für meinen Zweck ja vollkommen aus.


    Das es im groben sinn auch nur eine "lokale" ist, habe ich dank der Erklärung auch verstanden.


    So langsam aber sicher erkenne ich doch immer mehr zusammenhängen zwischen den ganzen if´s und then´s... :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!