Nicht eingeloggt
Registrieren

Bot Navigation & AI Scripts

UT2003 AIScript - Bot Navigation Editorial

AIScript, ScriptedSequence, ScriptedTrigger

Vorwort

Um in Unreal Tournament 2003 die Bots nach der eigenen Pfeife tanzen zu lassen, gibt es spezielle AI-Script Actors. Diese weisen Pawns ein speziell angepasstes Verhalten zu, wenn sie sich im Einflussbereich des gesetzten AI-Scriptes befindet. Dieses Tutorial erklärt in drei Kapiteln anhand von trockener Theorie und vielen praktischen Beispielen die Nutzung von AIScripts. Wir werden wir uns mit speziellen Action-Befehlen vertraut machen, die ein Pawn ausführen soll. Je besser und detailierter das Navigationsnetzwerk mit AIScripts und Actions ausgestattet ist, desto besser agieren die Pawns in der künstlichen Umgebung. Nachfolgend die Inhaltsangabe der abgedeckten Themenbereiche:


1 Das basis AIScript  AIScript  Grundkenntnisse 
2 AI Script eigenschaften     
3 Action Befehle  Actions  Einblicke mit Befehlsliste 
4 Action Eigenschaften     
 
 
1 Testmap vorbereiten Scripted Sequence  Scharfschützen Areal 
2 Allgemeine Einstellungen     
Erweiterte Eigenschaften
   
 
Scripted Trigger erzeugen  ScriptedTrigger  Sound Effekt Lichtorgel LevelWechsel 
AmbientSound scripten     
Dispatcher scripten     
if-Abfrage einbinden     
ChangeLevel scripten     
Nachwort     


Um dieses Tutorial richtig zu verstehen sind grundlegende Basis-Kenntnisse des Navigations Netzwerks erforderlich. Du solltest eine simple TestMap erstellen können und mit dem einfachen Navigations-Netzwerks aus simplen PathNode Äpfelchen vertraut sein. Im günstigsten Fall hast du bereits ein konkretes Projekt erstellt, in der nur das Navigationsnetzwerk und Event-Abläufe optimiert werden müssen.


1 AIScript

In diesem Kapitel werden wir die Möglichkeiten eines Basis AIScriptes kennenlernen und machen uns mit den darin enthaltenen Action-Befehlen vertraut. Kommt ein Pawn in den Einflußbereich des AIScriptes oder wird durch einen AIScript Event beeinflusst, wird er im Normalfall die AIScript Anweisungen erst ausführen, bevor er sich einem weiteren gewöhnlichen Navigationspunkt zuwendet. Alle Unterklassen von AIScript können mit Action-Befehlen ausgestattet werden, welche verschiedene Eigenschaften beinhalten, die dem Pawn Regie-Anweisungen zuweisen.



1 Das Basis AIScript

Die eigentliche AIScript Klasse nutzt man kaum, eingesetzt werden meistens die verschiedenen Unterklassen. Mögliche AIScript Unterklassen findet man im Actor Class Browser unter Actor/Keypoint/AIScript. AIScripte müssen immer durch einen gewöhnlichen Trigger, ein weiteres AIScript, oder einen herkömmlichen Event ausgelöst werden, er kann sich jedoch nicht selber auslösen.
Hier eine Liste der möglichen AIScripts, welche in den nachfolgenden Kapiteln detailierter erklärt werden.



Eintrag  Einsatzgebiet  Allgemeine Beschreibung 
AIScript  Basis AIScript  Pawn erkennt strategisch wichtigen Punkt 
ScriptedSequence  Animationen & Handlungen  Pawn führt eine bestimmte Handlung aus 
ScriptedTrigger  Special Effect & Event Ablauf  Pawn betätigt eine Trigger/Dispatcher Folge 


Setze AIScripts immer mit großer Sorgfalt und Bedacht auf die benötigte Situation ein. Ein Basis AIScript ersetzt teilweise herkömmlichen PathNodes. Die Einbindung in's Navigationsnetzwerk erfolgt dabei, wie bei einem herkömmlichen PathNode. Ein AIScript immer höher in der Priority eingestuft, als ein gewöhnlicher PathNode.

