User Tag List

Ergebnis 1 bis 3 von 3

Thema: Arbeiten mit NPCs: Teil 5 - Das Assault-System

  1. #1
    Moderator Avatar von Dmx6
    Registriert seit
    18.06.2010
    Ort
    Zwischen Frankfurt und Darmstadt
    Alter
    26
    Beiträge
    948
    Blog-Einträge
    3
    Renommee-Modifikator
    17

    Arbeiten mit NPCs: Teil 5 - Das Assault-System

    Arbeiten mit NPCs: Teil 5 - Das Assault-System

    Willkommen beim Fünften Teil der NPC Tutorrialreihe, diesmal geht es um das Assault-System.
    Mit dem Assault-System ist es möglich einzelne NPC´s oder Gruppen von NPC´s eine bestimmte Strecke (in diesem Tutorial Assaultstrecke genannt) entlanglaufen zu lassen.
    Im Gegensatz zu anderen Methoden NPC´s zu steuern, ist das Assault-System speziell für Kampfsituationen entworfen worden. NPC´s können den Zielpunkt sofort verlassen oder diesen verteidigen. Das Assault-System ist dank der vielen Einstellungsmöglichkeiten vielseitig modifizierbar und ermöglicht spannende KI Kämpfe in denen der Spieler direkt eingreifen kann.

    Das Assault-System ist wie folgt aufgebaut:
    • Ein ai_goal_assault pro Assault den man schalten möchte.
    • Einen oder mehrere NPC´s die man auf den Weg schicken möchte.
    • Pro NPC mindestens einen assault_rallypoint.
    • Einen oder mehrere assault_assaultpoint Entities.


    Das Assault-System funktioniert wie folgt:
    Wir starten den Assault mit einen Input am "ai_goal_assault" Entity. Das wiederum wählt meinen NPC aus und schickt im zu einem Sammelpunkt. Unser Sammelpunkt ist das "assault_rallypoint" Entity.
    Das "assault_rallypoint" Entity ist der Anfang unserer Assaultstrecke. Als Zielpunkt platzierten wir ein "assault_assaultpoint" Entity.
    Fertig ist der NPC mit der Strecke wenn er den "assault_assaultpoint" erreicht, bzw. wenn es mehrere gibt den letzten Assaultpoint.

    Hier seht Ihr eine Übersicht des Assault-Systems das wir, in diesem Tutorial, bauen werden:
    Klicke auf die Grafik für eine größere Ansicht 

