[Tutorial] Drehtür einbauen

Marvin
Habe heute herausgefunden wie man eine Drehtür in seine Map einbaut.

Es funktioniert fast genauso wie eine Normale Tür.

Nachteile: Es dreht sich nur wenn ein Player im Trigger steht.
Anmerkung von steinacker:

Zitat:


Original von steinacker
wenn die türe sich ständig drehen soll, wie das bei manchen kaufhäusern usw. der fall ist, dann kannst du auch das script vom ventilator dafür nehmen

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:
 main()
{
	fan1 = getEnt( "door1" , "targetname" ); //türe1
	fan2 = getEnt( "door2" , "targetname" ); //türe2

	while (1)
	{
		fan1 rotateyaw( 360, 5, 0, 0 );
		fan2 rotateyaw( 360, 5, 0, 0 );

		wait 4.9; 
	}
} 



den trigger zum auslösen lässt du weg (wird nicht benötigt) und der türe gibst du den targetname door1
2. türe: door2
3. türe: door3
usw. (script dann jeweils erweitern)

Legen wir mal los.

Schritt 1:

Macht eine Neue Map und baut eine Drehtür mit Vier Blättern. Macht sie Breit genug damit der Player dort reinpasst.
Das könnte dann in etwa so aussehen. Die Drehtür habe ich rot markiert:

(klick mich)

Lasse alle Teile deiner Tür markiert und mache einen rechtsklick ins 2d Fenster.
Nun wählst du script --> brushmodel. Wähle die Tür mit ESC ab und baue einen großen Brush um die Drehtür.
Mache einen rechtsklick in die 2d Ansicht und wähle trigger --> multiple; Nun wird der Brush die Trigger-Textur annehmen.
Öffne das entity Menü mit der Taste "N" und vergib diesen Wert:

Key: targetname
Value: activator


Nun wählst du zu erst deinen Trigger aus und dann ein Teil von deiner Tür. Drücke die Taste "W" und die
gesammte Tür wird ausgewählt. Sie ist nun mit deinem Trigger verknüpft. Das ganze sollte dann ungefähr so aussehen:

(klick mich)

Verbindung und Eintrag sind rot gekennzeichnet.

Speichert die Map im Ordner: cod4mod/map_sorce/Prefabs/misc_models unter dem Namen dreh_tuer ab.

Schritt 2:

Öffne deine Map und mache einen rechtsklick in der 2d Ansicht wo die Drehtür hin soll.
Nun wählst du misc --> prefab und gehst in den Ordner misc_models. Gebt in der Suchleiste ein: dreh_tuer.map und drücke auf öffnen.
Nun sollte die Tür erscheinen. Ziehe sie an die richtige Stelle und speichere deine Map.
Nun zum scriptteil. Erzeuge im Ordner cod4mod/raw/maps/mp ein neues Textdokument. Nenn es dann. _dreh_tuer.gsc;
Öffne die _dreh_tuer.gsc mit dem Editor und füge das _doorscript hier ein. Ich habe noch einiges abgeändert sodass
es sich an die Drehtür anpasst:

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

	doortriggers = getentarray("activator","targetname");

	for(i = 0; i < doortriggers.size; i++)
		doortriggers[i] thread door_think();
}


door_think(){

	self.doormoving = false;
	self.doorclosed = true;
	self.doormodel = getent(self.target, "targetname");
	
	while (1){
	
		self waittill("trigger");
		
		if(!self.doormoving)
			self thread door_move();
	}
}

door_move(){

	self.doormoving = true;
	
	if(self.doorclosed){
	
		self.doormodel rotateyaw(-90,1,0.5,0.5);
		self.doormodel waittill("rotatedone");
		self.doorclosed = false;
	}
	
	else{
	
		self.doormodel rotateyaw(-90,1,0.5,0.5);
		self.doormodel waittill("rotatedone");
		self.doorclosed = true;
	}
	
	self.doormoving = false;
} 



Speichere es ab und füge diesen Eintrag in die Mapname.gsc ein:
maps\mp\_dreh_tuer::main();