2 AIScript Eigenschaften

Wenn ein AIScript nur von einer bestimmten ControllerClass ausgeführt werden soll, kann in den Eigenschaften unter AIScripts/ControllerClass eine Gruppe gewählt werden, die das AIScript ausführt. Du kannst das jeweilige Eigenschaften Fenster über einen Rechtsklick mit der Maus auf das AIScript Symbol, und anschließendem Klicken auf AIScript Properties [1 selected] öffnen.

Als Auslöser stehen die nachfolgend sichtbaren Gruppen zur Verfügung:



AIController: Script fungiert als spezieller AI Kontrollpunkt
Bot: Script wird nur von normalen Bots ausgeführt
None: Script wird nur von niemandem ausgeführt (Standard)
ScriptedController: Script wird steuert weitere Scripte (ähnlich Dispatcher)
ScriptedTriggerController: Script fungiert als Aktions Verteiler (ähnlich Dispatcher)
xBot: Script wird nur von Script-Bots (xBots) ausgeführt

In allen AIScripts ist die hier gezeigte Einstellung als Standard vorhanden, entsprechend liegt diese Option auch in allen Unterklassen vor, die wir in den nachfolgenden Kapitel kennenlernen werden. Auch dort kann man jeweils die gezeigte ControllerClass Option tätigen.

3 Action Befehle

Ein AIScript beherscht einige zusätzliche, sehr brauchbare Action-Befehle, mit denen man direkte Regie-Anweisungen (Pawn Controll Actions) und Script-Befehle (Script Controll Actions) sowie diverse andere Anweisungen (Special Control Actions) an einen Pawn übergeben kann. Die Action-Befehle sind der praktische Ersatz für abertausende Einzelaktoren, wie sie noch in Unreal Tournament vorherschten. In den nachfolgenden Kapiteln werden wir die hier gezeigten Befehle an praktischen Beispielen anwenden. Diese Befehlsübersicht wird im Verlauf des Tutorials noch öfters angesprochen, am besten du machst dich erstmal mit den wichtigsten Befehlen und den neuen Möglichkeiten vertraut:

ACTION_ChangeWeapon: Ein Wechsel der aktuellen Waffe
ACTION_ChangeTeam: Ein Wechsel in eine anderes Team
ACTION_Crouch: Bot duckt sich
ACTION_DamageInstigator: Zieht Health Punkte ab
ACTION_DestroyPawn: Bot zerstört einen weiteren Pawn
ACTION_FinishRotation: Beendet eine Viewport Rotation
ACTION_FireWeapon: Bot feuert die Waffe ab
ACTION_ForceMoveToPoint: Erzwingt einen Positionswechsel
ACTION_Freeze: Friert den Pawn sofort ein
ACTION_FreezeOnAnimEnd: Friert den Pawn nach Anim. ein
ACTION_Jump: Bot setzt zum Sprung an und springt
ACTION_KillInstigator: Tötet (nach gewähltem DamageType)
ACTION_MoveToPlayer: Pawn Ansicht auf ControllerClass
ACTION_MoveToPoint: Pawn Ansicht auf DestTarget
ACTION_PlayAnim: Pawn spielt eine BaseAnim ab
ACTION_Run: Bot rennt bei der nachfolg. Beweg.
ACTION_SetAlertness: Bot wechselt in Alarm-Stellung
ACTION_SetHidden: Deaktiviert diese eine Aktion
ACTION_SetPhysics: Setze Physikwerte für alle Spieler
ACTION_Posture: Setze die Verfassung des Pawns
ACTION_SetViewTarget: Botbeobachtet ein bestimmtes Ziel
ACTION_ShootTarget: Bot schießt auf ein bestimmtes Ziel
ACTION_StopAnimation: Beendet die aktuelle Animation
ACTION_StopShooting: Bot beendet das Beschießen
ACTION_TeleportToPoint: Bot teleportiert sich zu Punkt X
ACTION_ThrowWeapon: Bot legt die aktuelle Waffe ab
ACTION_TurnTowardPlayer: Ansicht wechselt zum Player
ACTION_Walk: Bot fängt an zu laufen (Normal) [/table]

