Script Problem

Hey.

Ich weiß nicht ob es ein Bug ist. ch habe hier 2 Scripts geschrieben, die nicht spielbare elemente erst als gespielt markieren, wenn ein player gestartet wird. es funktioniert auch alles wunderbar, nur kann ich dann keine automation mehr einschalten, obwohl der befehl im script vorhanden ist. ???

hier die scripts:

[code]procedure OnPlayerStart ( PlayerControl : IPlayerControl ) ;
begin
PlaybackControl(0).SetOptions([plcoCleanUpHistory]);
PlaybackControl(0).SetOptions([plcoCleanUpHistoryTop]);
PlaybackControl(0).SetOptions([plcoCleanUpNonPlayables]);
PlaybackControl(0).SetOptions([plcoUseRecycleBin]);
PlaybackControl(0).SetOptions([plcoHandleFixedTime]);
PlaybackControl(0).SetOptions([plcoAllowAutomation]);
SystemLog(‘History aufgeräumt !’);
SetTimerInterval(50); // 1000ms = 1 Sec
EnableTimer;
end;
procedure OnTimer ;
begin
PlaybackControl(0).SetOptions([plcoCleanUpHistory]);
PlaybackControl(0).SetOptions([plcoCleanUpHistoryTop]);
PlaybackControl(0).SetOptions([plcoUseRecycleBin]);
PlaybackControl(0).SetOptions([plcoHandleFixedTime]);
PlaybackControl(0).SetOptions([plcoAllowAutomation]);
SystemLog(‘Player spielt!(History normal)’);
DisableTimer;
end;

begin
end.
[/code]

[code]procedure OnPlayerStop ( PlayerControl : IPlayerControl ; Duration : int64 ) ;
begin
if (PlaybackControl(0).GetPlayer(0).GetState=psPlaying) or
(PlaybackControl(0).GetPlayer(1).GetState=psPlaying)
then begin
PlaybackControl(0).SetOptions([plcoCleanUpHistory]);
PlaybackControl(0).SetOptions([plcoCleanUpHistoryTop]);
PlaybackControl(0).SetOptions([plcoUseRecycleBin]);
PlaybackControl(0).SetOptions([plcoHandleFixedTime]);
PlaybackControl(0).SetOptions([plcoAllowAutomation]);
SystemLog(‘Player spielt!(History normal)’);
SetTimerInterval(50); // 1000ms = 1 Sec
EnableTimer;
end;
end;

procedure OnTimer ;
begin
PlaybackControl(0).SetOptions([plcoCleanUpHistory]);
PlaybackControl(0).SetOptions([plcoCleanUpHistoryTop]);
PlaybackControl(0).SetOptions([plcoCleanUpNonPlayables]);
PlaybackControl(0).SetOptions([plcoUseRecycleBin]);
PlaybackControl(0).SetOptions([plcoHandleFixedTime]);
PlaybackControl(0).SetOptions([plcoAllowAutomation]);
SystemLog(‘Player spielt! (max10)’);
DisableTimer;
end;

begin
end.
[/code]

mike

Das Problem ist wahrscheinlich der mehrfache Aufruf von SetOptions mit jeweils einer Option. Damit setzt du nur die einzelne Option und löschst die anderen wieder. Wenn du mehrere Optionen setzen willst, schreib sie nacheinander als Liste in die eckigen Klammern:

PlaybackControl(0).SetOptions([plcoCleanUpHistory, plcoCleanUpHistoryTop, plcoCleanUpNonPlayables, plcoUseRecycleBin, plcoHandleFixedTime, plcoAllowAutomation]);

Wenn man einzelne Optionen löschen oder setzen will, benutzt man - und +, siehe unten.

Vermutlich kommst du auch ohne Timer aus, wenn du ForceUpdate verwendest, etwa so:

PlaybackControl(0).SetOptions(PlaybackControl(0).GetOptions + [plcoCleanUpNonPlayables]); // Option setzen
PlaybackControl(0).ForceUpdate;
PlaybackControl(0).SetOptions(PlaybackControl(0).GetOptions - [plcoCleanUpNonPlayables]); // Option wieder löschen

Das ForceUpdate macht einen Update-Durchlauf durch die Playlist, bei dem dann die Elemente entsprechend behandelt werden. In den meisten Fällen passiert das nach dem SetOptions direkt, mit ForceUpdate kann man es aber erzwingen.

Danke. Hab das jetzt so geändert:

[code]procedure OnPlayerStart ( PlayerControl : IPlayerControl ) ;
begin
PlaybackControl(0).SetOptions(PlaybackControl(0).GetOptions + [plcoCleanUpNonPlayables]); // Option setzen
PlaybackControl(0).ForceUpdate;
PlaybackControl(0).SetOptions(PlaybackControl(0).GetOptions - [plcoCleanUpNonPlayables]); // Option wieder löschen
end;

begin
end.
[/code]

kann noch immer keinen auto modus verwenden ??? sprich das problem besteht immer noch!

Kannst du die beiden SetOptions-Befehle mal auskommentieren? Ist die Automation danach immernoch gesperrt?

was meinst du mit “auskommentieren” ???

http://de.wikipedia.org/wiki/Kommentar_(Programmierung)