Oblivion:Tropfen in Tropfsteinhöhle

Aus Skript-Wiki
Wechseln zu: Navigation, Suche

Thema

Trotz einiger Vorbehalte gegenüber PlaceAtMe ist das Kommando nützlich, wenn man weiß, was man tut. Mit PlaceAtMe gibt es etliche sinnvolle Anwendungen in Scripts.


Anwendung

Aufgabenstellung

Es sollen Tropfen von den Stalaktiten einer Tropfsteinhöhle fallen. Diese Tropfen fallen in einen unterirdischen See. Dass sie auf festen Grund fallen, ist nicht erforderlich. Der Aufschlag der Tropfen auf die Wasseroberfläche soll realistisch sein (Geräusch und Aussehen).


Theorie

Um Geräusch und Aussehen des Aufpralls zu bekommen, müssen die Tropfen Objekte mit Havok sein.

PlaceAtMe ist ein Kommando, um Dinge in die Welt zu setzen. Es wird davor gewarnt, dies Kommando zu nutzen, da auf diese Weise Referenzen in die Welt gesetzt werden, die im SaveGames verwaltet werden müssen. Gerade bei der vorliegenden Aufgabe werden kontinuierlich Referenzen erzeugt. Wenn also mit PlaceAtMe gearbeitet wird, muss man sich um die Referenzen kümmern, sie also irgendwie wieder entsorgen.


Realisierung

Umgebung

Es wird eine Höhle benötigt, die einen See enthält, also zum großen Teil mit Wasser gefüllt ist. Es werden Tropfen benötigt, die an die Spitzen von Stalaktiten angebracht werden. Als Base Object werden modifizierte Perlen benutzt. Ferner benötigt man Base Objects mit Havok als fallende Tropfen. Perlen bieten sich vom Aussehen her an. Die Seeoberfläche wird mit einer Triggerbox bedeckt. Das sollte etwa so wie in der Abbildung aussehen.

Bath.png

Außerdem benötigt man noch einen Container (mit der Referenz DripBarrelRef), der sich nicht zugänglich in der Zelle befindet. Am einfachsten ist es, den Container wie die Händler-Container unterhalb des begehbaren Bodens der Cell zu platzieren.


Script

<tesscript>Scn TrigZoneWaterDrop

destroy drops generatet by Placeatme
when the surface is triggered the drop will be put into a container
originated
keris, 14.11.07

ref TrigRef ref OverflowChest short Triggered1

Begin OnTrigger

    Set  OverflowChest to DripBarrelRef
    OverflowChest.RemoveAllItems
    Set TrigRef to GetActionRef
      if TrigRef.GetIsID Gem1Pearl
         TrigRef.Disable
         TrigRef.Activate OverflowChest
      endif
    endif

End </tesscript>

<tesscript>Scn WaterDropScript

managing one drop
the drop will be enabled, disabled and place a pearl into the world
originated
keris, 12.11.07


short InitDone short RunTimer long DropScale float Xpos float Ypos float Zpos float HalfTime float Timer Ref FallingDropRef

Begin OnLoad

    SetScale 0.5
    Set Xpos to GetStartingPos x
    Set Ypos to GetStartingPos y
    Set Zpos to GetStartingPos z
    Set HalfTime to 5 + GetRandomPercent / 20 ; different intervals  for different drops (5..10)
    Set RunTimer to 1 ; starting position is enabled

End

Begin OnActivate

    Return ; can‘t be taken

End

Begin GameMode

    Set Timer to Timer + GetSecondsPassed
    if RunTimer == 1
         if Timer > HalfTime
              Set RunTimer to 2
              Set Timer to 0
              Set FallingDropRef to PlaceAtMe Gem1Pearl 1
              FallingDropRef.SetScale 0.5
              FallingDropRef.SetPos x xpos
              FallingDropRef.SetPos y ypos
              FallingDropRef.SetPos z zpos
              Disable
         endif
    elseif RunTimer == 2
         if Timer > HalfTime
              Set RunTimer to 1
              Set Timer to 0
              Enable
              SetScale 0.5
         endif
    endif

End </tesscript>


Handhabung

WaterDropScript liegt auf den Tropfen unter den Stalaktiten. Für jeden Tropfen werden unterschiedliche Intervalle (Halftimer) für das Heruntertropfen definiert. Sobald ein Tropfen fallen soll (Halftimer ist um), wird der Tropfen disabled, eine Perle wird an seine Stelle gesetzt und fällt ins Wasser. Wenn Halftimer ein zweites Mal um ist, wird der Tropfen wieder enabled und ist damit am Stalaktiten wieder sichtbar und der Zyklus beginnt von vorn.

TrigZoneWaterDrop liegt auf der Triggerbox. Wenn nun eine Perle in die Triggerbox fällt, wird die Perle disabled und in den Container befördert. Der Container wird regelmäßig geleert, so dass die mit PlaceAtMe neu erzeugten Referenzen gleich wieder verschwinden. Ddadurch, dass die Triggerbox mit der Wasseroberfläche abschließt, d.h. knapp darunter liegt, „verschwinden“ die Perlen-Tropfen im Wasser.

Weitere Information



Weitere Scripts aus dieser Kategorie

         



{{#if: Referenzen | }}

{{#if: Level 4 Scripts | }}