Original von CCL_DESTROYER
Hallihallo,
hier ist dann jetzt das gewünschte Tutorial + Beispielmap
Sorry, dass es etwas länger gedauert hat, aber mein PC hat gesponnen -> Neuinstallation -.-
Wie auch immer, hier ist es:
---
Öffenbare Türen
Zuerst machen wir mal eine Tür:
Dazu ziehen wir einfach einen Brush und packen eine Türen-Textur drauf (die Seiten mit ner Holz-Textur verzieren).
Dann brauchen wir eine Achse, also die "Scharniere" in der die Tür sich nachher öffnen soll - dazu ziehen wir wieder einmal einen Brush, der ungefähr
4x4x[Höhe der Tür] groß ist und packen die Textur "
Origin" drauf (ist bei den Tools-Texturen zu finden).
Jetzt markieren wir den "Origin" und den Tür-Brush, Rechte Maustaste in der 2d-Ansicht und dann
script ->
brushmodel.
Nun drücken wir bei markiertem Brushmodel die Taste
N und geben bei
Key ->"
targetname" und bei
Value "
door" (der ist frei bestimmbar,
muss aber nachher in der
gsc richtig angepasst werden) ein.
Als nächstes brauchen wir noch den Auslöser, hierzu stehen uns mehrere Varianten zur Verfügung:
-
trigger_use (Tür mit "
F" ( = Benutzen) öffnen)
-
trigger_use_touch (sollte eigentlich beim Berühren öffnen - hat bei mir aber nicht gefunzt, dafür habe ich den
trigger_radius genommen, ist zwar rund, erfüllt aber seine Arbeit genau so gut)
-
trigger_radius (gleiche Funktion, die
use_touch haben sollte)
-
trigger_damage (Tür öffnet sich beim Drauf-Schiessen)
Nun kann man zwei "trigger" benutzen, um die Tür in beide Richtungen zu öffnen, oder aber nur einen, um die Tür nur in eine Richtung öffenbar zu machen.
Ihm/ihnen geben wir den "
targetname" "
door_trigger" (oder "
door_trigger_left" und "
door_trigger_right" wenn wir zwei benutzen).
Dann gehts an's Script:
in der
mp_meinemap.gsc fügen wir folgendes ein:
maps\mp\mp_meinemap_door::main();
(
muss an den Map-Namen angepasst werden)
Dann erstellen wir eine neue [color=darkblue]gsc und nennen sie
mp_meinemap_door.gsc
Hierein kommt das eigentliche Script:
Beispiel 1 x "trigger":
main()
{
thread door();
}
door()
{
door = getent ("door","targetname");
doortrigger = getent ("door_trigger","targetname");//wir sagen dem script die namen der tür und des/der trigger
while (1) //begin der funktion
{
doortrigger waittill ("trigger");//wenn der trigger ausglöst wird...
door rotateyaw (90,2);//...dreht sich die tür um 90° in 2 sekunden
door waittill ("rotatedone");//trigger wartet bis die bewegung fertig ist
wait 5;//die tür bleibt 5 sekunden lang geöffnet
door rotateyaw (-90,2);//wir bewegen die tür wieder in die ausgangsposition zurück(-90°)
door waittill ("rotatedone");//trigger wartet bis die bewegung zu ende ist und ist danach wieder funktionstüchtig
}
self thread door();
return;
}
---
Beispiel 2 x "trigger":
main()
{
thread door1();
}
door1()
{
level.door1_open = false;
thread door1_trigger_right();
thread door1_trigger_left();
}
door1_trigger_right()
{
door1 = getent ("door1","targetname");
door1_trigger_right = getent ("door1_trigger_right","targetname");
while (1)
{
door1_trigger_right waittill ("trigger");
if (level.door1_open == true)
{
thread door1_trigger_left();
return;
}
else if (level.door1_open == false)
{
level.door1_open = true;
door1 rotateyaw (-90,2);
door1 waittill ("rotatedone");
wait 5;
door1 rotateyaw (90,2);
door1 waittill ("rotatedone");
level.door1_open = false;
thread door1_trigger_right();
thread door1_trigger_left();
return;
}
}
}
door1_trigger_left()
{
door1 = getent ("door1","targetname");
door1_trigger_left = getent ("door1_trigger_left","targetname");
while (1)
{
door1_trigger_left waittill ("trigger");
if (level.door1_open == true)
{
thread door1_trigger_right();
return;
}
else if (level.door1_open == false)
{
level.door1_open = true;
door1 rotateyaw (90,2);
door1 waittill ("rotatedone");
wait 5;
door1 rotateyaw (-90,2);
door1 waittill ("rotatedone");
level.door1_open = false;
thread door1_trigger_left();
thread door1_trigger_right();
return;
}
}
}
---
Das mit den zwei "triggern" funktioniert genau gleich wie mit einem - nur dass wir ihm sagen, dass, wenn der 1."trigger" betätigt wird, die Tür zuerst nach rechts und dann nach links bewegt wird und bei dem 2. "trigger" in der umgekehrten Reihenfolge.
So, das war's dann auch schon, ich hoffe, ich hab mich klar genug ausgedrückt, fall's nicht, könnt ihr euch die
testmap mal anschauen (auch wenn ihr alles kapiert habt schadet´s nicht
)
Download:
http://ccldestroyer.cc.funpic.de/cod2-do...l_reloaded2.zip
Alternativ:
Türenbeispiel.zip