Difference between revisions of "User:ANSI Soderstrom/Event Scanner CHANGED"
Line 100: | Line 100: | ||
// Send all events to the parser (Channel 0) | // Send all events to the parser (Channel 0) | ||
llMessageLinked(LINK_THIS,0,llList2CSV(llParseString2List(llGetScriptName(),["."],[""]) + [VALUE_STRIDE] + VALUE),NULL_KEY); | llMessageLinked(LINK_THIS,0,llList2CSV(llParseString2List(llGetScriptName(),["."],[""]) + [VALUE_STRIDE] + [VALUE_DESC] + VALUE),NULL_KEY); | ||
} | } |
Revision as of 13:14, 2 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" ];
// how many strides in the list ? integer TRIGGER_STRIDE= 2;
// a list to build a returnvalue (messagelinked) list VALUE = [];
// how many strides in the list ? integer VALUE_STRIDE= 2;
// strides ??? wtf does this means ? list VALUE_DESC = ["CONSTANT_NAME","VALUE"];
// ---------------------------------------------- // functions section // ----------------------------------------------
integer shift(integer bit) {
// shift bitwise return 1 << bit;
}
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((trigger-shift(i)) >=0) { // ...and put the last posible single-trigger to a list... VALUE += [ llList2String(changelist,(stride*2)+1), llList2String(changelist,stride) ]; // and finally decrease the whole trigger with the stored single-trigger :) trigger = trigger - shift(i); } } 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,TRIGGER_STRIDE,change)) { // Send all events to the parser (Channel 0) llMessageLinked(LINK_THIS,0,llList2CSV(llParseString2List(llGetScriptName(),["."],[""]) + [VALUE_STRIDE] + [VALUE_DESC] + VALUE),NULL_KEY); } // forget all if(reset(VALUE)) { // just a joke ;) return; };
}
}
</lsl>