User:ANSI Soderstrom/Event Scanner CHANGED: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Created page with "== Leave a comment == * [[User_talk:{{PAGENAME}}|My User Talk about this Page]] == Eventscanner for changed() == Find out what is really changing... Attached or loose... <lsl>…"
 
 
(8 intermediate revisions by the same user not shown)
Line 2: Line 2:
* [[User_talk:{{PAGENAME}}|My User Talk about this Page]]
* [[User_talk:{{PAGENAME}}|My User Talk about this Page]]


== Eventscanner for changed() ==
== Eventscanner: changed() ==


Find out what is really changing... Attached or loose...
Find out what is really changing... Attached or loose...


<lsl>
<lsl>
// Simple Eventscanner for changed()
// (C) ANSI Soderstrom 02.02.2011
// (C) 01/2011 ANSI Soderstrom
 
// This Script detects all possible change-events
list CHANGE = [ 1, "CHANGED_INVENTORY",
//
                2, "CHANGED_COLOR",
// About this coding-style:
                3, "CHANGED_SHAPE",
// BIGLETTERS:  are ever global variables
                4, "CHANGED_SCALE",
// smallletters: are ever local variables
                5, "CHANGED_TEXTURE",
 
                6, "CHANGED_LINK",
// ----------------------------------------------
                7, "CHANGED_ALLOWED_DROP",
// global variables section
                8, "CHANGED_OWNER",
// ----------------------------------------------
                9, "CHANGED_REGION",
 
              10, "CHANGED_TELEPORT",
// the list with the event-triggers
              11, "CHANGED_REGION_START",
list TRIGGER = [ CHANGED_INVENTORY,   "CHANGED_INVENTORY",
              12, "CHANGED_MEDIA"
                CHANGED_COLOR,       "CHANGED_COLOR",
                CHANGED_SHAPE,       "CHANGED_SHAPE",
                CHANGED_SCALE,       "CHANGED_SCALE",
                CHANGED_TEXTURE,     "CHANGED_TEXTURE",
                CHANGED_LINK,         "CHANGED_LINK",
                CHANGED_ALLOWED_DROP, "CHANGED_ALLOWED_DROP",
                CHANGED_OWNER,       "CHANGED_OWNER",
                CHANGED_REGION,       "CHANGED_REGION",
                CHANGED_TELEPORT,     "CHANGED_TELEPORT",
                CHANGED_REGION_START, "CHANGED_REGION_START",
                CHANGED_MEDIA,       "CHANGED_MEDIA"
               ];
               ];
             
// a list to build a returnvalue (messagelinked)
list VALUE = [];
// strides ??? wtf does this means ?
list VALUE_DESC = ["CONSTANT_NAME","VALUE"];
// ----------------------------------------------
// functions section
// ----------------------------------------------


integer shift(integer bit) {
integer reset(list todo) {
     return 1 << bit;
     // reset VALUE useful ?
    if(todo!=[]) {
        VALUE = []; 
        return 1;
    }
    return 0;
}
}


search(integer number) {
integer found(list changelist, integer stride, integer trigger) {
     integer i;
     integer i;
     for(i=llGetListLength(CHANGE)/2-1;~i;--i) {
   
         if(number - shift(i) >= 0) {
    // go backwards throught the trigger list...
             llOwnerSay("Change detected : " + llList2String(CHANGE,i*2+1));
     for(i=(llGetListLength(changelist)/stride)-1;~i;--i) {
             number = number - shift(i);
       
        // ...while the whole trigger > 0...
         if(llList2Integer(changelist,i*2) <= trigger) {
              
            // ...and put the last posible single-trigger to a list...
            VALUE += [  llList2String(changelist,i*2+1),
                        llList2String(changelist,i*2)
                    ];
             // and finally decrease the whole trigger with the stored single-trigger :)
            trigger = trigger - llList2Integer(changelist,i*2);
         }
         }
     }     
     }     
    return 1;
}
}
// ----------------------------------------------
// states section
// ----------------------------------------------
    
    
ResetMe() {
    ClearPrimMemory();       
    llResetScript();
}
   
