Rolltreppe

Nightwing
Sodele, folgendes ging mir heut durch den Kopf:

2 Rolltreppen nebeneinander, eine hoch, eine runter.
Die einzelnen Treppenstufen sollte ich eigentlich mit dem Script des Paternoster (hier schonmal besprochen = Klick) animieren können denke ich. Jede Treppe denselben Namen, müsste passen.
Hier das Script aus dieser Map:

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:
main(){

	// a Paternoster is some kind of elevator (as well as the latin name of the lords prayer)
	level.Waypoints = getentarray("paternoster_WP","targetname");
	level.Paternosterfloors = getentarray("paternoster_floor","targetname");
	
	paternoster_init();
}

paternoster_init(){

	iTemp = 0;
	
	while(iTemp < level.Paternosterfloors.size){
	
		level.Paternosterfloors[iTemp] thread floor_move(iTemp);
		iTemp++;
	}
}

floor_move(iFloornumber){

	myWaypoints = level.Waypoints;
	iSpeed = 50;
	iWaypoint = iFloornumber;
	tempZiel = myWaypoints[iWaypoint].origin;
	self.origin = tempZiel;

	while(1){
	
		iWaypoint += 1;
		
		if (iWaypoint >= myWaypoints.size)
			iWaypoint = 0;
		
		tempZiel = myWaypoints[iWaypoint].origin;
		iZeit = distance(self.origin,tempZiel)/iSpeed;
		self moveto(tempZiel, iZeit, 0.0, 0.0);
		wait iZeit;
		self.origin = tempZiel;
	}
}



Theoretisch sollte ich auch den Player via dem geänderten Jumppad Script darauf bewegen können. Hier das Script + der Link: Klick

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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
main(){

	thread jumper1();	// Rohr, schneller Kriechen, Eingang 1
	thread jumper2();	// Rohr, schneller Kriechen, Eingang 2	
}

jumper1(){

	pad1 = getent ("jump1","targetname");
	pad2 = getent ("jump2","targetname");
	
	glow2 = getent ("glow2","targetname");
	
	air21 = getent ("air21","targetname");
	air22 = getent ("air22","targetname");
	air23 = getent ("air23","targetname");
	air24 = getent ("air24","targetname");

	//level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
	maps\mp\_fx::loopfx("beacon_glow", (glow2.origin), 3, (glow2.origin) + (0, 0, 90));

	while (1){
	
		pad2 waittill ("trigger",user);
		
		if (user istouching(pad2)){
		
			//throw = user.origin + (100, 100, 0);
			air = spawn ("script_model",(0,0,0));
	
			air.origin = user.origin;
			air.angles = user.angles;
			
			user linkto (air);
						
			time = 1;
			
			air moveto (air21.origin, 1);
			wait .5;
			
			air moveto (air22.origin, 1);
			wait .5;
			
			air moveto (air23.origin, 1);
			wait .5;
			
			air moveto (air24.origin, 1);
			
			pad1 TriggerOff();
	
			//air moveto (throw, time, 0.5,0.5);
			//air moveto (throw, time, 0.5,0.5);
			wait 1;
			
			user unlink();
			
			pad1 TriggerOn();
			
			wait 1;
		}
	}
}

jumper2(){

	pad1 = getent ("jump1","targetname");
	pad2 = getent ("jump2","targetname");
	
	glow1 = getent ("glow1","targetname");
	
	air11 = getent ("air11","targetname");
	air12 = getent ("air12","targetname");
	air13 = getent ("air13","targetname");
	air14 = getent ("air14","targetname");
	

	//level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
	maps\mp\_fx::loopfx("beacon_glow", (glow1.origin), 3, (glow1.origin) + (0, 0, 90));
	
	while (1){
	
		pad1 waittill ("trigger",user);
		
		if (user istouching(pad1)){
		
			//throw = user.origin + (100, 100, 0);
			air = spawn ("script_model",(0,0,0));
	
			air.origin = user.origin;
			air.angles = user.angles;
			
			user linkto (air);
			
			time = 1;
			
			air moveto (air11.origin, 1);
			wait .5;
			
			air moveto (air12.origin, 1);
			wait .5;
			
			air moveto (air13.origin, 1);
			wait .5;
			
			air moveto (air14.origin, 1);
			
			pad2 TriggerOff();
	
			//air moveto (throw, time, 0.5,0.5);
			//air moveto (throw, time, 0.5,0.5);
			wait 1;
			
			user unlink();
			
			pad2 TriggerOn();
			
			wait 1;
		}
	}
}