ACTION_ChangeLevel: Ein Wechsel in eine andere Map
ACTION_ChangeScript: Ein Wechsel in eine anderes Script
ACTION_ConsoleCommand: Führt einen Konsolen Befehl aus
ACTION_EndSection: Beendet eine Befehlsfolge
ACTION_GoToAction: Ein Wechsel zum Action-Eintrag
ACTION_GoToMenu: Ein Wechsel zum Einstellungsmenü
ACTION_IfCondition: Simple if-then Abfrage
ACTION_IfRandomPCT: Spielt nach Zufallszahl 1 oder 0
ACTION_LeaveSequence: Verlasse die Anim.-Sequenz
ACTION_WaitForAnimEnd: Scriptpause bis zur Anim. Beendung
ACTION_WaitForEvent: Scriptpause bis zur Event Beendung
ACTION_WaitForPlayer: Scriptpause bis zur Player Beendung
ACTION_WaitForTimer: Scriptpause bis zur Timer Beendung

ACTION_DestroyActor: Bot zerstört einen weiteren Actor
ACTION_DisplayMessage: Zeigt eine Nachricht im globalen Chat
ACTION_FadeView: Ein- und Ausblendeffekt
ACTION_LocalizedMessage: Zeigt eine persönliche Nachricht an
ACTION_PlayAmbientSound: Spiele einen Hintergrund Sound
ACTION_PlayLocalSound: Spiele Sound nur für lokalen Player
ACTION_PlayMusic: Spiele ein Musikstück für alle Player
ACTION_PlaySound: Spiele Sound für alle Player
ACTION_SetCorona: -???-
ACTION_SpawnActor: Erzeugt einen weiteren Actor
ACTION_SpawnRagdoll: erzeugt einen KRagDoll Actor
ACTION_TriggerEvent: Ein weiterer Event X wird ausgelöst


4 Action Eigenschaften

Alle gezeigten Actions beinhalten jeweils wieder mindestens eine Eigenschaft. Diese Action Properties bieten eine Vielzahl von brauchbaren Optionen, die innerhalb der einzelnen Actions festgelegt werden können. Unsere nachfolgenden Beispiele zeigen exemplarisch einige Eigenschaften von Actions. Sie betreffen die Alarmzustände und Physics-Werte des Pawns, sowie das Abspielen von Musikstücken.


ACTION_SetAlertness: Setzt den Alarmzustand des Pawns, dieser beeinflusst den Pawn in seinem Verhalten zum Gegner. Einige voreingestellte Werte können gewählt werden.
IgnoreAll: Pawn ist von Feinden unbeeinflussbar, Schäden werden ignoriert
IgnoreEnemies: Pawn ignoriert Feinde, er kann sich nur verteidigen und startet keinen Angriff
StayOnScript: Pawn wird gezwungen das komplett AIScript auszuführen,bevor er sich verteidigt
LeaveScriptForCombat: Wenn der Pawn einen Feind sieht, verläßt er das AIScript und bekämpft diesen.


ACTION_SetPhysics: Diese Action verändert die Art und Weise, wie sich ein Pawn in der Umgebung bewegt. Alle Physik-Eigenschaften der jeweiligen Engine sollten dort zu finden sein. Einige der Einträge sollten jedoch nicht genutzt werden, da sie zwar möglich sind, aber für den normalen Einsatz zu großen Aufwand bedeuten. In der nebenstehenden Tabelle befinden sich nur brauchbare Einträge.
None: Pawn bewegt sich nicht mehr, egal wo er sich befindet.
Walking: Pawn berührt den Boden, er kann in den Falling-Modus wechseln.
Falling: Pawn wird abhängig von der eingestellten ZoneInfo/Gravitation Werten.
Swimming: Pawn befindet sich unter Wasser und schwimmt
Flying: Pawn ist unabhängig von der Gravitation und schwebt
Rotating: Pawn beginnt konstant um die eigene Achse zu rotieren
Ladder: Pawn klettert auf eine Leiter (siehe auch LadderVolume)


