// ============================================================ // COLLAR SYSTEM - RLV MODUL // Setzt/entfernt RLV-Restriktionen je nach Collar-Status. // Erfordert einen RLV-fähigen Viewer (Firestorm mit RLV, // Restrained Love Viewer, o.ä.) - ohne diesen passiert nichts, // da @-Kommandos von Standard-Viewern ignoriert werden. // // Da dieses Script an der Trägerin selbst hängt, braucht es // KEINEN Relay: llOwnerSay("@...") wirkt direkt auf den // eigenen Träger (Standard-RLV-Verhalten für eigene Attachments). // ============================================================ integer LM_RLV_REFRESH = 500; string RLV_UUID; // eindeutige ID dieses Objekts für togglebare Restriktionen applyRestriction(string cmd) { llOwnerSay("@" + cmd + "=n"); } removeRestriction(string cmd) { llOwnerSay("@" + cmd + "=y"); } clearAll() { llOwnerSay("@clear=" + RLV_UUID); } refresh() { clearAll(); integer locked = (integer)llLinksetDataRead("locked"); integer leashed = (integer)llLinksetDataRead("leashed"); key owner = (key)llLinksetDataRead("owner_key"); if (owner == NULL_KEY) return; // kein Owner -> keine Restriktionen if (locked) { // Verhindert, dass die Trägerin das Collar per Hand ablegt llOwnerSay("@detach=n"); } else { llOwnerSay("@detach=y"); } if (leashed) { // Klassische Leash-Restriktionen: llOwnerSay("@tploc=n,tplm=n,tplure=n,sittp=n,unsit=n,standtp=n"); } else { llOwnerSay("@tploc=y,tplm=y,tplure=y,sittp=y,unsit=y,standtp=y"); } } default { state_entry() { RLV_UUID = (string)llGetKey(); } on_rez(integer p) { RLV_UUID = (string)llGetKey(); refresh(); } attach(key id) { if (id != NULL_KEY) refresh(); else clearAll(); // abgelegt -> alle Restriktionen sicherheitshalber lösen } link_message(integer sender, integer num, string str, key id) { if (num == LM_RLV_REFRESH) refresh(); } }