Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Funktion ' llSleep' funktioniert in manchen Grids nicht - wer weiß Rat?
#1
Question 
Huhu ihr Skripter und schlaue Köpfe,

ich habe leider feststellen müssen, dass die Funktion ' llSleep ' nicht überall funktioniert. Sie funktioniert z.B. bei mir im Great Canadian Grid und auch in Metropolis, aber im KiWo Grid und auch Icelady's Grid funktioniert sie nicht.

Mein Ziel war, mithilfe von llSleep das Skript zum pausieren zu bringen, so dass es in dieser Zeit NICHT reagiert und nach Ablauf sollte sich das Skript resetten und einen Hovertext verschwinden lassen.
Wie gesagt, bei mir im GCG funktioniert das wunderbar, aber leider nicht in KiWo: das Skript reagiert VOR Ablauf des eingetragenen Float-Wertes (60.0 / 60 Sekunden) wieder, außerdem löscht es den Hovertext nicht (und resettet auch nicht).

Ich habe das Problem jetzt mit einem Timer-Event überbrückt, allerdings ruht das Skript hierbei in der Zwischenzeit nicht, sondern reagiert weiterhin auf die Klicks.

Weiß jemand Rat ob es eine extra OS-Funktion gibt, um llSleep zu ersetzen oder ob es an einer Grid / Sim Einstellung liegt? Huh

LG, Bink
Lache- und die Welt wird mit dir lachen... Schnarche - und du schläfst allein... !

kroatan.de:8002
Zitieren
#2
Vielleicht sind sie einfach abgeschaltet.

llSleep() gilt generell als eine Funktion, deren Nutzung man tunlichst vermeiden sollte, da sie nämlich den Thread der Skriptengine, der sie gerade abarbeitet, zum Pausieren bringt.

Man sollte sie daher vermeiden und statt dessen, wo möglich, Timer verwenden sowie eine eventbasierte Programmierweise.
Zitieren
#3
Huhu Bink

schau mal so könnte es funktionieren

grüsse
Code:
default
{
   state_entry()
   {
       llSay(0, "Restet");
       llResetScript();
       
   }
   touch_start(integer total_number)
   {
       llSetText("test",<1,1,1>,1);
        llSay(0, "touch");
       state zeit;
   }
   
}

// *********ENDE DES EIGENTLICHEN SCRIPTS**************
//**********Beginn neuer state mit allen eigenen Events*******
state zeit
{
   state_entry()
   {
       llSetTimerEvent(60);
   }
   timer()
   {
       llSetTimerEvent(0);
       llSetText("",<1,1,1>,0);
       state default;
   }
}
ska@jabber.ccc.de
skaduwee@jabber.ccc.de

diese Signatur ist in deinem Land nicht verfügbar :-P
Zitieren
#4
Hallo Ska.

Dank Franzjosef sind wir nun dem Problem auf die Schliche gekommen^^.
Ich kenne mich mit Grid- und Sim-Einstellungen ja leider so gar nicht aus, daher hätte ich hier nie die Ursache finden können. Aber offensichtlich ist es so, dass der Teil des Programms, der die Skripte überwacht, denkt, das Skript hätte sich in der Warteschleife aufgehängt, und beendet die Funktion.
Wir haben mit verkürzter Zeit (nur 30 statt 60 Sekunden) getestet - und damit funzt es. Metro und auch der GCG haben da wohl andere Einstellungen, so dass dort längere Wartezeiten toleriert werden ....
Abre auf sowas muss man erstmal kommen :-)

P.S.: Ich hatte das Problem mit einem Timer, so wie du es geschrieben hast, "überbrückt", nur der Timer hat eben den Nachteil, dass das Skript in der Zwischenzeit trotzdem auf "touch" reagiert- und das war eigentlich, was ich mit llSleep vermeiden wollte.
Lache- und die Welt wird mit dir lachen... Schnarche - und du schläfst allein... !

kroatan.de:8002
Zitieren
#5
Halo Bink,

(21.03.2016, 06:27)Bink schrieb: P.S.: Ich hatte das Problem mit einem Timer, so wie du es geschrieben hast, "überbrückt", nur der Timer hat eben den Nachteil, dass das Skript in der Zwischenzeit trotzdem auf "touch" reagiert- und das war eigentlich, was ich mit llSleep vermeiden wollte.

das touch_start ist für die Zeit des timers ausgeschaltet, weil das Script vom state default ins state zeit springt. Beide scriptteile sind voneinander "gekapselt". Im state zeit ist kein touch_start, somit kannst du auf das prim rumtouchen bis es Beulen hat, nur vor Ablauf der Zeit rührt sich da nichts. Ich habe es mal noch mit Kommentaren deutlicher gemacht. Wenn ich beim Kommentieren kein Fehler eingebastelt habe, kannst du es so wie es ist testen. Beim touch wird der PrimText gesetzt, danach läuft die zeit in der weiter nichts passiert und keine Interaktionen möglich sind. Nach Ablauf der Zeit wird der PrimText zurückgesetzt und das llResetScript(); ausgeführt, sagt aber vorher beschied Wink

Grüsse
ska@jabber.ccc.de
skaduwee@jabber.ccc.de

diese Signatur ist in deinem Land nicht verfügbar :-P
Zitieren
#6
Bitte llResetScript(); aus dem default.state_entry() rauswerfen. Das hat da nichts verloren und wird zudem zu einen No-Op.
\/ bereinigte Version \/
Code:
//**********default State mit eigenen Events (nach reset erreicht) *******
default
{
   state_entry()
   {
       llSay(0, "Restet");
   }
   touch_start(integer total_number)
   {
       llSetText("test",<1,1,1>,1);
        llSay(0, "touch");
       state zeit;
   }
  
}

//**********neuer State zeit mit eigenen Events *******
state zeit
{
   state_entry()
   {
       llSetTimerEvent(60);
   }
   timer()
   {
       llSetTimerEvent(0);
       llSetText("",<1,1,1>,0);
       state default;
   }
}

Der State default beinhaltet alles was direkt nach Script Reset aktiv wird.
Darunter auch state_entry() welche nur bei Eintritt in den State (Script Reset oder State Wechsel) ausgeführt wird.
Das touch_start triggert einen state Wechsel nach zeit.
In Zeit ist kein touch_start Event und somit interessiert sich das Skript dann auch nicht mehr für irgendwelches Klicken.
durch state_entry() in zeit wird der Timer auf 60s eingerichtet.
Nach Ablauf wird timer() getriggert und dieser muss den Timer wieder abschalten (Timer ist stateübergreifend und wiederholend) und abschliessend wird zurück nach default gewechselt.

Gruss Freaky
Die ganze Welt ist ein Irrenhaus und wir sind nur die Kandidaten  ;)
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  siebenmeilenstiefel (neue osl-Funktion) Klarabella Karamell 5 2.466 04.08.2011, 09:46
Letzter Beitrag: Martynuschka Olkhovsky
  Ein Script fuer Mailbox mit NC funktion Ezry Aldrin 6 2.226 10.08.2010, 15:13
Letzter Beitrag: Klarabella Karamell

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste