Hi,
heute zeige ich euch, wie ihr einen Aufzug mit mehreren Stockwerken und selbst wählbarem Stockwerk erstellt. Zusätzlich habe ich noch eine Leiter eingebaut, damit man den Aufzug auch von anderen Stockwerken holen kann.
Entities:
1x logic_compare
X-mal func_button (In meinem Beispiel 8 - 4 die den Aufzug holen, 4 die das Stockwerk steuern.)
1x func_tracktrain
X-mal path_track (In meinem Beispiel 4 - pro Stock eines)
X-mal func_door (In meinem Beispiel 10 - 2 Aufzugtür und 8 Sicherheitstüren)
Erstellt euch einen Aufzug nach euren Vorstellungen und macht einen func_tracktrain daraus. Ich habe ihn train_aufzug genannt.
Folgende Einstellungen sind entscheidend oder können verstellt werden:
First Stop Target ist der erste path_track, den der Aufzug anfahren soll. Bei mir erdgeschoss.
Max Speed ist die Geschwindigkeit des Aufzuges gemessen in Unit/Sekunde.
Height above track ist die Höhe, die der Aufzug über das path_track fahren soll. Bei mir ist es genau auf 0 ausgerichtet, deswegen der Wert 0. (Ausrichten zeige ich euch.)
No Pitch ist die Drehung. Der Aufzug soll sich ja beim Fahren nicht drehen.
No User Control ist die Steuerung. Der Aufzug lässt sich nicht von einem anderen Ort aus steuern.
Damage on Crush ist der Schaden, der aktiviert wird, wenn der Aufzug von einem Spieler geblockt wird. (In meinem Beispiel habe ich Sicherheitstüren, also ist es nicht notwendig.)
Setzt nun entsprechend eure path_tracks ungefähr an die Stelle, an die sie später hinsollen oder richtet ihn manuell aus und benennt diese entsprechend. In meinem Beispiel erdgeschoss, stock1, stock2, stock3. Setzt jedem entsprechend als Next Stop Target den nachfolgenden. Mehr braucht ihr nicht einzustellen.
Tipp für schnelle path_tracks:
Spoiler:
Tipp zum Ausrichten:
Spoiler:
Habt ihr alles ausgerichtet und soweit eingestellt, machen wir mit der Aufzugstür weiter. Hier habe ich ein func_door verwendet und sie aufzugdoor_1 genannt. Da eine Aufzugstür bekanntlich beidseitig aufgeht sind es 2 func_door. Hier müsst ihr lediglich folgende Einstellungen beachten. Es sollte aber durch die Anfänger-Tutorials bekannt sein.
Parent: Hier tragt ihr den Namen des func_tracktrain ein, da ja eine Aufzugtür immer am Aufzug dran ist.
Lip: Hier stellt ihr die Überlappung ein.
Delay before reset: Hier stellt ihr die Zeit ein, nach welcher die Tür wieder automatisch schließt. (-1 ist stehenbleiben)
Move Direction: Hier stellt ihr die Richtung ein.
So jetzt braucht unser Aufzug und die jeweiligen Stockwerke noch Knöpfe, um den Aufzug zu steuern.
Die Knöpfe in den jeweiligen Stockwerken habe ich get_train0 ... get_train3 genannt.
Die Knöpfe im Aufzug but_erdgeschoss, but_stock1 ... but_stock3.
Erstellt je einen Button pro Stockwerk und in dem Aufzug je einen Button für je ein Stockwerk.
Bei jedem Button bei Flags den Haken von Don´t move und Use Activates aktivieren.
Bei den Buttons im Aufzug stellt folgendes noch mit ein: (WICHTIG)
Jetzt wäre unser Aufzug schon fast fahrbereit. Er braucht lediglich nur noch den Befehl, dass er starten soll. Dies bewerkstelligen wir mit dem logic_compare.
Initial Value: In meinem Tutorial benennt es lediglich den Startpunkt.
Compare Value: Ist die Funktion, welche überprüft, ob unsere Werte diesem Value entsprechen und führt so in unserem Beispiel die Outputs OnEqualTo, OnGreaterThan oder OnLessThan aus.
OnEqualTo: Wird geschalten, wenn der Ist-Wert dem Soll-Wert entspricht.
OnGreaterThan: Wird geschalten, wenn der Ist-Wert größer ist, als der Soll-Wert.
OnLessThan: Wird geschalten, wenn der Ist-Wert kleiner ist, als der Soll-Wert.
Die Outputs in dem rot eingerahmten Kästchen sind für mich theoretische wichtig.
Warum?
Wenn ich mir vorstelle, das eure Map im Multiplayer gespielt wird und ein Spieler im Aufzug ist und in den dritten Stock fährt und ein anderer Spieler im zweiten Stock auf den Knopf drückt, damit der Aufzug kommt, würde der Aufzug theoretisch gesehen statt in den dritten Stock in den zweiten Stock fahren. Deswegen habe ich hier alle Buttons "entsperrt" und in jedem Button die anderen Buttons gesperrt. (Später in den Outputs der Buttons zu sehen.)
Jetzt muss der Aufzug nur wissen, wo er sich im Moment befindet und Wo er hinsoll.
Zu dem Wo er sich befindet:
Hierzu tragt ihr in allen path_tracks folgende Outputs ein.
Für jeden Stock braucht ihr einen anderen Wert bei SetValue.
Bei mir:
erdgeschoss: Value 0
stock1 ... stock3: Value 1 ... Value 3
SetValue: Unser Wert, den das path_track hat und welches von dem logic_compare gelesen wird.
Compare: Hier wird geprüft wo sich der Aufzug befindet und je nach Lage werden dann die Outputs OnEqualTo, OnGreaterThan oder OnLessThan aktiviert.
So funktioniert das mit dem Größer, Kleiner oder enspricht:
Angenommen wir sind in Stockwerk 1. Wir wollen in den 3. Stock. Wir drücken also den Knopf für den 3.Stock. Jetzt bekommt das logic_compare ein neues Value zugeschickt und soll danach prüfen, wo es sich im Moment befindet. Es merkt, dass der Wert der gesendet wurde größer ist, als der Wert, den es im Moment hat. Jetzt aktiviert es den Output OnGreaterThan. Der Aufzug wird in Bewegung gesetzt und startet wie in unserem Output bestimmt Vorwärts zum nächsten path_track. Dort wird erneut geprüft, ob der Wert der gefordert ist erreicht ist. Da dieser nicht erreicht ist, fährt er weiter. Im dritten Stock wird das nächste path_track angesprochen und sagt, "du bist jetzt im 3. Stock". Das logic_compare hat den Wert erreicht und deaktiviert nun den Output OnGreaterThan und aktiviert den Output OnEqualTo. Durch diesen Output wird jetzt unser Befehl an den Aufzug weitergegeben, dass er stoppen soll.
WICHTIG: Vergesst bei dem Compare das Delay von 0.01 Sekunden nicht. Es ist wichtig, da die Value als erstes gesetzt wird und erst danach das logic_compare mit Compare prüfen soll.
Soviel nun zur Erläuterung, wie das logic_compare erkennt, wo es sich befindet und wo es hin soll.
Die Buttons außerhalb habe ich get_train0 ... get_train3 genannt.
train0 = erdgeschoss
train1 = Stockwerk 1 usw.
Jetzt noch zu den Outputs der jeweiligen Buttons.
Das Delay von 2 und 2.01 Sekunden ist lediglich die Zeitspanne, in der die Türen sich schließen. (Nur Optik)
Die Outputs secure_door0 ... secure_door3 könnt ihr weglassen. Diese sind nur für eine Sicherheitstür gedacht, damit man nicht unter bzw. über dem Aufzug sein kann, um diesen zu blocken oder runterzufallen.
WICHTIG: Passt auf, dass ihr SetCompareValue nehmt nicht SetValueCompare.
but_erdgeschoss:
but_stock1:
but_stock2:
but_stock3:
get_train0:
get_train1:
get_train2:
get_train3:
Jetzt ist der Aufzug vollkommen betriebsbereit und funktioniert.
Für die die Sicherheitstüren oder eine "realistische Tür" haben wollen:
Sicherheitstüren:
Spoiler:
Realistische Tür:
Spoiler:
Lesezeichen