Oblivion:Tropfen in Tropfsteinhöhle
Inhaltsverzeichnis
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.
Außerdem benötigt man noch einen essentiellen Actor (am einfachsten in einer Dummy Cell) mit einer persistenten Referenz TrashContainerRef.
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 TrashContainerRef OverflowChest.RemoveAllItems Set TrigRef to GetActionRef if TrigRef.GetIsID Gem1Pearl 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 zufällig 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. Dadurch, 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
Level 2
{{#if: Referenzen erhalten | }}