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

Lichtschalter-script macht nicht, was ich will

Maxi Farella

Aktiver Nutzer
Hallo
Ich habe ein Lichtschalter-Dialog-Script gebaur.
Das macht einen Dialog mit einem Knopf als Lichtschalter und einem für den farbwechsel.
Der Lichtschalter soll das licht an und aus machen, und der andere Schalter soll einen Farbwahl-Dialog övvnen, mit dem die Farbe der Lampe eingestellt werden kann.
das ein und auschalten des Lichtes soll die farbe nicht verändern und beim farbwechsel soll das Licht aus bleiben, wenn es aus ist, und an bleiben, wenn es an ist.
Es funktioniert aber noch nicht so richtiig...
Hier ist erst mal die aktuelle version:
Code:
list Schalter_Liste_1 = ["turn light on", "change color"];
list Schalter_Liste_2 = ["turn light off", "change color"];
list Schalter_Liste_3 = ["Psychedelic","Lila", "Pink", "Weiß", "Gruen", "Tuerkis", "Blau", "Rot", "Orange", "Gelb"];
integer channel = 1024;
integer listen_handle; //Hier wird der listener reingelegt
float red = 1;
float green = 0;
float blue = 0;
string Textur = "Leinen-Gewebe";
string Lichtschalter;
vector color;
list params;
 
default
{
    state_entry()
    {
        Lichtschalter = "off";
        llSetLinkPrimitiveParamsFast(2, [PRIM_FULLBRIGHT,ALL_SIDES,FALSE]);
        params = llGetLinkPrimitiveParams(2, [PRIM_POINT_LIGHT]);
        color = llList2Vector(params, 1);
        llSetLinkPrimitiveParamsFast(2, [PRIM_POINT_LIGHT,FALSE, color,1.0, 10.0, 0.75]);
    }
    touch_start(integer total_number)
    {
        // Hier wird abgefragt ob der click vom Owner kommt
        // so erhält ein unberechtigter clicker nichtmal das blaue menü :-)
        key o_key = llGetOwner();
        if(llDetectedKey(0) == o_key) 
        {
            if(Lichtschalter == "off")
            {
                //ein offener listener produziert lag, daher öffnet der listener erst wenn er gebraucht wird
                listen_handle = llListen(channel,"", o_key,"");
                llDialog(o_key, "Light Options", Schalter_Liste_1, channel);
            }
            else
            {
                //ein offener listener produziert lag, daher öffnet der listener erst wenn er gebraucht wird
                listen_handle = llListen(channel,"", o_key,"");
                llDialog(o_key, "Light Options", Schalter_Liste_2, channel);
            }
        }
        else
        {
            llSay(0,"This is not Your Butterfly-Light, you cannot chabge it");
        }
    }
    listen(integer chan, string name, key id, string mes)
    {
        //Hier frag ich nochmal ab ob das was ankommt aus einer der 3 listen kommt.... 
        //damit schliesse ich alles aus was nicht aus diesen listen besteht zB chat, nachrichten von anderen objekten.....
        //das heisst dieser bereich kann nur über das menü bedient werden.... 
        //und das menü kann ja nur vom owner bedient werden..... 
        //das heisst wir haben eine geschlossene menübedienung :-)    
        if (llListFindList(Schalter_Liste_1 + Schalter_Liste_2 + Schalter_Liste_2, [mes]) != -1)  
        {
            if(mes == "turn light on")
            {
               
                llSetLinkPrimitiveParamsFast(2, [PRIM_FULLBRIGHT,ALL_SIDES,TRUE]);
                params = llGetLinkPrimitiveParams(2, [PRIM_POINT_LIGHT]);
                color = llList2Vector(params, 1);
                llSetLinkPrimitiveParamsFast(2, [PRIM_POINT_LIGHT,TRUE, color, 1.0, 10.0, 0.75]);
                Lichtschalter = "on";
            }
            if(mes == "turn light 0ff")
            {
                llSetLinkPrimitiveParamsFast(2, [PRIM_FULLBRIGHT,ALL_SIDES,FALSE]);
                params = llGetLinkPrimitiveParams(2, [PRIM_POINT_LIGHT]);
                color = llList2Vector(params, 1);
                llSetLinkPrimitiveParamsFast(2, [PRIM_POINT_LIGHT,FALSE, color,1.0, 10.0, 0.75]);
                Lichtschalter = "off";
            }
            if(mes == "change color")
            {
                llDialog(id, "Change Color", Schalter_Liste_3, channel);
            }
            if(mes == "Rot")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <1, 0, 0>, ALL_SIDES);
                if(Lichtschalter == "on")
                {
                    llSetLinkPrimitiveParamsFast( 2, [ PRIM_POINT_LIGHT, TRUE, <1, 0, 0>,1.0, 10.0, 0.75]);
                }
                else
                {
                    llSetLinkPrimitiveParamsFast( 2, [ PRIM_POINT_LIGHT, FALSE, <1, 0, 0>,1.0, 10.0, 0.75]);
                }
                llListenRemove(listen_handle);
            }
            if(mes == "Orange")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <1, 0.5, 0>, ALL_SIDES);
                if(Lichtschalter == "on")
                {
                    llSetLinkPrimitiveParamsFast( 2, [ PRIM_POINT_LIGHT, TRUE, <1, 0.5, 0>,1.0, 10.0, 0.75]);
                }
                else
                {
                    llSetLinkPrimitiveParamsFast( 2, [ PRIM_POINT_LIGHT, FALSE, <1, 0.5, 0>,1.0, 10.0, 0.75]);
                }
                llListenRemove(listen_handle);
            }
            if(mes == "Gelb")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <1, 1, 0>, ALL_SIDES);
                if(Lichtschalter == "on")
                {
                    llSetLinkPrimitiveParamsFast( 2, [ PRIM_POINT_LIGHT, TRUE, <1, 1, 0>,1.0, 10.0, 0.75]);
                }
                else
                {
                    llSetLinkPrimitiveParamsFast( 2, [ PRIM_POINT_LIGHT, FALSE, <1, 1, 0>,1.0, 10.0, 0.75]);
                }
                llListenRemove(listen_handle);
            }
            if(mes == "Gruen")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <0, 1, 0>, ALL_SIDES);
                llListenRemove(listen_handle);
            }
            if(mes == "Tuerkis")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <0, 1, 1>, ALL_SIDES);
                llListenRemove(listen_handle);
            }
            if(mes == "Blau")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <0, 0, 1>, ALL_SIDES);
                llListenRemove(listen_handle);
            }
            if(mes == "Lila")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <0.75, 0, 1>, ALL_SIDES);
                llListenRemove(listen_handle);
            }
            if(mes == "Pink")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <1, 0, 1>, ALL_SIDES);
                llListenRemove(listen_handle);
            }
            if(mes == "Weiß")
            {
                llSetTimerEvent(0.0);
                llSetLinkColor(2, <1, 1, 1>, ALL_SIDES);
                llListenRemove(listen_handle);
            }
            if(mes == "Psychedelic")
            {
                llSetTimerEvent(0.2);
                llListenRemove(listen_handle);
            }
        }
    }
    timer()
    {
        if(red >= 1.0)
        {
            if (blue > 0.1)
            {blue = blue - 0.1;}
            else
            {green = green + 0.1;}
        }
        if(green >= 1.0)
        {
            if (red > 0.1)
            {red = red - 0.1;}
            else
            {blue = blue + 0.1;}
        }
        if(blue >= 1.0)
        {
            if (green > 0.1)
            {green = green - 0.1;}
            else
            {red = red + 0.1;}
        }
        llSetLinkColor(2, <red, green, blue>, ALL_SIDES);
        llSetTimerEvent(0.2);
    }
}
der Dialog wechselt irgrndwie nicht zwischen den ein und aus-Versionen des lichtschalters und der Farbwechsel reagiert auch nicht (ich hab nur erst mal rot orange und gelb so weit) es wechselt nicht zur auf dem Schalter angegebenen Farbe...

