[Tutorial] Öffnende Tür erstellen * |
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269
|
|
[Tutorial] Öffnende Tür erstellen * |
|
Vorlage von HarkoninVSC auf MODSonline.com
Danke an Verni@hter und OLD MAN WITH GUN für´s Testen!
Wie man eine sich öffnen lassende Tür erstellt
HarkoninVSC zeigt uns hier, wie man eine Tür erstellt, die sich öffnen lässt.
Schritt 1:
Gehen wir davon aus, dass Du eine "Tür-Öffnung" aus Deiner Wand ausgeschnitten hast - nun musst Du aus einem texturierten Brush Deine "Tür" bauen, die in diese Türöffnung hineinpasst.
In diesem Tutorial nehmen wir mal die Tür ch_door_18.
(Wenn Du auch einen Türrahmen einsetzen möchtest, kannst Du einen aus den Prefabs auswählen, z. B. das folgende: /prefabs/zipline/door_64_frame_02.)
Schritt 2:
Unser nächster Schritt ist die Erstellung eines "Scharnier"-Brushes, belegt mit der "origin"-Textur, die man unter
-> textures -> tools
findet.
Dieser Origin-Brush wird als "Scharnier" fungieren - also platziere ihn genau an der Stelle, an der Du die sich öffnen und schließen lassende Tür platzieren möchtest.
Schritt 3:
Markiere nun in der 2D-Ansicht sowohl Deine "Tür" als auch Dein "Scharnier" und klicke mit der rechten Maustaste. Wähle nun im Menü
-> script -> brushmodel
Schritt 4:
Nun brauchen wir noch einen Auslöser (= Trigger) für die Tür, damit sie sich auch öffnet. Erstelle einen Brush in dem Bereich, in dem der Spieler in der Lage sein soll, die Tür zu öffnen.
Ist der Brush erstellt und markiert, klicke mit der rechten Maustaste in der 2D-Ansicht und wähle
-> trigger -> use_touch
Schritt 5:
Jetzt, nachdem der Auslöser (= Trigger) gesetzt ist, musst Du das Entity-Fenster mit der Taste "N" öffnen.
Hier verpasst Du dem Trigger diese Werte:
Key: Tagretname
Value: doortrig
Wenn Du auch einen Hilfetext anzeigen lassen möchtest, wenn der Spieler vor der Tür steht, dann musst Du noch folgendes setzen:
Key: hintstring
Value: Dein gewünschter Text
Schritt 6:
Markiere Deinen Trigger und Deine Tür und drücke dann die Taste "W", um sie miteinander zu verknüpfen.
So, das war´s im Editor, auf geht´s zum Script-Teil.
1.) Vorausgesetzt natürlich Du hast bereits eine "Dein_Mapname.gsc": öffne Du sie und füge diese Zeile ein:
maps\mp\_door::main();
... und zwar über der Zeile:
maps\mp\_load::main();
2.) Kopiere dieses Script und füge es in eine neue Text-Datei ein und benenne diese Text-Datei dann um in
_door.gsc
Speichere die _door.gsc anschließend in Deinem Ordner maps/mp
main()
{
*Dein eigener Map-Kram an dieser Stelle*
doortriggers = getentarray("doortrig","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;
}
Stelle sicher, dass Du Deine Zone-Datei nach dem Compiling der Map updatest!
Wichtiger Zusatz:
rotateyaw
Grad des Drehens, Zeit des Drehens, Beschleunigungs- und Verlangsamunszeit
doorclosed
doormoving
Lässt das Script wissen, ob die Tür geöffnet/geschlossen oder in Bewegung ist
doortrig
Ist der Name Deines Auslösers (= Trigger)
Man kann rotateyaw auch ändern in:
rotateto
Hoch-/Runter-Rotation
moveto
X, Y, Z, Zeit
movex
Bewegen auf der X-Achse
movey
Bewegen auf der Y-Achse
movez
Bewegen auf der Z-Achse
Wenn Du 360 Grad für die Rotation verwendest, kannst Du eine Drehtür erstellen.
Hoffe mal, das hilft weiter.
Hark
---
Direkt verlinken:
https://www.opferlamm-clan.de/wbb2/thread.php?threadid=10415
***
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Hier scheint noch ein kleiner Fehler zusein. Der Trigger der mit der Tür verbunden wurde bewegt sich nicht mit. Vielleicht weiß jemand warum.
Gruss
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Original von BadMan
Verstehe ich da jetzt was falsch?
Ich erstelle die Datei _door.gsc mit folgenden Inhalt
*Map-Kram an dieser Stelle*
Wieso muss da dann nochmal der Inhalt von meiner mp_meine map.gsc rein
Erstelle einfach die Datei und kopiere alles rein ausser die Zeile da oben und in dein zone File kommt die zeile:
rawfile,maps/mp/_door.gsc
Original von BadMan
In meine mp_meine Map.gsc füge ich maps\mp\_door::main(); ein womit ich die Datei _door.gsc öffne oder?
Ja
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Verni@hter: 14.03.2008 18:08.
|
|
|
|
|
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269
|
|
Original von OLD MAN WITH GUN
@Vernichter: Dass sich der trigger mit bewegt ist auch nicht vorgesehen
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
|
Mit ein wenig Überredungskunst (sprich ein paar Zeilen mehr) geht das auch.
Im obigen Script in der Funktion door_think() die folgenden grün gekennzeichneten Zeilen einfügen:
door_think()
{
self.doormoving = false;
self.doorclosed = true;
self.doormodel = getent(self.target, "targetname");
self enableLinkTo();
self linkto(self.doormodel);
while (1)
{
self waittill("trigger");
if(!self.doormoving)
self thread door_move();
}
}
Die zwei Zeilen kleben den Trigger an die Tür, worauf dieser sich dann mit der Tür mitbewegt.
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 17.03.2008 15:45.
|
|
|
|
|
|
Schau mal in den CoD2 Bereich, die Scripts funktionieren bei CoD4 genau so.
Türen zum Öffnen per Script
Nebenbei, bei mir zu Hause gehen die Türen nur in eine Richtung auf (wer baut schon überall Schwingtüren ein)
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
|
|
|
|
|
-tiger-
Steuerzahler
Dabei seit: 22.01.2008
Beiträge: 189
|
|
Und was genau funkz nicht, wird dir eine Fehlermeldung angezeigt oder geht die tür nicht auf. Ich nutze auch das CoD2-skript und musste bei einigen Türen den winkel ändern, zb. 90 > -90 oder umgekehrt.
__________________
Processor: Intel Core2 Quad Q6600 | Mainboard: ABIT IP35 | Grafikkarte: GeForce 9800 GTX | Arbeitsspeicher: 2 GB G-Skill | Netzteil: Be Quiet! Straight Power
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von -tiger-: 18.03.2008 18:07.
|
|
|
|
|
-tiger-
Steuerzahler
Dabei seit: 22.01.2008
Beiträge: 189
|
|
So ich war mal so frei und habe das skript für zwei Trigger erweitert und es getestet, es sollte funktionieren.
Code 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:
|
main()
{
//door1
door1_trigger1 = getentarray("door1_trigger_right","targetname");
for(i = 0; i < door1_trigger1.size; i++)
door1_trigger1[i] thread door1_think1();
door1_trigger2 = getentarray("door1_trigger_left","targetname");
for(i = 0; i < door1_trigger2.size; i++)
door1_trigger2[i] thread door1_think2();
}
//door1
door1_think1()
{
self.door1_moving1 = false;
self.door1_closed1 = true;
self.door1_model1 = getent(self.target, "targetname");
while (1)
{
self waittill("trigger");
if(!self.door1_moving1)
self thread door1_move1();
}
}
door1_move1()
{
self.door1_moving1 = true;
if(self.door1_closed1)
{
self.door1_model1 rotateyaw(90,2,1,1);
self.door1_model1 waittill("rotatedone");
self.door1_closed1 = false;
}
else
{
self.door1_model1 rotateyaw(-90,2,1,1);
self.door1_model1 waittill("rotatedone");
self.door1_closed1 = true;
}
self.door1_moving1 = false;
}
door1_think2()
{
self.door1_moving2 = false;
self.door1_closed2 = true;
self.door1_model2 = getent(self.target, "targetname");
while (1)
{
self waittill("trigger");
if(!self.door1_moving2)
self thread door1_move2();
}
}
door1_move2()
{
self.door1_moving2 = true;
if(self.door1_closed2)
{
self.door1_model2 rotateyaw(-90,2,1,1);
self.door1_model2 waittill("rotatedone");
self.door1_closed2 = false;
}
else
{
self.door1_model2 rotateyaw(90,2,1,1);
self.door1_model2 waittill("rotatedone");
self.door1_closed2 = true;
}
self.door1_moving2 = false;
} |
|
__________________
Processor: Intel Core2 Quad Q6600 | Mainboard: ABIT IP35 | Grafikkarte: GeForce 9800 GTX | Arbeitsspeicher: 2 GB G-Skill | Netzteil: Be Quiet! Straight Power
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von -tiger-: 24.03.2008 16:24.
|
|
|
|
|
-tiger-
Steuerzahler
Dabei seit: 22.01.2008
Beiträge: 189
|
|
Original von UF | Sorc
Also ich habe jetzt den Key: targetname gegeben und dem Value: door1_trigger_right bzw door1_trigger_left.
Bekomme aber folgenden Fehler:
http://www.bilder-space.de/show.php?file=g08LZs6lvZqep9o.jpg
http://www.bilder-space.de/show.php?file=Ps1vg1y3vCiUyGx.jpg
Das ist das Script von -tiger-.
Danke schonmal für eure Hilfe.
Gruß UF | Sorc
Komisch bei meinem test funkz es ohne Probleme, > rotateyaw(90,1,1,1); < das löst den fehler aus. ändere es mal überall in > 2,1,1 < Die erste Zahl ist die Gesamtzeit und die muss doppelt so groß sein wie die Bewegungszeit, zweite und dritte Zahl ist die Bewegungszeit. Das kann man ganz schnell im Texteditor ändern mit suchen ersetzen. Oder nimm das Skript ihr aus dem Tutorial, habe es aktualisiert.
Edit:
rotateyaw(90,2,1,1); die erste zahl (90) ist der Winkel, zweite zahl (2) ist die Bewegungszeit, dritte zahl (1) ist die Beschleunigung-Zeit und die letzte ist die Verlangsamung-Zeit.
__________________
Processor: Intel Core2 Quad Q6600 | Mainboard: ABIT IP35 | Grafikkarte: GeForce 9800 GTX | Arbeitsspeicher: 2 GB G-Skill | Netzteil: Be Quiet! Straight Power
Dieser Beitrag wurde 10 mal editiert, zum letzten Mal von -tiger-: 27.04.2008 16:56.
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|