"Multiple Door" Script

{LSB} Squall69
Hat jemand ein Door Scrip griffbereit, das mit einer Endlosschleife alle Türen mit gleicher Öffungsart in einer Map ansteuert?
{LSB} Squall69
Na dann werd ich es wohl oder übel selbst schreiben mussen.

Wenn jemand Interesse daran hat macht ein Post in ein paar Tagen sonst vergess ich ich sicher darauf.
Anonymous
404 - DEPUBLIZIERT

Dieser Beitrag wurde auf Wunsch des Urhebers ohne Anerkennung einer Rechtspflicht gelöscht

Bitte nicht die Google Cache Funktion benutzen. Augenzwinkern
{LSB} Squall69
Nein, ich will nicht eine Gruppe von Türen sondern einzelne Türen mit nur einem Script ansteuern.
Wenn du dir mal hier dir Tür Tut´s durchschaust hat jede Tür ein eigenes Script.
(door1, Script mit Endloschleife - door2, Script mit Endloschleife .....)

Ich mach nun ein Script das mir ermöglicht door1, door2, ...... mit ein und dem selben Script
anzusteuern dadurch habe ich dann nur mehr einen Thread und eine Edlosschleife
aber ich kann trotzdem die Türen einzeln öffnen.
Anonymous
404 - DEPUBLIZIERT

Dieser Beitrag wurde auf Wunsch des Urhebers ohne Anerkennung einer Rechtspflicht gelöscht

Bitte nicht die Google Cache Funktion benutzen. Augenzwinkern
{LSB} Squall69
Solange man die Türen mit door1, door2, door3,.... benennt und nicht Bart, Humer, Lisa,... nennt
ist das kein prop da man mittels Script diese doorx Namen alle erfassen kann um sie anschliessend richtig zuzuordnen.

Script ist fertig und arbeitet fein, bin nur nicht glücklich mit der switch; case: Abfrage, ist viel zu viel Arbeit
für jeden um es an seine Gegebenheiten anzupassen. Bin mir sicher das das noch einfacher zu lösen ist.
OLD MAN WITH GUN
Ich könnte da was anbieten, was scriptmäßig sehr kurz gehalten ist, unabhängig von der Anzahl der Türen (kann natürlich noch erweitert werden, da momentan keine Sounds vorhanden sind).

Zuerst erstellt man einen Brush für die Tür und einen origin brush als Türangel.
Daraus macht man ein script_brushmodel und gibt ihm folgende keys/values
key: targetname
value: door
key: script_noteworthy
value: rechts
(soll die Tür nach links auf gehen, dann "links" anstatt "rechts" bei script_noteworthy eintragen).
Dann erstellt man noch zwei trigger_use, die man dann vor die beiden Seiten der Tür platziert (einen auf jede Seite). Dann selektiert man die Tür und einen der beiden Trigger und verbindet diese mit "w". Als nächstes selektiert man den Trigger, den man gerade mit der Tür verbunden hat und den verbliebenen Trigger und verbindet diese wiederum mit "w". Trigger 2 ist jetzt also mit Trigger 1 verbunden, der wiederum mit der Tür verbunden ist.
Davon kann man jetzt beliebig viele in der Map verteilen.

Nun der Script:

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:
{
	maps\mp\_load::main();
	
	thread doors_init();
}

doors_init()
{
	door = getentarray("door","targetname");
	for (i= 0; i < door.size; i++)
	{
		trig1 = getent(door[i].target,"targetname");
		trig2 = getent(trig1.target,"targetname");
		level.door_open[i] = false;
		door[i] thread door_think(i, trig1, trig2);
		door[i] thread door_think(i, trig2, trig1);
	}
}

door_think(i, trig1, trig2)
{
	while(1)
	{
		trig1 waittill("trigger");
		richtung = self.script_noteworthy;
		if(!level.door_open[i])
		{
			level.door_open[i] = true;
			if (richtung == "links")
				self rotateto((0,90,0),1);
			else
				self rotateto((0,-90,0),1);
			self waittill("rotatedone");
			wait 2;
			self rotateto((0,0,0),1);
			self waittill("rotatedone");
			level.door_open[i] = false;
		}
	}
}


So hat man einen Script, der recht kurz, aber dennoch sehr leistungsfähig.ist.
Die Türen können von beiden Seiten geöffnet werden, bewegen sich aber nur in die vorher mit script_noteworthy angegebene Richtung.
Habe absichtlich auf zwei Bewegungsrichtungen verzichtet, da dies doch normalerweise recht selten vorkommt. Die meisten Türen gehen nur in eine Richtung auf.
Und wie gesagt, noch ein paar Zeilen für den Sound rein und das war es auch schon.
Egal wie viele Türen man noch einbaut, am Script ändert sich nichts mehr.
{LSB} Squall69
cool bin auf die gleiche Lösung gekommen.

