Oblivion:Zellwechsel des Spielers erkennen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche

Thema

Wie kann man den Zellwechsel des Spielers oder auch eines NPCs erkennen?

Manchmal muss man herausfinden, ob der Spieler die Zelle wechselt, z.B. wenn man sein Eigenes Musiksystem in seinen Zellen haben will.

Anwendung

Aufgabenstellung

Es muss erkannt werden, wann der Spieler die Zelle wechselt, es soll dann eine Nachricht angezeigt werden.


Theorie

Wir erstellen uns ein kleines Item oder ein Objekt, dessen Größe wir im Render Window sehr sehr klein machen. Dazu stellen wir für das Item eine Persistent ReferenceID "ZellWechselFlyRef" ein.

Wozu das ganze?

Weil es leider keinen Befehl gibt, der abfragt, ob der Spieler die Zelle wechselt, sondern nur GetInSameCell, müssen wir etwas erfinderisch werden. Und in dem Moment kommt unser ZellWechselFly-Objekt zum Einsatz. Diese wird immer per <tesscript>MoveTo player</tesscript> zum Spieler bewegt. Und zwar immer, wenn die Abfrage <tesscript>ZellWechselFlyREF.GetInSameCell player </tesscript> den Wert 0 hat, oder in anderen Worten, wenn das Objekt nicht in der gleichen Zelle wie der Spieler ist. Wenn der Spieler die Zelle verlässt, wird die GetInSameCell Abfrage 0 ausgeben. Das heißt umgekehrt: Wenn <tesscript>if ZellWechselFlyREF.GetInSameCell player == 0

Spieler hat die Zelle gewechselt"

</tesscript>

Probleme

Es werden nicht nur "Der Spieler geht durch eine Tür in eine andere Zelle" - Zellwechsel erkannt. Bei dieser Methode wird auch ein Zellwechsel Im Exterior Bereich erkannt, also wenn man sich von einem Quad ins nächste bewegt. Um das zu unterscheiden, werden wir noch den Befehl IsInInterior benutzen.

Realisierung

Umgebung

Wir erstellen ein neues Item, geben dem Item die Persistent Reference ID "ZellwechselFly" und machen das Objekt sehr klein.

CellDetect.jpg CellDetectRef2.jpg

Script

<tesscript> scn ZellwechselErkennen

written by sinHHHans

short drinnen

Begin Gamemode if player.IsInInterior == 1 && drinnen == 0 set drinnen to 1 elseif player.IsInInterior == 0 && drinnen == 1 set drinnen to 0 endif

if player.GetInSameCell ZellWechselFlyREF == 0 && drinnen == 1 message "Zellwechsel im Interior" ZellWechselFlyREF.moveto player elseif player.GetInSameCell ZellWechselFlyREF== 0 && drinnen == 0 if ZellWechselFlyREF.IsInInterior == 1 message "Zellwechsel nach Exterior" ZellWechselFlyREF.moveto player elseif ZellWechselFlyREF.IsInInterior == 0 message "Zellwechsel innerhalb Exterior" ZellWechselFlyREF.moveto player endif endif End </tesscript>


Handhabung

Das Skript wird als Questscript laufen und im Hintergrund immer wieder prüfen, ob der Spieler die Zelle verlässt.



Weitere Scripts aus dieser Kategorie

 

  

         



    {{#if: Position | }} {{#if: Level_2_Scripts | }}