In diesem Tutorial werde ich euch erklären, wie man einen Raketenwerfer, für Spiele in denen es kein extra Entity dafür gibt, bauen kann.
Ich gehe in diesem Tutorial davon aus das ihr euch etwas mit den Hammers auskennt, ich versuche es aber so zu schreiben, das auch Anfänger es verstehen.

De Rakete besteht aus folgenden Entities:
- func_physbox_multiplayer (Körper der Rakete)
- trigger_once (Auslöser für Berührung)
- env_spitetrail (Rauchscheif)
- env_explosion (Explosion, also quasi der „Sprengkörper“)
- phys_thruster (Antrieb)

Name:  rakete2.jpg
Hits: 341
Größe:  41,3 KB

Als erstes brauchen wir den Körper der Rakete, diese kann man aus Brushes bauen oder ein Modell verwenden.


Wenn eure Rakete aus Bruhes besteht, dann müsst ihr sie zu einer func_physbox_multiplayer machen (Tie to Entity).
Ist eure Rakete ein Model, dann müsst ihr das Model als prop_physics erstellen, die Outputs bleiben gleich, egal ob die Rakete aus Bruhes ist oder ob sie ein Model ist.

Nun kommen wir zu den Einstellungen der Rakete:
Namen: rakete_phys1
Strength: 1000 (beim prop_physics “Health”)
Material Typ: Metal (fällt beim prop_physics weg)

So jetzt, bauen wir den trigger_once, der später als Auslöser dienen soll. Der Trigger sollte etwas größer sein als der Körper der Rakete, 1 Unit reicht. Dem Trigger gebt ihr den Namen „rakete_trigger1“ und parentent ihn an die Rakete (Parent: rakete_phys1). Bei Flags müssen
“Clients“ und „Physics Objects“ aktiviert sein.

Anschließend setzen wir einen phys_thruster an die Spitze der Rakete und gebt ihm folgende Einstellungen:
Name: rakete_thruster1
Attached Object: rakete_phys1
Time of Force: 50 (damit könnt ihr bestimmen wie lange die Rakete fliegen soll, also quasi wie groß der Treibstofftank ist / 0=unendlich)
Force: 99999

Bei Flags muss „ApplyForce“ angekreuzt sein, alle anderen müssen deaktiviert sein.

Nun kommen wir zu dem env_explosion, das kommt in die Mitte der Rakete und bekommt folgende Einstellungen:
Name: rakete_explosion1
Parent: rakete_phys1
Magnitude: 100 (gibt die Stärke der Explosion an)

Jetzt fehlt noch das env_spritetrail, das setzen wir ans Ende der Rakete und gegen ihm folgende Einstellungen:
Parent: rakete_phys1
Name: rakete_trail1
Lifetime: 1.5
Start Width: 20.0
End Width: 6.0
FX Amount (0-255): 170
FX Color: 60 60 60

Das ganze sollte dann ungefähr so aussehen:

Klicke auf die Grafik für eine größere Ansicht 

Name:	rakete1.jpg 
Hits:	64 
Größe:	59,2 KB 
ID:	164

Nun kommen wir zu den Outputs der einzelnen Entities der Rakete:

func_physbox_multiplayer
OnHealthChanged | rakete_trigger1 | Kill | 0.00
OnHealthChanged | rakete_thruster1 | Kill | 0.00
OnHealthChanged | rakete_trail1 | Kill | 0.00
OnHealthChanged | rakete_explosion1 | Explode | 0.01
OnHealthChanged | rakete_phys1 | Kill | 0.02
OnHealthChanged | rakete_explosion1 | Kill | 0.02

Wenn die Rakete jetzt gegen eine Wand fliegt und somit Lebenspunkte verliert, wird die Explosion gezündet und die Entities der Rakete gelöscht, damit man eine neue Rakete abfeuern kann.

trigger_once
OnStartTouch | rakete_phys1 | SetHealth | 999 | 0.00

Wenn der Trigger ausgelöst wird, wird der Health-Wert der Rakete geändert und somit „OnHealthChanged” gefeuert und die Rakete explodiert.

Jetzt wählen wir alle Entities der Rakete aus (Rechtsklick + Strg) und groupen sie (Strg + G). Anschließend kopieren wir die Rakete (Strg + C) und fügen eine neue Rakete mit „Special Paste“ ein (Rechtsklick à Special Paste), wichtig ist das „make pasted entiy names uniqe“ aktiviert ist.

Jetzt kommen wir zu dem eigentlichen Raketenwerfer, dieser besteht aus 2 func_rotatings.

Name:  rakete3.jpg
Hits: 303
Größe:  64,4 KB

Den Raketenwerfer könnt ihr gestalten wie ihr wollt, es ist nur wichtig das es einen Teil gibt der sich nach links und rechts drehen lässt und einen Teil der sich nach oben und unten drehen lasst. Das Rohr für die Rakete muss mindesten 1 Unit breiter sein als die Rakete selbst.

Bei dem ersten func_rotating (links-rechts Bewegung) trägt man folgendes ein:

ClassInfo
Name: rakete_x-axe
Max Rotation Speed: 40 (Geschwindigkeit der Drehbewegung / frei wähl bar)
Friction: 30 (Geschwindigkeit der Drehbewegung / frei wähl bar)
Rotating sound WAV: doors/garage_move1.wav (Geräusch wenn sich das func_rotating bewegt / frei wähl bar)
volume: 7 (Lautstärke / frei wähl bar)

