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.
|
|
|
|
|
|
Sorkan
Teetrinker
Dabei seit: 18.01.2006
Beiträge: 30
|
|
Original von Verni@hter
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
Da er (der Compiler) mich nie beim kompilieren nach der fehlenden _door.gsc gefragt hat, hab ichs so wie im Zitat erwähnt einfach selbst in die Zone-File geschrieben. Danach hatte es auch in der Map (aus dem Compiler gestartet) geklappt. Denke daher, dass er die gsc irgendwie nicht mitkompilieren will. Wenn ich den Eintrag wieder aus der zone-file rausnehme, meckert er nicht rum, dass die _door.gsc fehlt beim bilden der ff Dateien. Habe auch schon die d3dbsp Datei gelöscht und neu kompiliert. Immer das Gleiche, er fragt dann nicht nach der fehlenden _door...
Ich hab zwar schon in den einschlägigen Foren die Script-Sachen gelesen und teils verstanden, aber Grundkenntnisse fehlen da dann doch noch.
Das Skript darf, soweit ich gelesen habe, nicht in die iwd eben weil es ja mitkompiliert wird, soweit ich gelesen habe.
Inahlt meiner map.gsc: (liegt unter map_source, richtig?)
main()
{
maps\mp\_door::main();
maps\mp\_load::main();
ambientPlay("ambient_mhz_aim");
game["allies"] = "american";
game["axis"] = "german";
game["attackers"] = "allies";
game["defenders"] = "axis";
}
Hab die gleiche map.gsc unter raw\maps\mp gefunden, da stand das drin:
(Der grüne Teil hatte dort gefehlt und ich hab ihn dazu getragen)
main ()
{
maps\mp\_door::main();
maps\mp\_load::main();
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
}
Tja, wie schon erwähnt: Aus dem Compile-Tool heraus gehts alles, nur nicht unter dem ace-mod.
Habe die anderen Foren durschucht und nix gescheites gefunden, mir is schon ganz übel vom vielen gescrolle...
Zum Problem, dass ich immer im halben Fußboden spawne, wenn ich die Map unter dem Mod warefare laufen lassen will habe ich eine Parallele zum Radianten festgestellt. Er spawnt nämlich genau auf der Höhe, wie ich im Radianten starte.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Sorkan: 22.05.2008 11:53.
|
|
|
|
|
| |
| |
|
|
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
|