Zordiac
@CCL_DESTROYER
Danke!
In UO war es einfach mit func_door_rotating dann nur rechts und links von der Tür einen trigger_multiple für die Sound Steuerung.
Und fertig.
CCL_DESTROYER
hab noch ne verbesserung zu meinem tut...
-beispiel 2x trigger:
[quote]door()
{
door = getent ("door","targetname");
door_trigger_left = getent ("door_trigger_left","targetname");
door_trigger_right = getent ("door_trigger_right","targetname");
while (1)
{
door_trigger_left waittill ("trigger");
door rotateyaw (-90,2);
door waittill ("rotatedone");
wait 5;
door rotateyaw (90,2);
door waittill ("rotatedone");
door_trigger_right waittill ("trigger");
door rotateyaw (90,2);
door waittill ("rotatedone");
wait 5;
door rotateyaw (-90,2);
door waittill ("rotatedone");
}
}
hatte
door_trigger_left = getent ("door_trigger_left","targetname");
door_trigger_left = getent ("door_trigger_right","targetname");
geschrieben ist natürlich falsch...
yoda
Ok, Leute, ich blick da absolut nicht mehr durch jetzt...
Tut mir beide den Gefallen und postet noch mal das jeweils komplette richtige Script, wie es in die cfg gehört, dann ändere ich das entsprechend ab...
CCL_DESTROYER
Original von CCL_DESTROYER
hab noch ne verbesserung zu meinem tut...
-beispiel 2x trigger:
[quote]door()
{
door = getent ("door","targetname");
door_trigger_left = getent ("door_trigger_left","targetname");
door_trigger_right = getent ("door_trigger_right","targetname");
while (1)
{
door_trigger_left waittill ("trigger");
door rotateyaw (-90,2);
door waittill ("rotatedone");
wait 5;
door rotateyaw (90,2);
door waittill ("rotatedone");
door_trigger_right waittill ("trigger");
door rotateyaw (90,2);
door waittill ("rotatedone");
wait 5;
door rotateyaw (-90,2);
door waittill ("rotatedone");
}
}
hatte
door_trigger_left = getent ("door_trigger_left","targetname");
door_trigger_left = getent ("door_trigger_right","targetname");
geschrieben ist natürlich falsch...
ist das einzige was noch angepasst werden muss;-)
eidt: in der beispielmap ist es richtig
Zordiac
door()
{
door = getent ("door","targetname");
doortrigger = getent ("doortrig","targetname");
while (1)
{
doortrigger waittill ("trigger");
door rotateyaw (90,1.3);
door playsound ("dooropen");
door waittill ("rotatedone");
{
doortrigger waittill ("trigger");
door rotateyaw (-90,1.3);
door playsound ("doorclose");
door waittill ("rotatedone");
}
}
self thread door();
return;
}
Das rote ist im Script wichtig, sonst kann man die Tür nur einmal öffnen und schließen.
CCL_DESTROYER
Original von Zordiac
...
self thread door();
return;
}
Das rote ist im Script wichtig, sonst kann man die Tür nur einmal öffnen und schließen.
stimmt man bin ich doof o_O
sorry yoda dann musste nochhmal anpassen.
-beispiel 1xtrigger:
main()
{
thread door();
}
door()
{
door = getent ("door","targetname");
doortrigger = getent ("doortrigger","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 2x trigger:
door()
{
door = getent ("door","targetname");
door_trigger_left = getent ("door_trigger_left","targetname");
door_trigger_left = getent ("door_trigger_right","targetname");
while (1)
{
door_trigger_left waittill ("trigger");
door rotateyaw (-90,2);
door waittill ("rotatedone");
wait 5;
door rotateyaw (90,2);
door waittill ("rotatedone");
door_trigger_right waittill ("trigger");
door rotateyaw (90,2);
door waittill ("rotatedone");
wait 5;
door rotateyaw (-90,2);
door waittill ("rotatedone");
}
self thread door();
return;
}
sorry nochmal-.-
(man könnte die tür unendlich oft öffnen jedoch müsste man die trigger jedesmal abwechselnd benutzen)
so jetzt glaub ich ist aber alles richtig...
ich noch schnell ne verbesserung der beispiel datei gemacht:
http://ccldestroyer.cc.funpic.de/cod2-do...el_reloaded.zip
edit: geht immernoch nicht, ich muss das script noch etwas umschreiben-.-
er führt den block der reihe nach aus, das heist wenn er beim 1 trigger steht muss dieser zuerst ausgeführt werden damit er zum 2. funktioniert-.-
wie kann ich bestimmen dass es egal ist welcher zuerst gedrückt wird, so das beide trigger gleichzeitig funktionieren?
yoda
Ihr macht mich alle...
Sagt mir Bescheid, wenn ihr es raus habt und stellt mir dann bitte eine komplette Version hier rein, die ich dann einfach übernehmen kann...
Zordiac
Die Macht stark in ihm ist!
@Yoda
meins ist in Ordnung
CCL_DESTROYER
ja hab ich ja auch nicht gesagt, meins mit 1x trigger geht auch aber ich will ne tür die inbeide richtungen zu öffnen ist...
ich tüfftel grad an was mit variablen und so, werd bescheid sagen wenn ich's raus hab ( oder wenn ich aufgegeben habe

)
yoda
Jep, aber Deins basiert ja auf CCL´s bzw. gilt ans Zusatzangabe oder hab ich das falsch verstanden?
CCL_DESTROYER
hm.. soweit ich weiss basiert das cod2-scripting auf c++

.
ist ja egal was worauf basiert, ich glaube aber das zordiac mehr vom scripting versteht als ich.
ich hab die lösung für eine tür die sich beidseitig öffnen lässt.
eins vorab:
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;
}
}
}
ich werd's später etwas näher erklären, muss jetzt offline gehn->gewitter
bis dann
edit: sollte sich auch wieder mit zordiac's version ergänzen lassen
Zordiac
@Yoda
Mein Script basiert auf einem Schiebetürscript von Leveldesigner.de.
etwas abgeändert anstatt movex () hab ich rotateyaw benutzt.
Ursprünglich sind wohl alle Scripts in denen Bewegungen formuliert werden ähnlich. Sie basieren halt auf Quake-C (eine vereinfachte Variante von C++)
Ich bin aber auch kein Crack was das angeht. Man lernt halt viel durch probieren, nachlesen und nochmal probieren.
PS: ist aber richtig. Mein Script sollte nur als Ergänzung zu CLL_DESTROYER seinem Tür-script gelten. (Für das Tut halt)
@CLL
Das Script gefällt mir an sich schon. Ist aber etwas umständlich, wenn man viele Türen in der Map hat. Die dann auchnoch unterschiedliche Sounds haben sollen. Dazu kommt, dass, wenn ich zu Hause meine Tür auf mache, geht sie nur in eine Richtung auf

