Problem mit der Logik

Posted By: Alexander

Problem mit der Logik - 06/30/08 07:58

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? blush

Code:
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? confused
Posted By: Artus

Re: Problem mit der Logik - 06/30/08 08:52

Originally Posted By: Alexander
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? confused


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.
Posted By: kasimir

Re: Problem mit der Logik - 06/30/08 08:53

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...
Posted By: Alexander

Re: Problem mit der Logik - 06/30/08 08:58

Stimmt, ihr habt recht. Ich habe einfach nur auf dem Schlauch gestanden, bzw. hatte das falsch im Kopf. wink

Danke für eure Hilfe. smile
© 2024 lite-C Forums