AUFZUG (2 ETAGEN)
Autor: Fragpoint
Downloads: Beispielmap 33
Auf vielfachen Wunsch hin möchte ich heute ein etwas kompliziertes und langes Thema abarbeiten: Einen Aufzug mit GUI, der über zwei Stockwerke fährt.
Da unsere Map bereits sehr groß geworden ist und in den Arbeitsflächen aufgrund der vielen Linien fast nichts mehr zu erkennen ist, würde ich sagen, dass wir zunächst einmal alles ausblenden lassen, außer unseren Raum mit dem Pinky. Denn dort wird unser Aufzug platziert. Zunächst brauchen wir einen zweiten Raum, zu dem unser Lift fahren kann. Erstellt daher über dem Pinky-Raum einen weiteren.
Als nächstes setzen wir einen "func -> func_elevator" (eng. Aufzug). Momentan handelt es sich dabei noch um einen relativ „normalen“ Brush. Um daraus auch optisch einen Aufzug zu machen, drücken wir die N-Taste und klicken den Model-Button an:

Aus dem anschließend erscheinenden Fenster wählen wir als Model die Datei „base -> models -> mapobjects -> elevators -> elevator.lwo“ aus:

Vermutlich erscheint bei Euch kein Model, nachdem ihr auf OK geklickt habt. Wir müssen nämlich erst unsere Map speichern und anschließend neu laden (ist ein Bug). Nun sollte das Aufzug-Model korrekt dargestellt werden. Setzt dies nun an die gewünschte Startposition und baut von dort einen Aufzugsschacht zum zweiten Raum. Achtet darauf, dass keine Brushes in den Lift hineinragen. Die Öffnung für den Durchgang zum Lift sollte bei Grid 8 ca. 14 breit und 17 hoch sein. Dies kann bei Euch natürlich variieren.

Falls Ihr wollt, könnt Ihr dem Aufzug-Model noch ein anderes Aussehen (Textur) verpassen, indem Ihr die N-Taste und anschließend den Skin-Button drückt. Doch das ist für unser Beispiel nicht wichtig, weshalb wir darauf verzichten. Nun legen wir als nächstes noch fest, dass der Aufzug 8 Sekunden benötigen soll, um vom Raum 1 zum Raum 2 zu gelangen. Also schön langsam. Drückt dazu N und gebt folgendes ein:
move_time 8Als nächstes wollen wir dem relativ dummen Aufzug noch sagen, wo sein Startpunkt ist und wo er im 2. Stockwerk halten soll. Drückt dazu wieder die Taste N und nehmt den Befehl Origin in Augeschein, der bereits automatisch vom Radiant hinzugefügt wurde.

Damit dieser Wert korrekt angezeigt wird, müsst ihr das Aufzug-Model vorher abwählen und anschließend wieder markieren. Anschließend wird Euch der richtige Origin-Wert angezeigt. Fügt nun folgenden Befehl zum Aufzug hinzu:
floorpos_1 -320 -256 32Dabei handelt es sich um die Zahlenwerte des Origins und somit gleichzeitig um die Startposition des Aufzuges. Diese Werte können bei Euch natürlich anders sein wie bei mir. Lest die Zahlen deshalb besser aus Eurer Map ab. Dies gilt übrigens für alle Werte in diesem Tutorial!

Um nun seine „Endposition“ im nächsten Stockwerk festlegen zu können, verschieben wir das Aufzugmodel in die nächste Etage, wählen es kurz ab, markieren es wieder und lesen den Origin-Wert erneut ab. Gebt dem Aufzug nun einen weiteren Befehl, nämlich
floorpos_2 -320 -256 544Wie ihr seht, hat sich die dritte der drei Zahlen verändert, da diese für die Höhe zuständig ist.

Jetzt steht auch unser Endpunkt fest. Den Aufzug können wir nun wieder nach unten zu seinem Startpunkt setzen. Allerdings funktioniert der Aufzug trotzdem noch nicht so richtig. Das liegt daran, dass wir auch dem Aufzug-Model selbst noch ein GUI … oder besser gesagt zwei GUI´s zuordnen müssen. Und zwar handelt es sich hierbei um die beiden nachfolgenden Platzhalter:

Auch auf diesen sollen später Displays zu sehen sein. Kümmern wir uns dabei erst einmal um das Haupt-GUI (GUI1). Dieses ist ebenfalls für die Steuerung des Aufzuges zuständig. Hierüber könnt Ihr bestimmen zu welcher Etage es gehen soll.
Drückt dazu die Taste N – vorher den Aufzug natürlich markieren – und klickt den GUI-Button an. Wählt dort nun das GUI „base -> guis -> doors -> elevator2floor.gui“ aus.