Und zwar über der Zeile:
maps\mp\_load::main();

Das ganze sollte dann ungefähr so aussehen:

Zitat:


main()
{

maps\mp\_dreh_tuer::main();
maps\mp\_load::main();

ambientPlay("ambient_backlot_ext");

game["allies"] = "sas";
game["axis"] = "russian";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["allies_soldiertype"] = "urban";
game["axis_soldiertype"] = "woodland";

setdvar( "r_specularcolorscale", "1" );

setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");

}



Gehe nun auf Compile Tools/ Level Compiling wähle deine Map und mache Update Zone File. Trage das auf der rechten Seite ein:

rawfile,maps/mp_dreh_tuer.gsc

Drücke unten auf save und führe diese Schritte aus:

"Compile BSP" , "Build Fast File" und "Run selected Map"

Fertig. Die Drehtür sollte sich drehen

Viel Spaß damit, wünscht euch: Marvin Augenzwinkern
Ph3n0m PoWeR
Die Drehtür ist gut, das Script funktioniert. Ich habe für meine Map ein kleines Elektronikgeschäft gebaut, wo eine wunderbar verarbeitete Drehtür den Eingangsbereich schmückt.
steinacker
wenn die türe sich ständig drehen soll, wie das bei manchen kaufhäusern usw. der fall ist, dann kannst du auch das script vom ventilator dafür nehmen

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
main()
{
	fan1 = getEnt( "door1" , "targetname" ); //türe1
	fan2 = getEnt( "door2" , "targetname" ); //türe2

	while (1)
	{
		fan1 rotateyaw( 360, 5, 0, 0 );
		fan2 rotateyaw( 360, 5, 0, 0 );

		wait 4.9; 
	}
}


den trigger zum auslösen lässt du weg (wird nicht benötigt) und der türe gibst du den targetname door1
2. türe: door2
3. türe: door3
usw. (script dann jeweils erweitern)
Marvin
@steinacker, danke für den tipp, das hatte ich auch schon im Sinn aber ich dachte dass
man dafür ein xmodel benötigt und das kann man nach meinen erkenntnissen nur
mit dem maya Programm oder mit dem Asset Manager erstellen. Maya habe ich nicht und
mit dem Asset Manager kenne ich mich nicht aus. grosses Grinsen
Aber danke werde es mal ausprobieren. Augenzwinkern

mfg Marvin

Edit: Okay steinacker hat funktioniert, werde deinen Tipp oben im Tut. posten wenn das OK ist. Augenzwinkern
steinacker
hab mal kurz was gebaschdelt:



das script dazu:

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
main()
{
	fan1 = getEnt( "door1" , "targetname" );

	while (1)
	{
		fan1 rotateyaw( 360, 8, 0, 0 );

		wait 4.9; 
	}
}


jetzt kannst du dein tut erweitern Augenzwinkern
Marvin
cool sowas habe ich auch schonmal gesehen. Nur so ne Drehtüre kriege ich net hin. Bin doof...

Steinacker's Mapping = 1+^^

Daumen hoch
Marvin
Okay, irgendetwas stimmt mit deinem script nicht. Ich habe in meiner Map SAS vs. Speznaz aber
wenn ich jetzt dein script einfüge drehen sich zwar meine Drehtüren aber ich habe plötzlich
Marines vs. Opfor und meine Effekte werden auch nicht mehr abgespielt,
nur wenn ich das script rausnehme wird alles wieder so wie vorher.
verwirrt Unglaublich... verwirrt
steinacker
das kommt drauf an, wie du das script einbindest
wenn du das in deine map.gsc schreibst, darf die "funktion" nicht main heissen
wenn du das script in eine extra datei packst, dann muss die erste "funktion" main heissen

eingebunden in deine map.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:
main()
{
	//hier dein mapZeugs




	//am ende das script aufrufen
	thread revolving_door();
}