hier der Auszug aus meiner mp_test.gsc

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:
main() 
{ 
	maps\mp\_load::main(); 
	
	game["allies"] = "american";
	game["axis"] = "german";
	game["attackers"] = "allies";
	game["defenders"] = "axis";
	game["american_soldiertype"] = "normandy";
	game["german_soldiertype"] = "normandy";

	setCvar("r_glowbloomintensity0", ".25");
	setCvar("r_glowbloomintensity1", ".25");
	setcvar("r_glowskybleedintensity0",".3");
	
/*	//start Sounds
	ambientPlay("ambient_mp_pharaohs_tomb");
	
	//start MapTime based actions
	level thread MapTimeSounds();
	level thread MapTimeBrushmodels();
	
	//start Borderline
	if( getcvar( "g_gametype" ) == "tdm" )
		level thread CheckBorderline();

	//start Chillout with healthrecover
	level thread ChilloutHealth();
	
	//start playerbased action with brushmodels
//	level thread UFO();
*/

	//start sliding doors
	slidetrigger = getentarray( "slidetrig","targetname" ); 
 
	if( isdefined( slidetrigger ) ) 
	{ 
		for( i=0;i<slidetrigger.size;i++ ) 
		{ 
			slidetrigger[i] thread WaitforSlide(); 
		} 
	} 
}


WaitforSlide()
{ 
	while( 1 )
	{
		self waittill( "trigger" );
		self MoveSlideDoor();
	}
}


MoveSlideDoor()
{
	slidedoor = getent( self.target, "targetname" );

	if( !isDefined( slidedoor ) )
		return;

	slidedoor movex ( 58,2,0,0.5 );
	slidedoor waittill ( "movedone" );
	wait (10);
	slidedoor movex (-58,2,0,0.5 );
	slidedoor waittill ( "movedone" );
}



Hast du vielleicht auch schon probiert eine Unterscheidung der verschiedenen Öffnungsarten zu integrieren?
Nach deinem Tipp mit der key.txt glaub ich sogar das das möglich ist.
OLD MAN WITH GUN

Zitat:

Original von {LSB} Squall69

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:
	//start sliding doors
	slidetrigger = getentarray( "slidetrig","targetname" ); 
 
	if( isdefined( slidetrigger ) ) 
	{ 
		for( i=0;i<slidetrigger.size;i++ ) 
		{ 
			slidetrigger[i] thread WaitforSlide(); 
		} 
	} 
}


WaitforSlide()
{ 
	while( 1 )
	{
		self waittill( "trigger" );
		self MoveSlideDoor();
	}
}


MoveSlideDoor()
{
	slidedoor = getent( self.target, "targetname" );

	if( !isDefined( slidedoor ) )
		return;

	slidedoor movex ( 58,2,0,0.5 );
	slidedoor waittill ( "movedone" );
	wait (10);
	slidedoor movex (-58,2,0,0.5 );
	slidedoor waittill ( "movedone" );
}


Ähm, haben deine Türen einen oder zwei Trigger?
Wenn sie zwei haben, schon mal den zweiten Trigger betätigt, wärend du die Tür mit dem ersten geöffnet hast, und die Tür noch offen ist?
Bzw. den ersten Trigger ein zweites Mal betätigt hast, wärend die Tür geöffnet ist?
Augenzwinkern

Das hier:

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

code:
1:
if( isdefined( slidetrigger ) ) 

und auch das hier:

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

code:
1:
2:
3:
if( !isDefined( slidedoor ) )
		return;

kannst du dir ruhigen Gewissens sparen.
Das du Türen in deiner Map definiert hast weisst du doch, oder?
Das verhindert doch bloß Fehlermeldungen beim Testen, mehr nicht (und das ist bei der Fehlersuche eher hinderlich).
In der fertigen Map würde es doch nie dazu kommen, dass diese Einträge nicht definiert sind (da deine Map sonst nicht so funktionieren würde, wie du dir das vorgestellt hast).
Bei einer Mod ist sowas von Interesse (da man dort auf undefinierte Zustände treffen könnte und diese abfangen will, damit der Server nicht mit einem Scriptfehler abschmiert).
Denn könntest du dir vorstellen, das wenn deine fertig kompilierte Map auf einem Server läuft, plötzlich und unverhofft deine Türen weg sind und du verhindern müsstest, das die Map dann abschmiert?
Wohl eher nicht.
Bei Maps kommt sowas eigentlich nur in sehr wenigen Ausnahmefällen vor, z.B. wenn man Arrays von entitys bildet, von denen einige mehr Parameter haben als andere und man so überprüfen müsste, ob der Parameter vorhanden ist oder nicht (z.B. Türen, bei denen einige den Parameter script_noteworthy2 haben, andere aber nicht).

Zitat:

Original von {LSB} Squall69
Hast du vielleicht auch schon probiert eine Unterscheidung der verschiedenen Öffnungsarten zu integrieren?
Nach deinem Tipp mit der key.txt glaub ich sogar das das möglich ist.

Sicher kann man da noch so einiges erweitern. Allein schon mit script_noteworthy und script_noteworthy2 und diverser if Abfragen bezüglich der Einträge dort.
{LSB} Squall69
Meine Schiebetür hat nur einen Trigger daher ist die eine Kontrolle ob sie offen oder geschlossen ist sparen.

if( isdefined( .... ) ) mit den dazugehörigen Prints benutze ich dazu um
Informationen direkt am Bildschirm anzuzeigen
ohne das mir der Server abschmiert.

z.B slidetrigger, da nicht nur ich an dieser Map arbeite kann ich gleich checken ob alle Trigger da sind vielleicht wurde
ja irgendo einer vergessen.

Und ich lass immer meine Abfragen allerdings ohne prints im Script das heisst für mich das es funzt und ist
gleichzeitig ein kleiner Fingerabdruck.