3 registered members (AndrewAMD, Akow, 1 invisible),
1,499
guests, and 11
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Problem mit der Logik
#213689
06/30/08 07:58
06/30/08 07:58
|
Joined: Jun 2005
Posts: 152 Weiterstadt, Germany
Alexander
OP
Member
|
OP
Member
Joined: Jun 2005
Posts: 152
Weiterstadt, Germany
|
Guten Morgen Leute, ich habe ein kleines Problem. Ich habe einen Script für eine Pistole geschrieben, er funktioniert auch, dürfte nach meiner Logik aber gar nicht gehen. Vielleicht stehe ich einfach nur auf dem Schlauch, kann mir das bitte mal jemand erklären? var MunitionPistole = 15;
var Pistole_am_schiessen = 0;
action Pistole
{
var Zielkoordinaten;
if (MunitionPistole > 0 && Pistole_am_schiessen == 0)
{
vec_set(Zielkoordinaten, vector(1000, 0, 0));
vec_rotate(Zielkoordinaten, vector(player.pan, 0, 0));
vec_add(Zielkoordinaten.x, my.x);
c_trace (my.x, Zielkoordinaten.x, ignore_me | use_box | ignore_passable | activate_shoot);
MunitionPistole -= 1;
Pistole_am_schiessen = 1;
sleep (1);
Pistole_am_schiessen = 0;
}
} Nach meiner Logik wird die IF Anweisung ausgeführt, wenn die Munition > 0 ist und man im Moment nicht schießt. Dann wird alles für c_trace vorbereitet (ausrichten) und im Anschluss daran, c_trace durchgeführt. Wenn c_trace durchgeführt ist, soll die Munition um 1 verringert werden und der Status ob die Pistole schießt auf 1 gesetzt werden. Nach meiner Logik müsste Achnex jetzt die IF Anweisung verlassen, tuts aber nicht, sondern führt sleep und die Variable auf 0 setzen auch noch aus. Warum?
Gruß Alex =)
|
|
|
Re: Problem mit der Logik
[Re: Alexander]
#213697
06/30/08 08:52
06/30/08 08:52
|
Joined: Jan 2005
Posts: 545 Schleswig-Holstein, Deutschlan...
Artus
User
|
User
Joined: Jan 2005
Posts: 545
Schleswig-Holstein, Deutschlan...
|
Nach meiner Logik müsste Achnex jetzt die IF Anweisung verlassen, tuts aber nicht, sondern führt sleep und die Variable auf 0 setzen auch noch aus. Warum? Und warum sollte die If verlassen werden? Die Bedingung ob eine if abläuft wird zu Beginn der If geprüft und nicht während sie läuft, also können sich die Bedingungen im If-Scriptblock ändern, aber werden erst beim nächsten Durchlauf neu geprüft. Das Script im if-Sciptblock wird bis zum Schluss abgearbeitet. Setze es mal in eine while-schleife um das Schritp mehrmals zu wiederholen.
|
|
|
Re: Problem mit der Logik
[Re: Alexander]
#213698
06/30/08 08:53
06/30/08 08:53
|
Joined: Dec 2005
Posts: 490 Germany/Berlin-Velten
kasimir
Senior Member
|
Senior Member
Joined: Dec 2005
Posts: 490
Germany/Berlin-Velten
|
weil die If anweisung nur die Werte verarbeitet die zu Begin gesetzt sind, d.h. einmal gestartet führt sie alles aus was folgt!
z.b.:
a = 0; while (a == 0) { a = 1; b = 1; c = 1; }
diese Schleife wird auch einmal durchlaufen, erst bei der nächsten Wiederholung ist die Ausgangs-bedingung falsch! d.h. b und c sind 1!
um eine Schleife/ If-anwesiung in deinem Sinne auszusetzten benötigt man den Befehl "goto" oder ähnliches...
Last edited by kasimir; 06/30/08 08:55.
|
|
|
|