Die Frage ist: Wie kann ich es Scripttechnisch lösen, das der Player nicht von einem Trigger gezogen wird, sondern sich selbst auf der Treppe bewegen kann, aber die Stufen ihn mitnehmen?
Optional wäre da noch der Gedanke, das ein Player gegen die Laufrichtung der Treppe laufen kann, da würde er dann gebremst werden, im hoch mehr, im runter weniger...

ToM
Panther[GER]
Meinste nich das währe einfacher die einzelnen Stufen je als "schrägen mini Aufzug" zu Scripten und gut is ??
Nightwing
Müsst ich mir mal ansehen, klingt gut. Ich denk manchmal etwas kompliziert, was Scripts anbelangt grosses Grinsen

ToM
Panther[GER]
Nur ma so als Gedankenanstoß .... ich würde jeweils am oberen und unteren ende der Treppe nen Scipt origin setzen und die dann quasi als wegpunkte benutzen.
Also Stufe1 -> start @ origin_unten -> moveto origin_oben -> waittill movedone -> hide Model -> wait Xs -> und wieder von vorne als Schleife halt ...
Nightwing
Dann würde die sichtbare Rotation der Treppe fehlen...
Aber der Ansatz iss gut. Muss ich übers lange WE mal pfriemeln grosses Grinsen
Danke

ToM
Panther[GER]
Sichtbare Rotation ?? was meinste denn damit verwirrt
So am oberen ende ? Da konnte man ja auch mehr als ein Origin setzen ....
Außerdem könnte man (wenn man am oberen ende 2 setzen würde) die Treppenstufe nicht nur zwischen den beiden oberen bewegen sondern gleichzeitig auch noch eine Rotation einbauen ...
Sowas ähnliches habe ich auch bei meinem Hubschrauber in meiner neuen Map gemacht ... klick mich

