User:Daemonika Nightfire/Scripts/Schalter

From Second Life Wiki
Jump to navigation Jump to search

Schalter Einleitung

Warum spreche ich hier von einem Schalter? Ganz einfach, weil es das ist.

TRUE & FALSE sind Boolesche Variablen mit endlichen Werten.
Diese Schaltvariablen sind auf den Mathematiker George Boole im Jahr 1847 zurueck zu fuehren.
Gleichbedeutend mit 1 & 0 - ja & nein - richtig & falsch, koennen wir damit einen Status-Wechsel erzeugen.
Mehr Details hier: https://de.wikipedia.org/wiki/Boolesche_Variable

Du wirst feststellen, das viele Scripte doppelt aufgefuehrt sind. Auf der linken Seite befindet sich die Standard Version. Auf der rechten Seite die Version mit einer globalen Funktion. Beide Versionen haben eine Daseinsberechtigung. Die globale Funktion hat den Vorteil, du musst dich im Script nicht wiederholen, sondern schreibst die Funktion nur einmal und greifst von jedem beliebigen Event aus darauf zu.

Um laestigen Chat-Spam zu vermeiden habe ich bei saetmlichen Beispielen die Status-Meldungen in einen Hovertext gesetzt.

touch

Der touch_start Event ist die einfachste Methode um die Funktionsweise eines Schalters zu verdeutlichen. Hier reagiert das Script sofort wenn du den Prim klickst.

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    touch_start(integer total_number)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    touch_start(integer total_number)
    {
        SchalterFunktion();
    }
}

listener

Fuer den Schalter im listen Event ist es notwendig beispielsweise /1schalte in den lokalen Chat zu tippen, damit das Script reagiert.

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llListen(1, "", llGetOwner(), "");
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    listen(integer Channel, string Name, key ID, string Text)
    {
        if(Text == "schalte")
        {
            if(schalter == FALSE)
            {
                schalter = TRUE;
                llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
            }
            else if(schalter == TRUE)
            {
                schalter = FALSE;
                llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
            }
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llListen(1, "", llGetOwner(), "");
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    listen(integer Channel, string Name, key ID, string Text)
    {
        if(Text == "schalte")
        {
            SchalterFunktion();
        }
    }
}

collision

Fuer diese collision Variante musst du mit deinem Avatar auf bzw. gegen den Prim laufen.

Bei einem Phantom Object mit llVolumeDetect genuegt es den Avatar durch den Prim zu bewegen.

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        // llVolumeDetect(TRUE); // Diese Funktion ist fuer phantom Objekte.
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    collision_start(integer num)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        // llVolumeDetect(TRUE); // Diese Funktion ist fuer phantom Objekte.
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
    }

    collision_start(integer num)
    {
        SchalterFunktion();
    }
}

timer

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSetTimerEvent(5);
    }

    timer()
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSetTimerEvent(5);
    }

    timer()
    {
        SchalterFunktion();
    }
}

sensor

Einfacher Schalter Schalter als globale Funktion
integer schalter = FALSE;

default
{
    state_entry()
    {
        llSensorRemove();
        
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 3.0, PI, 1.0);
    }

    sensor(integer num_detected)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
        }
        else if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
        }
    }
}
integer schalter = FALSE;

SchalterFunktion()
{
    if(schalter == FALSE)
    {
        schalter = TRUE;
        llSetText("eingeschaltet, schalter ist nun TRUE", <0,1,0>, 1.0);
    }
    else if(schalter == TRUE)
    {
        schalter = FALSE;
        llSetText("ausgeschaltet, schalter ist nun FALSE", <1,0,0>, 1.0);
    }
}

default
{
    state_entry()
    {
        llSensorRemove();
        
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 3.0, PI, 1.0);
    }

    sensor(integer num_detected)
    {
        SchalterFunktion();
    }
}

Anders als bei den ersten beiden Sensor Beispielen, verhaelt sich dieser Sensor etwas anders, doch das Ergebnis ist das gleiche.

integer schalter = FALSE;

default
{
    state_entry()
    {
        llSensorRemove();
        
        llSetText("Reset, schalter startet ausgeschaltet", <1,1,1>, 1.0);
        llSensorRepeat("", "", AGENT_BY_LEGACY_NAME, 3.0, PI, 1.0);
    }

    sensor(integer num_detected)
    {
        if(schalter == FALSE)
        {
            schalter = TRUE;
            llSetText("eingeschaltet, Tuer ist geoeffnet", <0,1,0>, 1.0);
        }
    }
    
    no_sensor()
    {
        if(schalter == TRUE)
        {
            schalter = FALSE;
            llSetText("ausgeschaltet, Tuer ist geschlossen", <1,0,0>, 1.0);
        }
    }
}