Scripten in einer Art von Schleife?

jump4life
Ist es möglich eine Art von Schleife zu Scripten? Also so zum Beispiel

Man betätigt einen Trigger und es passiert folgendes:

________________________

Start

Ereignis 1 wird ausgeführt

ist Ereignis 1 fertig dann...

Ereignis 2 wird ausgeführt

ist Ereignis 2 fertig dann...

Ereignis 3 wird ausgeführt


Ende
________________________

Und erst wenn all die dinge die in der Schleife sind ausgeführt wurden kann man den Trigger wieder benutzen bzw. erst dann wird Ereignis 1 ausgeführt
OLD MAN WITH GUN
Das gehört eigentlich noch zu den Grundlagen.

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
trig = getent( "triggername", "targetname" ); //trigger holen
obj = getent( "objektname", "targetname" ); // objekt für die Ereignisse

while( 1 ) // starte ab hier Endlosschleife
{
  trig waittill( "trigger" );  // warte auf den trigger

  obj movex( 100, 10, 1, 1 ); // bewege Objekt 100 Einheiten in der x-Achse nach rechts (lass dir 10 Sek. Zeit dafür, beschleunige die erste Sek. und bremse die letzte Sek. ab)
  obj waittill( "movedone" ); // warte bis das Objekt angekommen ist

  obj movez( 200, 2, 0, 1 ); // bewege Objekt 200 Einheiten in der z-Achse nach oben (lass dir 2 Sek. Zeit dafür und bremse die letzte Sek. ab)
  obj waittill( "movedone" ); // warte bis Objekt angekommen

  obj rotateyaw( 90, 2 ); // drehe Objekt um 90° in der Z-Achse (lass dir 2 Sek. Zeit)
  obj waittill( "rotatedone" ); // warte bis Drehung beendet

} // Endlosschleife beginnt von vorne

jump4life
Vielen dank. Probiere ich gleich mal aus!!

Edit: Und wie is das wenn das Objekt aus mehreren dingen besteht? Eine tür die nach links öffnet und eine nach rechts. Da muss ich ja 2 Objekte defnieren.

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
door=getent("sdoor1","targetname")
hier muss noch ein 2 Objekt definiert werden
trig=getent("trig_sdoor","targetname");

OLD MAN WITH GUN

Zitat:

Original von jump4life
Vielen dank. Probiere ich gleich mal aus!!

Edit: Und wie is das wenn das Objekt aus mehreren dingen besteht?
Das ist vollkommen egal. Auch wenn du 1000 verschiedene Objekte zig verschidene Dinge machen lassen willst, mein Beispiel zeigt nur das Prinzip nicht das, was maximal möglich ist.
Du wolltest ja nur eine Schleife, die durch einen trigger immer wieder neu gestartet wird. und dazu gehören nur die Zeilen

trig = getent( "trigger", "targetname" );
while( 1 )
{
trig waittill( "trigger" );

}

