WeakAura "und und oder"-Auslöser

Kennt jemand einen leicht verständlichen Guide, welcher einem erklärt wie man die „benutzerdefinierte“ Auslöserkombinationen in WA konfiguriert? So dass man " „und“ und „oder“ "-Kombinationen in einer WA zusammenfassen kann.

Und falls ja, würde man mich feindli … freundlicherweise darauf verweisen?

Einen spezifischen Guide kenne ich dafür nicht, prinzipiell ist das aber auch nicht allzu kompliziert: Das ist im Prinzip eine einfache Funktion, die als Parameter eine Tabelle der aktuellen Status der Auslöser übergeben bekommt und diese dann entsprechend der gewünschten logischen Operatoren als Rückgabewert liefert.

Das Grundkonstrukt sieht da immer gleich aus, der Unterschied kommt nur durch die Kombination der logischen Operatoren:

function(t)
    return t[1]
end
  • Der Name der Variable (hier t für „trigger“) ist dabei frei wählbar und beinhaltet die Tabelle der Status der Auslöser, die automatisch von WeakAuras übergeben wird.
  • Die Status lassen sich dann einfach über diese Tabelle ansprechen, indem man sie mit ihrer Nummer abfragt.
  • Die genauen Kombinationen bastelt man dann einfach über die logischen Operatoren (and, or und not) und runden Klammern zusammen.

Oben genannte Funktion würde die Aura bspw. anzeigen, wenn Auslöser 1 (t[1]) zutrifft.


Als etwas komplizierteres Beispiel:

function(t)
    return t[1] and (t[2] or t[3])
end

Aura wird angezeigt wenn Auslöser 1 (t[1]) zutrifft und (and) zusätzlich dazu eine Kombination (runde Klammer) aus Auslöser 2 (t[2]) oder (or) Auslöser 3 (t[3]) zutreffen.


EDIT: Zweites Beispiel etwas umformuliert, siehe Adoriels Post.

1 Like

Wichtig dabei wäre vllt noch zu wissen, dass die Funktion „OR“ steht’s ein „AND“ enthält. Aber das nur am Rande :smiley:

Weil mir das hier gerade auffiel, kurze Frage interessehalber dazu:

Ist das „or“ in LUA also wie ein „exklusiv-oder“ / „xor“ zu verstehen?
Und wie unterscheidet man die beiden „oder“ dann? Einfach nur durch komplexere Klammern?

Ich würde es eher als Formulierung verstehen :thinking:

Also quasi Zeige Aura Wenn : A1 and (A2 or A3)

Vllt verstehe ich es auch falsch und es wird etwas anderes gemeint.

Das ist ein guter Punkt, der beim Versuch, das verständlich rüber zu bringen, nebenbei ganz untergegangen ist.

Das ist ein ganz normales „OR“, kein „XOR“ - also entweder A, oder B, oder beides.
Ein „XOR“ gibt es meines Wissens nicht direkt, da müsste man dann eher mit „AND NOT“ und entsprechenden Kombinationen arbeiten.


Mal überlegen, wie man das anders formulieren könnte, um die Klammern zu erklären…

Was muss man da groß erklären?

Wie bei Punkt-Strich-Rechnung: die innerste Klammer wird zuerst aufgelöst.

Die Prüfung ist a oder b, die Klammer definiert den Funktionsraum.
Der Wert innerhalb der Klammern wird erst evaluiert und dann sein Wert in die umlaufende Funktion übergeben.

and-Verknüpfungen sind immer verbunden während or-Verknüpfungen getrennt werden.
a and (b or c) ist gleichbedeutend mit (a and (b or c)),
jedoch nicht mit a and b or c, das (a and b) or c bedeutet.


Für a and (b or c) gilt:

a b c Ergebnis
true true true true
true true false true
true false true true
false true true false
false true false false
false false true false
false false false false

Außerdem kann man Klammern nutzen, um bei einer Funktion mit mehreren Rückgabewerten die Rückgabeanzahl auf den ersten Wert zu beschränken.
siehe https://www.lua.org/manual/5.1/de/manual.html#2.5

Jeder geklammerte Ausdruck liefert jeweils genau einen Wert. Insofern ist (f(x,y,z)) immer ein einzelner Wert, auch wenn f mehrere Werte liefert. (Der Wert von (f(x,y,z)) ist der erste von f gelieferte Wert oder nil , wenn f keinerlei Werte zurückgibt.)


Für xor:

Dieses Thema wurde automatisch 180 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Nachrichten mehr erlaubt.