Oblivion:Companion/Begleiter
Inhaltsverzeichnis
Thema
Ein Begleiter oder Companion ist eine nützliche Erfindung, die dem Player in vielerlei Hinsicht helfen kann. Ein nützlicher Teil eines Companion-Scripts ist das Speichern von Variablen in den ActorValues.
Anwendung
Aufgabenstellung
Ein Begleiter soll zur Verfügung stehen. Er soll unabhängig von den Gilden sein, reparieren können, auf Aufforderung folgen, warten oder zum Ausgangspunkt zurückkehren und dort warten. Er soll mit dem Player gegen dessen Feinde kämpfen und zusammen mit dem Player schleichen können.
Theorie
Eine Aktivierungs-Event kann mit einem OnActivate-Block aufgefangen werden. Alternativen können in einem OnActivate-Block mit einer Messagebox gewählt werden, die Verwaltung der Alternativen muss aber in einem GameMode-Block (oder MenuMode-Block) stattfinden. Informationen können in Actorvalues gespeichert werden. Damit sind sie in den Bedingungsfenstern zugreifbar.
Realisierung
Umgebung
Der Ausgangspunkt wird mit einem XMarker versehen. Der Begleiter MyGard (Referenz: MyGuardRef) befindet sich auf dem Ausgangspunkt. Da der Alchemie-Wert genutzt wird, um Informationen zu speichern, wird er im Base-Object des Guards auf Null gesetzt. Der Guard wird der Faktion „Player“ zugeordnet, außerdem erhält er die in folgender Graphik angezeigten Packages.
Das Follow-Package hat den Player als Target, das Wander-Package lässt den NPC am aktuellen Ort (near current location) ein wenig herum wandern und das UseItemAt-Package kann genutzt werden, um ein Item zu Hause zu nutzen (z.B. ein Stuhl, auf den der NPC sich setzen soll).
Script
<tesscript>Scriptname MyGuard
- Managing Packages for my Guards
- originated
- keris, 20.11.07
short GuardChoice short GuardButton short GuardPackage ref GuardRef
- GuardPackage
- 0 >> talk (service)
- 1 >> follow
- 2 >> wait and look around
- 3 >> go home and stay there
Begin OnActivate
Set GuardRef to GetSelf
if ( IsActionRef Player == 1 ) SetIgnoreFriendlyHits 1 if ( GuardRef.IsInCombat == 1 ) Return else if GuardChoice == 0 MessageBox "Aktionen der Wache?" "Reden!" "Folgen" "Warten" "Zurück nach Hause" "< Abbruch >" Set GuardChoice to 1 else Set GuardChoice to 0 Activate Player endif endif else Activate endif
End
Begin GameMode
if (GuardPackage == 1)
if Player.IsSneaking == 0 SetForceSneak 0 endif if (Player.IsSneaking == 1 && GuardRef.IsInCombat == 0) SetForceSneak 1 endif
if Player.IsWeaponOut == 1 SetAlert 1 else SetAlert 0 endif
; force follow if GuardRef.IsInCombat == 0 if (Player.GetPos z) > ((GetPos z) + 700) MoveTo Player elseif (Player.GetPos z) < ((GetPos z) - 700) MoveTo Player endif if (GetDistance Player > 5500) MoveTo Player endif endif endif
if ( GuardChoice == 1 ) Set GuardButton to GetButtonPressed
if ( GuardButton == 0 ) Set GuardChoice to 0
Activate Player ;no reset of GuardChoice Return elseif ( GuardButton == 1 ) if ( GuardPackage == 1 ) Set GuardChoice to 0 Return else Set GuardPackage to 1 GuardRef.SetActorValue Alchemy GuardPackage Set GuardChoice to 0 Return endif elseif ( GuardButton == 2 ) if ( GuardPackage == 2 ) Set GuardChoice to 0 Return else Set GuardPackage to 2 GuardRef.SetActorValue Alchemy GuardPackage Set GuardChoice to 0 Return endif elseif ( GuardButton == 3 ) if ( GuardPackage == 3 ) Set GuardChoice to 0 Return else Set GuardPackage to 3 GuardRef.SetActorValue Alchemy GuardPackage Set GuardChoice to 0 Return endif elseif ( GuardButton == 4 ) Set GuardChoice to 0 Return endif
endif
End</tesscript>
Handhabung
Das Script liegt auf dem Guard. Die ActorValues sind in den Conditions der Packages vermerkt. Als Beispiel möge das folgende Bild dienen.
Weitere Information
Weitere Scripts aus dieser Kategorie
Level 1
Level 2
{{#if: Attribute und Fertigkeiten | }}