Sich ewig drehende Platformen

CrazyLemon
Hallo Liebe Comunity,

Ich hab für meine neue map versucht eine Platform zu bauen die sich im Kreis bewegt und dies die ganze Zeit tut und nicht aufhört, ohne einen trigger zu drücken. Ich hab das Forum und Google durchsucht und jedes script ausprobiert, keins funktioniert.
Könnte mir vielleicht jemand helfen und ein funktionierendes Script posten?

Danke im Vorraus.
serthy
wenn syntax Fehler kommen, bitte melden

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:
64:
65:
66:
/*========================================

	Rotierende Dinge

		ersetze rotateRoll durch:
			rotateYaw oder rotatePitch 
		dadurch ändern sich die Drehachsen

		speed: 
			zeit in der sich die Scheibe einmal um sich selbst dreht

	-die erste Funktion ist für eine einzelne Scheibe
		-key:targetname value:rotor
	-die zweite für viele scheiben mit gleichem targetname
		-key:targetname value:rotor
		-alle Scheiben drehen sich gleich schnell und in gleicher Richtung

	-die Wartezeit von speed - 0.1 nicht ändern oder in waittill( "rotatedone" ) ändern, sonst ruckelt es

	du kannst auch eine neue Funktion nehmen: rotateTo( angle , time )
		(angle ist dabei ein Vektor der so aussieht: (x,y,z) (Bsp: "rotor rotateTo( ( 360 , 0 , 180 ), 3 );"))

=======================================*/


/*** Funktion 1 ***/
_rotor()
{
	speed = 1;

	rotor = getent( "rotor" , "targetname" );

	while( isdefined( rotor ) )
	{
		rotor rotateRoll( 360 , speed );
		wait speed - 0.1;
	}
}

/*** Funktion 2 ***/
_rotor_array()
{
	speed = 1;

	rotor = getentarray( "rotor" , "targetname" )

	for( i = 0 ; i < rotor.size ; i++ )
	{
		if( isDefined( rotor[i] ) )
			rotor[i] thread _rotate( speed );
	}
}

_rotate( speed )
{
	if( !isDefined( speed ) )
		speed = 1;

	while( isdefined( self ) )
	{
		self rotateRoll( 360 , speed );
		wait speed - 0.1;
	}
}