Anschließend benötigen wir noch das Neben-GUI (GUI2), das für die Anzeige des Stockwerkes über der Türe zuständig ist. Dies können wir allerdings nicht so einfach über den GUI-Button auswählen, da dann unser Haupt-GUI ersetzt werden würde. Deshalb nehmen wir den Eintrag manuell vor. Tragt dazu folgendes ein:
gui2 guis/doors/elevatortop.gui Wie ihr seht, befindet es sich im gleichen Verzeichnis. Den Verzeichnispfad zu dieser Datei könnt Ihr ermitteln, indem ihr ein neues Model erstellt, diesem ein GUI zuordnet und dann dort den Verzeichnispfad ablest. Dieses "Fake"-Model könnt ihr dann anschließend wieder löschen, da wir es nur zum Ermitteln des Verzeichnispfades benötigt haben. Jetzt müssen wir dem Aufzug bzw. dessen GUI´s noch einige Befehle erteilen.
Zeigt das aktuelle Stockwerk an.
gui_parm2 1Hier wird der Name des oberen Stockwerks angegeben, der auf dem Display im Aufzug erscheint. Wir verwenden hierfür einfach Stockwerk2.
gui_parm3 Stockwerk2Hier wird der Name des unteren Stockwerks angegeben, der auf dem Display im Aufzug erscheint. Wir verwenden hierfür einfach Stockwerk1.
gui_parm4 Stockwerk1Als nächstes benötigen wir ein Bedienpult, über das wir unseren Aufzug rufen können, falls er gerade nicht auf unserer Etage ist. Erstellt dazu wieder ein func_static und ordnet diesem das Model „base -> models -> mapobjects -> guiobjects -> techdrpanel1 -> techdrpanel1.lwo“ zu

Damit dieses korrekt angezeigt wird, gilt auch hier wieder: Speichern und Map neu laden. Jetzt müssen wir dem Bedienpult noch eine passendes GUI zuweisen (vgl. Tür mit Zahlencode). Dazu drücken wir wieder die N-Taste und klicken den GUI-Button an. Dort wählen wir nun „base -> guis -> doors -> elevator_call.gui“ aus. Dieses Teil hat gleich das passende Aussehen für Aufzüge über zwei Stockwerke.

Damit das Bedienpult auch weiß, dass es mit dem Aufzug zusammenarbeiten soll, verbinden wir die beiden über die Taste Strg-K (vom Bedienpult zum Aufzug).

Nun müssen wir auch dem Bedienpult wieder einige Befehle erteilen, damit es weiß, was zu machen ist. Wer sich das Tutorial über die Türe mit Zahlen-Code noch nicht angeschaut hat, sollte das jetzt tun.
Zeigt auf dem Display an, auf welcher Etage man sich gerade befindet. Dabei handelt es sich um die große Zahl in der rechten oberen Hälfte. Wir befinden uns momentan auf Etage 1, also benötigen wir hier auch eine 1.
gui_parm1 1Gibt an, auf welchem Stockwerk sich der Aufzug zu Beginn - also bevor er gerufen wird - befindet.
gui_parm2 1Hier wird der Name des oberen Stockwerks angegeben, der auf dem Display erscheint. Wir verwenden hierfür einfach Stockwerk2.
gui_parm3 Stockwerk2Hier wird der Name des unteren Stockwerks angegeben, der auf dem Display erscheint. Wir verwenden hierfür einfach Stockwerk1.
gui_parm4 Stockwerk1Diese Funktion ist mir unbekannt, ist aber für den Fahrstuhl notwendig. Soweit ich das aus der Beschreibung des GUI entnehmen konnte, muss es verwendet werden, wenn man dem Aufzug keine Fehlfunktion zuweisen will.
gui_parm5 0
Da wir auch beim anderen Stockwerk ein Bedienpult brauchen – wir wollen ihn von oben ja auch rufen können – kopieren wir das GUI (Bedienpult) über Strg-C und fügen es über Strg-V wieder ein. Anschließend platziert Ihr es im 2. Stockwerk. Die Verbindung zum Aufzug wurde durch das Kopieren leider aufgehoben, so dass wir dem neuen GUI wieder klar machen müssen, dass es mit dem Aufzug zusammenarbeiten muss. ACHTUNG! Ihr dürft jetzt nicht mit Strg-K zum Verbinden arbeiten! Aus irgendeinem Grund funktioniert sonst die Steuerung des Aufzuges nicht richtig. Drückt stattdessen lieber die N-Taste und ändert beim Befehl target den Wert (VAL). Dieser Wert ist der Name unseres Aufzuges, in unserem Fall also func_elevator_1.

Nun müssen wir noch einen Wert des neuen GUI verändern. Es handelt sich dabei um die Anzeige des aktuellen Stockwerkes. Würden wir hier nichts ändern, würde auf dem Display eine große 1 (für Etage 1) angezeigt werden, obwohl wir uns im 2. Stockwerk befinden.
gui_parm1 2
Das war es (eigentlich) auch schon wieder. In Eurem Aufzug wird es jetzt noch etwas dunkel sein, deshalb könnt Ihr wieder ein Licht (light) reinsetzen und dieses per bind-Befehl beim Aufzug mitfahren lassen. Wer noch eine schicke Türe haben möchte, die zusammen mit dem Aufzug hochfährt, sollte aber noch weiterlesen.
Wir setzen dazu eine Aufzugtüre über "func -> func_door" und wählen über den Model-Button "models -> mapobjects -> elevators -> elevator_door.lwo" aus.