revolving_door()
{

	fan1 = getEnt( "door1" , "targetname" );

	while (1)
	{
		fan1 rotateyaw( 360, 8, 0, 0 );

		wait 4.9; 
	}
}



aufruf in einer eigenen datei z.b. _revolving_door.gsc

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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
main()
{
	maps\mp\_load::main();
	maps\mp\_revolving_door::main();


	//hier dein mapZeugs

}

Marvin
Danke, hab's jetzt dierekt in die mapname.gsc gemacht. Nun bin ich mir aber nicht sicher
ob das so richtig ist wenn ich zwei Drehtüren haben möchte:

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:
main()
{
        maps\mp\_breakable_windows::main();
        maps\mp\_move_sensor::main();
        maps\mp\_rolldoor::main();
        maps\mp\_leak::main();
        maps\mp\mp_mfc_mastermap_01_door_02::main();
        maps\mp\mp_mfc_mastermap_01_door_01::main();
        maps\mp\mp_mfc_mastermap_01_fx::main();
        maps\mp\_light_move::main();
        maps\mp\_explosive_barrels::main();
        maps\mp\_load::main();
	
	ambientPlay("ambient_cargoshipmp_ext");
	
	game["allies"] = "sas";
	game["axis"] = "russian";
	game["attackers"] = "axis";
	game["defenders"] = "allies";
	game["allies_soldiertype"] = "urban";
	game["axis_soldiertype"] = "woodland";
	
	setdvar( "r_specularcolorscale", "1" );
	
	setdvar("r_glowbloomintensity0",".25");
	setdvar("r_glowbloomintensity1",".25");
	setdvar("r_glowskybleedintensity0",".3");
	setdvar("compassmaxrange","1800");

        thread revolving_door();
}

revolving_door()
{

        fan2 = getEnt( "door2" , "targetname" );
        fan1 = getEnt( "door1" , "targetname" );

	while (1)
	{
         fan2 rotateyaw( 360, 8, 0, 0 );
	fan1 rotateyaw( 360, 8, 0, 0 );

		wait 4.9; 
	}
}



Edit: Okay ist so richtig hat fnktioniert, aber habe was lustiges entdeckt: Bei der Drehtür für
den Ausgang habe ich eine Scheibe vergessen. ROFL 2
Dr. jekyll
hi,
ich habe schon alles versucht, aber ich krieg es trotzdem nicht hin!
ich habe das Tutorial so wie beschrieben befolgt, nur anstatt drehtuer habe ich revolving_door benutzt.

Nun kommt bei mir die Fehlermeldung:
Script runtime error
(see console for details*)
undefined is not an entity

Was mache is falsch oder habe ich vergessen?
ps: * wie kann ich die details sehen?
klinter

Zitat:

wie kann ich die details sehen?


shift + ^ drücken


mfg klinter
steinacker
undefined is not an entity
das script kann kein entity (script_brushmodel) mit dem targetname door1 oder door2 in deiner map finden
wenn du das vorgeschlagene script von mir benutzt, dann muss deine türe in der map den targetname door1 haben die zweite door2 usw.
Dr. jekyll
ich habe diesen script hier benutzt und so umgeschrieben:


main()
{
fan1 = getEnt( "revolving_ door1" , "targetname" );

while (1)
{
fan1 rotateyaw( 360, 8, 0, 0 );

wait 4.9;
}
}

und denn trigger im radianten habe ich auch revolving_door1 genannt. oder muss ich das script_brushmodel auch revolving_door nennen?
steinacker
wenn du den targetnamen revolving_door1 benutzt, muss deine drehtüre in der map den gleichen namen haben
tatrgetname: revolving_door1
und den trigger brauchst du hier nicht, weil sich die türe ständig dreht, ohne dass man [use] drücken muss
Dr. jekyll
Endlich. Es funktioniert auch bei mir. Ein Fehler war, dass ich noch den Trigger drinne hatte und der andere Fehler war, dass ich die Drehtür wie oben beschreiben, als Prefab gebaut habe. Ich habe einfach ohne das Prefab die Drehtuer eingesetzt.