// ============================================================ // 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; integer gListenH; 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", ""); llRegionSayTo(id, 0, "Owner wurde entfernt. Das Collar ist jetzt frei."); llMessageLinked(LINK_SET, LM_RLV_REFRESH, "", NULL_KEY); return; } if (num == LM_OWNER_ADDTRUST) { if (id != OwnerKey() && id != llGetOwner()) return; llTextBox(id, "Name oder Key der Person, die Trust erhalten soll:", gConfirmChannel + 1); return; } if (num == LM_OWNER_DELTRUST) { if (id != OwnerKey() && id != llGetOwner()) return; llTextBox(id, "Name oder Key der Person, die Trust verlieren soll:", gConfirmChannel + 2); 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."); } gPendingRequester = NULL_KEY; return; } if (chan == gConfirmChannel + 1) { 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."); } return; } if (chan == gConfirmChannel + 2) { string trustList = llLinksetDataRead("trustees"); trustList = llDumpList2String( llDeleteSubList(llCSV2List(trustList), llListFindList(llCSV2List(trustList), [msg]), llListFindList(llCSV2List(trustList), [msg])), ","); llLinksetDataWrite("trustees", trustList); llOwnerSay(msg + " wurde aus der Trust-Liste entfernt."); return; } } }