Seite 1 von 1

Wie Events synchronisieren?

Verfasst: Fr 2. Nov 2018, 07:40
von SG_Pirat
Guten Morgen,

ich habe per LUA-Code eine allgemeine Funktion erstelt, die ich an verschiedenen Stellen aufrufen kann, um unterschiedliche Multiple-Choice Abfragen anzuzeigen.

Code: Alles auswählen

function selectOption(_zCartridge,_text,_options)
    local mc_input = Wherigo.ZInput(_zCartridge);
    mc_input.InputType = "MultipleChoice";
    mc_input.Choices = _options
    mc_input.Text = _text;

    local answer = "Startwert"

    function mc_input:OnGetInput(_input)
        if _input == nil then
            _input = "Keine Auswahl";
        end
        answer = _input;
        print(answer);
    end

    _Urwigo.RunDialogs(function()
        Wherigo.GetInput(mc_input)
    end)

    return answer;
end
Leider wird die Funktion nach einen Aufruf schon abgearbeitet, bevor die innere Funktion mc_input durch das Event OnGetInput durchlaufen ist. Somit ist der Rückgabewert für answer immer "Startwert".
Ich würde gerne den weiteren Programmablauf aber von der getroffenen Auswahl abhängig machen - sei es die gewählte Sprache oder eine vom Nutzer getroffende Entscheidung.

Ich könnte natürlich den weiteren Programmablauf in eine neue Funktion verpacken, die ich der Funktion selectOption als weiteren Parameter übergebe und aus mc_input aufrufe, aber das könnte schnell ziemlich unübersichtlich werden, besonders, wenn es mehrere MC-Eingaben nacheinander geben sollte (bspw. bei der Initialisierung am Anfang).

Frage: Wie könnte ich die Synchronisation hinbekommen? Gibt es soetwas wie ein Semaphor?

Danke schon mal im Vorraus für eure Antworten

P.S.: Wahrscheinlich läßt sich das im UrwiGO-Builder einfach lösen, aber mich interessiert, wie es in LUA direkt geht (um ein tieferes Verständnis für die Sprache zu bekommen).