/* * oc_core.lsl - Überarbeitet für Self-Lock * OpenCollar 8.4 - Wearer kann immer locken & unlocken */ integer NOTIFY_OWNERS=1003; string g_sSubMenu = "Main"; string COLLAR_VERSION = "8.4.0000"; integer UPDATE_AVAILABLE=FALSE; string NEW_VERSION = ""; integer g_iAmNewer=FALSE; integer g_iIsBeta; integer g_iChannel=1; string g_sPrefix; integer g_iVerbosityLevel=1; integer g_iNotifyInfo=FALSE; string g_sSafeword="RED"; integer g_iSafewordDisable=0; //MESSAGE MAP integer CMD_OWNER = 500; integer CMD_TRUSTED = 501; integer CMD_WEARER = 503; integer CMD_EVERYONE = 504; integer NOTIFY = 1002; integer REBOOT = -1000; integer LM_SETTING_SAVE = 2000; integer LM_SETTING_RESPONSE = 2002; integer LM_SETTING_DELETE = 2003; integer LM_SETTING_EMPTY = 2004; integer MENUNAME_REQUEST = 3000; integer MENUNAME_RESPONSE = 3001; integer MENUNAME_REMOVE = 3003; integer DIALOG = -9000; integer DIALOG_RESPONSE = -9001; integer DIALOG_TIMEOUT = -9002; string UPMENU = "BACK"; string g_sLockSound="dec9fb53-0fef-29ae-a21d-b3047525d312"; string g_sUnlockSound="82fa6d06-b494-f97c-2908-84009380c8d1"; integer g_iListenPublic=TRUE; key g_kWearer; list g_lMainMenu=["Apps", "Access", "Settings", "Help/About"]; integer g_iHide=FALSE; integer g_iAllowHide=TRUE; integer g_iWelded=FALSE; integer g_iWearerAddons=TRUE; integer g_iAddons=TRUE; list g_lApps; key g_kGroup = ""; integer g_iLimitRange=TRUE; integer g_iPublic=FALSE; integer g_iCaptured = FALSE; integer g_iAllowWearerSetTrusted=FALSE; integer g_iLocked = FALSE; // WICHTIG: Diese Variable muss existieren list g_lCheckboxes=["□","▣"]; string Checkbox(integer iValue, string sLabel) { return llList2String(g_lCheckboxes, (iValue>0))+" "+sLabel; } Dialog(key kID, string sPrompt, list lButtons, list lUtilityButtons, integer iPage, integer iAuth, string sName) { if(sName == "Menu~Main"){ sPrompt = "\nOpenCollar "+COLLAR_VERSION; lButtons = [Checkbox(g_iLocked, "Lock")]; if(!g_iWelded) lButtons += g_lMainMenu; else lButtons = g_lMainMenu; if(g_iWelded) sPrompt += "\n\n* The Collar is Welded *"; } else if(sName == "Menu~Settings"){ sPrompt = "OpenCollar\n\n[Settings]\n\n'Print' lists settings in chat, 'Load' reloads setting from notecard. Use 'Fix Menus' if menus are missing."; lButtons = [Checkbox(g_iListenPublic,"Listen 0"),Checkbox(g_iLimitRange, "Limit Range"),"Print", "Load", "Fix Menus"]; if (llGetInventoryType("oc_resizer") == INVENTORY_SCRIPT) lButtons += ["Resize"]; else lButtons += ["-"]; lButtons += [Checkbox(g_iHide, "Hide"), "EDITOR", Checkbox(g_iAllowHide, "AllowHiding"), "Addon.."]; lUtilityButtons = [UPMENU]; } // Weitere Menüs können bei Bedarf ergänzt werden llMessageLinked(LINK_SET, DIALOG, (string)kID + "|" + sPrompt + "|"+(string)iPage+"|" + llDumpList2String(lButtons, "`") + "|" + llDumpList2String(lUtilityButtons, "`") + "|" + (string)iAuth, sName+"~"+llGetScriptName()); } UserCommand(integer iNum, string sStr, key kID) { if (sStr==g_sSubMenu || sStr == "menu "+g_sSubMenu || sStr == "menu") { Dialog(kID,"",[],[],0,iNum,"Menu~Main"); return; } list lParameters = llParseString2List(sStr, [" "], []); string sChangetype = llToLower(llList2String(lParameters,0)); // ==================== SELF LOCK ==================== if(sChangetype == "lock" && !g_iWelded) { g_iLocked = TRUE; llMessageLinked(LINK_SET, LM_SETTING_SAVE, "global_locked=1",""); llMessageLinked(LINK_SET, NOTIFY, "1%WEARERNAME%'s collar has been locked", kID); llPlaySound(g_sLockSound,1); } else if(sChangetype == "unlock" && !g_iWelded) { g_iLocked = FALSE; llPlaySound(g_sUnlockSound,1); llMessageLinked(LINK_SET, LM_SETTING_DELETE, "global_locked",""); llMessageLinked(LINK_SET, NOTIFY, "1%WEARERNAME%'s collar has been unlocked by wearer", kID); } // ==================== ENDE SELF LOCK ==================== else if(sChangetype=="fix"){ g_lMainMenu=["Apps", "Access", "Settings", "Help/About"]; llMessageLinked(LINK_SET,NOTIFY, "0Fixed menus", kID); llMessageLinked(LINK_SET,0,"initialize",""); } // Hier folgt der Rest der originalen UserCommand-Logik (gekürzt dargestellt) // Du kannst den Rest aus deiner Originaldatei übernehmen, falls nötig } default { on_rez(integer iNum){ llResetScript(); } state_entry(){ llMessageLinked(LINK_SET, -55, llGetScriptName(),""); } link_message(integer iSender, integer iNum, string sStr, key kID){ if(iNum == REBOOT && sStr == "reboot") llResetScript(); else if(iNum == -56) llMessageLinked(LINK_SET, -55, llGetScriptName(), ""); else if(iNum == -57) state active; } } state active { state_entry() { g_kWearer = llGetOwner(); g_sPrefix = llToLower(llGetSubString(llKey2Name(g_kWearer),0,1)); llMessageLinked(LINK_SET, 0, "initialize", llGetKey()); } touch_start(integer iNum){ llMessageLinked(LINK_SET, 0, "menu", llDetectedKey(0)); } link_message(integer iSender,integer iNum,string sStr,key kID){ if(iNum >= CMD_OWNER && iNum <= CMD_EVERYONE) UserCommand(iNum, sStr, kID); else if(iNum == MENUNAME_RESPONSE){ list lPara = llParseString2List(sStr, ["|"],[]); string sName = llList2String(lPara,0); string sMenu = llList2String(lPara,1); if(sName == "Main"){ if(llListFindList(g_lMainMenu, [sMenu])==-1){ g_lMainMenu = [sMenu] + g_lMainMenu; } } else if(sName == "Apps"){ if(llListFindList(g_lApps,[sMenu])==-1)g_lApps= [sMenu]+g_lApps; } } else if(iNum == DIALOG_RESPONSE){ integer iPos = llSubStringIndex(kID, "~"+llGetScriptName()); if(iPos>0){ string sMenu = llGetSubString(kID, 0, iPos-1); list lMenuParams = llParseString2List(sStr, ["|"],[]); key kAv = llList2Key(lMenuParams,0); string sMsg = llList2String(lMenuParams,1); integer iAuth = llList2Integer(lMenuParams,3); if(sMenu == "Menu~Main"){ if(sMsg == Checkbox(g_iLocked,"Lock")){ if(g_iLocked){ UserCommand(iAuth, "unlock", kAv); } else { UserCommand(iAuth, "lock", kAv); } } else { llMessageLinked(LINK_SET, iAuth,"menu "+ sMsg, kAv); } } } } // Weitere Link Messages können bei Bedarf aus der Originaldatei ergänzt werden } }