Logisch
Du brauchst in deinem Fall eigentlich nur eine Variable, denn die Abfrage wird nicht "versaut", wenn die Variable danach für eine neue Abfrage (in diesem Fall für die Gewehre) geändert wird.
Sieht dann so aus
Variable "WaffeID" == WeaponEquipped;
Die Abfrage für den Intervall der Bögen-Waffen
und dann wieder dieselbe Variable.
Das Programm wird IMMER von oben nach unten ausgeführt, das heißt, wenn Abfragen schon überprüft wurden, dann kann man dieselbe Variable nochmal nutzen. Der Übersicht wegen.
Übrigens könntest du hier statt Switches tatsächlich Variablem nutzen. Du weist dann, wenn ein Schwert benutzt wird, der Variable (z.B.) "Art der Waffe", eine 1 zu, für Bogen eine 2, für Pistolen eine 3 usw.
Dann kannst du die anderen Abfragen jeweils in die "Else"-Zweige stecken und dann in den letzten, wenn nichts von alledem erfüllt ist (d.h. keine Waffe ausgerüstet), in diesem Else-Zweig der Variable eine 0 zuweisen für keine Waffe.
Das spart dir eine Menge Code zugunsten der Übersicht
Du musst dir nur merken, für welche Waffenart welcher Wert steht. Schreib's dir auf oder nicht xD
Du brauchst den zweiten Switch oder eine zweite Variable, die bestimmt, dass gerade ein Bögenschütze oder ein Schwertkämpfer agiert, nicht, wenn jede WaffenArt nur einer Klasse zugewiesen ist.
Denn das erübrigt sich dann automatisch.
Eine alternative Möglichkeit wäre auch:
Hier wird bei der letzten Bedingung das Else weggelassen, weil es keine weiteren alternativen Bedinungen mehr gibt. Dafür wird dann @> Control Variables: [0019:WaffenArt] = 0 direkt am Anfang ausgeführt. Das würde sich nicht ändern, wenn keine der Bedingung erfüllt ist. Somit würde auch das funktionieren und sogar nochmal ein paar Zeilen einsparen
Hier hast du nur die Aktivierung am Ende der inneren Bedingung stehen und nicht innerhalb beider Bedingungen ^^
Aber das, was du danach gepostet hast, passt so.
Das mit den Labels mache ich nur so, damit man bei verschachtelten Bedingungen, die eigentlich zusammen eine einzige erfüllen, nicht bei jedem Else das Gleiche reinkopieren muss. Sonst würde der Code explodieren
Da du ja ein ABS verwendest, mal folgende Frage:
Brauchst du die Statuswerte wie Attack, Defense etc. eigentlich? Gibt es da eventuell einen, den du nicht verwendest? Könnte mir das bei Agility gut vorstellen. Sofern du einen Statuswert entbehren könntest, liesse sich was sehr simples einrichten.
Dann hätte ich folgenden Vorschlag, der deinen Code sehr verkürzen kann:
Setze in der Database die Agility deines Helden auf 1. Bei jeder Waffe setzt du je nach Waffentyp die Agility auf einen anderen Wert. Dann brauchst du lediglich die Agility deines Helden in einer Variable abspeichern und diese Abfragen.
Ein Beispiel:
Jedes Gewehr erhöht die Agility beim Ausrüsten um 1, jeder Bogen um 2 etc.
usw.
Der Basiswert für Agility ist immer 1. Bei einem Wert von 1 weisst du, es ist keine Waffe ausgerüstet. Bei jedem anderen Wert rechnest du eben diese 1+ den jeweiligen Wert, der durch die Waffe erhöht wird. Dadurch weisst du, welcher Waffentyp ausgerüstet ist.
Dies hat den Vorteil, dass der Code kürzer ist und du deine Waffen nicht mehr zwingend sortieren musst. Wenn du später mal was erweiterst, ist es somit egal welche ID die Waffe haben sollte. Du ermittelst den Waffentyp durch die Erhöhung der Agility, nicht die ID. Das vereinfacht die Angelegenheit, folgt aber ansonsten dem gleichen Prinzip.
Dieser Weg macht natürlich nur dann Sinn, wenn du einen Statuswert entbehren kannst, was ja glücklicherweise der Fall ist.
@Nagasaki Das sieht auf jeden Fall schön einfach aus. Das werde ich sofort ausprobieren, wenn ich mit den Variablen nicht weiterkommen sollte.
EDIT: Der Einfall, den Agility-Wert als Indikator für die Waffengattung zu benutzen, war übrigens genial. Alles funktioniert jetzt, wie es funktionieren soll. Danke dafür. (: