• 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.

OS Grid - (Scriptfrage) automatische Ladeneingangs Doppeltür

Hallo,
Kann mir bitte einer der Script Meister eine Hilfestellung geben?
ich habe im OSGrid ein Geschäft mit einer Eingangstür welche aus zwei Hälften besteht
(jede Hälfte ist eine Glastür und besteht aus 2 Prims - Glas + Rahmen).
Ich berühr die rechte Seite - es schiebt sich die rechte Seite nach rechts. Beim Berühren der Linken Seite schiebt sich die Linke Seite nach links.
Ich möchte es so verändern, dass wenn man eine Tür berührt, oder man in die Nähe der Tür kommt, sich beide Türen gleichzeitig in ihre Richtung öffnen und nach einer Zeit wieder schliessen.
 
hi,

die beiden Türen stehen auf touch.
Wenn Du sie auf LLlisten umstellst und in der ensprechenden Position vor den Türen einen Sensor hingstellt wird sollte es gehen.

Der Sensor wird berührt ( z.B. beim "drüberlaufen" ) und "sagt" den Türen, dass sie aufgehen sollen.
 
hi,

die beiden Türen stehen auf touch.
Wenn Du sie auf LLlisten umstellst und in der ensprechenden Position vor den Türen einen Sensor hingstellt wird sollte es gehen.