ACTION_PlayMusic Wenn bAffectAllPlayers auf Wahr/True gesetzt wurde, wird das Musikstück für alle Spieler in der Map hörbar, ansonsten ist es nur hörbar für den Spieler, der das AIScript ausgelöst hat. Anbei die Einstellungen der verschiedenen Übergangsarten von einem Musikstück zum Nächsten.
None: Es findet kein besonderer Übergangs statt
Instant: Die alte Musik ist sofort aus, die neue Musik spielt sofort ab
Segue: Schneller, nicht spürbarer Wechsel zur neuen Musik
Fade: Der Übergang ist ein normale Überblendung von ALT auf NEU
FastFade: Der Übergang ist einschnelle Überblendung von ALT auf NEU
SlowFade: Der Übergang ist ein langsame Überblendung von ALT auf NEU

Dies war nur ein sehr kurzer, theoretischer Ausflug in die Möglichkeiten von AIScript. In den nachfolgenden Kapiteln werden wir uns genauer damit beschäftigen, wie diese Action-Befehle eingesetzt werden. In einigen konkreten Fällen werden wir erfahren, wie ein AIScript zusammengestellt werden kann, um in einer konkreten Spielsituation ein passendes Ergebnis zu erzeugen. Bisher haben wir uns nur mit Theorie auseinandergesetzt, die nachfolgenden Kapitel werden praktischer und gehen mehr in's Detail.

 

2 Scripted Sequence

In diesem Kapitel erstellen wir eine Sniper Area, in welcher der Pawn mit dem Scharfschützen Gewehr in einen anderen Teil der Map zielen und treffen soll. Dazu benutzen wir den UnrealScriptedSequence Actor. Diesen findet man wie gewohnt im Actor Class Browser unter Keypoint/AIScript/ScriptedSequence.




2.1 TestMap vorbereiten

Wie brauchen eine TestMap, in welcher der Einsatz eines Scharfschützen gewünscht ist. Dazu benötigen wir einen erhöhten Punkt, von dem aus man einen guten Blick auf eine weitere Ebene des Spielgeschehens hat. In unserer TestMap haben wir einen kleinen Vorsprung gebastelt, dort soll später der Bot stehen bleiben und auf Objekte zielen, die sich in einem anderen Bereich der Map befinden. Anstelle eines normalen PathNode Actors, setzen wir einen UnrealScriptedSequence Actor ein (siehe nebenstehende Abbildung), kurz davor setzen wir zusätzlich einen gewöhnlichen Triggers/Trigger.

Beim gewöhnlichen Trigger, den wir nur dazu nutzen um das AIScript anzusprechen, tätigen wir die nachfolgenden Einstellungen, die auch auf dem Bild entnommen werden können.




Rubrik Eintrag Wert 
Events  Event  StartTest 
Trigger  bInitiallyActive  True 
  bTriggerOnceOnly
False 
  bTriggerDelay 
  TriggerType  TT_PawnProximity 
 
 
Das Setzen des Triggers und der UnrealScriptedSequence bewirkt an sich rein gar nichts. Erst wenn auch die nachfolgenden Einstellungen getätigt wurden, ist die hier zu erstellende UnrealScriptedSequence voll einsatzbereit.



2 2 Allgemeine Eigenschaften

Der UnrealScriptedSequence Actor hat allgemeinen Eigenschaften, in denen wir einige Einstellungen verändern werden. Suche die UnrealScriptedSequence Rubrik und öffne diese. Sichtbar sollten die hier gezeigten Basis-Einstellungen sein, Vergleiche dazu auch unsere nebenstehnd sichtbare Abbildung, die das Eigenschaften Fenster darstellt.




bSniping = Wahr/True: Wahr/True=Sniper,Falsch/False=kein Sniper
Priority = Null "0": Je Höher die Nummer, desto bevorzugter!
SnipingVolumeTag = "-": Name Tag des optionalen Ziel-Volumes (erfordert bSniping=True)
WeaponPreference = xWeapons.SniperRifle: Welcher Waffentyp wird zur Ausführung bevorzugt?

