NewRaven.net - Forum

Hallo, wie vielleicht einige wissen, bin ich im Skripten (noch *ähem*) eine ziemliche Niete... ^_^ ... könnt ihr Euch das mal bitte anschauen?

Was ich möchte: beim Betreten einer Interior-Zelle sollen nacheinander 4 Musikstücke abgespielt werden und dann das Ganze wieder von vorne beginnen (Schleife), bis der PC die Zelle wieder verlässt. Wenn möglich, soll die Musik die laufende MW-Musik ersetzen.

Was ich bis jetzt versucht hab (ich weiß, dass das Thema schon mal aufgetaucht ist, aber da die Suchfunktion im Off. nicht mehr geht... Hm. :huh: )
Hab mir diverse Skripte angeguckt (Musik beim Buchlesen, Musik beim Auf-Falle-Treten etc.) und dann folgendes fabriziert, was sich aber nicht rührt, wenn ich die Zelle betrete:
<!-- FSIZE begin --><span style="font-size:8pt;line-height:100%"><!-- COL begin --><span style="color:blue">
Begin Lu_MusikScript
Short Timer

If ( CellChanged )
( GetPCCell "Geheimes Interior" )

If ( Timer == 0 )
Set Timer to 1

If ( Timer == 1 )
StreamMusic, "aaa.mp3"
Set Timer to 2

Elseif ( Timer == 2 )
StreamMusic, "bbb.mp3"
Set Timer to 3

Elseif ( Timer == 3 )
StreamMusic, "ccc.mp3"
Set Timer to 4

Elseif ( Timer == 4 )
StreamMusic, "ddd.mp3"
Set Timer to 0

Endif
Endif
Endif

End Lu_MusikScript</span><!-- FSIZE end --></span><!-- COL end -->

Oder muss ich das als globales Skript setzen? Oder als Startskript? Oder beides? :blink:

Danke, Lu :)

Warum garnichts passiert...naja deine "if"-Verschachtelung ist etwas unlogisch bzw. falsch...ich werde es jetzt nicht überarbeiten, aber Comments reinschreiben (und erstmal Abstände einzeichnen)...

Begin Lu_MusikScript

Short Timer

If ( CellChanged ) <!-- COL begin --><span style="color:red">; Script läuft nur EINMAL durch</span><!-- COL end -->
......( GetPCCell "Geheimes Interior" ) <!-- COL begin --><span style="color:red">; was ist DAS? Kein if?</span><!-- COL end -->

......If ( Timer == 0 ) <!-- COL begin --><span style="color:red">; führt dazu, dass Timer immer 2 bleibt</span><!-- COL end -->
...........Set Timer to 1

...........If ( Timer == 1 )
................StreamMusic, "aaa.mp3"
................Set Timer to 2

...........Elseif ( Timer == 2 ) <!-- COL begin --><span style="color:red">; wird nicht ausgeführt, da Timer == 1 und ein weiterer Durchlauf nicht gegeben ist (s.o.)</span><!-- COL end -->
.....................StreamMusic, "bbb.mp3"
.....................Set Timer to 3

...........Elseif ( Timer == 3 ) <!-- COL begin --><span style="color:red">; s.o.</span><!-- COL end -->
.....................StreamMusic, "ccc.mp3"
.....................Set Timer to 4

...........Elseif ( Timer == 4 ) <!-- COL begin --><span style="color:red">; s.o.</span><!-- COL end -->
.....................StreamMusic, "ddd.mp3"
.....................Set Timer to 0

...........Endif
......Endif
Endif

End Lu_MusikScript


-----------------------------------------------------------------------------------------------


Was du wahrscheinlich nicht verstehen kannst, ist, dass das Script erst checkt, ob die if-Bedingung zutrifft, wenn nicht, geht sie zum ersten Elseif usw. Wenn sie aber zutirfft, wird alles, was unter if steht, ausgeführt, und dann springt es direkt zu endif. Sodass du mit deiner if-Verschachtelung lediglich die erste Soundfile hättest abspielen können. Warum selbst das nicht geschehen ist, kann ich cnith direkt nachvollziehen, wobei es vielleicht an einem fehlenden if liegen könnte.

Auch solltest du die Abfragen von timer 1 und höher aus dem ( CellChanged ) rausnehmen und das PCGetCell ist von daher auch unnötig, wenn der Gegenstand mit dem Script im Raum ist. Wenn du die Abfrage aus der CellChanged == 1 Bedingung genommen hast, kannst du es aber bei elseif belassen.

Dazu sei gesagt, dass die Musik WIRKLICH direkt nacheinander abgespielt wird, erst startet Musik 1, dann wird im nächsten Frame Musik 2 gestartet und damit Musik 1 gestoppt usw.
Vielleicht benutzt du lieber "Say" und "SayDone" (wenn ich mich recht erinnern funzt das auch mit Activators).

Ich hoffe, ich hab mich verständlich ausgedrückt, und dass ich dir somit helfen konnte. Am besten solltest du dich mal mit SfD auseinandersetzen, dort steht viel drin zu if - elseif - else -endif.

Und noch ein Tipp am Ende: Schreib bei if ( CellChanged ) am besten immer if ( CellChanged == 1 ) hin, das ist besser für die Übersicht. Das gleiche gilt für OnActivate, GetPCCell oder jegliche anderen "boolschen" Funktionen (die entweder 0 oder 1 sind).
Also wenn's einfache Sounds wären würden Aktivatoren genügen.

Für "Say" benötigt man ein animiertes Objekt, d.h. man könnte es nur den Player sagen lassen damit er es bei immer gleicher Lautstärke hört.

In das/die entsprechenden Zellen kann ein Aktivator gepackt werden (z.B. ein Soundmarker ) der das ständig veranlasst. Vgl. Boethias Schädel am Meeresgrund, Sheogorath im Keller irgendwo in Vivec oder Azura's Statue im Schrein an der Azuraküste. Da wird auch in Etappen "gesprochen".
Referenz-URLs