// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Seven-segment linked digit // Not compiled or tested in-world // Setup: Name children seg_a through seg_g in standard seven-segment order. Root owner-touch arms; another root script sends code8060 with one digit. Face0 tints only. // Stop / restore: Owner-touch disarms and restores seven face colors. // Notes: Use a spare modifiable build. Snapshot state is held only in script memory; restore before reset/removal. Do not relink during a preview. Bright versus dark tint represents on/off; geometry remains visible and collision unchanged. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Not compiled or tested in-world. list links; list saved; integer active; integer valid=TRUE; default { state_entry() { list names=["seg_a","seg_b","seg_c","seg_d","seg_e","seg_f","seg_g"]; integer i; for(i=0;i<7;++i) { integer j; integer found; integer count; for(j=2;j<=llGetObjectPrimCount(llGetKey());++j)if(llGetLinkName(j)==llList2String(names,i)) { found=j; ++count; } if(count!=1) { valid=FALSE; return; } links+=[found]; saved+=llGetLinkPrimitiveParams(found,[PRIM_COLOR,0]); } } touch_start(integer n) { if(llDetectedKey(0)!=llGetOwner()||llGetLinkNumber()>1||!valid)return; active=!active; if(!active) { integer i; for(i=0;i<7;++i)llSetLinkPrimitiveParamsFast(llList2Integer(links,i),[PRIM_COLOR,0]+llList2List(saved,i*2,i*2+1)); } } link_message(integer sender,integer code,string s,key data) { if(!active||!valid||sender!=1||code!=8060||llStringLength(s)!=1)return; integer digit=llSubStringIndex("0123456789",s); if(digit<0)return; integer bits=llList2Integer([63,6,91,79,102,109,125,7,127,111],digit); integer i; for(i=0;i<7;++i) { vector color=<0.03,0.03,0.03>; if(bits&(1<; llSetLinkPrimitiveParamsFast(llList2Integer(links,i),[PRIM_COLOR,0,color,llList2Float(saved,i*2+1)]); } } changed(integer change) { if(change&CHANGED_LINK) { valid=FALSE; active=FALSE; } } }