Das ist die eigentliche Schleife. Was du jetzt vor der Schleife an Objekten definierst, und was du mit ihnen nach dem trig waittill und vor der Klammer } machst, hängt nur von dir ab.
jump4life
Ich glaube du verstehst nicht ganz wie ich es meine. Vorerst: Die Schleife benötige ich für einen Fahrstuhl. Der Fahrstuhl hat 2 Schiebetüren. Eine schiebt sich nach links auf und eine nach rechts. Das habe ich vorher so gemacht

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
main()
{
thread sdoor1();
thread sdoor2();

sdoor1()
{
door=getent("sdoor1","targetname");
trig=getent("trig_sdoor","targetname");
while(1)
{
trig waittill ("trigger");
door movex (-62,1.5,0.2,0.2);
door waittill ("movedone");
wait(5);
door movex (62,1.5,0.2,0.2);
door waittill ("movedone");
}
}

sdoor2()
{
door=getent("sdoor2","targetname");
trig=getent("trig_sdoor","targetname");
while(1)
{
trig waittill ("trigger");
door movex (62,1.5,0.2,0.2);
door waittill ("movedone");
wait(5);
door movex (-62,1.5,0.2,0.2);
door waittill ("movedone");
}
}



Das funktioniert soweit ABER ich möchte das alles in einem Thread haben und dafür muss ich ja zwei (in diesem Fall) Brushmodels definieren. Also das hier

door=getent("sdoor2" Hier soll jetzt noch ein Brushmodel definiert werden ,"targetname");

Ich kann es so schlecht erklären wie ich es meine. Im grunde möchte ich nur einen Fahrstuhl der per betätigen eines Triggers erst die Türen öffnet, dann die Türen nach paar Sekunden wieder schließt, dann hoch oder runter (jeh nachdem) fährt, die Türen wieder öffnet, dann wieder runter oder hoch (jeh nachdem) fährt und auf seiner Ausgangsposition stehen bleibt.

Mit mehreren Triggern kann ich das ja aber das Problem dabei ist das man, wenn der Fahrstuhl gerade nach oben Fährt die Türen (die den Schacht absperren) öffnen kann und genau das soll nicht sein. Die Fahrstuhltür sollen erst dann wieder geöffnet werden könn wenn der Fahrstuhl wieder am Ausgangspunkt steht.


Ich hoffe das war verständlicher wie mein ersten Beiträge.

PS: Falls du Support über Xfire geben würdest: wurstwasser09 ist mein XFire.
OLD MAN WITH GUN

Zitat:

Original von jump4life
Ich glaube du verstehst nicht ganz wie ich es meine. Vorerst: Die Schleife benötige ich für einen Fahrstuhl. Der Fahrstuhl hat 2 Schiebetüren. Eine schiebt sich nach links auf und eine nach rechts. Das habe ich vorher so gemacht

Doch ich hab dich schon verstanden, aber ich nehme an, du hast mich nicht verstanden.
Hier mal eine Schleife, die nach dem aktivieren des triggers zwei türen öffnet, und dann nach einer Weile wieder schließt und dann wieder von vorne beginnt:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
trig = getent( "trigger", "targetname" ); // trigger der die Türen aktiviert
door1 = getent( "sdoor1", "targetname" ); // erste Tür
door2 = getent( "sdoor2", "targetname" ); // zweite Tür

while( 1 )	// starte Schleife
{
	trig waittill( "trigger" ); // warte bis trigger aktiviert wird
	door1 movex ( -62, 1.5, 0.2, 0.2 ); // bewege door1 62 Einheiten nach links
	door2 movex ( 62, 1.5, 0.2, 0.2 ); // bewege door2 62 Einheiten nach rechts (passiert zur selben Zeit, in der sich door1 nach links bewegt)
	door2 waittill  ("movedone" ); // warte hier solange, bis door2 sich zu Ende bewegt hat (door1 können wir hier ignorieren, da sie gleich schnell ist und zur selben Zeit angekommen ist)
	wait 5; // warte hier 5 Sekunden
	door1 movex ( 62, 1.5, 0.2, 0.2 ); // bewege door1 wieder 62 Einheiten nach rechts zurück
	door2 movex ( -62, 1.5, 0.2, 0.2 ); // bewege door2 wieder 62 Einheiten nach links zurück
	door2 waittill ( "movedone" ); // warte hier solange, bis door2 sich zu Ende bewegt hat.
} // wiederhole Schleife



Zitat:

Original von jump4life
PS: Falls du Support über Xfire geben würdest: wurstwasser09 ist mein XFire.

Support nur im Forum.
jump4life
Ok,
ich habe es jetzt mal versucht das script so zusammen zu setzen wie ich es brauche. Es sieht jetzt so aus.

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:

main()
{
thread ele();
}
ele()
{

trig = getent( "trig_elevator", "targetname" );
door1 = getent( "door1", "targetname" );
door2 = getent( "door2", "targetname" );
door3 = getent( "door3", "targetname" );
door4 = getent( "door4", "targetname" );
elevator=getent("elevator","targetname");
{


while( 1 )

	trig waittill( "trigger" );
	door1 movex ( -184, 1.5, 0.2, 0.2 );
	door2 movex (184, 1.5, 0.2, 0.2 );
	door2 waittill  ("movedone" );

wait (5);

	door1 movex ( 184, 1.5, 0.2, 0.2 );
	door2 movex ( -184, 1.5, 0.2, 0.2 );
	door2 waittill ( "movedone" );

wait (2);

	trig waittill ("trigger");
	elevator movez (-832,7,1.9,1.9);
	elevator waittill ("movedone");

wait (2);

	trig waittill( "trigger" );
	door3 movex ( -184, 1.5, 0.2, 0.2 );
	door4 movex (184, 1.5, 0.2, 0.2 );
	door3 waittill  ("movedone" );

wait (5);

	trig waittill( "trigger" );
	door3 movex ( 184, 1.5, 0.2, 0.2 );
	door4 movex (-184, 1.5, 0.2, 0.2 );
	door3 waittill  ("movedone" );

wait(2);

	elevator movez (832,7,1.9,5);
	elevator waittill ("movedone");
	



}
}




Leider geht das so nicht. Es kommt zwa kein Fehler aber es tut sich nichts.
OLD MAN WITH GUN

Zitat:

Original von jump4life
Leider geht das so nicht. Es kommt zwa kein Fehler aber es tut sich nichts.
Ist dein trigger ein trigger_use?
Wenn ja, geht der eventuell durch einen anderen brush durch ( z.B. durch die Türen des Aufzuges, was ich nach betrachten deines Scripts nämlich annehme)?
Dann funktioniert der trigger nämlich nicht (ein trigger_use darf nicht durch einen anderen brush hindurch gehen). Du musst den trigger so platzieren, das er von keinem anderen brush geschnitten wird.
jump4life
Mein Trigger ist ein trigger_use_touch und der geht in einen Brush rein. Ist das bei trigger_use_touch auch so das er dann nicht geht?

Ist das Script denn soweit richtig?

Edit: Hab den Trigger jetzt mal einzeln gesetzt das kein anderer Brush ihn schneidet. Leider ohne Erfolg. Der trigger wird nach wie vor angezeigt aber es tut sich nichts wenn ich ihn betätige.
OLD MAN WITH GUN

Zitat:

Original von jump4life
Ist das Script denn soweit richtig?
Hab noch mal drübergeschaut und nein, es ist ein Fehler drin.

Die Klammer '{' in Zeile 15 gehört hinter das while(1), also in die Zeile 19.
jump4life
Trotz beseitigung des Fehlers immer noch das selbe Ergebnis. Ich seh das dort ein Trigger ist. Aber will ich ihn betätigen kommt keine Reaktion.
Badboy
Hast du dem Trigger denn auch den Richtigen targetnamen zugewiesen?
jump4life
Ja habe ich alles bereits überprüft. Alles richtig soweit ich das sehe.
Badboy
hmm könntest du vielleicht mal eine kleine Map datei erstellen mit dem von dir gemachtem Fahrstuhl/türen und den Triggern irgendwo muss da ja ein fehler sein ^^
jump4life
Wie gewünscht hier die .map Datei. Ist jetzt nur prowesorisch gemacht.

Download
Badboy
LoL ^^

Fehler a)

