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 | }}