Könnt ihr mir vielleicht mit dem Script helfen?
 
Du hast ein paar Flüchtigkeitsfehler gemacht ;-)

"turn light Off" falsch geschrieben : Off muss kleingeschrieben werden, weil du nach "off" suchst

if (llListFindList(Schalter_Liste_1 + Schalter_Liste_2 + Schalter_Liste_2, [mes]) != -1)


falsch: letztes muss schalter 3 sein: Du suchst zweimal nach Schalter-2
 
Wenn ich den lichtschalter betätige, geht zwar das full bright an, das abgestrahlte licht aber nicht...
Aus geht es aber mit dem Lichtschalten, nur an nicht...
das geht immer erst an, wenn ich nach dem einschalten einen Farbwechsel vornehme...
woran könnte das liegen?
 
Du hast hier zwei Fehler kombiniert ;-)

1. Du möchtest die Farbe holen, arbeitest aber mit PRIM_POINT_LIGHT.
Daher bekommst du immer einen ZERO_VECTOR zurück. Das bedeutet die Farbe Schwarz in dem Fall.
Und die verhindert Lichtausstrahlung.

2. Den Wert musst du mit Listenindex-0 abfragen. Du fragst mit Index1.

Bei dir sieht das so aus:

params = llGetLinkPrimitiveParams(2, [PRIM_POINT_LIGHT]);
color = llList2Vector(params, 1);


Richtig muss das Segment so aussehen:

params = llGetLinkPrimitiveParams(2, [PRIM_COLOR,ALL_SIDES]);
color = llList2Vector(params, 0);

Dies Segment hast du im listen-event bei "turn light on" und bei "turn light off".
Im letzten Fall macht das nichts (sollte evtl. nur aus "Schönheits-Gründen" korrigiert werden.)
Aber bei "turn light on" muss es korrigiert werden.

Ausserdem hast du es im state-entry.



Dann noch eine Frage: Ist das Absicht, das du bei vielen Farben kein Licht setzt ?
 
Zuletzt bearbeitet:

Users who are viewing this thread

Zurück
Oben Unten