Du hast den Elevator nicht zum script_brushmodel gemacht und somit dem worldspawn den targetnamen zu gewiesen.

Fehler b)

Im script steht :

Warte auf den trigger!

Türen öffnen sich!

Warte kurze Zeit!

Türen schliessen sich!

Elevator wartet wieder auf den Trigger!

Wie willste denn den trigger drücken wennde im Fahrstuhl bist? ;D

So sollte es richtig sein:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
main() 
{ 
thread ele();
}   

ele() 
{  
trig = getent( "trig_elevator", "targetname" );
door1 = getent( "door1", "targetname" ); 
door2 = getent( "door2", "targetname" ); 
door3 = getent( "door3", "targetname" ); 
door4 = getent( "door4", "targetname" );
elevator=getent("elevator","targetname");
while( 1 )
{
  	trig waittill( "trigger" );
 	door1 movex ( 184, 1.5, 0.2, 0.2 );
 	door2 movex (-184, 1.5, 0.2, 0.2 );
 	door2 waittill  ("movedone" );

  wait (5);

  	door1 movex ( -184, 1.5, 0.2, 0.2 );
 	door2 movex ( 184, 1.5, 0.2, 0.2 );
 	door2 waittill ( "movedone" );

  wait (2);

  	elevator movez (832,7,1.9,1.9);
 	elevator waittill ("movedone");

  wait (2);

  	door3 movex ( 184, 1.5, 0.2, 0.2 );
 	door4 movex (-184, 1.5, 0.2, 0.2 );
 	door3 waittill  ("movedone" );

  wait (5);

  	door3 movex ( -184, 1.5, 0.2, 0.2 );
 	door4 movex (184, 1.5, 0.2, 0.2 );
 	door3 waittill  ("movedone" );

  wait(2);

  	elevator movez (-832,7,1.9,5);
 	elevator waittill ("movedone");

}
}

jump4life
Danke für die Berichtigung. Habe es gerade so getestet wie du es hier geschrieben hast. Leider geht es immernoch nicht.
Badboy
Was genau geht denn nicht? hast du xfire?
jump4life
Es tut sich garnichts. Die Türen öffnen nicht und der Fahrstuhl fährt nicht.

Ja mein XFire ist wurstwasser09
maxim1110555
Ich hab kein bock mir das alles durch zu lesen^^. Kann mir das bitte jemand zusammenfassen mit dem Ergebniss? grosses Grinsen