integer searchphase = 0; list panels = []; default { state_entry() { panels = []; key MyGroup = llList2Key(llGetObjectDetails(llGetKey(), [OBJECT_GROUP]), 0); if (llGetOwner() != MyGroup) { state UnDeeded; } else { state Deeded; } } } state UnDeeded { touch_start(integer total_number) { if ( llDetectedKey(0) == llGetOwner() ) { state Scanning; } else { llSay(0, "Permission Denied."); } } changed(integer change) { if (change & CHANGED_OWNER) { state default; } } } state Deeded { state_entry() { llSay(0, "Deeded Mode"); } touch_start(integer total_number) { if ( llSameGroup(llDetectedKey(0)) ) { state Scanning; } else { llSay(0, "Permission Denied."); } } changed(integer change) { if (change & CHANGED_OWNER) { state default; } } } state Scanning { state_entry() { searchphase = 1; llSensor("WakaTech Tube-O-Rama (Small)", NULL_KEY, PASSIVE | SCRIPTED, 20.0, PI); } sensor(integer num_detected) { integer i; for (i = 0; i < num_detected; i++) { if ( llGetOwner() == llDetectedOwner(i) ) { panels += [llDetectedKey(i)]; } } if (searchphase == 1) { searchphase = 2; llSensor("WakaTech Tube-O-Rama (Large)", NULL_KEY, PASSIVE | SCRIPTED, 20.0, PI); } else { state PostScan; } } no_sensor() { if (searchphase == 1) { searchphase = 2; llSensor("WakaTech Tube-O-Rama (Large)", NULL_KEY, PASSIVE | SCRIPTED, 20.0, PI); } else { state PostScan; } } state_exit() { searchphase = 0; llSay(0, "Scan complete, found " + (string)llGetListLength(panels) + " panels to update."); } } state PostScan { state_entry() { key panel; if ( llGetListLength(panels) ) { while ( llGetListLength(panels) ) { panel = llList2Key(panels, 0); panels = llDeleteSubList(panels, 0, 0); llRemoteLoadScriptPin(panel, "Tube-O-Rama", REDACTED, TRUE, 0); } llSay(0, "Updates Complete!"); state default; } else { llSay(0, "No panels found, exiting."); state default; } } }