Difference between revisions of "User:Ezian Ecksol"

From Second Life Wiki
Jump to navigation Jump to search
Line 1: Line 1:
'''1-Prim Digiclock'''
<lsl>// 1-Prim Digiclock
// (c) Ezian Ecksol, open source, keep credits
//
// put to object description the GMT offset in hours, e.g 2.5
// touch to turn on/off
list faces = [3,2.05,.6,  7,.795,0.,  4,-11.5,-0.73,  6,.795,0.,  1,2.05,-0.6];
key tx = "2b43c7d6-c96a-b5d9-7210-8bc15451252f";
float tx_step = 0.0625;
float tx_step_2;
float tx_base;
integer presence0;
float gmt_offset;
float clock_cycle;
float clock_time;
integer clock_mode = TRUE;
list construct_face(integer f, integer z) {
    integer i = f*3;
    return [PRIM_TEXTURE, llList2Integer(faces,i), tx,
            <llList2Float(faces,i+1), tx_step, 0.0>, <llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0>, 0.0];
}
setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {
    llSetPrimitiveParams(
        construct_face(0,z1)+construct_face(1,z2)+
        construct_face(2,z3)+construct_face(3,z4)+
        construct_face(4,z5));     
}
clock() {
    clock_time = llGetGMTclock() + gmt_offset*3600.0;
   
    integer s = (integer) clock_time;
    integer h = (s / 3600) % 24;
    integer m = s % 3600;
    m = m / 60;
 
    setprim(h/10,h%10,10,m/10,m%10);
   
    llResetTime();
    integer w1 = (integer) (clock_time / clock_cycle);
    float w2 = clock_time - (float)w1 * clock_cycle;
    llSetTimerEvent(clock_cycle-w2); 
}
default
{
    state_entry() {
       
        integer f;
        integer i;
        list j;
       
        gmt_offset = (float)llGetObjectDesc();
       
        tx_step_2 = tx_step / 2.;
        tx_base = 0.5 - tx_step_2;
        clock_cycle = 60.0;
       
        setprim(11,11,11,11,11);
       
        for (i=0; i<15; i+=3) {
            f = llList2Integer(faces,i);
            j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, <0., 0., 1.>, 1.];
           
        }
        llSetPrimitiveParams([
            PRIM_TYPE, PRIM_TYPE_PRISM, 1, <0.2, 0.8, 0.0>, 0.7, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>,
            PRIM_SIZE, <0.01, 1.777, 0.577>, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, <0., 0., 1.>, 0.] + j);
       
        clock();
    }
   
    on_rez(integer p) {
        llResetScript();
    }
    touch_start(integer total_number) {
        if (llGetOwner() == llDetectedKey(0)) {
            clock_mode = !clock_mode;
            if (clock_mode) {
                clock();
       
            } else {
                llSetTimerEvent(0.);
                setprim(15,15,15,15,15);
            }
        }
    }
   
    timer() {
        clock();           
    }
}</lsl>
----
'''Cam Lock/Follow'''
'''Cam Lock/Follow'''
<lsl>
<lsl>

Revision as of 03:06, 23 September 2008

1-Prim Digiclock

<lsl>// 1-Prim Digiclock // (c) Ezian Ecksol, open source, keep credits // // put to object description the GMT offset in hours, e.g 2.5 // touch to turn on/off

list faces = [3,2.05,.6, 7,.795,0., 4,-11.5,-0.73, 6,.795,0., 1,2.05,-0.6]; key tx = "2b43c7d6-c96a-b5d9-7210-8bc15451252f"; float tx_step = 0.0625; float tx_step_2; float tx_base; integer presence0; float gmt_offset; float clock_cycle; float clock_time; integer clock_mode = TRUE;

list construct_face(integer f, integer z) {

   integer i = f*3;
   return [PRIM_TEXTURE, llList2Integer(faces,i), tx, 
           <llList2Float(faces,i+1), tx_step, 0.0>, <llList2Float(faces,i+2), tx_base-(float)z*tx_step, 0.0>, 0.0]; 

}


setprim(integer z1, integer z2, integer z3, integer z4, integer z5) {

   llSetPrimitiveParams( 
       construct_face(0,z1)+construct_face(1,z2)+
       construct_face(2,z3)+construct_face(3,z4)+
       construct_face(4,z5));      

}

