• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Multiuserscript

K

Klaus Glassfield

Guest
Hi,

ich habe folgendes Problem. Ich habe ein Script das Dialogboxen erzeugt und je nach Auswahl in einer Dialogbox ,erscheint ein weitere. Die Antworten der Dialogboxen werden dann in Variablen gespeichert. Wenn nun natürlich ein andere Avatar das Script nochmal startet während der erste es noch benutzt wird das ganze durcheinander gewürfelt. Gibt es da eine Lösung für?

Alternativ würde mir nur einfallen über externes PHP Backend zu gehen und nur das Frontend in SL zu machen.
 
ja,
das Script hat einen Listener der auf einem bestimmten Kanal auf die Dialogboxen hört, wenn du diesen Listener so umstellst, das er nur auf den hört der die erste Box anfragt, kommt nichts mehr durcheinandere. Wenn jemand dazu kommt kanst du ihm ja eine Info ausgebnen das das System gerade in Verwendung ist.

Um das ganze sauber zu machen solltest du auch nach LlListenRemove - Second Life Wiki schauen (den ab 64 ist da schluss, ein statewchsel löscht alle offenen listener, vielleicht die sicherste Lösung)
Und einen Timer kannst du verwenden falls einer mal die Dialogboxen nicht bis zum Ende durchklickt und alles in der Luft hängt.
 
Bei einer vernümftigen Datenstruktur musst Du nicht einmal die Box auf einen user beschränken - der Kanal des llListen kann ja definieren, welcher User jeweils "bearbeitet" wird. Und Deine Variable wird dann halt eine Liste - und schon behandelst Du nicht maximal einen user, sondern eben 62 bis 64.
 
Jhary und Takeshi haben Recht, das kann man entweder über wechselnde Kanäle abfedern, wobei man den Kanal aus der ID des Anwählers errechnet - oder aber man macht es sich etwas leichter und setzt ein Flag, sobald der Prozess in Gang ist. Ist das Flag gesetzt, schließt man weitere Anfragen außer der des ursprünglichen Anwählers aus (User-Key). Ist alles fertig, setzt man das Flag zurück. Totsicher auf diese Weise.

Man sollte zusätzlich allerdings auch einen Timer setzen, der das Ganze nach einer Zeit X wieder resetet.

Beide Methoden haben Vor- und Nachteile. Methode eins macht es bis zu 64 Usern möglich, gleichzeitig mit dem Item zu arbeiten - und verursacht, sobald wirkliche mehrere es gleichzeitig nutzen, ziemlich viel Lag. Außerdem wird es wegen der Listenverwaltung ein eher längeres Script. Und wenn das Ergebnis EINE bestimmte Sache ist, macht das auch eigentlich keinen Sinn.

Methode 2 hat den Vorteil, dass sie ohne Listen etc. auskommt. Ist aber bereits jemand zugange, kann es nur derjenige für X Sekunden nutzen. Lässt sich aber leicht abfangen, indem man dem zweiten, dritten etc. einfach eine Meldung anzeigt, dass das Teil in Benutzung ist. Das Script wird auf jeden Fall kürzer sein und im Ernstfall weniger Lag erzeugen.
 

Users who are viewing this thread

Zurück
Oben Unten