Oblivion:Companion/Begleiter

Aus Skript-Wiki
Wechseln zu: Navigation, Suche

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.


Companion Packages.png


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.

Companion Follow Package.png


Weitere Information



Weitere Scripts aus dieser Kategorie

Level 1

Level 2

  

       



    {{#if: Attribute und Fertigkeiten | }}

    {{#if: Level_3_Scripts | }}