All pastes #795065 Raw Edit

Miscellany

public text v1 · immutable
#795065 ·published 2007-11-23 17:17 UTC
rendered paste body
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;    
        }
    }    
}