. Ich habe keine Schwenktür die in beide Richtungen öffnet

. Nichts desto Trotz eine gute Arbeit.
CCL_DESTROYER
-beispiel 1xtrigger:
main()
{
thread door();
}
door()
{
door = getent ("door","targetname");
doortrigger = getent ("doortrigger","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 2x 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;
}
}
}
so muss das jetzt im tut angepasst werden oder du wartest bis morgen, ich werde dann noch erklärung machen, jetzt schon wieder gewitter.
neue beispielmap:
http://ccldestroyer.cc.funpic.de/cod2-do...l_reloaded2.zip
yoda
Ok, hab es nochmal gewagt...
Türen zum Öffnen per Script
Hab auch die Download-Links beide aktualisiert - schaut bitte beide noch mal drüber und sagt Bescheid, was noch angepasst werden muss, aber so, daß ich euch verstehe...
PaRa
hallo jungs, ich verfolge mit begeisterung diesen thread und bin heilfroh das jemand die lösung gefunden hat wie die ollen türen sich wieder per player öffnen lassen....vielen dank dafür....nun zu meinem kleinen prob / oder frage:
ich möchte gerne folgendes erreichen bin aber ein echter anfänger in scripting, vielleicht kann mir einer helfen...
also..
ich möchte gerne, das die türen nicht nach 5 sekunden zu gehen, sondern sich öffnen und schliessen lassen und dann in dem jeweiligen zustand bleiben, so wie in der realität...die eine ergänzung macht das ja auch, aber irgendwie nur in eine richtung, wenn ich also in dem raum bin , komme ich nicht mehr raus,....wie stelle ich das am besten an, wenn ich den trigger brush durch die türe auf beiden seiten mache geht sie gar nicht mehr auf...wenn ich auf jeder seite der tür einen trigger damit mache, dann dreht sich die türe bei jedem öffnen um 90 grad immer im kreis....ich steig da langsam nicht mehr durch und brauche hilfe....
greetingZ
PaRa
Zordiac
Mache es wie in meiner Ergänzung.
Ich habe nur einen Trigger eingebaut. Den habe ich nur 1 Welteinheit hoch und breit gemacht und neben der Tür in Schloßhöhe angebracht.
In der Wand hab ich ein Loch gemacht auch nur 1 Welteinheit groß, da passt der Trigger genau rein. Den Trigger kannst Du noch etwas länger machen, sodass er an beiden Seiten ein Stück rausguckt. (höhrt sich etwas schmierig an

, ist es aber nicht)
Jetzt kannst Du den Trigger von beiden Seiten benutzen.
Es gibt noch eine andere Möglichkeit, in dem man etwas mit arrays scriptet, dass würde allerdings den Rahmen sprengen.
Ich möchte es für euch etwas einfacher halten.
PaRa
kannste mal nen screenshot von der ansicht im editor für den trigger der durch die wand geht machen für mich ?
gruss
PaRa
Verni@hter
Da ihr hier mehr Ahnung habt als ich will ich mal so in die Runde fragen, ich wollt ne Bunkerklappe bauen hab alles nach eurem Script gemacht nur nicht als Tür sondern als Klappe nur dreht sich die klappe auf dem Boden jetzt hin und her sie soll aber von unten nach oben aufgehen so das man sie mit "F" öffnen kann. Es müsste also so sein, ich komme zur Klappe ich muss sie mit "F" öffnen ich gehe in den Bunker die Klappe schließt sich von allein nach 5 sek. und wenn ich wieder raus will steige ich die Leiter nach oben und muss wieder "F" drücken um sie wieder zu öffnen. Wie müsste denn da das Script ausschauen ich blicke hier nähmlich nicht mehr durch bei den ganzen Scripten???
CCL_DESTROYER
@energun222:
du musst nur jeweils den befehl "door rotateyaw (-90,2);" auf die entsprechende achse anpassen mit entweder "door rotateroll (-90,2);" oder "door rotatepitch (-90,2);"
@para:
dein "problem" ist schon etwas komplexer, aber lösbar.
ich schlag mich gerade mit sounds rum, wenn ich damit fertig bin werde ich mal versuchen das script so anzupassen dass es deine gewollte funktion erfüllt
bis dann