viel drehendes mit einem script

schwachmat
Hallo,
ich habe etwas drehendes gebaut ("rotator","targetname") und es dreht sich auch wie es soll. Jetzt möchte ich es aber öfter auf meienr map haben ohne tausend scripts zu schreiben und tausend targetnames zu ändern. Das hab ich mit diesem script versucht :

main()
{
thread rotator();
}


rotator()
{
rotator = getentarray ("rotator","targetname");
while (1)


{
rotator rotateyaw (360,4);
rotator waittill ("rotatedone");

}

self thread rotator();
return;
}

Jedoch stürtzt der das Spiel dann immer mit der Fehlermeldung "array is not an entity" ab. -richtig es ist kein entity aber soll auch keins sein!! Hat da jemand ne Idee? Wäre sehr dankbar
OLD MAN WITH GUN
Du musste es so machen (dann sind es auch wieder Entitys und kein Array)

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:
main()
{
	thread rotator();
}


rotator()
{
	rotator = getentarray ("rotator","targetname");
	for(i = 0; i < rotator.size; i++)
		rotator[i] thread rotate_me();
}

rotate_me()
{
	while (1)
	{
		self rotateyaw (360,4);
		wait 3.9;
	}

}



Und hier hast du noch einen universell einsetzbaren.
Da kannst du dann im Radianten den zu rotierenden Dingen neben dem targetname noch den speed und die Achse angeben (wenn die Objetze sich mit unterschiedlichen Geschwindigkeiten und auf verschiedenen Achsen drehen sollen).

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:
/*
	rotate object script by Roger Abrahamsson

	Make object into a script_brushmodel and give it targetname rotate

	Key speed sets seconds per revolution.
	Key script_noteworthy takes y, x or z and rotates around that axis.

*/


main()
{
	rotate_obj = getentarray("rotate","targetname");
	if(isdefined(rotate_obj))
	{
		for(i = 0; i < rotate_obj. size; i++)
		{
			rotate_obj[i] thread ra_rotate();
		}
	}
}

ra_rotate()
{
	if (!isdefined(self.speed) || self.speed == 0)
		self.speed = 5;
	if (!isdefined(self.script_noteworthy))
		self.script_noteworthy = "y";

	while(true)
	{
		// rotateYaw(float rot, float time, <float acceleration_time>, <float deceleration_time>);
		if (self.script_noteworthy == "y")
			self rotateYaw(360,self.speed);
		else if (self.script_noteworthy == "x")
			self rotateRoll(360,self.speed);
		else if (self.script_noteworthy == "z")
			self rotatePitch(360,self.speed);
		wait ((self.speed)-0.1); // removes the slight hesitation that waittill("rotatedone"); gives.
	}
}

schwachmat
Danke! Das erste wird mir aber denke ich schon reichen. Aber wofür steht dnn das "i" ? for(i = 0; i < rotator.size; i++) Soll das für engl. I also "ich" stehen? Gibts da irgendwo nen tutorial? Ich hab mir auf modsonline eins angeguckt was sich "getting startet in scripting" nennt aber da stand halt nur das mann für mehrere entitys einfach getentarray schreiben soll.

edit : aber es funzt schonma grosses Grinsen
OLD MAN WITH GUN

Zitat:

Original von schwachmat
Danke! Das erste wird mir aber denke ich schon reichen. Aber wofür steht dnn das "i" ? for(i = 0; i < rotator.size; i++)
Nein, das ist einfach nur eine Variable (könnte auch x, y, z oder Pusteblume sein). Die Variable i wird am Anfang der for-Schleife auf 0 gesetzt (i = 0) und dann immer um eins erhöht (i++) und das solange i kleiner als die Anzahl der Elemente im Array rotator (rotator.size) ist.
Das ist eine normale for Schleife aus der Programmiersprache C.
schwachmat
Also findet das Script quasi selber heraus wieviele entitys sich drehen sollen?
OLD MAN WITH GUN

Zitat:

Original von schwachmat
Also findet das Script quasi selber heraus wieviele entitys sich drehen sollen?
Ja, das wolltest du doch so haben. getentarry sucht alle Entities in deiner Map heraus, die den targetname "rotator" haben und speichert diese im Array rotator. Danach ruft die for Schleife für jedes einzelne Entity im Array rotator den thread rotate_me() auf.
schwachmat
Jo das is so genau richtig, ich wollt halt nur auch gern verstehen was ich da benutze^^