Der Sensor wird berührt ( z.B. beim "drüberlaufen" ) und "sagt" den Türen, dass sie aufgehen sollen.
Vielen Dank für Deine schnelle Hilfe. Könntest Du mir Bitte erklären, wie ich den Sensor mit den Türen "sprechen" lasse? Sorry ich bin absoluter Script Laie :-(
Wie stell ich es an, dass automatisch nach 20 sekunden die Türen geschlossen werden?
 
Das script in den Türen solltest Du abändern :

Code:
default
{
    state_entry()
    {
// Höre auf Kanal 99 auf das Objekt Schalter
llListen(99, "Schalter", NULL_KEY,"");
    }

listen(integer channel, string name, key id, string message)
{
// untersuche ob wir eine Nachricht von unserem Schalter erhalten haben
if (name == "Schalter")
{
    hier weiterer code um die Türen zu öffnen
Hier das Schalterscript :

Code:
default
{
     collision_start(integer num_detected) 
     {
        llSay(99, llDetectedName(0) + " hat getroffen"); // 99 ist  kommunikationskanal mit Tür
   llSleep(20);  //  20sec  keine weitere Meldung - script "schläft"

    }
}
Das "schlafen" des scriptes bewirkt, dass, wenn jemand mehrmals über den Schalter läuft keine weiteren Meldungen rausgehen um die Tür nicht durcheinander zu bringen. Die 15 sec sollten aber identisch sein mit der Zeit, die die Tür offen ist.

Ah- nochwas, der Schalter muss auch Schalter heissen.

Das schliessen der Tür kannst Du entweder mit einem Timer machen - oder auch mit sleep.
Das aber im Türscript an ensprechender Stelle, also da, wo die Tür wieder schliesst.

Den Schalter kannst Du als Platte einfach auf den Boden legen.
 
Ja, die Methode mit dem Sensor ist oft benutzt und hat den großen Vorteil, dass beide Türen gleichzeitig den Öffnen-Befehl bekommen und damit auch bei Lag eine gute Gleichmäßigkeit erreicht wird.

Ich mag noch eine Alternative vorschlagen, da man sowieso in beiden Türhälften einen Listener braucht, der auf den Sensor hört, könnte man auch bei der Touch - Funktion bleiben, und die beiden Türen sagen der jeweils anderen, dass sie auch aufgehen soll.
Also: wenn rechts geklickt wird, sagt sie erst mal auf Kanal 99 der anderen, dass sie das auch tun soll.
Damit der Befehl dann nicht doppelt ausgeführt wird, kann man in den llListen-Trigger die Objektnamen der jeweils anderen Türhälfte eintragen, und hat auch das gewährleistet.

Und NOCH schöner wäre natürlich, wenn die beiden Türen verlinkt wären, und die Kommunikation per Linkmessages stattfinden könnte ... dann hätte man zwei immer offene Listener gespart.
 
Und NOCH schöner wäre natürlich, wenn die beiden Türen verlinkt wären, und die Kommunikation per Linkmessages stattfinden könnte ... dann hätte man zwei immer offene Listener gespart.

Und noch schoener ist es, wenn es nur um schiebetueren geht, das ganze per llSetlinkPrimitiveParams mit nur einem einzigen Script im root zu bewirken.

LG
Dae
 
Und noch schoener ist es, wenn es nur um schiebetueren geht, das ganze per llSetlinkPrimitiveParams mit nur einem einzigen Script im root zu bewirken.

LG
Dae
Das funktioniert nicht bei "meiner Variante". Meine Türen bestehen aus je 2 Prims (Glas und Rahmen), das hatte ich am Anfang mit erwähnt. Ansonnsten Vielen Dank für die Zahlreichen Vorschläge.
Ich bin für jeden weiteren Tipp sehr dankbar.
LG Dorschdn Swindlehurst
 
Zufaelligerweise bist du nicht der erste der diese Frage wegen gleichzeitigen Tueren stellt.
Vorgestern erst bin ich schon mal Inworld darum gefragt worden.
An dem tag gingen meine Gedankengaenge schon richtung 1 Script im Root.
Dabei sollen die Tueren nicht nur auf und zu gehen, sondern dabei auch noch nach hinten wie bei einer Bustuer.

Leider hatte ich bis jetzt noch keine Zeit mich der Sache anzunehmen, aber ich bin davon ueberzeugt das es moeglich ist.

LG
Dae
 
@ Daemonika: Es tut mir schrecklich Leid, dass Du noch nicht die Zeit gefunden hast, Dich der Sache anzunehmen. Nur solche Aussagen wie "ich könnte schwören, dass es funktioniert" helfen mir absolut nicht weiter. Ich hatte geschrieben, dass ich absoluter Newbie in Sachen Scripte bin. Entweder Du hast einen Vorschlag wie das Problem gelöst werden kann, oder Du enthällst Dich der Stimme.
Ich möchte mich nocheinmal bei Tomuli Wise und Danziel Lane für die Hilfe bedanken.
Ich hab es mit den Scripten von Tomuli zum laufen gebracht.
So wie ich es jetzt "vervollständigt" habe, geht mein AVA einmal über den Schalter und die Tür öffnet - schließt nach 20sec - öffnet nach 20sec -schließt nach 20sec.
Das Script habe ich von einer Slide Door, welche für das öffnen und das schliessen den "Touch" benötigte.
Code:
vector dpos;

integer doorSte = 0;
default
{
    state_entry()
    {
// Höre auf Kanal 99 auf das Objekt Schalter
llListen(99, "Schalter", NULL_KEY,"");
    }

listen(integer channel, string name, key id, string message)
{
// untersuche ob wir eine Nachricht von unserem Schalter erhalten haben
if (name == "Schalter")
{
      
        

            if (doorSte == 0)
        {

            dpos = llGetPos();

            dpos = dpos - <1.5,0,0>; //calculate door position - 2m in X
            llSetPos(dpos);         //moves the door to new position
            
            doorSte = 1;
            llTriggerSound("ee871042-e272-d8ec-3d40-0b0cb3371346", 1.0);
        }
        
        else
        {
          
            dpos = llGetPos();
            dpos = dpos + <1.5,0,0>;//calculate door position - 2m in X
            llSetPos(dpos);         //moves the door to new position
            
            doorSte = 0;
            llTriggerSound("ee871042-e272-d8ec-3d40-0b0cb3371346", 1.0);
        }
        
        
        

    
    
}
llSleep(20);}
 }   
    //hier weiterer code um die Türen zu öffnen
 
ieeks, ich würde es auch per llSetlinkPrimitiveParams lösen, jedoch nur wenn die Funktion auch im OS Grid funktioniert, das Script ist ja nicht für das LL-SL angefragt hier.
 
Mal eine kleine Anmerkung:


Code:
...
    llListen(99, "Schalter", NULL_KEY,"");
    }

    listen(integer channel, string name, key id, string message)
    {
    // untersuche ob wir eine Nachricht von unserem Schalter erhalten haben
    if (name == "Schalter")
...

Wenn du nur einen Listener getriggert hast in deinem Skript, dann ist die if-Kontrolle überflüssig.
Den Listener zu triggern auf Objekte, die "Schalter" heißen, schließt aus, dass auf andere Objekte überhaupt gehört wird.

Und wenn die Türen nicht auch durch Avatare aus dem Chat gesteuert werden sollen, würde ich negative Kanalnummern empfehlen.
 
Zweite Anmerkung:

Das ständige Öffnen und Schließen:

Solange der Ava Kontakt mit dem Sensor hat, werden immer wieder (nach dem Sleep) die Befehle ausgeführt.

Du hast Öffnen und Schließen in das Listen - Event gepackt.

Daher öffnet sich die Tür .... und nach dem Sleep schließt sie sich ... dann wieder Sleep und Öffnen ...

Mach nur das Öffnen ins Listen Event und starte dann einen Timer
llSetTimerEvent(30.);

Und das Schließen der Tür schreibst du in das Timer - Event.

Und dann sollte dein Ava die Tür auch benutzen, und nicht auf der Schaltfläche stehen bleiben.


Nachtrag:
Nicht vergessen, den Timer im Timer-Event wieder auszuschalten mit
llSetTimerEvent(0.);
 
Hallo Danziel, vielen Dank für Deine Geduld, ich habe jetzt nur noch die Koordinaten zum öffnen im script. Mein AVA läuft über den Schalter, die Tür öffnet und schließt trotzdem noch mehrere Male. Sobald ich llSetTimerEvent(30.); einfüge kommt beim abspeichern die Meldung "Syntax Fehler"
Ich glaube, ich mach ganz einfache Stoffvorhänge da hin.
 
Ich hab jetzt mal einen praktischen Vorschlag, schick mir doch einfach mal die beiden Skripte in SL als Notecard oder per email an danziellane@dotmail.info.

Das Posten wäre etwas umfangreich.

Ich schau mir das dann mal an und teste es auch in einem Open Grid.
Und sag dir dann, was noch falsch ist.
 
So, danke für die Mail, ich hab das mal ausprobiert und dein Türskript wie folgt geändert (Kommentare dazu im nächsten Post):

Code:
//TuerScript

vector dpos;
vector dpos1; 
integer doorSte = 0;

default
{
    state_entry()
    {
        // Höre auf Kanal -99 auf das Objekt Schalter
        llListen(-99, "Schalter", NULL_KEY,"");
        dpos1 = llGetPos(); 
    }

    on_rez (integer parm)
    {
        dpos1 = llGetPos(); 
    }

    listen(integer channel, string name, key id, string message)
    {
    // untersuche ob wir eine Nachricht von unserem Schalter erhalten haben

        dpos = llGetPos();
        dpos = dpos - <1.5,0,0>; //calculate door position - 1,5m in X
        llSetPos(dpos);         //moves the door to new position
        doorSte = 1;
        llTriggerSound("ee871042-e272-d8ec-3d40-0b0cb3371346", 1.0);
        llSetTimerEvent(15.); 
    }

    timer() 
    {  
        dpos = llGetPos();
        dpos = dpos + <1.5,0,0>;//calculate door position - 1,5m in X
        llSetPos(dpos);         //moves the door to new position
        doorSte = 0;
        llTriggerSound("ee871042-e272-d8ec-3d40-0b0cb3371346", 1.0);
        llSetPos(dpos1); 
        llSetTimerEvent(0.); 
    } 
}
 

Users who are viewing this thread

Zurück
Oben Unten