Name:	uebersicht.png 
Hits:	47 
Größe:	194,0 KB 
ID:	2627

    Rechts befinden sich die Rebellen die per Knopfdruck zu den "assault_rallypoint" Entities gehen und von dort aus zum Zielpunkt den "assault_assaultpoint", zwischen den platziereten Combines, laufen. Der Assault wird mit einem "ai_goal_assault" gesteuert, das wir mit einem Knopf aktivieren.

    Hinweis: In diesem Tutorial unterscheiden wir zwischen „Aktivieren“ und „Beginnen“ eines Assaults. Aktivieren bedeutet das die NPC zum assault_rallypoint gehen den Assault aber nicht beginnen. Sie beginnen den Assault erst wenn sie sich auf den Weg vom Rallypoint zum Zielpunkt machen.

    Platzieren der NPC´s

    Zuallererst benötigen wir dazu die NPC`s.
    In meiner Map habe ich jeweils am Rand 2 Rebellen mit einem "npc_citizen" Entity hinter den Schutzwänden gebaut. Insgesamt sind es 4 Rebellen.
    Die Rebellen haben die Namen "rebell1" – "rebell4" bekommen.
    Außerdem Aktivieren wir bei den Rebellen die FlagNot Commandable“. Machen wir das nicht versuchen die Rebellen uns zu folgen, und werden den Assault nicht ausführen.
    Klicke auf die Grafik für eine größere Ansicht 

Name:	NPC 1.png 
Hits:	42 
Größe:	156,5 KB 
ID:	2624

    Auf der gegenüberliegenden Seite habe ich 4 Combine Soldier eingefügt.
    Klicke auf die Grafik für eine größere Ansicht 

Name:	NPC2.png 
Hits:	45 
Größe:	176,3 KB 
ID:	2625

    Platzieren eines ai_goal_assault Entities

    Der erste Baustein, nach den NPC´s, des Assault-Systems ist das "ai_goal_assault" Entity.
    Per Input können wir mit diesem Entity das Assaults-System aktivieren und beginnen.
    Wenn Ihr das "ai_goal_assault" in der Map platziert habt, könnt Ihr unter "Properties" folgende Einstellungen vornehmen:

    Name: „assault“ (Name zur Identifizierung des Entities)
    Actor(s) to affect: "rebell*" (Hier können wir auswählen welche NPC´s die Assaultstrecke bewältigen sollen. Mit einem * Zeichen werden alle Entities die das * Zeichen hinter dem Urpsrungsname haben angesprochen. In diesem Fall also "rebell*" für die Rebellen 1-4)
    Rally Point Set: point_* (Die Rallypoints von denen aus der Assault startet. Pro NPC benötigen wir einen Rallypoint. Wenn wir die Rallypoints point_1, Point_2, point_ 3 usw. nennen können wir hier point_* eingeben. Mit einem * Zeichen werden alle Entites die das * Zeichen hinter dem Urpsrungsname haben angesprochen.)
    Search Type: „Entity Name“ (Hier kann eingestellt werden auf welche Art der NPC bei Actror(s) to affect angesprochen wird. Bei „Entity Name“ wird der NPC der diesen Namen hat angesprochen, bei „Class Name“ werden ganze Entity Klassen angesprochen. Beispiel: "npc_headcrab")
    Start Active: "No" (Legt fest ob das "ai_relationship" schon bei Mapstart aktiviert sein soll, in unserem Fall wollen wir das Entity per Input ansprechen, daher "No".)
    Assault Cue: "Don't wait for a cut" (Legt fest wann der Assault nachdem der aktiviert ist (Die NPC´s rennen zu den Assault_rallypoints) beginnt (NPC´s Starten den Lauf zum assault_assaultpoint Entity). Bei „Entity System Input “ wird das per Input geregelt, bei „Gunfire“ sobald ein schuss auf die NPC´s fällt und bei „Don't wait for a cue“ starten die NPC´s sobald sie die "Assault_rallypoints" berühren Ihren Lauf.)

    Knopf zum Starten des Assaults
    Name:  knopf.png
Hits: 179
Größe:  13,4 KB

    Nun setzen wir einen "func_button" in die Map mit dem wir den Assault starten wollen.
    Am besten gut geschützt vor den Combines in der nähe der Rebellen.
    Dies geht ganz einfach indem wir ein Output für den Button erstellen:

    My Output Named: "On Pressed" (Bei drücken des Buttons wird der Output gestartet.)
    Targets Entites Named: „assault“ (Name des Entites auf das sich der Output bezieht, in diesem Fall unser ai_goal_assault.)
    Via this input: „Activate“ („Activate“ aktiviert nur den Assault. Ist dies aktiviert gehen die NPC´s zu den assault_rallypoint Entites beginnen den Assault aber nicht. „Begin Assault“ beginnt den Assault, vorher muss dieser aber aktiviert sein.)

    Platzieren der Sammelpunkte
    Name:  Assault_rallypoint.png
Hits: 188
Größe:  2,8 KB

    Als nächstes setzen wir die "assault_rallypoint" Entites (Sammelpunkte), von denen aus die NPC nach aktivieren des Assaults, diesen beginnen.
    Pro NPC wird hierfür mindestens ein Rallypoint Entity benötigt, da wir 4 Rebellen haben die den Assault durchführen sollen, platzieren wir 4 "assault_rallypoint" Entites in der Map.

    Ich habe zwischen den 2 Wänden meine 4 Rallypoints platziert:
    Klicke auf die Grafik für eine größere Ansicht 

Name:	rallypoints.png 
Hits:	40 
Größe:	131,2 KB 
ID:	2626

    Den Entities geben wir folgende Einstellungen:

    Name: (Name zur Identifizierung des Entities. Wir geben dem ersten Rallypoint den Namen „point_1“ dem zweiten den Namen „point_2“ usw.)
    Assault Point: "ziel" (Name des ersten assault_assaultpoints Entities. Dieses Entity wird im nächsten Schritt gebaut. Dieses Entity repräsentiert den Zielpunkt.)
    Assault Delay: „0" (Hier können wir eine Zeit eingeben nach deren Ablauf der NPC vom assault_rallypoint den Assault beginnt. Er wartet sozusagen die eingegebene Zeit am assault_rallypoint auf den beginn des Assaults.)
    Rally Sequence: (Falls der NPC auf den beginn des Assaults warten sollte können wir hier den Namen einer Animation eingeben, die der NPC durchführt bis der Assault beginnt.)
    Priority: „1“ (Sollten wir mehr assault_rallypoints haben als NPC´s, können wir hier dem assault_rallypoint eine höhere Priorität geben, je höher der Wert desto höher die Priorität.)
    Forche Crouch: „No“ (Wir hier „Yes“ eingestellt, wird der NPC gezwungen den weg zum assault_assaultpoint Entity zu kriechen.)

    Erstellen des Zielpunktes
    Name:  Assault_assaultpoint.png
Hits: 188
Größe:  3,1 KB

    Das "assault_assaultpoint" Entity legt den Zielpunkt des Assaults fest. Wir platzieren unseren Zielpunkt zwischen den Combines.

    Wir können folgendes beim "assault_assaultpoint" Entity einstellen:

    Name: „ziel“ (Name des Endpunktes. Da wir bei den Rallypoints unter "Assault Point" den namen „ziel“ einegeben haben, ist „ziel“ der Name des Zielpunktes.)
    Next assault point (optional): (Wenn wir nachdem dieser Zielpunkt erreicht ist, des Assault fortsetzen wollen, können wir hier den Namen des nächsten Zielpunktes eingeben.)
    Assault time out: „3.0“ (Legt fest wie lange an diesem Punkt gewartet werden soll, bevor die NPC sich vom Zielpunkt entfernen können.)
    Clear on contact with enemies: „No“ (Bei „Yes“ werden die NPCs jeden Gegner auf dem Weg vom Rallypoint zum Assaultpoint, versuchen zu töten, nachdem der Gegner Tod ist wird der Weg zum Assaultpoint nicht fortgesetzt.)
    Allow diversion: „Yes“ (Bei „Yes“ werden die NPCs jeden Gegner auf dem Weg vom Rallypoint zum Assaultpoint, versuchen zu töten und zu jagen, es sei denn sie geraten aus der Sichtweite. Nachdem der Gegner Tod ist wird der Weg zum Assaultpoint fortgesetzt. Bei "No" attackieren Sie zwar die Gegner, aber jagen die Gegner nicht.)
    Attack Tolerance: „Tight (3ft)“ (Legt fest wie weit sich die NPC´s bewegen dürfen wenn Sie angegriffen werden während Sie den Zielpunkt halten.)

    Habt Ihr alles richtig gemacht müssten nun Linien von jedem "assault_rallypoint" zum "assault_assaultpoint" verlaufen. So wie in diesem Bild:
    Klicke auf die Grafik für eine größere Ansicht 

Name:	assaultpoint.png 
Hits:	37 
Größe:	66,5 KB 
ID:	2622

    Ausprobieren des Assault-Systems

    Habt Ihr alle Entites gesetzt und das Tutorial bisher befolgt könnt ihr nun das Assault-System ausprobieren. Compiliert die Map und betätigt den "func_button" den wir platziert haben.
    Nun sollten die Rebellen zum Zielpunkt loslaufen, die Combines angreifen und den Zielpunkt anschließend halten.

    Sollte dies nicht funktionieren habt Ihr einen Fehler gemacht. Lest euch das Tutorial nochmals genau durch und sucht nach Abweichungen von eurer Map zum Tutorial.
    Auch in diesem Tutorial habe ich eine Beispielmap als Anhang hoch geladen: tutorial_assault_system.vmf

    Zielpunkt eingenommen und nun?

    Ist der Zielpunkt erreicht, versuchen die NPC´s diesen zu halten und vor Angriffen zu schützen.

    Um dies zu ändern versucht beim "assault_assaultpoint" die Flag Clear this point upon arrival UNCONDITIONALLY zu aktivieren. Habt ihr das gemacht, werden die NPC´s nicht versuchen den Punkt zu halten und verhalten sich nun normal.

    Hier geht’s zum nächsten Teil der Tutorialreihe: Arbeiten mit NPC´s: Teil 6 - Das Standoff-System

    Zusatz: Nützliche In/Outputs der Entities

    Es gibt viele In- und Outputs der oben genannten Entities mit denen Ihr euer Assault System nach belieben modifizieren könnt. Ich habe hier die wichtigsten aufgelistet:

    ai_goal_assault

    Input:Activate/Deactivate“ = Aktiviert bzw. Deaktiviert den Assault. Ist er aktiviert gehen die die NPC´s zu den assault_rallypoint Entites beginnen den Assault aber nicht. Damit Sie ihn beginnen ist der Input „BeginAssault“ notwendig oder bei den Einstellungen des ai_goal_assault Entities ist die Einstellung „Assault Cue: "Don't wait for a cut"“ ausgewählt.

    Input:BeginAssault“ = Beginnt den Assault. Um den Assault zu beginnen muss er erst mit den input Activate aktiviert sein.

    assault_rallypoint

    Output:OnArrival“ = Dieser Output wird aktiviert wenn ein NPC diesen rallypoint erreicht. Mit diesem Output könnt Ihr zum Beispiel Gegner rufen die den NPC auf dem Weg zum Zielpunkt angreifen.

    assault_assaultpoint

    Output:OnArrival“ = Dieser Output wird aktiviert wenn ein NPC den Zielpunkt erreicht hat.
    Output:OnAssaultClear“ = Dieser Output wird aktiviert wenn ein NPC den Zielpunkt erreicht hat und diesen nicht hält, also wieder sein normales verhalten hat.
    Geändert von DaEngineer (14.02.2016 um 17:42:43 Uhr)

  2. #2
    Super-Moderator Avatar von DaEngineer
    Registriert seit
    23.06.2010
    Beiträge
    1.544
    Blog-Einträge
    2
    Renommee-Modifikator
    20
    Ich bin ziemlich aus der Übung was HL2 angeht und bin gerade sehr dankbar für die Tutorialserie. Mach die ruhig fertig Mir ist allerdings ein kleiner Fehler aufgefallen:

    Zitat Zitat von Dmx6 Beitrag anzeigen
    Wir können folgendes beim "assault_assaultpoint" Entity einstellen:

    Name: „ziel“ (Name des Endpuntes. Da wir bei den Rallypoints den namen „ziel“ einegeben haben, ist „ziel“ der Name des Zielpunktes.)
    Für die Rallypoints wurde im Schritt davor gar kein Ziel angegeben. "ziel" ist auch nicht der Name der Rallypoints, sondern deren Wert für den Key Assault Point. Wäre gut, wenn du das noch überarbeiten könntest, das würde Verwirrung vermeiden Dabei könntest du direkt auch noch mal eine Rechtschreibkorrektur machen Inhaltlich ist die Serie wirklich super, aber die Typos sind teilweise echt störend.

  3. #3
    Moderator Avatar von Dmx6
    Registriert seit
    18.06.2010
    Ort
    Zwischen Frankfurt und Darmstadt
    Alter
    26
    Beiträge
    948
    Blog-Einträge
    3
    Renommee-Modifikator
    17
    Tatsache, da hat sich ein kleiner Fehler eingeschlichen, vielen dank. In der Beispielmap stimmts, werd ich wohl einfach vergessen haben.

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
[email protected]