(is aber mittlerweile schon 'n bisschen verbessert die ganze Angelegenheit grosses Grinsen )
Panther[GER]
Das hat mich jetzt doch irgendwie beschäftigt Augen rollen

Hier ma `n beispiel wie ich das machen würde klick
Ich hab da jetzt erstma nur eine Stufe gemacht ... is wohl übersichtlicher Augenzwinkern
Nightwing
Wow cooler Flug mim Heli! Auch die Map schaut gut aus, mach mal fertig grosses Grinsen
Danke für das andere Script, da brüt ich mal drüber.

Achja, mit sichtbarer Rotation meine ich, das man von weiters weg schon sieht, das es ne Rolltreppe iss Augenzwinkern

ToM
T.R.Graves
Hallo zusammen

Da es hierbei um ein script für meine Rolltreppe geht will ich mich auch mal beteiligen.
Also das Problem ist folgendes eine Rolltreppe mit 13 Stufen auf zwei Seiten die gegenläufig sich bewegen müssen.

Also hier ist mein Script zu dem Problem

rolltreppe()
{

level.rolltreppeSpeed = 15.2;//Geschwindigkeit aufwärts
level.upSpeed = 0.1;//geschwindigkeit zurück
stufe = getent ("stufe","targetname");

temp = getent(stufe.target,"targetname");
stufe.dest = temp.origin;//zielpunkt der stufe
stufe.start = stufe.origin;//startpunkt der untersten stufe
stufe hide();

wait 2.1;

stufe thread rolltreppe_move();


}




rolltreppe_move()
{

wait 0.1;

self show();

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

self moveto(self.dest, level.rolltreppeSpeed, 0.0, 0.0);
self waittill ("movedone");

self hide();
self moveto(self.start, level.upSpeed, 0.0, 0.0);
wait .15;
thread rolltreppe_move();


}

Problem Nr.1 nur eine Stufe (sollen mal 13 werden)

Man könnte sicher alle 13 Stufen mit moveto scripten aber ich denke mit einem script origin als ziel , und bei ankunft der Stufe am ziel-origin ein Starten einer Schleife wäre einfacher zu machen.

Also sehr komplex und ich denke auch schwer zu lösen.

Ciao
Nightwing
Mit dem Paternosterscript funktioniert es, Jan hat das gerade mal getestet. Jetzt baut er mal was mit mehr Stufen zum Test. Weiteres folgt bald.

ToM
Panther[GER]
hmmm auf jedenfall sieht dein Script etwas eleganter aus als meins grosses Grinsen

Im Grunde ja die gleiche Überlegung....ich denke ma das "Problem" (bei beiden varianten) ist das es doch echt mühselig und sehr unflexibel ist den gleichen schnodder für jede stufe einzeln zu schreiben .... gibt dann bei 50 Stufen wohl geschätzte 50000000*** Zeilen zu schreiben Freu

Hmm ich hoffe ja noch auf den guten alten OMWG der ja in solchen Situationen oft die rettende Idee hat Augenzwinkern

EDIT:

Paternosterscript ??? sorry hab ich was verpasst Zzzzzz...

nochma EDIT Freu

Hab deinen ersten Post nochma gelesen Augen rollen
Nightwing

Zitat:

Original von Panther[GER]
hmmm auf jedenfall sieht dein Script etwas eleganter aus als meins grosses Grinsen


Iss nicht meins, habs aus der Map mp_andees_asylum geklaut (siehe mein erster Post). Eine Rolltreppe ist im Schnitt gesehen nix anderes wie ein Paternoster.

Zitat:

Original von Panther[GER]
Hmm ich hoffe ja noch auf den guten alten OMWG der ja in solchen Situationen oft die rettende Idee hat Augenzwinkern


Ja, darauf hoffe ich auch immer Augen rollen

ToM
Mapicted
Also mit dem Paternoster script und dieser Anordnug der Scriptbrushrusmodels (jeweil das paternoster_WP in jede stufe einbauen) funktioniert es, die Bewegung läuft flüssig wie eine Kette ab

wie man jetzt die Richtung dreht hab ich noch nicht rausgefunden, es dreht sich gegen den Uhrzeigersinn also die Treppe läuft nach unten.

Weiss vll einer wie ich die Richtung drehen kann?

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:
main(){

	// a Paternoster is some kind of elevator (as well as the latin name of the lords prayer)
	level.Waypoints = getentarray("paternoster_WP","targetname");
	level.Paternosterfloors = getentarray("paternoster_floor","targetname");
	
	paternoster_init();
}

paternoster_init(){

	iTemp = 0;
	
	while(iTemp < level.Paternosterfloors.size){
	
		level.Paternosterfloors[iTemp] thread floor_move(iTemp);
		iTemp++;
	}
}

floor_move(iFloornumber){

	myWaypoints = level.Waypoints;
	iSpeed = 50;
	iWaypoint = iFloornumber;
	tempZiel = myWaypoints[iWaypoint].origin;
	self.origin = tempZiel;

	while(1){
	
		iWaypoint += 1;
		
		if (iWaypoint >= myWaypoints.size)
			iWaypoint = 0;
		
		tempZiel = myWaypoints[iWaypoint].origin;
		iZeit = distance(self.origin,tempZiel)/iSpeed;
		self moveto(tempZiel, iZeit, 0.0, 0.0);
		wait iZeit;
		self.origin = tempZiel;
	}
}

steinacker
probiers mal mit:

iWaypoint - = 1;

if (iWaypoint <= myWaypoints.size)


oder mit:

iWaypoint + = -1;

if (iWaypoint >= myWaypoints.size)


oder umgekehrt ...
Nightwing
Danke, da iss was dran. Darauf bin i noch edd gekommen...

ToM
T.R.Graves
Also ich habe noch was ganz anderes versucht mit diesem script.
Auch das gleiche Paternosta Prinzip nur etwas einfacher aufgebaut.
Dort ist jede Stufe mit der vorherigen verbunden und läuft bei der Rolltreppe links hoch rechts runter.




Sieht sehr gut aus ausser das die Geschwindigkeit sehr bescheiden ist. Bekomme dieses auch nicht so hin wie ich das will.

patanosta_move()
{
patanosta = getent ("patanosta","targetname");
level.rolltreppeSpeed = 10.2;
patanosta thread move();
}

move()
{
Targ1 = getent(self.target,"targetname");
Targ2 = getent(Targ1.target,"targetname");
Targ3 = getent(Targ2.target,"targetname");
Targ4 = getent(Targ3.target,"targetname");
Targ5 = getent(Targ4.target,"targetname");
Targ6 = getent(Targ5.target,"targetname");
Targ7 = getent(Targ6.target,"targetname");
Targ8 = getent(Targ7.target,"targetname");
Targ9 = getent(Targ8.target,"targetname");
Targ10 = getent(Targ9.target,"targetname");
Targ11 = getent(Targ10.target,"targetname");
Targ12 = getent(Targ11.target,"targetname");
Targ13 = getent(Targ12.target,"targetname");
Targ14 = getent(Targ13.target,"targetname");
Targ15 = getent(Targ14.target,"targetname");
Targ16 = getent(Targ15.target,"targetname");
Targ17 = getent(Targ16.target,"targetname");
Targ18 = getent(Targ17.target,"targetname");
Targ19 = getent(Targ18.target,"targetname");
Targ20 = getent(Targ19.target,"targetname");
Targ21 = getent(Targ20.target,"targetname");
Targ22 = getent(Targ21.target,"targetname");
Targ23 = getent(Targ22.target,"targetname");
Targ24 = getent(Targ23.target,"targetname");
Targ25 = getent(Targ24.target,"targetname");
Targ26= getent(Targ25.target,"targetname");
Targ27 = getent(Targ26.target,"targetname");
Targ28 = getent(Targ27.target,"targetname");
Targ29 = getent(Targ28.target,"targetname");
Targ30 = getent(Targ29.target,"targetname");
while (1)
{
self moveto (targ1.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ1 moveto (targ2.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ2 moveto (targ3.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ3 moveto (targ4.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ4 moveto (targ5.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ5 moveto (targ6.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ6 moveto (targ7.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ7 moveto (targ8.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ8 moveto (targ9.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ9 moveto (targ10.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ10 moveto (targ11.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ11 moveto (targ12.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ12 moveto (targ13.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ13 moveto (targ14.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ14 moveto (targ15.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ15 moveto (targ16.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ16 moveto (targ17.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ17 moveto (targ18.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ18 moveto (targ19.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ19 moveto (targ20.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ20 moveto (targ21.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ21 moveto (targ22.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ22 moveto (targ23.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ23 moveto (targ24.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ24 moveto (targ25.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ25 moveto (targ26.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ26 moveto (targ27.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ27 moveto (targ28.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ28 moveto (targ29.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ29 moveto (targ30.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ30 moveto (targ1.origin,level.rolltreppeSpeed, 0.0, 0.0);
Targ30 waittill ("movedone");

}
}

Ciao
Nightwing
Auch ne gute Idee! Wir sollten Dich mal beides vergleichen lassen, was Dir dann besser gefällt.

ToM
steinacker
lass mal zum schluss das waittill movedone wech, dann müsst's eigentlich schneller gehn und eventuell noch deine speedvariable mal verringern

mit dem script hier könnt ich mich nochmal an einen teleporter ala stargate machen - erster versuch war gescheitert
Nightwing

Zitat:

Original von steinacker
probiers mal mit:

iWaypoint - = 1;

if (iWaypoint <= myWaypoints.size)


oder mit:

iWaypoint + = -1;

if (iWaypoint >= myWaypoints.size)


oder umgekehrt ...


Produziert leider alles Fehlermeldungen...

ToM
T.R.Graves
Hallo zusammen

Ich wollte mich nur mal wieder melden wegen der Rolltreppe und gleich mal meine Lösung anbieten.

Als erstes das Script

rolltreppe_move()
{
rolltreppe = getent ("rolltreppe","targetname");

rolltreppe thread move();
}

move()
{
Targ1 = getent(self.target,"targetname");
Targ2 = getent(Targ1.target,"targetname");
Targ3 = getent(Targ2.target,"targetname");
Targ4 = getent(Targ3.target,"targetname");
Targ5 = getent(Targ4.target,"targetname");
Targ6 = getent(Targ5.target,"targetname");
Targ7 = getent(Targ6.target,"targetname");
Targ8 = getent(Targ7.target,"targetname");
Targ9 = getent(Targ8.target,"targetname");
Targ10 = getent(Targ9.target,"targetname");
Targ11 = getent(Targ10.target,"targetname");
Targ12 = getent(Targ11.target,"targetname");
Targ13 = getent(Targ12.target,"targetname");
Targ14 = getent(Targ13.target,"targetname");
Targ15 = getent(Targ14.target,"targetname");
Targ16 = getent(Targ15.target,"targetname");
Targ17 = getent(Targ16.target,"targetname");
Targ18 = getent(Targ17.target,"targetname");
Targ19 = getent(Targ18.target,"targetname");
Targ20 = getent(Targ19.target,"targetname");
Targ21 = getent(Targ20.target,"targetname");
Targ22 = getent(Targ21.target,"targetname");
Targ23 = getent(Targ22.target,"targetname");
Targ24 = getent(Targ23.target,"targetname");
Targ25 = getent(Targ24.target,"targetname");
Targ26= getent(Targ25.target,"targetname");
Targ27 = getent(Targ26.target,"targetname");
Targ28 = getent(Targ27.target,"targetname");
Targ29 = getent(Targ28.target,"targetname");
Targ30 = getent(Targ29.target,"targetname");

while (1)
{
self moveto (targ1.origin,1.3);
Targ1 moveto (targ2.origin,1.3);//speed auf 1.3 je niedriger umso schneller
Targ2 moveto (targ3.origin,1.3);
Targ3 moveto (targ4.origin,1.3);
Targ4 moveto (targ5.origin,1.3);
Targ5 moveto (targ6.origin,1.3);
Targ6 moveto (targ7.origin,1.3);
Targ7 moveto (targ8.origin,1.3);
Targ8 moveto (targ9.origin,1.3);
Targ9 moveto (targ10.origin,1.3);
Targ10 moveto (targ11.origin,1.3);
Targ11 moveto (targ12.origin,1.3);
Targ12 moveto (targ13.origin,1.3);
Targ13 moveto (targ14.origin,1.3);
Targ14 moveto (targ15.origin,1.3);
Targ15 moveto (targ16.origin,1.3);
Targ16 moveto (targ17.origin,1.3);
Targ17 moveto (targ18.origin,1.3);
Targ18 moveto (targ19.origin,1.3);
Targ19 moveto (targ20.origin,1.3);
Targ20 moveto (targ21.origin,1.3);
Targ21 moveto (targ22.origin,1.3);
Targ22 moveto (targ23.origin,1.3);
Targ23 moveto (targ24.origin,1.3);
Targ24 moveto (targ25.origin,1.3);
Targ25 moveto (targ26.origin,1.3);
Targ26 moveto (targ27.origin,1.3);
Targ27 moveto (targ28.origin,1.3);
Targ28 moveto (targ29.origin,1.3);
Targ29 moveto (targ30.origin,1.3);
Targ30 moveto (targ1.origin,1.3);
Targ30 waittill ("movedone");

}
}



Im Radianten erstellen wir als erstes einen brush (treppe) und machen daraus ein
script-brushmodel und geben diesem den targetname rolltreppe
dann machen wir wiederum ein script-brushmodel und geben diesen die Textur Origin und schieben diesen auf die Stufe wie man auf den Bild sehen
kann.
Dann erstellen wir noch weitere Brushe (treppenstufen) und machen alle zu
script-brushmodel und setzen in alle ein script-brushmodel mit der textur origin.
Wichtig ist das man nur die Treppenbrushe mit der Taste w in Richtung der Bewegung der Rolltreppe verbinden.
Die letzte Treppenstufe mit der ersten Treppenstufe verbinden mit w so das in Kreislauf entsteht.
Das obere Script ist für 30 stufen ausgelegt und muss für weniger stufen umgeschrieben werden.