Community-Tutorials (Source)

Teleporter mit Zufallsziel (eleganter)

Teleporter mit Zufallsziel (eleganter)


Autor: DrSilence
Downloads: Beispielmap sdk_zufallsteleporter.rar

Beisp. Nr. 1: Oft kommt es vor das zwei oder mehr Spieler, gleichzeitig, in
einen Teleporter geraten -> das Ergebnis ist dann ein ärgerlicher Stuck (beide
Spieler stehen „ineinander“ und können sich nicht mehr bewegen).

Beisp. Nr. 2: Hat ein Portal und die Spieler sollen zufällig (an bestimmten
Positionen) auf der Map erscheinen.

Lösung: Ein Teleporter mit Zufallsziel

Um solch einen Teleporter zu erstellen gehen wir wie folgt vor:

1. Als erstes erstellen wir das erste Teleportziel, setze dazu ein Entity „info_teleport_destination“
in deiner Map (achte darauf das es mind. 1 Unit über dem Fußboden lieg, da sonst
die Player im Boden „feststecken“). Benenne den Teleporter mit einem eindeutigen
Namen wie „tele_ziel_01“

silence001.jpg
silence002.jpg

2. Erstelle auf diese weise noch so viele Teleporterziele wie du auf deiner Map
benötigst und benenne sie nach dem Schema „tele_ziel_NN“ (ersetze NN durch eine
Zahl Bsp. 01, 02 , 03 , …).

silence003.jpg

3. Erstelle nun einen Block mit der Textur „Trigger“ und mach es zu einem Entity
mit der Funktion „trigger_teleport“ und benenne es z.B. mit „DerTeleporter“.
Unter „Remote Destination“ trage das erste Teleporterziel „tele_ziel_01“ ein.

silence004.jpg

4. Als nächstes brauchen wir ein Entity das der HammerEditor normalerweise für
Counter-Strike:Source nicht kennt, aber sehr nützlich ist. Um es allerdings
trotzdem zu erstellen gehen wir wie folgt vor:

Erstelle ein Entity „Light“,

silence005.jpg

öffne das Eigenschaften-Fenster und tippe bei „Class:“ „ai_changetarget“ ein,

silence006.jpg

Klicke auf „Smart Edit“ und lösche alle vorhandenen „Keyvalues“,
Jetzt benennen wir das Entity, dazu erstelle mit „Add“ einen neuen Key „targetname“
mit dem Value „changetarget_01“,

silence007.jpg

Dem Entity nennen wir jetzt das Entity dessen Ziel geändert werden soll (bei uns
„DerTeleporter“), dazu erstelle wieder mit „Add“ einen neuen Key „target“ mit
dem Value „DerTeleporter“,

silence008.jpg

Nun sagen wir dem Entity nur noch wie das nächste Ziel heißen wird, dazu wieder
mit „Add“ einen neuen Key „m_iszNewTarget“ mit dem Value „tele_ziel_01“
erstellen.

silence009.jpg

So, weil das Ganze nun ziemlich komplex war doch mal das gesamt Ergebnis:

silence010.jpg

Kopiere nun das „neue“ Entity für jedes Teleporterziel und passe die Key’s „targetname“
und „m_iszNewTarget“ dem jeweiligen „tele_ziel_NN“ an (zur Übersicht eine
Tabelle mit den werten).


targetname               target               m_iszNewTarget

changetarget_01          DerTeleporter        tele_ziel_01 
changetarget_02          DerTeleporter        tele_ziel_02
changetarget_03          DerTeleporter        tele_ziel_03 

5. Um nun eine Zufallsfunktion zu realisieren erstellen wir ein Entity „logic_case“
und geben ihm als Namen „Zufallsgenerator“,

silence011.jpg

Nun gehen wir auf die Seite „Outputs“ und fügen mit „Add“ die folgenden Werte
hinzu:


My output named        Target entities named         Via this input         After a delay in seconds of       Fire once only

OnCase01               changetarget_01               Activate               0.00                              [unchecked]
OnCase02               changetarget_02               Activate               0.00                              [unchecked]
OnCase03               changetarget_03               Activate               0.00                              [unchecked]

silence012.jpg

6. So nun müssen wir unserem Teleporter nur noch mitteilen, dass er nach jedem
Teleport das Ziel ändern soll, dazu gehen wir zu unserem „trigger_teleport“ „DerTeleporter“
zurück! und fügen unter „Outputs“ dem „trigger_teleport“ einen Output hinzu:


My output named      Target entities named          Via this input           After a delay in seconds of      Fire once only
OnStartTouch         Zufallsgenerator               PickRandom               0.00                             no
silence013.jpg

7. Fertig ! Map compellieren und testen!

8. Zusammenfassung:

Gebraucht wurde „nur“:

1x trigger_Teleport,
1x logic_case,
Je Ziel,
1x info_Teleport_destination,
1x ai_change_target

Zur Funktion:
Der Teleporter triggert beim „Berühren“ den Zufallsgenerator,
dieser nimmt zufällig einen seiner „Outputs“ und aktiviert es. Wird einer der „ai_changetarget“
aktiviert ändert dieses das Teleporterziel des „tigger_teleport“ auf ein
Teleporterziel „info_teleport_destination“.
Leider ist das neue Teleporterziel erst nach einem Teleport verfügbar, d.h. der
erste Player landet immer auf „tele_ziel_01“ aber die folgenden Ziele sind nicht
bestimmbar;
Begründung: die Source Engine teleportiert erst den Player und greift dann auf
den Output, der das Ziel ändert, zu. Es gibt leider keine Möglichkeit den „Trigger_Teleport“
zu verzögern (jedenfalls nicht ohne zusätzliche „Trigger_...“ die das Ganze
wieder zu komplex werden lassen).

Anhang: sdk_zufallsteleporter.rar

Viel Spaß mit Euren Zufallsteleportern!

P.S: Möglich wäre auch die Sache zu abzuwandeln, dass die Teleporterziele der
festen Reihenfolge 1-3 abgearbeitet werden.

MfG DrSilence