Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Bedingungen



Chao-Ren
17.11.2009, 13:16
Aloha,
Beim Schreiben eines kleinen Scripts hab' ich als absoluter Scripting-Noob mal wieder Probleme. Ich will nämlich meherere Bedingungen für eine Function, hab' aber keine Ahnung wie das geht.

kleines Beispiel:

scn DoppelIfScript

short controlvar

begin OnActivate
if controlvar == 0 (und hier sollte noch ne' zweite Bedingung hin z.B if GetItemCount TestItem == 1)
Player.AddItem Gold001 5
endif
end

Danke im Vorraus an alle Scripting-Götter.http://www.multimediaxis.de/images/smilies/old/sm_12.gif

kenet_korva
17.11.2009, 14:29
entweder du fügst die zweite Bedinnung mit "&&" ein also:


if BedinnungA == X && BedinnungB == X

Allerdings kann diese Variante zu Problemen, und sogar zu Abstürzen führen. Daher benütze ich immer die 2. Variante:


if BedinnungA == X
if BedinnungB == X
Blabla
endif
endif

Chao-Ren
17.11.2009, 16:00
Lol ist das einfach. Auf jeden Fall vieeelen Dank!http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Atoom
18.11.2009, 22:17
Abstürze? In wie fern? Ich benutz && häufig und hatt jetz noch keine besonderen Abstürze (jenfalls keine die ich direkt im zusammenhang damit gesehn hab^^). Wann genau kommts damit zu Abstürzen?

kenet_korva
20.11.2009, 18:52
Angeblich kann es zu "unvorhersehbaren Ergebnissen" führen, wenn eine der beiden Bedinnungen richtig ist, und die andere nicht. Genau weiß ich das nicht und einen hundertprozentig bestätigten Fall hatte ich auch noch nicht, aber das ist halt eine der Sachen, die ich überprüfe, wenn ein Script Probleme macht. ^^

bg2408
21.11.2009, 09:19
Das Absturzproblem tritt auf, wenn ein nichtgültiger Check durchgeführt wird.

Beispiel:

if IsActor == 1 && GetDead == 0
;do something
endif

Im Vergleich zu
if IsActor == 1
If GetDead == 0
;do something
endif
endif

Wird das auf eine Tür aufgeführt, wird beides mal, der Check, ob es ein Actor ist, falsch. Der zweite Codeschnipsel tut dann nichts mehr. Aber beim ersten wird zusätzlich noch gecheckt, ob die Tür tot ist oder nicht. Und das sind dann "unerwartete" Checks, die zu Abstürzen führen können.

(Zudem ist es auch im Sinne der Perfomance, wenn man Checks verschachtelt, da wie geschrieben bei einer Reihe alles durchgecheckt wird.)

Atoom
25.11.2009, 16:39
ah, ok.
Ist mir bis jetz noch nich passiert, also entweder hab ich meine selbst gemachten Skripte bis jetz noch nich exesiv genug getestet oder meine && verbinden nur erwartete Vergleiche...
(Wieso hat Beth nich zur Sicherheit nicht in diese Funktionen Abfragen eingebaut, die solche unerwarteten Vergleiche abfangen, also wenn eine Tür nich tot ist (was die meisten nicht sind^^) dann kommt halt raus, dass sie nich tot ist (ohne Absturz^^). Wär gar nich mal unmöglich gewesen...)