Bewegungsscript
Die folgende Anleitung zeigt, wie ihr ein Objekt zum Bewegen bringen könnt. Damit ist nicht gemeint, dass es auf die Physik von Oblivion reagiert, sondern eine vorgegebene Strecke entlängfährt. Dies geht in alle Richtungen. Die Scripts sind so geschrieben, dass alle - sogar jene ohne Scripterfahrung - damit umgehen können (OBSE wird nicht benötigt).
1) gewünschtes Objekt beweglich machen
Der folgende Script dient dazu, ein Objekt auf der x-, y- oder z-Koordinate zu bewegen. Wahlweise auch auf 2 oder allen 3. Du kannst die Geschwindigkeit individuell einstellen, sowie die Entfernung, die das Objekt zurücklegen soll. Damit kannst du zum Beispiel ein Falltor um 400 units nach oben bewegen lassen.
Hier also der Script (achte auf die Kommentare hinter den Scriptzeilen):
Code:
scn [COLOR="Green"]Bewegungsscript ;Dies ist der Scriptname. Benenne ihn so um, dass du ihn schnell wiederfindest[/COLOR]
short activated
float locx
float locy
float locz
float stopx
float stopy
float stopz
[COLOR="red"]float stopxb
float stopyb
float stopzb[/COLOR]
float speedx
float speedy
float speedz
short wayx
short wayy
short wayz
ref myself
Begin OnActivate
if activated == 0
set myself to getself
set stopx to myself.getpos x [COLOR="Green"]+ 500 ;bestimmt, wie weit sich das Objekt auf der x-Koordinate bewegen soll (- und + bestimmen die Richtung auf der x-Koordinate)[/COLOR]
set stopy to myself.getpos y [COLOR="Green"]+ 350 ;bestimmt, wie weit sich das Objekt auf der y-Koordinate bewegen soll (- und + bestimmen die Richtung auf der y-Koordinate)[/COLOR]
set stopz to myself.getpos z [COLOR="Green"]- 200 ;bestimmt, wie weit sich das Objekt auf der z-Koordinate bewegen soll (- und + bestimmen die Richtung auf der z-Koordinate)[/COLOR]
[COLOR="Red"] set stopxb to myself.getpos x
set stopyb to myself.getpos y
set stopzb to myself.getpos z[/COLOR]
set speedx to [COLOR="Green"]5 ;bestimmt die Geschwindigkeit auf der x-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)[/COLOR]
set speedy to [COLOR="Green"]3.5 ;bestimmt die Geschwindigkeit auf der y-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)[/COLOR]
set speedz to [COLOR="Green"]-1.8 ;bestimmt die Geschwindigkeit auf der z-Koordinate (muss negativ sein, wenn der Wert bei der Richtung auch negativ ist)[/COLOR]
If stopx > myself.getpos x
set wayx to 1
Elseif stopx < myself.getpos x
set wayx to -1
Endif
If stopy > myself.getpos y
set wayy to 1
Elseif stopy < myself.getpos y
set wayy to -1
Endif
If stopz > myself.getpos z
set wayz to 1
Elseif stopz < myself.getpos z
set wayz to -1
Endif
set activated to 1
[COLOR="red"]Elseif (activated == 1)
set activated to 2[/COLOR]
[COLOR="Blue"]Elseif (activated == 2)
set activated to 1[/COLOR]
Endif
End
Begin GameMode
if activated == 0
return
Elseif activated == 1
set locx to myself.getpos x + speedx
set locy to myself.getpos y + speedy
set locz to myself.getpos z + speedz
If (wayx == 1) && (locx < stopx)
myself.setpos x locx
Elseif (wayx == -1) && (locx > stopx)
myself.setpos x locx
Endif
If (wayy == 1) && (locy < stopy)
myself.setpos y locy
Elseif (wayy == -1) && (locy > stopy)
myself.setpos y locy
Endif
If (wayz == 1) && (locz < stopz)
myself.setpos z locz
Elseif (wayz == -1) && (locz > stopz)
myself.setpos z locz
Endif
[COLOR="Red"]Elseif activated == 2
set locx to myself.getpos x - speedx
set locy to myself.getpos y - speedy
set locz to myself.getpos z - speedz
If (wayx == 1) && (locx > stopxb)
myself.setpos x locx
Elseif (wayx == -1) && (locx < stopxb)
myself.setpos x locx
Endif
If (wayy == 1) && (locy > stopyb)
myself.setpos y locy
Elseif (wayy == -1) && (locy < stopyb)
myself.setpos y locy
Endif
If (wayz == 1) && (locz > stopzb)
myself.setpos z locz
Elseif (wayz == -1) && (locz < stopzb)
myself.setpos z locz
Endif[/COLOR]
Endif
End
Beschreibung: Die grünen Kommentare sollten selbsterklärend sein. Eines noch: Wenn du keine Bewegung um eine bestimmte Koordinate willst, ersetzt du die zu ersetzenden Werte der Koordinate durch 0.
Den rot markierten Teil müsst ihr nur übernehmen, wenn ihr wollt, dass man die Bewegung beim zweiten mal drücken wieder rückgängig ausführen kann.
Den blau markierten Teil müsst ihr übernehmen, wenn ihr wollt, dass man die Bwegung so oft man will vor- und rückwärts abspielen kann.
2)zu bewegendes Objekt per Schalter aktivieren
Vorraussetzung ist, dass du Schritt 1 komplett abgeschlossen hast.
Zuerst platzierst du das Objekt mit dem Bewegungsscript an die gewünschte Stelle in der Welt. Dann klickst du doppelt auf das Objekt und machst in dem neuen Fenster einen Haken bei "Persistent Reference".
Dann erstellst du folgenden Script für den Schalter :
Code:
[COLOR="Green"]scn ScriptName ;Dies ist der Scriptname. Benenne ihn so um, dass du ihn schnell wiederfindest[/COLOR]
ref par
ref myself
Begin OnActivate
set par to getparentref
set myself to getself
par.activate myself 1
End
Nachdem du den Schalter in der Welt platziert hast, klickst du doppelt auf ihn. Anschließend gibt es in dem neuen Fenster einen Tab namens "Enable Parent. Da klickst du drauf und dann klickst du auf den Knopf "select Reference in Render Window" o.ä. Dann wird der Cursor im 3D-fenster zu einer Art Zeilscheibe, die sich weiß verfärbt, wenn du über das bewegliche Objekt fährst. Du klickst dann einfach drauf.
Mit OK bestätigen. Fertig.
Sollten Probleme auftreten, gebt mir bitte per PN oder hier im Thread Bescheid.
Gildur