Wer kennt nicht den alten Half-life1 Eintrag „target“, mit dem man mühsam immer nur ein bestimmtes Entitiy für eine bestimmte Aktion triggern konnte. Das sehr komplexe Input/Output System von Half-life² bietet sehr viel mehr Möglichkeiten. Mithilfe dieser Systeme können alle Entities in den unterschiedliche Situationen verschiedene Entities triggern. Fast jedes Entity hat zwei Möglichkeiten mit anderen Entities zu kommunizieren. Es kann ein Output versenden oder ein Input empfangen. Ein Entity sendet z.B ein Onkilled Output (was bedeutet dass das Entity „gekillt“ wurde) an ein anderes, das durch den Input eine bestimmte Sache ausführt.
Das ist natürlich nicht nur mit dem Kill-Beispiel möglich, sondern mit vielen anderen Sachen. Wer jetzt die alte Half-life Methode noch kennt, möge vielleicht das hier helfen: Ein trigger_once hat nicht mehr einfach ein target, wenn man in den trigger hineinläuft, sondern mehrere Outputs wie zum Beispiel OnStartTouch, OnTrigger oder OnEndTouch. Unter anderem werden durch diese Methoden die bekannten (und bei manchen sicherlich verhassten :D ) multi_manager nutzlos.
Outputs sind ausgehende Signale, die von einem Entity gesendet werden, sobald sich sein Zustand ändert. Das kann ein gedrückter Knopf sein oder eine Tür die sich gerade fertig geschlossen hat. In dem Outputs Tab kann man neue Outputs festlegen und sieht auch alle schon bestehenden Outputs
Drückt man auf add, fügt man einen neuen Output hinzu, aber ich denke das ist selbsterklärend. Bei dem neuen Output gibt es dann unten mehrere Einstellmöglichkeiten:
!player - Der Spieler selbst. !player für Singeplayer, Player für alle Spieler im Multiplayer!activator - Verlinkt auf das Entity, das den Output am ersten Entity ausgelöst hat.!caller - Verlinkt wieder auf das erste Entity, das die Outputs veranlasst hat.!self - Das Ziel ist das selbe Entity, in dem das Targetname angegeben wird!pvsplayer - Das Ziel ist das erste Entity, das in dem aktiven PVS gefunden wird.!speechtarget - Das Ziel ist ein Entity, das von dem Entity von dem der Output ausgeht, „angesehen“ wird.!picker - Das Ziel ist das Entity, das in diesem Moment vom Spieler angesehen wird. (Keine Non-Solid-Entities)laser) ausführen soll. Bei mir ist das TurnOn; somit wird der Laser aktiviert.
Wenn das Zielentity vorhanden ist, erscheint der Text schwarz, sollte es das Entity nicht geben, bleibt der Text rot. Sobald der Output vollständig ist, ist links unten so ein schwarzer Pfeil. Am Anfang ist dort noch ein roter Balken durchgezogen, weil der Output noch nicht funktionierte. Wenn dieser Balken verschwindet, wisst ihr, dass der Output richtig funktioniert. Übrigens kommt ihr mit einem Klick auf diesem Pfeil zu eurem Zielentity.
Bei dem Inputs Tab werden alle hereinkommende Signale angezeigt.
Mit einem Doppelklick auf den Eintrag springt man automatisch zu dem Entity, der den Output sendet (hier der trigger_once). Ist der Input rot angezeigt, funktioniert er nicht. Es gibt dann entweder den Output oder den Input nicht, deswegen gebt immer erst den Namen des Zielentities ein, und wählt dann den Eintrag aus.
Um zu überprüfen, ob alle Outputs/Inputs in Ordnung sind, drückt einfach mal alt+p, denn fehlerhafte Verbindungen werden dort angezeigt.
Auch innerhalb des Spiels gibt es Möglichkeiten, die I/O's zu überprüfen. Dafür gibt es einige Consolenbefehle:
ent_developer Befehl, allerdings stellt dieser Befehl die Verbindungen visuell dar. Dadurch bekommt der Benutzer ein besseres Bild.env_step-Befehl.ent_pause-Befehl benutzt wird, wird langsam nach und nach die Verbindungen durchgegangen. Der Benutzer kann mithilfe einer Ziffer hinter dem Befehl die Anzahl der Verbindungen, die auf einmal aufgebaut werden, bestimmtem (ent_step 2 → 2 Verbindungen auf einmal)!activator lässt sich zum Beispiel der Spieler, ein NPC, etc ansprechen, welcher eine Kiste zerstört. So könnte der Spieler oder NPC mit einem env_entity_igniter angezündet werden, sobald die Kiste zerbricht.