Um ein bestimmtes Mapgebiet als Sniper Area auszuweisen, muss der Name/Tag des Ziel-Volumes unter SnipingVolumeTag eingetragen werden. Der Bot wird dann versuchen alles zu treffen, was sich innerhalb des Ziel-Volumes bewegt. Wie auf der nebenstehenden Abbildung ersichtlich, haben wir ein Volume_Ufer_01 eingetragen, wozu in unserer TestMap auch ein entsprechendes Volume angelegt wurde.

Was wir bisher kennengelernt haben gleicht in gewisser Weise dem in Unreal Tournament verwendeten AmbushPoint. Ein UnrealScriptedSequence Actor aus UT2003 hat jedoch noch wesentlich interessantere Einstellungen, mit denen man mehr Möglichkeiten hat, als früher. Die nachfolgenden Kapitel beschreiben die neu hinzugekommenen Action-Befehle, mit denen ein Pawn gezwungen wird, ein bestimmtes Verhaltensmuster zu durchlaufen.



2.3 Erweiterte Eigenschaften

Die eigentlich interessanten Action-Befehle finden wir in der AIScript Rubrik. Sie befindet sich weiter oben im bereits vorher genutzen Eigenschaften Fenster. Unter AIScripts/Actions fügen wir drei leere Einträge hinzu. Wir erhalten dann einmal einen [0],[1],[2] Eintrag. So wie sie auf der nebenstehend sichtbaren Abbildung, sollte es aussehen. Bei Actions/Neu ist jeweils ein ACTION_ChangeWeapon eingetragen. Der Eintrag sollte nach Bedarf abgeändert werden, bevor er angelegt wird.




Achtung: In diesem und allen folgenden Beispielen ist die Einhaltung der Reihenfolge von großer Bedeutung. Sobald ein Pawn in den Einflussbereich des zugehörigen Triggers gelangt wird das AIScripte von oben nach unten durchlaufen. Lege die Actions immer mit großer Sorgfalt an, so daß eine gewisse Logik entsteht.


Für unser Beispiel benötigen wir in Action[0] einen Action_WaitForEvent, um das Script anzusprechen und zu starten. In Action[1] benötigen wir einen Action_MoveToPoint, damit der Pawn genau auf die Stelle bewegt wird und zum Stehen kommt, an welcher unser AIScript Actor gesetzt wurde. In Action[2] benötigen wir einen Action_WaitForTimer mit einer Pause, die unseren Pawn kurz auf der Stelle verweilen lässt. Unsere nebenstehend sichtbare Abbildung und die nachfolgende Tabelle zeigt die zu erstellenden Einstellungen nochmals im Überblick, übertrage die gezeigten Werte auf deine eigene TestMap:

 
 
Pos. AIScript Action  Option  Wert 
ACTION_WaitForEvent  ExternalEvent  StartTest
ACTION_MoveToPoint  Destination  None 
ACTION_WaitForTimer  PauseTime  0.5 


Im Grunde kann die TestMap jetzt einmal gespeichert werden, um sie zu konservieren. Bei einem anschließenden Test bei dem sich ein Pawn dem AIScript nähert, bewegt er sich genau auf die Position und wartet dort kurz auf ein Opfer, welches sich innerhalb des angegebenen Volumes befindet, das unter SnipingVolumeTag angegeben wurde. Die SniperArea ist fertig und funktioniert.
 
 
3 ScriptedTrigger

Wenn zusätzlich zu einem bestimmten Verhalten des Pawns eine gezielte Aktion ausgeführt werden soll, kann ein ScriptedTrigger eingesetzt werden. In diesem Kapitel werden wir die Möglichkeiten des ScriptedTrigger kennenlernen. Einmal gestartet läuft der ScriptedTrigger eine Ereignisabfolge einmal vollständig ab, egal wie lang das darin enthaltene AIScript ist. Der ScriptedTrigger hat die klassischen Eigenschaften eines Triggers, bietet aber zusätzlich die Möglichkeit die AIScript Action Befehle anzuwenden. Der ScriptedTrigger sieht genauso aus, wie ein normaler Trigger, jedoch mit einem Ausrufezeichen versehen (Vergleiche dazu auch unsere Abbildung).