Anschließend positionieren wir die Tür in die Öffnung des Aufzuges, kopieren sie und drehen die zweite Tür über einen der Dreh-Buttons. Diese befinden sich rechts neben dem Save-Button.

Wie wir bereits gelernt haben, müssen wir den Türen noch sagen, dass sie zusammen öffnen sollen. Gebt dazu bei beiden folgenden Befehle ein:
team aufzugtuer1 Anschließend legen wir noch die Öffnungsrichtung für die linke Tür fest. In meiner Map wäre das
movedir 90 Dann noch für die rechte Tür:
movedir 270Bei Euch können sich hier natürlich andere Werte ergeben. Sollten wir jetzt die Map testen, würde die Türen aufgehen, sobald der Spieler sie berührt. Das darf aber nicht der Fall sein. Stattdessen wäre es sinnvoll, wenn sich diese erst öffnen, wenn der Aufzug angekommen ist. Dazu müssen wir zunächst eingeben, dass die Türen auf Berührungen des Spielers nicht reagieren. Tragt daher bei beiden Türen folgendes ein:
no_touch 1 Damit dann auch noch ein Sound ertönt, der darauf hinweist, dass die Tür verschlossen ist, tragen wir noch bei beiden folgendes ein:
locked 1 So, das waren die Eintragungen für die Tür. Schauen wir sie uns noch einmal vollständig anhand der linken Tür an:

Nun muss der Aufzug aber noch wissen, dass er diese Türen mitnehmen muss, wenn er nach oben fährt. Denn sonst würden diese unten stehen bleiben. Tragt dazu beim Aufzug folgendes ein:
innerdoor func_door_5541
Aber was hat das zu bedeuten? Nun innerdoor sagt dem Aufzug, dass er mit einer bestimmten Tür zusammenarbeiten muss, die er auch mitnehmen muss. Welche Tür das ist, wird ihm durch func_door_5541 gesagt. Das ist nämlich der Name (name) einer der beiden Türen. Die andere folgt automatisch, da sich diese in einem Team befinden.
Auch jetzt könnte man schon wieder sagen, dass das Tutorial zu Ende ist. Allerdings haben wir noch den unschönen Effekt, dass - wenn der Aufzug nach oben gefahren ist - ein zweiter Spieler in den Schacht stürzen könnte. Deshalb müssen wir noch zwei feste Außentüren auf jedem Geschoss anbringen.
Macht dazu wieder einen Rechtsklick und erstellt ein "func -> func_door". Weist diesem das Model "models -> mapobjects -> doors -> delelev -> delelevlf.lwo" zu.

Kopiert die Tür und setzt die beiden Hälften so passgenau, wie wir dies bereits bei der Fahrstuhltür getan haben. Es kann sein, dass Ihr - so wie ich - evtl. noch die eine oder andere Lücke zur Wand hin schließen müsst. Fügt den Türen nun wieder die jeweilige Öffnungsrichtung (movedir) und den Team-Key (aussentuer1) hinzu, so dass sie gemeinsam aufgehen. Auch sollte hier der Befehl no_touch nicht vergessen werden, damit sich die Tür nicht bei der Berührung durch den Spieler öffnet.

Markier nun beide Türen, kopiert sie (Strg + C) und fügt sie (Strg + V) im 2. Stockwerk wieder ein. Ändert nun bei beiden Türen den Team-Key. In unserem Fall würden wir einfach aussentuer2 eintragen.

Nun müssen wir dem Aufzug noch sagen, dass er auch mit diesen beiden Türen zusammenarbeiten soll. Tragt dazu folgende Befehle beim Lift ein:
floorDoor_1 func_door_5543
floorDoor_2 func_door_5545
Die Befehle floorDoor_1 und floorDoor_2 sagen dem Aufzug, dass es sich um die Außentüren auf Stockwerk 1 und 2 handelt. Wie diese Türen genau heißen, kann man bei diesen direkt ablesen (name). Es genügt, immer nur einen Tür-Namen je Stockwerk beim Aufzug einzutragen, da die Türen jedes Stockwerks im Team arbeiten und sowieso gemeinsam aufgehen werden.

Boah, was für ein Stück Arbeit :ugly: Leider hat unser Aufzug immer noch einen kleinen Schönheitsfehler: Die Aufzugtüren sind zu Spielbeginn immer kurz offen. Das lösen wir aufgrund eines Tipps von John McFo ganz einfach, indem wir beim Aufzug (func_elevator) folgenden Befehl eintragen:
floor 2 Dies gibt an, dass der Aufzug auf der Etage 2 starten bzw. warten soll, er kann also nicht aus versehen die Türen der Etage 1 "triggern". Somit werden diese auch nicht ausgelöst und bleiben beim Mapstart verschlossen, denn der Aufzug steht auf Stockwerk 2 und kommt so mit den Türen auf Stockwerk 1 nicht in Berührung.