Bei dem zweiten func_rotating (oben-unten Bewegung) trägt man folgendes ein:

ClassInfo
Name: rakete_x-axe
Parent: rakete_x-axe
Max Rotation Speed: 50
Friction: 30
Rotating Sound WAV: doors/garage_move1.wav
Volume: 7

Flags
X Axis anklicken (sonst nichts verändern)

Jetzt fehlt noch ein "ambient_generic", das für das Abschussgeräusch sorgt. Das "ambient_generic" platziert man über oder in dem Raketenwerfer.
Bei dem ambient_generic trägt man folgendes ein:

ClassInfo
Name: rakete_sound_launch
Sound Name: weapons/rpg/rocketfire1.wav (frei wähl bar)

Flags
Start Silent“ und „Is NOT Loopt“ müssen aktiviert sein.

Damit die Raketen auch abgeschossen werden können, brauchen wir jeweils noch ein point_template und ein env_entity_maker für beide Raketen. Wo ihr die Entities hinsetzt ist egal.

Einstellungen des point_template:

ClassInfo
Name: rakete_template1 (bzw. rakete_template2)
Template 1: rakete_phys1 /2
Template 2: rakete_thruster1 /2
Template 3: rakete_trigger1 /2
Template 4: rakete_explosion1 /2
Template 5: rakete_trail1 /2

Einstellungen des env_entity_maker:

ClassInfo
Name: rakete_entity_maker1/2
Parent: rakete_x-axe
Point_template To Spawn: rakete_template1 /2


Damit ist der Raketenwerfer selbst fertig, jetzt müssen noch die 2 Raketen an den richtigen Platz. Setzt die Raketen genau in die Mitte des Abschussrohres und schiebt sie dann 16 Units nach rechts im „top (x/y)“ Fester (die env_entity_maker verschrieben irgendwie die Spawn Position des point_template).

Name:  rakete4.jpg
Hits: 297
Größe:  40,1 KB

So, last but not least die Steuerung der Rakete:

func_button

Name: rakete_button

game_ui

Name: rakete_ui

2x logic_compare

Name: rakete_compare_Z
und
Name: rakete_compare_X

2x logic_relay

Name: rakete_relay_launch1
und
Name: rakete_relay_launch2
(Start Disabled: Yes beim 2ten logic_relay)

2x logic_timer

Name: rakete_timer_launch1
und
Name: rakete_timer_launch2
Start Disabled: Yes
Refire Interval: 2 (gibt die Zeit an bis erneut eine Rakete abgefeuert werden kann, quasi die Nachladezeit)

logic_branch

Name: rakete_branch
Initial Value: 1

So nun kommen wir zu den Ouputs:

func_button:
OnPressed | rakete_button | Lock | 0.00
OnPressed | rakete_ui | Activate | 0.00

game_ui
PlayerOff | rakete_button | Unlock | 0.00
PressedAttack | rakete_branch | Test | 0.00
XAxis | rakete_compare_Z | SetValueCompare | 0.00
YAxis | rakete_compare_X| SetValueCompare | 0.00

logic_compare: rakete_compare_Z
OnEqualTo | rakete_z-axe | Stop | 0.00
OnGreaterThan | rakete_z-axe | StartBackward | 0.00
OnLessThan | rakete_z-axe | StartForward | 0.00

logic_compare: rakete_compare_X
OnEqualTo | rakete_x-axe | Stop | 0.00
OnGreaterThan | rakete_x-axe | StartBackward | 0.00
OnLessThan | rakete_x-axe | StartForward | 0.00

logic_relay: rakete_relay_launch1
OnTrigger | rakete_entity_maker1 | ForceSpawn | 0.00
OnTrigger | rakete_timer_launch1 | Enable | 0.00
OnTrigger | rakete_relay_launch1 | Disable | 0.00
OnTrigger | rakete_sound_launch | PlaySound | 0.00
OnTrigger | rakete_thruster1 | Activate | 0.10

logic_relay: rakete_relay_launch2
OnTrigger | rakete_entity_maker2 | ForceSpawn | 0.00
OnTrigger | rakete_timer_launch2 | Enable | 0.00
OnTrigger | rakete_relay_launch2 | Disable | 0.00
OnTrigger | rakete_sound_launch | PlaySound | 0.00
OnTrigger | rakete_thruster2 | Activate | 0.10

logic_timer: rakete_timer_launch1
OnTimer | rakete_timer_launch1 | Disable | 0.00
OnTimer | rakete_branch | SetValue | 0 | 0.00
OnTimer | rakete_relay_launch2 | Enable | 0.01

logic_timer: rakete_timer_launch2
OnTimer | rakete_timer_launch2 | Disable | 0.00
OnTimer | rakete_branch | SetValue | 1 | 0.00
OnTimer | rakete_relay_launch1 | Enable | 0.01

logic_branch: rakete_branch
OnFalse | rakete_relay_launch2 | Trigger | 0.00
OnTrue | rakete_relay_launch1 | Trigger | 0.00

Wenn ihr den Button im Spiel drückt wird die Steuerung aktiviert und ihr könnt mit „W A S D“ und der „rechten Maustaste“ den Raketenwerfer steuern.

So damit sind wir fertig, wenn ihr alles korrekt eingestellt hab, sollte euer Raketenwerfer wie gewünscht funktionieren. Viel Spaß beim Raketen abschießen!

Klicke auf die Grafik für eine größere Ansicht 

Name:	rakete5.jpg 
Hits:	83 
Größe:	83,5 KB 
ID:	167