3 1 ScriptedTrigger erzeugen

Erzeuge einen ScriptedTrigger irgendwo in der TestMap, diesen findet man im Actor Class Browser unter Actor/Keypoint/AIScript/ScriptedSequence. In der Nähe des ScriptedTrigger positionieren wir auch einen gewöhnlichen Triggers/Trigger, vergleiche dazu auch die Abbildung in Kapitel [2.1]. Der ScriptedTrigger an sich ist noch völlig nutzlos, erst wenn er mit AIScript/Actions ausgestattet wurde, kann er Aktionen ausführen.

3 2 AmbientSound scripten

Die einfachste Action ist einen Hintergrund Sound abzuspielen. Dazu benötigen wir nur zwei verschiedene Action-Befehle, diese sind in der nachfolgenden Tabelle sichtbar:

Pos.  AIScript Action  Option  Wert 
ACTION_WaitForEvent  ExternalEvent  TestStart 
ACTION_PlayAmbientSound  AmbientSound
z.B. General Ambience: beep1 
  SoundVolume  255
  SoundPitch  64 
  SoundRadius  128




Zusätzlich muss auch hier wieder ein WaitForEvent/ExternalEvent eines Triggers gesetzt werden, um das AIScript zu starten. Wir nutzen in diesem Beispiel den Namen TestStart, um nicht mit dem vorangegangenen Beispiel aus Kapitel [2] in Konflikt zu kommen. Es kann aber jeder beliebige Name gewählt werden. Hauptsache wir benennen nichts doppelt!

3.3 Dispatcher scripten

Um aus einem ScriptedTrigger etwas Kompliziertes zu bauen, haben wir uns zu einem Lichtorgel-Dispatcher entschieden. Erstelle erstmal einen neuen ScriptedTrigger. Wie auch in den Kapiteln zuvor, muss auch hier wieder ein gewöhnlicher Trigger erstellt werden, der die Lichtorgel auslöst. Dieser wird eingebunden, wie das in den Kapiteln zuvor schon beschrieben wurde, nur diesmal benennen wir das Gebilde mit Dispatcher, um keine Name/Tags doppelt zu nutzen.

Erstelle in der Nähe der bereits gesetzten Actoren zusätzlich einige TriggerLights (diese befinden sich unter Actor/Light/TriggerLight). Die TriggerLights werden erst wie gewöhnliche Lights bearbeitet und ausgerichtet. Die TriggerLights erhalten in den Eigenschaften unter Events/Tag einen eindeutigen Namen und werden auf bInitiallyOn=False gesetzt. Hier nochmals die Änderungen im Detail:




Um den ScriptedTrigger zu einem Dispatcher umzubauen, müssen wir die im Kapitel [1.3] erlernten Action-Befehle in Reihe schalten. Zuerst ein Action_WaitForEvent, dann jeweils einen Action_TriggerEvent, getrennt von einem Action_WaitForTimer. Bitte beachte hierbei genau die gewünschte Reihenfolge, damit später alle Actions genau nach Wunsch ausgeführt werden.

Trage die Actions aus der nachfolgenden Tabelle in den Scripted Trigger ein.





In unserem Beispiel wird der EventA ausgeführt, dann eine halbe Sekunde Pause eingelegt, bevor der EventB ausgeführt wird. Angenommen es fehlt zum Beispiel die Pause (ACTION_WaitForTimer), wird der EventA fast gleichzeitig mit EventB ausgelöst. Die Pause, sorgt für eine Unterbrechung an der richtigen Stelle zwischen den einzelnen Actions. Ganz am Ende wird noch ein ACTION_GotoAction angefügt, damit der Vorgang nach Abschulss nochmals getriggert werden kann und nicht nur einmal durchläuft.

3.4 if-Abfrage einbinden

