PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Scriptproblem



dreamer49
08-09-05, 12:00
Hi,

habe mir vor einiger Zeit so ein Displaycase runter geladen und in mein Haus gestellt. Besteht aus zwei Teilen: einem Tisch als Unterteil und einer gläsernen Abdeckung als Oberteil. Um das Ding jetzt auch endlich benutzen zu können wollte ich per Script das Oberteil nach hinten rotieren lassen. Hat auch soweit funktioniert. Aber eigentlich sollte es auf nochmaliges aktivieren wieder in die Ausgangsposition zurück gehen. Tut es aber nicht. Verweigert mir jede weitere Zusammenarbeit. Habe mal den funktionierenden Teil hier runter kopiert. Vielleicht kann mir ja jemand helfen dass ich dieses Script endlich fertig bekomme. Währe wirklich großartig.

Sitze nähmlich jetzt schon den ganzen Tag daran

begin nh_displayscript

float timer
short state
short CaseOpen

if ( MenuMode == 1 )
return
endif

if ( state == 0 )
if ( OnActivate == 1 )
set state to 1
endif
elseif ( state == 1 )
set timer to ( timer + GetSecondsPassed )
if ( timer < 1 )
rotate x 45

else set timer to 0
set CaseOpen to 1
set state to -1

endif
endif

end

dreamer49
08-09-05, 12:00
Hi,

habe mir vor einiger Zeit so ein Displaycase runter geladen und in mein Haus gestellt. Besteht aus zwei Teilen: einem Tisch als Unterteil und einer gläsernen Abdeckung als Oberteil. Um das Ding jetzt auch endlich benutzen zu können wollte ich per Script das Oberteil nach hinten rotieren lassen. Hat auch soweit funktioniert. Aber eigentlich sollte es auf nochmaliges aktivieren wieder in die Ausgangsposition zurück gehen. Tut es aber nicht. Verweigert mir jede weitere Zusammenarbeit. Habe mal den funktionierenden Teil hier runter kopiert. Vielleicht kann mir ja jemand helfen dass ich dieses Script endlich fertig bekomme. Währe wirklich großartig.

Sitze nähmlich jetzt schon den ganzen Tag daran

begin nh_displayscript

float timer
short state
short CaseOpen

if ( MenuMode == 1 )
return
endif

if ( state == 0 )
if ( OnActivate == 1 )
set state to 1
endif
elseif ( state == 1 )
set timer to ( timer + GetSecondsPassed )
if ( timer &lt; 1 )
rotate x 45

else set timer to 0
set CaseOpen to 1
set state to -1

endif
endif

end

ReneMiner
08-09-05, 12:09
nichts genaues weiss man nicht aber ich schätze mal es liegt an deinem timer. auf keinen fall geht aber ein else set timer to 0 in einer zeile.

versuch es ohne timer:

if ( GetAngle [X, Y oder Z] &lt; [GewünschterWinkel] )
rotateworld [X,Y oder Z] EinPaarGradproSekunde
elseif ( GetAngle [X,Y oder Z] &gt; [GewünschterWinkel] )
rotateworld [X,Y oder Z] -EinPaarGradProSekunde
endif


geht aber nur wenn Du nicht über die 360 bzw unter die 0 drehst.

dreamer49
08-09-05, 14:56
tut mir Leid. Aber ohne Timer funktioniert es nicht. Hatte es schon vorher versucht. Ohne Timer bewegt es sich nur immer um wenige Zentimeter in die angegebene Richtung. Aber nicht um die vollen 45 Grad.

Das Problem ist auch nicht wie ich dieses Teil rotieren lassen kann sondern wie ich es wieder zurück in die Ausgangsposition bekomme.

ReneMiner
08-09-05, 23:24
die Klappe muss im Editor natürlich zu sein sonst brauchst Du ein KlappeZuUndAuf- Script.


begin KlappeAufUndZu

float timer
short Aufmachen
;0 = zu, 1 =öffnen, 2 =offen, -1 =schliessen



if ( menuMode == 1 )
return
endif

if ( Aufmachen == 0 )

set Aufmachen to OnActivate
return

elseif ( Aufmachen == 1 )

set timer to timer + GetSecondsPassed

if ( timer &lt; 1 )

; für eine Sekunde lang 45? um X drehen

RotateWorld X 45

else

; dann sollte offen sein

set Aufmachen to 2
set timer to 0

endif

elseif ( Aufmachen == 2 )

; wenn der spieler sie nicht vorher schliesst:

if ( OnActivate == 1 )
set timer to 0
set Aufmachen to -1
return
endif


; bleibt sie 30 Sekunden offen und geht dann wieder zu

set Timer to Timer + GetSecondsPassed

if ( Timer &gt; 30 )
set timer to 0
set Aufmachen to -1
endif


elseif ( Aufmachen == -1 )

set timer to timer + GetSecondsPassed

if ( timer &lt; 1 )

; für eine Sekunde lang -45? um X drehen

RotateWorld X -45

else

; dann sollte wieder zu sein

set Aufmachen to 0
set timer to 0

endif

end

dreamer49
09-09-05, 03:35
Vielen, vielen Dank für das Script. Es funktioniert jetzt perfekt. Genau so wie ich das wollte.

Finde ich übrigens super dass Du alles kommentiert hast. Wie sollte ich auch sonst endlich scripten lernen wenn ich nur einfach Code kopiere ohne zu wissen was ich tue. http://forums.ubi.com/infopop/emoticons/icon_smile.gif