This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Simweite Fernsteuerung zwischen unabhängigen Prims
#1
Oft benötigt man eine Fernsteuerung zwischen zwei oder mehreren Prims auf einer Sim.

Damit kann man von einem Fernsteuer Prim alle horchenden Empfänger Prims zugleich steuern.

Die Script sind absichtlich sehr einfach gehalten um den Lernerfolg zu erhöhen. 
Daher habe ich auf Zustands Rückmeldung zum Sender verzichtet, was die Option mehrere Fernbedienung Prims ermöglicht hätte.


Das Beispiel macht folgendes:

Der Sender wird wird bei Sim Restart, Rezzen oder Script Reset jeweils ein Auschschalt Befehl absetzten um die Empfänger im definierten Zustand zu versetzten.

Wird der Sender berührt, sendet er einen jeweils inversen Schaltbefehl an die Empfänger- also An- Aus -An -...
Dazu wird die Routine "sender()" benutzt.


Der oder die Empfänger resetten auch bei Sim Neustart, und gehen dann auf Befehls Empfang.

Sobald sie einen Befehl empfangen setzten sie den in der Routine "aktor()" um.

Zu Schulungs Zwecken habe ich jeweils 3 Zeilen je Befehl ausführen lassen:

- Text Ausgabe im allgemeinem Chat
- Prim Licht AN/ AUS
- Prim Oberfläche leuchtend oder dunkel

Es ginge auch einfacher, die LLSetPrimitiveParams Befehle lassen sich bündeln, aber das wäre viel unübersichtlicher.
Und schließlich gehts hier um den Lernerfolg.

Jedes dieser Scripte wird in ein einzelnes Prim gesteckt - und los gehts.

Ich könnt die Aktor Zeilen einfach anpassen und damit eine Lichtschaltung realisieren.


Sender:

Code:
// P901A Fernbedienungs-SENDER für Simweite Kommunikation
// CC0 by Tron


// Benutzer Parameter
integer channel = 10000;                                // Fernbedienungs Kanal mit für Simweite Kommunikation mit anderen Prims festlegen

// ab hier nicht einzustellen

integer on_off = FALSE;                                 // Ausgeschalten beginnen


sender(integer an)
{
    on_off = an;
    if (on_off) {llRegionSay(channel, "Aktiviert");}     // Fernbedienungs Kommando "Aktiviert" abschicken
    else { llRegionSay(channel, "Standby"); }            // Fernbedienungs Kommando "Standby" abschicken
}


default
{

    on_rez(integer dummy)                                // Reset beim Rezzen
    {
          llResetScript();
    }


    changed(integer changebits)                         // Reset nach Region restart
    {
        if(CHANGED_REGION_START & changebits) { llResetScript(); }
    }


    state_entry()
    {
        sender(FALSE);                                  // Initialer Standby Modus
    }


    touch_end(integer total_number)
    {
        on_off = !on_off;                               // Umschalten in jeweilig anderen Zustand
        sender(on_off);
    }
}


Empfänger:


Code:
// P901B Fernbedienungs-EMPFÄNGER für Simweite Kommunikation
// CC0 by Tron


// Benutzer Parameter
integer channel = 10000;                               // Fernbedienungs Kanal mit für Simweite Kommunikation mit Sender festlegen

// ab hier nicht einzustellen

integer on_off = FALSE;                                 // Ausgeschalten beginnen
integer listenhandle_1;                                 // Handle für Kommunikation


aktor(integer an)
{
    on_off = an;
    if (on_off)                                         // Fernbedienungs Kommando "Aktiviert" empfangen- Schaltung ausführen
        {
            llSay(0, "Licht AN");                       // im allgemeinen Chat Text ausgeben
            llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE, <1.0,1.0,1.0>, 1.0, 10.0, 1.0 ]);  // LICHT ANSTELLEN
            llSetPrimitiveParams([PRIM_GLOW, ALL_SIDES, 1.0 ]);  // Oberfläche Leuchten
        }
    else                                                // Fernbedienungs Kommando "Standby" empfangen- Schaltung ausführen
        {
            llSay(0, "Licht AUS");                      // im allgemeinen Chat Text ausgeben
            llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE, <1.0,1.0,1.0>, 0.0, 10.0, 1.0 ]);  // LICHT ABSTELLEN
            llSetPrimitiveParams([PRIM_GLOW, ALL_SIDES, 0.0 ]);  // Oberfläche dunkel
        }
}


default
{
    on_rez(integer dummy)                               // Reset beim rezzen
    {
          llResetScript();
    }


    changed(integer changebits)                        // Reset nach Region restart
    {
        if(CHANGED_REGION_START & changebits) { llResetScript(); }
    }


    state_entry()
    {
        listenhandle_1 = llListen(channel,"","","");    // Initialisieren eines Listen Handlers
    }


    listen(integer channel, string name, key id, string message)
    {
        if(message=="Aktiviert")
            {
               aktor(TRUE);
            }

        if(message=="Standby")
            {
               aktor(FALSE);
            }
    }
}

Wichtig ist das Sender und Empfänger auf dem gleichen Kanal "sprechen". Hier habe ich 10000 gewählt.
Wenn ihr mehrere Dinge auf den Sims macht so wählt für jedes Paar einen anderen Kanal.

Man kann diese Fernsteuerung natürlich auch für getragene Objekte verwenden, wie Kleidung und Attachments.
Dann empfielt es sich aber unbedingt einen AVA spezifischen Kanal zu verwenden - ausser man will ferngesteuert werden.

Ein Modul zur Errechnung eines Ava individuellen Kommunikations Kanals anhand das AVA UUID werde ich demnächt vorstellen



Wie immer wünsche ich viel Spaß beim Basteln und Scripten


Tron
Zitieren


Gehe zu:


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