CrazyLemon
Also bei dem oberen kommt Syntax Error, er will erst die erste { wegmachen und dann das speed = 1


Bei der unteren hab ich keine Fehlermeldung jedoch pasiert einfach gar nichts. Muss ich das wie ne normale Tür auch mit dem Orig tool machen und dann auch script_brushmodel draus machen. Und wie muss ich die Funktionen bei der gesc eintragen? Also das er weis das er das ausführen muss.

MfG CrazyLemon
bangingbernie
CrazyLemon
Danke, das funktioniert einwandfrei. smile

Kann ich das auch so verändern das sich das nur um 45° dreht und dann hin un der, wobei ich dann ja im radiant was verändern muss. Man muss sich das so vorstellen das an einer Wand ein Pendel(?!) wie bei einer alten standuhr ist und dieses sich die ganze zeit hin und her bewegt, wie macht man das dann im script bzw. radiant?

MfG Crazy
serthy
dazu brauchst du im radiant nichts ändern
im script nur das ändern:

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
while(1)
{
rotor rotateyaw(45,1);
rotor waittill("rotatedone");
rotor rotateyaw(-45,1);
rotor waittill("rotatedone");
}

CrazyLemon
aber ich meine wenn ich das im radiant so lasse, dann bewegt sich das ding von der ausgangsposition aus 45° und dann wieder zur ausgansposition, ich will ja das es so zusagen zu der einen 25° und dann auf die andere 25° sprich es müsste anfangen sich um 25° zu drehen und ab dann, immer um 50°
du verstehst wie ich das meine?
serthy
dann so:

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
rotor rotateYaw( 25 , 0.5 );

while(1)
{
rotor rotateyaw(-45,1);
rotor waittill("rotatedone");
rotor rotateyaw(45,1);
rotor waittill("rotatedone");
}

CrazyLemon
Und wo muss ich das in deinem script ändern?
serthy
du brauchst nur die teile einfügen die du haben willst
r.b. rotateyaw(25,1) dreht das ding um einmalig 25 grad un einer sekunde
dadrunter ist eine while-schleife
was dadrinne steht wird unendlich lange wiederholt

also es bedeutet:
rotateyaw(25,1) >> dreht das pendel zu einer ausgangsposition
while(1){>>> wird immer wieder holt
rotateyaw(-50,2) dreht das pendel zurück
waittill(rotatedone) >>>>wartet bis das pendel sich nichtmehr bewegt
rotateyaw(50,2) >>> dreht das pendel wieder zurück

nachdem es sich wieder zurückgedreht hat fängt es on vorne an (in der while-schleife)
CrazyLemon
Ein Ausschnitt aus deinem Script :


_rotate( speed )
{
if( !isDefined( speed ) )
speed = 1;

while( isdefined( self ) )
{
self rotateRoll( 360 , speed );
wait speed - 0.1;
}
}

da muss ich das ja ändern, und das mit dem while steht ja was vn ist defniert, und das mit self rotateroll ist ja das mit demsich drehen, da versteh ich nicht wie ich das was wo einsetze, könntest du einmal posten wie das script dann fertig aussieht? Danke.
serthy
zZz_CrazyLemon.iwd

schau mal in die map rein und nimm dir alles was du brauchst raus smile
CrazyLemon
Also ich hab jetzt mal alles genaso gemacht wie du, es geht nicht >.< hab es mal hochgeladen

http://www.fileuploadx.de/723345

Also das ist halt ne zombie map, und ich hab ein Teil gemacht wie banginbernie erklärt hat, in dem roten raum an der wand sind die gelben pendel die ich meine die nicht funktionieren. Vielleicht findest du den Fehler.

Im grauen Raum sind verschieden blöcke die sich hoch und runter bewegen sollen, halt auch dauerhaft, was müsste ich dafür im script verändern? smile
Danke für deine hilfe.

MfG Crazy
serthy
http://www.fileuploadx.de/354759

die funhouse_1 hab ich nur berichtigt
die funhouse_2 hab ich so gemacht, dass es gut aussieht smile

also dein fehler war du hast die pendel alle nacheinander aufgerufen und davor noch die tür gehabt

es war so bei dir:

door_rotate();
pendel();
pendel2();
pendel3();
.
.
.

das bedeutet das du erst die tür aufrufst und die dann abgearbeitet wird, wenn die fertig ist dann erst pendel(), wenn das fertig ist pendel2() usw.
da aber in der tür und in jedem pendel eine while-schleife drin ist, die unendlich lange geht, kannst du auch genausolange drauf warten bis sich die dinger bewegen =)

also vor solchen dingen die GLEICHZEITIG ablaufen sollen immer ein >thread< davor, dann wird nicht darauf gewartet bis eine funktion fertig ist


thread door_rotate();
thread pendel();
thread pendel2();
thread pendel3();
.
.
.
dann habe ich in der funhouse_2 die winkel geändert (auslenkung) sonst rutscht man runter und ich habe jedem pendel eine unterschiedliche zeit zugewiesen, sonst schwingen die im takt und du kommst nie auf das nächste pendel

dann muss man bei pened 3 und 4 nch von Pitch in Roll umwandeln, sonst schwingen die nicht parallel zur wand, sondern in den raum rein und in die wand

zu den grauen blöcken:
was meinst du? ich hab nur den fahrstuhl gesehen, der wunderbar funktioniert
CrazyLemon
Erstmal ein RIESEN DANKESCHÖN dafür das du mir das gemacht/ gezeigt hast, es funktioniert alles. smile Was ich mit dem grauen meinte ist, wenn du im radiant guckst, es sind 6 verschieden blöcke
die bis zum boden gehen (nachdem du mit dem fahrstuhl hochgefahren bist)
ich hatte es so vor gehabt das jeder zweite gleichzeitigt hoch und runter geht und das der erste und letzte nicht hoch und runter gehen da man da campen soll, also der erste muss vom boden nach oben, der zweite von oben zum boden, der drittwe wieder vom boden nach oben, undso weiter. du verstehst? da weis ich noch keine löseung für, vielleicht weist du ja was smile

MfG Crazy
serthy
warte ich schau mal nach bin grad verwirrt von deiner erklärung grosses Grinsen
und muss mal essen schnappen, aber die blöcke sollten auch kein problem sein