Die Kombinationen eines AIScriptes mit einer if-Abfrage ist weniger Kompliziert als es auf den ersten Blick den Anschein hat. Sie betrifft jedoch nur die Abfrage eines weiteren zuvor getätigten Events. Man trägt einfach den Name/Tag des zuvor zu betätigenden Triggers in das TriggerConditionTag Feld ein, das ist schon alles. Wurde vorher dieser Trigger getätigt, dann ist das AIScript mit der if-Abfrage gültig und wird ausgeführt, ansonsten wird es nicht ausgeführt. In der nachfolgenden Tabelle und dem Bild kannst du unseren simplen Eintrag sehen:



Wir verlangen in unserem Beispiel, daß der in Kapitel [3.3] erstellte Lichtorgel-Dispatcher zuvor aktiviert wurde. Jetzt müssen natürlich weitere AIScript-Einträge angehängt werden, die etwas ausführen (z.Bsp.: Das Öffnen einer Türe, oder das Abspielen eines Sounds). Praktischerweise kann auch das nachfolgende ChangeLevel-Script angehängt werden.

3.5 ChangeLevel scripten

Um aus einem ScriptedTrigger etwas Spezielles zu basteln, haben wir uns zu einem MapWechsel-Trigger entschieden. Erstelle einen neuen ScriptedTrigger, und einen normalen Trigger, der den ScriptedTrigger auslöst. Danach müssen wieder einige Action-Befehle kombiniert werden, um ein brauchbares Ergebnis zu erreichen. Trage dazu die Actions aus der nachfolgenden Aufstellung in den Scripted Trigger ein:

Achtung: Eine Beispiel Map zum LevelChange liegt dem Word/Doc Tutorial bei!



Mit dem hier gezeigten Beispiel wird ein spezieller Sound abgespielt, danach erfolgt automatisch der Wechsel in eine weitere Map mit dem Namen "outro.ut2", die im UT/Maps Verzeichnis liegen muss. In dieser Map könnte zum Beispiel ein Bonus-Level versteckt sein, oder wie bei unserem Beispiel eine End-Sequenz. In einem Multiplayer-Match verlässt ein Spieler somit den aktuelle Server.

Um direkt auf einen anderen GameServer zu verlinken benutzt Unreal eine herkömmliche URL (Uniform Resource Locators), die nach den RFC 1808 Richtlinien ausgerichtet ist. Mit Hilfe der URL kann ein Level im Netzwerk direkt angesprungen werden. Dabei gibt es folgende Grundsyntax zu beachten:



unreal://server: port/level#teleporter?option1?option2?option3


unreal:// - Dies ist der sogenannte Uni-Identifier, dadurch wird der Browser angewiesen Unreal-URLs zu erkennen.
server: port - hier muss man die Internet-Adresse des Servers eintragen als IP, oder als Unicode
level - der Levelname des Levels den man betreten will, Standard ist "index.ut2"
teleporter - der Name des Teleporters, den man betreten will. (Optional)
?option - hierbei gelten nachfolgende Optionen:
?listen: Verbindung zum Remote Rechner
?restart: startet die Map mit Punktestand 0:0 neu.
?team=xxx: Setzt den Teamnamen fest
?name=xxx: Setzt den Namen des Spielers fest, der eintritt
?password=xxx: Setzt das Passwort, um ein Server zu betreten
?failed=http://unrealed.de: bei fehlerhafter Connection wird auf die URL umgelenkt!
 

Nachwort

Diese Beispiel sollen eine Stütze sein, um selbst tätig zu werden kreative AIScripts einzusetzen. Wenn du dir die Liste aus Kapitel [1.3] nochmals genau ansiehst, hast du alle Action-Befehle auf einen Blick. Der Einsatz von AIScript ermöglichen den Aufbau komplexer Abläufe und Szenen. Mit etwas Geschick lässt sich AIScript auch dazu nutzen Regieanweisungen für Modells in Filmsequenzen zu erzeugen. Dann sind sogar Szenen möglich, wie im UT2003 Intro. Aber auch einfache Aktionen, wie das Öffnen einer Dreiteiligen Türe, die nach Rechts, Links und nach oben wegschwingt.