// ============================================================ // COLLAR SYSTEM - OWNER MODUL // Owner setzen (mit Bestätigungsdialog an Trägerin), // Owner freilassen, Trust-Liste (Add/Remove). // ============================================================ integer LM_OWNER_REQUEST = 200; // core -> owner : str=Name, id=Antragsteller integer LM_OWNER_RELEASE = 203; // core -> owner : id=Toucher integer LM_OWNER_ADDTRUST = 210; // core -> owner : id=Toucher integer LM_OWNER_DELTRUST = 211; // core -> owner : id=Toucher integer LM_RLV_REFRESH = 500; integer gConfirmChannel; key gPendingRequester; key gPendingActor; key OwnerKey() { return (key)llLinksetDataRead("owner_key"); } default { state_entry() { gConfirmChannel = -(integer)("0x" + llGetSubString((string)llGetKey(),1,8)); llListen(gConfirmChannel, "", llGetOwner(), ""); llListen(gConfirmChannel + 1, "", NULL_KEY, ""); llListen(gConfirmChannel + 2, "", NULL_KEY, ""); } link_message(integer sender, integer num, string str, key id) { if (num == LM_OWNER_REQUEST) { if (OwnerKey() != NULL_KEY) { llRegionSayTo(id, 0, "✖ Dieses Collar hat bereits einen Owner."); return; } gPendingRequester = id; llDialog(llGetOwner(), str + " (" + (string)id + ") möchte dein Owner werden.\nAkzeptieren?", ["Akzeptieren", "Ablehnen"], gConfirmChannel); return; } if (num == LM_OWNER_RELEASE) { if (id != OwnerKey() && id != llGetOwner()) { llRegionSayTo(id, 0, "✖ Nur der Owner kann freilassen."); return; } llLinksetDataDelete("owner_key"); llLinksetDataDelete("owner_name"); llLinksetDataWrite("trustees", ""); llOwnerSay("✓ Owner wurde entfernt. Das Collar ist jetzt frei."); if (id != llGetOwner()) llRegionSayTo(id, 0, "✓ Du wurdest als Owner entfernt."); llMessageLinked(LINK_SET, LM_RLV_REFRESH, "", NULL_KEY); return; } if (num == LM_OWNER_ADDTRUST) { if (id != OwnerKey() && id != llGetOwner()) { llRegionSayTo(id, 0, "✖ Du hast keine Berechtigung dafür."); return; } llTextBox(id, "Name oder Key der Person, die Trust erhalten soll:", gConfirmChannel + 1); gPendingActor = id; return; } if (num == LM_OWNER_DELTRUST) { if (id != OwnerKey() && id != llGetOwner()) { llRegionSayTo(id, 0, "✖ Du hast keine Berechtigung dafür."); return; } llTextBox(id, "Name oder Key der Person, die Trust verlieren soll:", gConfirmChannel + 2); gPendingActor = id; return; } } listen(integer chan, string name, key id, string msg) { if (chan == gConfirmChannel) { if (msg == "Akzeptieren" && gPendingRequester != NULL_KEY) { llLinksetDataWrite("owner_key", (string)gPendingRequester); llLinksetDataWrite("owner_name", llKey2Name(gPendingRequester)); llRegionSayTo(gPendingRequester, 0, "✓ Du bist jetzt Owner dieses Collars."); llOwnerSay("✓ Du gehörst jetzt " + llKey2Name(gPendingRequester) + "."); llMessageLinked(LINK_SET, LM_RLV_REFRESH, "", NULL_KEY); } else if (gPendingRequester != NULL_KEY) { llRegionSayTo(gPendingRequester, 0, "✖ Deine Owner-Anfrage wurde abgelehnt."); llOwnerSay("Owner-Anfrage abgelehnt."); } gPendingRequester = NULL_KEY; return; } if (chan == gConfirmChannel + 1) { if (id != gPendingActor) return; if (msg == "") { llRegionSayTo(id, 0, "✖ Kein Name eingegeben, abgebrochen."); return; } string trustList = llLinksetDataRead("trustees"); if (llSubStringIndex(trustList, msg) == -1) { if (trustList == "") trustList = msg; else trustList += "," + msg; llLinksetDataWrite("trustees", trustList); llOwnerSay("✓ " + msg + " wurde als Trust hinzugefügt."); llRegionSayTo(id, 0, "✓ " + msg + " wurde als Trust hinzugefügt."); } else { llRegionSayTo(id, 0, "ℹ " + msg + " ist bereits Trust."); } return; } if (chan == gConfirmChannel + 2) { if (id != gPendingActor) return; if (msg == "") { llRegionSayTo(id, 0, "✖ Kein Name eingegeben, abgebrochen."); return; } string trustList = llLinksetDataRead("trustees"); list asList = llCSV2List(trustList); integer idx = llListFindList(asList, [msg]); if (idx == -1) { llRegionSayTo(id, 0, "ℹ " + msg + " stand nicht auf der Trust-Liste."); return; } trustList = llDumpList2String(llDeleteSubList(asList, idx, idx), ","); llLinksetDataWrite("trustees", trustList); llOwnerSay("✓ " + msg + " wurde aus der Trust-Liste entfernt."); llRegionSayTo(id, 0, "✓ " + msg + " wurde aus der Trust-Liste entfernt."); return; } } }