clock() {

   clock_time = llGetGMTclock() + gmt_offset*3600.0;
   
   integer s = (integer) clock_time;
   integer h = (s / 3600) % 24;
   integer m = s % 3600;
   m = m / 60; 
  
   setprim(h/10,h%10,10,m/10,m%10);
   
   llResetTime();
   integer w1 = (integer) (clock_time / clock_cycle);
   float w2 = clock_time - (float)w1 * clock_cycle;
   llSetTimerEvent(clock_cycle-w2);  

}

default {

   state_entry() {
       
       integer f;
       integer i;
       list j;
       
       gmt_offset = (float)llGetObjectDesc();
       
       tx_step_2 = tx_step / 2.;
       tx_base = 0.5 - tx_step_2;
       clock_cycle = 60.0;
       
       setprim(11,11,11,11,11);
       
       for (i=0; i<15; i+=3) {
           f = llList2Integer(faces,i);
           j += [PRIM_GLOW,f,.01, PRIM_COLOR, f, <0., 0., 1.>, 1.];
           
       } 
       llSetPrimitiveParams([
           PRIM_TYPE, PRIM_TYPE_PRISM, 1, <0.2, 0.8, 0.0>, 0.7, <0.0, 0.0, 0.0>, <1.0, 1.0, 0.0>, <0.0, 0.0, 0.0>,
           PRIM_SIZE, <0.01, 1.777, 0.577>, PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_COLOR, ALL_SIDES, <0., 0., 1.>, 0.] + j); 
       
       clock();
   }
   
   on_rez(integer p) {
       llResetScript();
   }
   touch_start(integer total_number) { 
       if (llGetOwner() == llDetectedKey(0)) {
           clock_mode = !clock_mode;
           if (clock_mode) {
               clock();
       
           } else {
               llSetTimerEvent(0.);
               setprim(15,15,15,15,15);
           }
       }
   }
   
   timer() {
       clock();            
   }

}</lsl>


Cam Lock/Follow <lsl> // Camstyle, (c) Ezian Ecksol, feel free to copy, steal, modify

// Put script into prim, attach it. // usage: position your camera where you like. // enter in chan: // /1 camstyle follow <-- camera is fixed, but follows your av // /1 camstyle lock <-- camera is completly locked // /1 camstyle <-- releases cam again

integer chan = 1;

key owner; list keywords = ["lock", "follow"];

cam_style(integer cs) {

   llRequestPermissions(owner, PERMISSION_CONTROL_CAMERA | PERMISSION_TRACK_CAMERA);
   llClearCameraParams(); 
       
   if (!cs)
       return;
       
   vector cpos = llGetCameraPos();
   list params = [CAMERA_ACTIVE, TRUE, CAMERA_POSITION_LOCKED, TRUE, CAMERA_POSITION_THRESHOLD, 0.5,
                   CAMERA_FOCUS_THRESHOLD, 0.5, CAMERA_POSITION, cpos];
       
   if (cs == 1) 
       params += [
           CAMERA_DISTANCE, .5, // ( 0.5 to 10) meters
           CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
           CAMERA_PITCH, 10.0, // (-45 to 80) degrees
           CAMERA_FOCUS, cpos + llRot2Fwd(llGetCameraRot()), // region-relative position
           CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds
           CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
           CAMERA_POSITION_LAG, 1.0 // (0 to 3) seconds
       ];
       
   else if (cs == 2) 
       params += [
           CAMERA_FOCUS_LAG, 0.0, // (0 to 3) seconds
           CAMERA_BEHINDNESS_LAG, 0.5 // (0 to 3) seconds
       ];
       
   llSetCameraParams(params);

}


default {

   state_entry() {
       owner = llGetOwner();
       llListen(chan, "", owner, "");
   }
   
   listen(integer channel, string name, key id, string msg) {
       msg = llToLower(msg);
       list m = llParseString2List(msg, [" "], []);
       
       if (llList2String(m, 0) == "camstyle") 
           cam_style(llListFindList(keywords, [llList2String(m, 1)]) + 1);
   }
   changed(integer c) {
       if (c & CHANGED_OWNER)
           llResetScript();
   }

} </lsl>