ClearPrimMemory() {
    llSetSitText("");
    llSetTouchText("");
    llParticleSystem([]);
    llSetText("",ZERO_VECTOR,1.0 );
    llTargetOmega(ZERO_VECTOR,0,0 );
    llSetCameraAtOffset(ZERO_VECTOR);
    llSetCameraEyeOffset(ZERO_VECTOR);
    llSitTarget(ZERO_VECTOR,ZERO_ROTATION);
    llSetTextureAnim(FALSE,ALL_SIDES,1,1,0,0,0.0);
    llStopSound(); 
    llResetTime(); 
}
default {
default {
   
         
     state_entry() {  
     state_entry() {
        // your code here....           
       
    }
       
    on_rez(integer i) {
       
        ResetMe();
          
          
        // be verbose (Channel 1)
        llMessageLinked(LINK_THIS,1,llList2CSV(llParseString2List(llGetScriptName(),["."],[""])),NULL_KEY);
       
     }
     }
         
    changed(integer change) {
      
      
    attach(key id) {
        // what is happened ???
        if(found(TRIGGER,llGetListLength(VALUE_DESC),change)) {
           
            // Send all events to the parser (Channel 0)
            llMessageLinked(LINK_THIS,0,llList2CSV(llParseString2List(llGetScriptName(),["."],[""]) + [llGetListLength(VALUE_DESC)] + VALUE_DESC + VALUE),NULL_KEY);
              
              
         ResetMe();
         }
               
    }
          
          
    changed(integer change) {
         // forget all
       
         if(reset(VALUE)) {
        search(change);
           
          
            // just a joke ;)
         if (change & (CHANGED_INVENTORY | CHANGED_OWNER)) {
            return; 
              
              
            ResetMe();
         }  
         
         }


     }
     }  
          
          
}  
}  


</lsl>
</lsl>

Latest revision as of 08:46, 3 February 2011

Leave a comment

Eventscanner: changed()

Find out what is really changing... Attached or loose...

<lsl> // (C) ANSI Soderstrom 02.02.2011

// This Script detects all possible change-events // // About this coding-style: // BIGLETTERS: are ever global variables // smallletters: are ever local variables

// ---------------------------------------------- // global variables section // ----------------------------------------------

// the list with the event-triggers list TRIGGER = [ CHANGED_INVENTORY, "CHANGED_INVENTORY",

                CHANGED_COLOR,        "CHANGED_COLOR",
                CHANGED_SHAPE,        "CHANGED_SHAPE",
                CHANGED_SCALE,        "CHANGED_SCALE",
                CHANGED_TEXTURE,      "CHANGED_TEXTURE",
                CHANGED_LINK,         "CHANGED_LINK",
                CHANGED_ALLOWED_DROP, "CHANGED_ALLOWED_DROP",
                CHANGED_OWNER,        "CHANGED_OWNER",
                CHANGED_REGION,       "CHANGED_REGION",
                CHANGED_TELEPORT,     "CHANGED_TELEPORT",
                CHANGED_REGION_START, "CHANGED_REGION_START",
                CHANGED_MEDIA,        "CHANGED_MEDIA"
              ];
              

// a list to build a returnvalue (messagelinked) list VALUE = [];

// strides ??? wtf does this means ? list VALUE_DESC = ["CONSTANT_NAME","VALUE"];

// ---------------------------------------------- // functions section // ----------------------------------------------

integer reset(list todo) {

   // reset VALUE useful ?
   if(todo!=[]) {
       VALUE = [];   
       return 1;
   }
   return 0;

}

integer found(list changelist, integer stride, integer trigger) {

   integer i;
   
   // go backwards throught the trigger list...
   for(i=(llGetListLength(changelist)/stride)-1;~i;--i) {
       
       // ...while the whole trigger > 0...
       if(llList2Integer(changelist,i*2) <= trigger) {
           
           // ...and put the last posible single-trigger to a list...
           VALUE += [  llList2String(changelist,i*2+1),
                       llList2String(changelist,i*2)
                    ];
           // and finally decrease the whole trigger with the stored single-trigger :)
           trigger = trigger - llList2Integer(changelist,i*2);
       }
   }    
   return 1;

}

// ---------------------------------------------- // states section // ----------------------------------------------

default {

   state_entry() {
       
       // be verbose (Channel 1)
       llMessageLinked(LINK_THIS,1,llList2CSV(llParseString2List(llGetScriptName(),["."],[""])),NULL_KEY);
        
   }
          
   changed(integer change) {
   
       // what is happened ???
       if(found(TRIGGER,llGetListLength(VALUE_DESC),change)) {
           
           // Send all events to the parser (Channel 0)
           llMessageLinked(LINK_THIS,0,llList2CSV(llParseString2List(llGetScriptName(),["."],[""]) + [llGetListLength(VALUE_DESC)] + VALUE_DESC + VALUE),NULL_KEY);
           
       }
       
       // forget all
       if(reset(VALUE)) {
           
           // just a joke ;)
           return;   
           
       } 
   } 
       

}

</lsl>