logo

Willkommen Gast! Um alle Funktionen zu aktivieren müssen Sie sich Anmelden.Neue Registrierungen sind deaktiviert.

Mitteilung

Icon
Error

Einloggen


Beitrag melden
Geschrieben von: MartinRJ Fayray Offline Geschrieben Mittwoch, 1. Oktober 2014 23:03:47(UTC)
RLV bedeutet "Restrained Love Viewer", und steht für ein SL-Viewer-Protokoll, das hauptsächlich für BDSM-Möbel und ähnliches genutzt wird.
Es ist eine Erweiterung des Second Life Viewers (die im offiziellen Viewer nicht verfügbar ist), die es erlaubt, durch LSL-Skripts andere Avatare (oder auch den eigenen Avatar) zu kontrollieren, zum Beispiel das Inventar zu durchsuchen, oder andere Avatare zu bewegen (je nach Konfiguration ohne weitere Nachfrage).

Im Folgenden ein Beispiel für ein RLV-Kommando, in diesem Fall ein sogenanntes "Force Sit"- Skript.
Das funktioniert nur, wenn das "Opfer" einen RLV-Viewer verwendet, RLV aktiviert hat, und ein RLV-Relay trägt.

(Für Details über RLV siehe https://wiki.secondlife.com/wiki/LSL_Protocol/RestrainedLoveAPI/de)

Wenn man (der Besitzer, um genau zu sein) auf das Objekt mit diesem Skript klickt, öffnet sich ein Menü mit einer Liste der Avatare in der Region, wählt der Besitzer einen davon aus, wird diesem ein RLV-Befehl an den Client gesendet, und falls RLV aktiviert ist, wird der Avatar 'eingefangen' und wird automatisch auf das Objekt gesetzt (je nach Konfiguration des RLV-Relays kann noch eine Sicherheits-Abfrage erscheinen, bevor das Kommando tatsächlich ausgeführt wird).
Falls in dem Prim neben dem Skript auch eine Animation vorhanden ist, wird diese dann abgespielt.
Außerdem wird der sitzende Avatar daran gehindert, wieder aufzustehen.

Wenn der Besitzer dann "unsit" (ohne Anführungszeichen) im Chat sagt, wird der Avatar wieder freigelassen.

Code:

string sCMD_NAME = "rlv sit unsit"; //arbitrary name, useful at times so you can identify commands
string sCMD_SIT = ",@sit:"; //sit command start
string sCMD_SIT_END = "=force"; //sit command end
string sCMD_PREVENT_UNSIT = ",@unsit=n"; //disallow unsit
string sCMD_ALLOW_UNSIT = ",@unsit=y"; //allow unsit
string sCMD_UNSIT = ",@unsit=force"; //unsit command
string sCOMMA = ",";
key kVICTIM = NULL_KEY;
string sDIALOG_TEXT = "Choose avatar:";
integer iCHAT_CHANNEL = 0; //chat channel to say unsit command
string sCHAT_COMMAND = "unsit"; //chat command to unsit
integer iBUTTONS = 12;

vector vSIT_TARGET = <0.25,0.0,0.5>;
rotation rSIT_TARGET = ZERO_ROTATION;

integer iCHANNEL_DIALOG;
integer iCHANNEL_DIALOG_MIN = -100000;
integer iCHANNEL_DIALOG_MAG = 100000;

integer iRLVC = -1812221819; //RLV-channel
integer iMAXLEN = 24;

rlv_sit(key kVictim)
{
    llRegionSayTo(kVictim, iRLVC, sCMD_NAME+sCOMMA+(string)kVictim+sCMD_SIT+(string)llGetKey()+sCMD_SIT_END);
    llRegionSayTo(kVictim, iRLVC, sCMD_NAME+sCOMMA+(string)kVictim+sCMD_PREVENT_UNSIT);
}
rlv_unsit(key kVictim)
{
    llRegionSayTo(kVictim, iRLVC, sCMD_NAME+sCOMMA+(string)kVictim+sCMD_ALLOW_UNSIT);
    llRegionSayTo(kVictim, iRLVC, sCMD_NAME+sCOMMA+(string)kVictim+sCMD_UNSIT);
}
default
{
    state_entry()
    {
        llListen(iCHAT_CHANNEL, "", llGetOwner(), sCHAT_COMMAND);
        iCHANNEL_DIALOG = iCHANNEL_DIALOG_MIN - (integer)llFrand((float)iCHANNEL_DIALOG_MAG);
        llListen(iCHANNEL_DIALOG, "", llGetOwner(), "");
        llSitTarget(vSIT_TARGET, rSIT_TARGET);
    }
    listen(integer channel, string name, key id, string message)
    {
        string sAVATAR;
        key kAvatar;
        list lAvatars;
        integer iCount;
        string sTempName;
        if (channel == iCHAT_CHANNEL && message == sCHAT_COMMAND)
        {
            if (kVICTIM != NULL_KEY)
            {
                rlv_unsit(kVICTIM);
                kVICTIM = NULL_KEY;
            }
        }
        else if (channel == iCHANNEL_DIALOG)
        {
            sAVATAR = message;
            lAvatars = llGetAgentList(AGENT_LIST_REGION, []); //retrieve agent list in the region
            for (iCount = 0; iCount < llGetListLength(lAvatars); iCount++)
            {
                sTempName = llKey2Name(llList2Key(lAvatars, iCount));
                if (llStringLength(sTempName) > iMAXLEN)
                { //long name
                    sTempName = llGetSubString(sTempName, 0, iMAXLEN-1);
                }
                if (sTempName == sAVATAR)
                {
                    kVICTIM = llList2Key(lAvatars, iCount);
                    rlv_sit(kVICTIM);
                }
            }
            
        }
    }
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            if (llAvatarOnSitTarget() != NULL_KEY && llGetInventoryNumber(INVENTORY_ANIMATION) > 0)
            { //sitting and there's an animation
                llRequestPermissions(llAvatarOnSitTarget(), PERMISSION_TRIGGER_ANIMATION);
            }
        }
    }
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION && llGetInventoryNumber(INVENTORY_ANIMATION) > 0)
        { //sitting and there's an animation and permission given
            llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION, 0));
        }
    }
    touch_start(integer total_number)
    {
        integer iCount;
        list lAvatars = llGetAgentList(AGENT_LIST_REGION, []); //retrieve agent list in the region
        list lAvatarNames;
        if (llGetListLength(lAvatars) > 0)
        {
            if (llGetListLength(lAvatars) > iBUTTONS)
            {
                lAvatars = llList2List(lAvatars, 0, iBUTTONS-1);
            }
            for (iCount = 0; iCount < llGetListLength(lAvatars); iCount++)
            {
                if (llList2Key(lAvatars, iCount) != llGetOwner())
                {
                    if (llStringLength(llKey2Name(llList2Key(lAvatars, iCount))) > iMAXLEN)
                    { //long name
                        lAvatarNames += llGetSubString(llKey2Name(llList2Key(lAvatars, iCount)), 0, iMAXLEN-1);
                    }
                    else
                    {
                        lAvatarNames += llKey2Name(llList2Key(lAvatars, iCount));
                    }
                }
            }
            if (llGetListLength(lAvatarNames) > 0)
            {
                llDialog(llGetOwner(), sDIALOG_TEXT, lAvatarNames, iCHANNEL_DIALOG);
            }
        }
    }
}
Geben Sie den Meldetext hier ein.
Fett Kursiv Unterstrichen   Hervorheben Zitat Sprachauswahl für Syntax Highlighting Bild einfügen Link einfügen   Unsortierte Liste Sortierte Liste   Linksbündig Zentriert Rechtsbündig   Herausrücken Einrücken   Weitere BBCodes
Schriftfarbe: Schriftgröße:
Melden Abbruch

Powered by YAF.NET | YAF.NET © 2003-2021, Yet Another Forum.NET
Diese Seite wurde in 0.029 Sekunden generiert.

Datenschutzrichtlinie
Haftungsausschluss
Impressum
Datenschutzerklärung
AGB, ToS
Kontakt