Welcome, Guest |
You have to register before you can post on our site.
|
|
|
Notecard Giver Dialog |
Posted by: deadpool - 02-19-2013, 02:29 AM - Forum: Communication Scripts
- No Replies
|
|
allowing anyone to touch an object and fish out a notecard of choice.
How-to/Info:
•Copy paste the script below into a new script inworld.
•Save it & then put the script into an object (if not there already).
•Add some notecards then touch it.. Info dispenser 2000 ;)
PHP Code: // Inventory Menu modified to be a notecard giver, for public use key user; string object_desc = "(Touch for Menu;)"; list inventory_list; integer being_used = FALSE; integer menu_channel; integer menu_handle; integer menu_counter; integer menu_parts; integer inventory_type = INVENTORY_NOTECARD; integer prim_face = ALL_SIDES; float menu_timeout = 30.0; set_listen(){ llListenRemove(menu_handle); llSetTimerEvent(menu_timeout); menu_handle = llListen(menu_channel, "", "", ""); } inventory_load(){ integer i; menu_parts=0; inventory_list = []; for(i=0; i < = -1 + llGetInventoryNumber(inventory_type);i++){ inventory_list += [llGetInventoryName(inventory_type,i)]; menu_parts++; } } inventory_menu(){ list menu_buttons; integer i; menu_buttons = []; if(menu_counter > 0) menu_buttons += ["•Back"]; else menu_buttons += [" "]; menu_buttons += ["1st Page"]; if(menu_counter*8+8 < menu_parts - 1) menu_buttons += ["Next•"]; else menu_buttons += [" "]; for(i=menu_counter*8; (i <= menu_counter*8+8) && (i <= menu_parts - 1);i++){ menu_buttons += [llGetSubString(llGetInventoryName(inventory_type, i),0,23)]; } llDialog(user, "\n\n (select \"Ignore\" when done.)", menu_buttons, menu_channel); } string Name2full(string str1){//Hen Streeter integer u=0; for(;u<llGetInventoryNumber(inventory_type);u++){ if(llGetSubString(llGetInventoryName(inventory_type,u),0,23)==str1)//33.. return llGetInventoryName(inventory_type,u); }return ""; } default{ // state_entry(){ menu_channel = (integer)llFrand(DEBUG_CHANNEL) * -1; inventory_load(); llSetObjectDesc(object_desc); } // changed(integer c){ if(c & CHANGED_OWNER) llResetScript(); if(c & CHANGED_INVENTORY) inventory_load(); } // touch_start(integer total_number){ if(being_used){ llSay(0,"Sorry, I'm currently being used by someone else."); return; } being_used = TRUE; user = llDetectedKey(0); set_listen(); inventory_menu(); } // timer(){ being_used = FALSE; user = NULL_KEY; llSetTimerEvent(0.0); llListenRemove(menu_handle); } // listen(integer chan, string who, key id, string msg){ if(llGetOwnerKey(id) != user) return; if(chan == menu_channel){ llSetTimerEvent(menu_timeout); if(msg == "•Back"){ menu_counter--; inventory_menu(); } else if(msg == "1st Page"){ menu_counter=0; inventory_menu(); } else if(msg == "Next•"){ menu_counter++; inventory_menu(); } else if(llListFindList(inventory_list,[Name2full(msg)])!=-1){ msg=Name2full(msg); llGiveInventory(user,msg); llSetTimerEvent(0.1); } } } // }
|
|
|
Give to Child Prims |
Posted by: deadpool - 02-19-2013, 02:28 AM - Forum: Avatar Augmentation Scripts
- No Replies
|
|
What is it?
Something to aid in the task of dropping the same item into multiple prims (linked set). It allows transfer of any SL inventory items, however any scripts sent to child primitives will need to be re-rezzed/set running. It works by voice commands, you simply say what you want sent to all child prims.
How-to/Info:
•Copy paste the script below into a new script inworld.
•Save it & then put the script into an object (if not there already).
•Example voice command: /1 something
PHP Code: // This will give items to all child prims in the linked set // say name of item on given channel, done. // See http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSetRemoteScriptAccessPin // for loading scripts as running state integer listenID; integer cmd_channel = 1; default { // state_entry(){ listenID = llListen(cmd_channel, "",llGetOwner(),""); } // on_rez(integer d){ llResetScript(); } // listen(integer channel, string name, key id, string msg){ if(channel == cmd_channel){ integer i; for (i = 2; i < llGetNumberOfPrims() + 1; i++){ llGiveInventory(llGetLinkKey(i), msg); } llOwnerSay("If you copied a script to child prims, you will need to re-rez an set script to running."); //llRemoveInventory(llGetScriptName()); } } // }
|
|
|
Particle Positioning-Garden |
Posted by: deadpool - 02-19-2013, 02:26 AM - Forum: PARTICLES
- No Replies
|
|
What is it?
A particle emitter created by Jopsy Pendragon, later edited by Joris Tolsen, set to work as a square style particle garden. Since parcels / properties in Second Life don’t have curved edges, this creation is great for utilizing every sqm. Check the commands in script or follow the help prompt when first saving the script.
How-to/Info:
•Copy paste the script below into a new script inworld.
•Save it & then put the script into an object (if not there already).
PHP Code: //// "Fire" PARTICLE TEMPLATE v1 - by Jopsy Pendragon - 4/8/2008 //// You are free to use this script as you please, so long as you include this line: //** The original 'free' version of this script came from THE PARTICLE LABORATORY. **// // SETUP: Drop one optional particle texture and this script into a prim. // Particles should start automatically. (Reset) the script if you insert a // particle texture later on. Add one or more CONTROLLER TEMPLATES to any // prims in the linked object to control when particles turn ON and OFF. // Customize the particle_parameter values below to create your unique // particle effect and click SAVE. Values are explained along with their // min/max and default values further down in this script. // converted for pattern spread by Joris Tolsen // ----------------------------------- // parameters ------------------------ // -- square mode -- float row_space = 0.5; float plant_space = 0.5; // used by circle and random too float plant_offset = 0.0; integer rows = 8; integer plants = 8; // -- random mode -- integer rand_plants = 30; float rand_width = 15.0; float rand_depth = 12.0; // ------------------- float scale = 0.5; integer Handle; integer Channel = 1; integer active = 1; integer pattern = 0; // 0 = square, 1 = random, 2 = circle list plant_list = []; // ---------------------------------- list particle_parameters=[]; // stores your custom particle effect, defined below. list target_parameters=[]; // remembers targets found using TARGET TEMPLATE scripts. maak_part(float distance,float angle,string texture){ particle_parameters = [ // start of particle settings // Texture Parameters: PSYS_SRC_TEXTURE, texture, //llGetInventoryName(INVENTORY_TEXTURE, 0), PSYS_PART_START_SCALE, < scale ,scale, FALSE>, PSYS_PART_END_SCALE, < scale ,scale, FALSE>, PSYS_PART_START_COLOR, < 1,1,1>, PSYS_PART_END_COLOR, < 1,1,1>, PSYS_PART_START_ALPHA, (float)1, PSYS_PART_END_ALPHA, (float)1, // Production Parameters: PSYS_SRC_BURST_PART_COUNT, 2, PSYS_SRC_BURST_RATE, (float) 0.01, PSYS_PART_MAX_AGE, (float)30.0, PSYS_SRC_MAX_AGE,(float) 0.0, // Placement Parameters: PSYS_SRC_PATTERN, (integer)4, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE, // Placement Parameters (for any non-DROP pattern): PSYS_SRC_BURST_SPEED_MIN, (float)0, PSYS_SRC_BURST_SPEED_MAX, (float)0, PSYS_SRC_BURST_RADIUS, distance, // Placement Parameters (only for ANGLE & CONE patterns): PSYS_SRC_ANGLE_BEGIN, angle, PSYS_SRC_ANGLE_END, angle, // PSYS_SRC_OMEGA, <0,0,0>, // After-Effect & Influence Parameters: // PSYS_SRC_ACCEL, <0.0,0.0,0.01>, // PSYS_SRC_TARGET_KEY, llGetLinkKey(llGetLinkNum() + 1), PSYS_PART_FLAGS, (integer)( 0 // Texture Options: // | PSYS_PART_INTERP_COLOR_MASK // | PSYS_PART_INTERP_SCALE_MASK // | PSYS_PART_EMISSIVE_MASK // | PSYS_PART_FOLLOW_VELOCITY_MASK // After-effect & Influence Options: // | PSYS_PART_WIND_MASK // | PSYS_PART_BOUNCE_MASK // | PSYS_PART_FOLLOW_SRC_MASK // | PSYS_PART_TARGET_POS_MASK // | PSYS_PART_TARGET_LINEAR_MASK ) //end of particle settings ]; llParticleSystem( particle_parameters ); } // --------------------------------- // calculate where the plants go // --------------------------------- planten(){ if (pattern==0){ planten_square(); } else if (pattern==1){ planten_list(); } } planten_square(){ integer plants_row=0; // will be set by script !!! integer plants_row_odd=0; // will be set by script !! integer number = llGetInventoryNumber(INVENTORY_TEXTURE); integer textcnt=0; vector begin_pos; vector thrower_pos; integer rc; // row counter integer pc; // plant counter float rl=0.0; // row length float fl=0.0; // field length begin_pos=llGetPos(); thrower_pos=llGetPos(); plants_row=plants/2; if (plants - plants_row - plants_row > 0){ plants_row_odd=1; } if (rows > 1){ fl = rows*row_space-row_space; begin_pos.x-=fl/2.0; } if (plants_row > 1){ rl=plants_row*plant_space-plant_space; } if (!plants_row_odd){ begin_pos.y+=plant_space/2.0; // even number of rows .. take offset } begin_pos.x+=plant_offset; for(rc=0; rc< rows ; rc++){ float rx=begin_pos.x+rc*row_space; for (pc=0; pc<plants_row+plants_row_odd;pc++){ float py=begin_pos.y+pc*plant_space; float dst; float ang; float ro=rx-thrower_pos.x; float po=py-thrower_pos.y; dst = llSqrt(ro*ro+po*po); ang = llAtan2(po,ro); maak_part(dst,ang,llGetInventoryName(INVENTORY_TEXTURE,textcnt)); if (++textcnt >= number) textcnt=0; llSleep(0.05); } } llParticleSystem([]); } planten_list(){ integer planten = llGetListLength(plant_list); // will be set by script !!! vector pos; vector thrower_pos; vector begin_pos; integer pc; // plant counter thrower_pos=llGetPos(); begin_pos=thrower_pos; begin_pos.x+=plant_offset; for (pc=0; pc< planten ; pc++){ vector pp; pp=llList2Vector(plant_list,pc); float px=begin_pos.x+pp.x; float py=begin_pos.y+pp.y; float dst; float ang; float ro=px-thrower_pos.x; float po=py-thrower_pos.y; dst = llSqrt(ro*ro+po*po); ang = llAtan2(po,ro); maak_part(dst,ang,llGetInventoryName(INVENTORY_TEXTURE,(integer)llFloor(pp.z))); llSleep(0.05); } llParticleSystem([]); } maak_list(){ plant_list=[]; integer pc; // plant counter integer number = llGetInventoryNumber(INVENTORY_TEXTURE); float hpd=plant_space/2.0; float dpt=(rand_depth-plant_space)/2.0; for (pc=0; pc<rand_plants;pc++) { integer fout=0; vector pp; do{ fout=0; pp=<llFrand(rand_width)-(rand_width/2),llFrand(dpt)+hpd,llFrand(number)>; // check distance integer len = llGetListLength(plant_list); if (len > 0){ integer tel; for (tel=0;!fout && tel < len ;tel++){ vector lp=llList2Vector(plant_list,tel); if (llVecDist(lp,pp)<plant_space){ fout=1; } } } } while (fout); plant_list += [pp]; } } // ------------------------------------- // check if and which command is in str // ------------------------------------- string checkMatch( string str, list prefixes ){ integer numElements = llGetListLength( prefixes ); integer i; integer lastChar; string curPrefix; string curStr = llToLower( str ); for( i=0; i<numElements; i++ ){ curPrefix = llList2String(prefixes, i); lastChar = llStringLength( curPrefix ); lastChar -= 1; if ( llGetSubString(curStr, 0, lastChar) == curPrefix ) return curPrefix; } return ""; } help(){ llOwnerSay("command format /"+(string)Channel+" command value"); llOwnerSay("commands recognized :"); llOwnerSay("uit off stop : switch the particles off"); llOwnerSay("aan on start : switch the particles on"); llOwnerSay("regels rows : number of rows to plant"); llOwnerSay("plants planten : number of plants per row/random patern"); llOwnerSay("offset plaats : shift the rows away from the center"); llOwnerSay("plantspace : space between plants"); llOwnerSay("rowspace : space between rows"); llOwnerSay("show toon : make spreader visible"); llOwnerSay("hide verstop : hide the spreader"); llOwnerSay("square : square plants in rows"); llOwnerSay("random : generate random pattern"); llOwnerSay("width : width of the random pattern"); llOwnerSay("depth : dept of the random pattern"); llOwnerSay("scale : scale factor of the particle"); } init(){ llSetTimerEvent(12.5); planten(); Handle = llListen(Channel, "", llGetOwner(), ""); active=1; if (pattern == 1) maak_list(); } default{ state_entry(){ llOwnerSay("Commands == /"+(string)Channel+" help "); init(); } on_rez(integer count){ llResetScript(); } timer(){ planten(); } touch_start(integer count){ if (active){ llSetTimerEvent(0.0); active=0; } else{ init(); } } listen(integer channel,string name,key id,string message) { string match; integer divide=llSubStringIndex(message," "); string gSubCommand = llToLower(llGetSubString(message, divide + 1, 40)); // grab the rest of the input string. match = checkMatch( message, ["offset", "plaats"] ); if( match != "" ) { plant_offset=(float)gSubCommand; } else { match = checkMatch( message, ["uit", "off", "stop"] ); if( match != "" ) { llSetTimerEvent(0.0); active=0; } else { match = checkMatch( message, ["aan", "on", "start"] ); if( match != "" ) { init(); } else { match = checkMatch( message, ["plantspace", "plantafstand"] ); if( match != "" ) { plant_space=(float)gSubCommand; } else { match = checkMatch( message, ["rowspace", "rijafstand"] ); if( match != "" ) { row_space=(integer)gSubCommand; } else { match = checkMatch( message, ["rows", "regels"] ); if( match != "" ) { integer rw=0; rw=(integer)gSubCommand; if (rw > 0) rows = rw; } else { match = checkMatch( message, ["plants", "planten"] ); if( match != "" ) { integer pl=0; pl=(integer)gSubCommand; if (pl > 0) { if (pattern == 1) { rand_plants=pl; maak_list(); } else { plants=pl; } } } else { match = checkMatch( message, ["show", "toon"] ); if( match != "" ) { llSetAlpha(1.0,ALL_SIDES); } else { match = checkMatch( message, ["hide", "verstop"] ); if( match != "" ) { llSetAlpha(0.0,ALL_SIDES); } else { match = checkMatch( message, ["width"] ); if( match != "" ) { rand_width=(float)gSubCommand; } else { match = checkMatch( message, ["depth"] ); if( match != "" ) { rand_depth=(float)gSubCommand; } else { match = checkMatch( message, ["square"] ); if( match != "" ) { pattern=0; } else { match = checkMatch( message, ["random"] ); if( match != "" ) { pattern=1; maak_list(); } else { match = checkMatch( message, ["scale"] ); if( match != "" ) { scale = (float)gSubCommand; } else { help(); }}}}}}}}}}}}}} } }
|
|
|
Particle Targeting |
Posted by: deadpool - 02-19-2013, 02:19 AM - Forum: PARTICLES
- No Replies
|
|
How-to/Info:
•Copy paste the scripts below into new scripts inworld.
•Save it & then put them into separate objects (if not there already).
•Touch the object with the Give Key script.
•The Particle Script should now have it’s particle streaming towards the ‘Give Key’ object.
Give Key Script
PHP Code: integer our_channel = -1212123; default{ touch_start(integer total_number){ llSay(our_channel, "Key="+(string)llGetKey()); } }
Particle Script
PHP Code: //We listen on this channel for our target key integer our_channel = -1212123; //Message we listen for "Key=b31b25aa-de... etc". The = symbol being the seperator. //Particle Params key target; integer glow = TRUE; integer bounce = FALSE; integer interpColor = TRUE; integer interpSize = TRUE; integer wind = FALSE; integer followSource = FALSE; integer followVel = TRUE; integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE; float age = 5.0; float maxSpeed = 1.5; float minSpeed = 0.5; string texture = "b31b25aa-de9a-32d7-7c3d-6cfb997c37ba"; float startAlpha = 1.0; float endAlpha = 1.0; vector startColor = <1,1,1>; vector endColor = <0,0,0>; vector startSize = <0.0,0.0,0.0>; vector endSize = <0.1,0.1,0.0>; vector push = <0,0,0>; float rate = 0.01; float radius = 0.0; integer count = 1000; float outerAngle = 1.55; float innerAngle = 1.55; vector omega = <20,20,20>; float life = 0; integer flags; set_particles(){ if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK; if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK; if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK; if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK; if (wind) flags = flags | PSYS_PART_WIND_MASK; if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK; if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK; if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK; llParticleSystem([ PSYS_PART_MAX_AGE,age, PSYS_PART_FLAGS,flags, PSYS_PART_START_COLOR, startColor, PSYS_PART_END_COLOR, endColor, PSYS_PART_START_SCALE,startSize, PSYS_PART_END_SCALE,endSize, PSYS_SRC_PATTERN, pattern, PSYS_SRC_BURST_RATE,rate, PSYS_SRC_ACCEL, push, PSYS_SRC_BURST_PART_COUNT,count, PSYS_SRC_BURST_RADIUS,radius, PSYS_SRC_BURST_SPEED_MIN,minSpeed, PSYS_SRC_BURST_SPEED_MAX,maxSpeed, PSYS_SRC_TARGET_KEY,target, PSYS_SRC_INNERANGLE,innerAngle, PSYS_SRC_OUTERANGLE,outerAngle, PSYS_SRC_OMEGA, omega, PSYS_SRC_MAX_AGE, life, PSYS_SRC_TEXTURE, texture, PSYS_PART_START_ALPHA, startAlpha, PSYS_PART_END_ALPHA, endAlpha]); } default{ // state_entry(){ llListen(our_channel, "","",""); set_particles(); } // listen(integer channel, string name, key id, string message){ if (channel == our_channel){ list cmd_list = llParseString2List(message, ["="], []); string cmd0 = llList2String(cmd_list, 0); string cmd1 = llList2String(cmd_list, 1); if(cmd0 == "Key"){ target = (key)cmd1; set_particles(); } } } // }
|
|
|
Sim Wide Chat |
Posted by: deadpool - 02-19-2013, 02:16 AM - Forum: Communication Scripts
- No Replies
|
|
What is it?
A basic relay system that sends and receives messages on a given channel. So you can talk to your friends (some of;) at ground level while you’re miles above, and vice versa. The messages are encrypted for privacy. You can find the original I hacked to pieces by clicking here, full credit to Kireji Haiku for creating *SIMchat_headset* so I and others can learn/create.
How-to/Info:
•Copy paste the script below into a new script inworld.
•Save it & then put the script into an object (if not there already)
PHP Code: // Converted to use inscript config(removed need for notecard), removed extra states // added link_message, changed to owner only usage/HUD/attachment // integer secret_channel = 10; // key owner; string name; string header; string protocol_signature = "SPY"; string password = "P@ssw0rD"; string strHex = "0123456789ABCDEF"; float protocol_version = 0.3; vector on_color = <0.468,1.000,0.683>; vector off_color = <1.000,0.468,0.468>; integer secret_listen; integer active = 0; init(){ owner = llGetOwner(); list versions = llParseString2List((string)protocol_version, ["."], []); string minor = llList2String(versions, 1); integer p = 0; while(llGetSubString(minor, --p, p) == "0"); header = protocol_signature + hex(llList2Integer(versions, 0)) + hex((integer)llGetSubString(minor, 0xFF000000, p)); } on(){ llListenRemove(secret_listen); secret_listen = llListen(secret_channel, "", "", ""); llSetColor(on_color, ALL_SIDES); llOwnerSay("/me ("+(string)secret_channel+") : ON :"); } off(){ llListenRemove(secret_listen); llSetColor(off_color, ALL_SIDES); llOwnerSay("/me ("+(string)secret_channel+") : OFF :"); } string hex(integer value){ integer digit = value & 0xF; string text = llGetSubString(strHex, digit, digit); value = (value >> 4) & 0xfffFFFF; integer odd = TRUE; while(value){ digit = value & 0xF; text = llGetSubString(strHex, digit, digit) + text; odd = !odd; value = value >> 4; } if(odd) text = "0" + text; return text; } string encrypt(string password, string message){ integer nonce = (integer)llFrand(0x7FFFFFFF); message = llMD5String(message, nonce) + message; string oneTimePad = llMD5String(password, nonce); integer count = (llStringLength(message) - 1) / 32; if(count) do oneTimePad += llMD5String(oneTimePad, nonce); while(--count); return header + llGetSubString("00000000" + hex(nonce), -8, -1) + llXorBase64StringsCorrect(llStringToBase64(message), llStringToBase64(oneTimePad)); } string decrypt(string password, string message){ integer signature_length = llStringLength(protocol_signature); integer header_length = signature_length + 12; if(llStringLength(message) < signature_length + 44) llOwnerSay("/me • Bugger: Insufficient data."); integer index = signature_length; string major = "0x" + llGetSubString(message, index, ++index); string minor = "0x" + llGetSubString(message, ++index, ++index); integer nonce = (integer)("0x" + llGetSubString(message, ++index, index + 7)); message = llGetSubString(message, header_length, -1); string otp = llMD5String(password, nonce); while(llStringLength(otp) < (llStringLength(message) / 2 * 3)) otp += llMD5String(otp, nonce); otp = llStringToBase64(otp); message = llXorBase64StringsCorrect(message, otp); message = llBase64ToString(message); string digest = llGetSubString(message, 0, 31); message = llGetSubString(message, 32, -1); if(llMD5String(message, nonce) != digest) llOwnerSay("/me • Bugger: Try again?..."); return message; } say(string who, string message){ llSetObjectName(who); llSleep(llGetRegionTimeDilation()+0.04); llOwnerSay(message); llSetObjectName(" "); } default{ // attach(key id){ if(id){//tests if it is a valid key and not NULL_KEY llOwnerSay("/me • Channel for sim Talk /"+(string)secret_channel); }else{ llOwnerSay("/me `0'"); } } // state_entry(){ init(); } // touch_start(integer d){ active =! active; if(active){ off(); }else{ on(); } } // changed(integer c){ if(c & CHANGED_OWNER){ llResetScript(); } } // link_message(integer sender, integer code, string str, key id){ if (str == "DCOMM"){//llMessageLinked(LINK_THIS, 0, "DCOMM","ON"); if(id == "ON") on(); else if(id == "OFF") off(); } } // listen(integer channel, string name, key id, string message){ if (channel == secret_channel){ if (id == owner){ llRegionSay(secret_channel, encrypt(password, message)); say(name,message); } else if (llGetAgentSize(id) == ZERO_VECTOR){ say(llKey2Name(llGetOwnerKey(id)),decrypt(password, message)); } } } // }
|
|
|
ABAR Full Store Rip |
Posted by: Femme - 02-19-2013, 02:12 AM - Forum: Commercial Structures
- No Replies
|
|
This store had everything out. Their sculpts looked perfect I wish they would make less child/baby stuff because this is one talented sculptor but I have no need for kid things.
[To see links please register here]
|
|
|
P-Master |
Posted by: deadpool - 02-19-2013, 02:08 AM - Forum: PARTICLES
- No Replies
|
|
What is it?
This is something I’ve made to help scripters & non-scripters alike. It will read the particle parameters from a notecard you select. You can load literally hundreds & hundreds of notecards, building a large library of particle effects. All a user has to do is copy a notecard & then change some of the values listed.. Select your new notecard from the dialog menu & presto, you can view your newly made particle effect. I’ve tried to make the script so it’s easily edit0red into another system:)
How-to/Info:
•Copy paste the ‘script’ below into a new script inworld.
•Copy paste the ‘notecard’ below into a new notecard inworld.
•Save them & then put them into an object (if not there already).
•Touch it.
From the script you can redefine the name of the default notecard, for me its set to *Default Particles*. Once you are sure you have the notecard name matching the name in the script, you can begin making some custom effects.
PHP Code: //Do not sell this; Karma knowz where you live ☠ // Made to read particle params from notecards, allowing storage of more effects in an active object. Help(){ llOwnerSay("/me :: Custom Editing Instructions :: This tools aim is; To easily edit new particle effects & build up a collection of notecard configurations. Each being able to have the params posted cleanly into chat privately for usage in other scripts or projects. The menu system is set to allow any number of notecards (hundreds & hundreds;) I suggest you name the start of the notecard with a name, so it fits on the menu button. The notecard named \"Default Particles\" should be found in this prims inventory. I've added lots of comments hoping to make it a little easier to remember which does what.. Read the comments in the notecard for direct info on how to edit the notecard into your own custom made particle effects. TIP; Less comments in the notecard = the faster it will load, keep the default notecard full of comments but try to remove them from your custom made notecards/parameters.\n"); llSleep(llGetRegionTimeDilation()+0.04);//make sure the ownersay below doesn't show up before the above~.. it happens. llOwnerSay("/me :: Editing The Notecard :: Once you have edited a notecard you can simply drop it into this prim, if its not here already. Once in the prim you can select \"Notecards\" from the menu then select your effect; After a short load time (shorter = less comments) the particle effect will start. If it doesn't start then its highly possible you've put in some odd values, rendering the particles invisible for eg. Check them ;) To list the parameters without the comments select \"Spam ON\" from the menu options. This will make pasting into a script much easier. Thats about it, read the notecard comments, build up a nice collection; share with friends your notecard configs etc =] If you're new to particles & would like to know more; Visit Jopsy Pendragon's \"The Particle Laboratory\" for comprehensive help/info."); } // key Owner;//see state_entry integer dMenu = 0;//counter integer Parts;//parts list List;//inventory list integer dChannel;//menu channel integer dHandle;//handle for inventory menu listen integer Type = INVENTORY_NOTECARD;//make sure inv menu pulls up notecards only from the inventory integer loopSound = FALSE;//default value for the looped sound effect float soundVolume = 1.0;//for sound functions key soundEffect ="cc385f87-8248-df57-ad04-40813444d540";//default sound effect; triggered once when particles start key soundLooped = "0671e204-d976-fcc7-f907-a5010546e7b8";//default loop sound effect, lopping until stopped float MenuTimer = 60;//how long to keep menus/listen active // integer nLine;//notecard line number key queryID = NULL_KEY;//key id for data event string Notecard = "*Default Particles*";//name of our notecard//default particle effect integer spam = FALSE;//Set to TRUE if you want params said to chat integer UpdateOnChange = FALSE;//read notecard (if TRUE) when inventory changes list MenuButtons = ["•","Notecards","•","•OFF•","•RESET•","•HELP•","Spam ON","•","Spam OFF","INVU ON","•","INVU OFF"]; mainMenu(){ llListenRemove(dHandle); llSetTimerEvent(MenuTimer); dHandle = llListen(dChannel, "", "", ""); string spammage; string invUpdate; if(spam)spammage = "ON"; else spammage = "OFF"; if(UpdateOnChange)invUpdate = "ON"; else invUpdate = "OFF"; llDialog(Owner, " Inv Update = "+invUpdate+" Spam Params = "+spammage+" •Help = Post privately some help on custom effects. •INVU = Inventory Update, this set to ON will result in the particles being updated when you hit \"Save\" on a particle 'notecard'. •Spam = Toggle the option to post in chat the particle parameters from the notecard selected. •Notecards = List the notecards currently loaded (near limitless capacity;) •OFF = Stop/Turn off all particle effects. •RESET = Reset the core script.", MenuButtons, dChannel); } Load(){integer i; Parts=0; List = []; for(i=0; i<= -1 + llGetInventoryNumber(Type);i++){ List += [llGetInventoryName(Type,i)]; Parts++; } } invMenu(){ llSetTimerEvent(MenuTimer); list Menu; integer i; Menu = []; if(dMenu > 0) Menu += ["<<Back"]; else Menu += ["<<<<"]; Menu += ["-Main-"]; if(dMenu*8+8 < Parts - 1) Menu += ["Next>>"]; else Menu += [" "]; for(i=dMenu*8; (i <= dMenu*8+8) && (i <= Parts - 1);i++){ Menu += [llGetSubString(llGetInventoryName(Type, i),0,23)]; } llDialog(Owner, "\n*Select desired particle effect;", Menu, dChannel); } string Name2full(string str1){ integer u=0; for(;u<llGetInventoryNumber(Type);u++){ if(llGetSubString(llGetInventoryName(Type,u),0,23)==str1)//33.. return llGetInventoryName(Type,u); } return ""; } // Default Particle Params integer pFlags; integer running = TRUE; string texture; vector startSize; vector endSize; vector startColor; vector endColor; float startAlpha; float endAlpha; float particleAge; float systemAge; float burstRate; integer burstCount; float radius; float angleStart; float angleEnd; vector omega; float minSpeed; float maxSpeed; vector acceleration; key target; integer glowEffect; integer colorInterpolation; integer sizeInterpolation; integer followVelocity; integer windEffect; integer bounceEffect; integer followSource; //Uncomment the following selections once they've been implemented //integer randomAcceleration; //integer randomVelocity; //integer particleTrails; integer pattern; Particles(){pFlags = 0; if (colorInterpolation) pFlags = pFlags|PSYS_PART_INTERP_COLOR_MASK; if (sizeInterpolation) pFlags = pFlags|PSYS_PART_INTERP_SCALE_MASK; if (windEffect) pFlags = pFlags|PSYS_PART_WIND_MASK; if (bounceEffect) pFlags = pFlags|PSYS_PART_BOUNCE_MASK; if (followSource) pFlags = pFlags|PSYS_PART_FOLLOW_SRC_MASK; if (followVelocity) pFlags = pFlags|PSYS_PART_FOLLOW_VELOCITY_MASK; if (target!=NULL_KEY) pFlags = pFlags|PSYS_PART_TARGET_POS_MASK; if (glowEffect) pFlags = pFlags|PSYS_PART_EMISSIVE_MASK; //Uncomment the following selections once they've been implemented //if (randomAcceleration) pFlags = pFlags|PSYS_PART_RANDOM_ACCEL_MASK; //if (randomVelocity) pFlags = pFlags|PSYS_PART_RANDOM_VEL_MASK; //if (particleTrails) pFlags = pFlags|PSYS_PART_TRAIL_MASK; llParticleSystem([ PSYS_PART_FLAGS, pFlags, PSYS_SRC_PATTERN, pattern, PSYS_PART_START_COLOR, startColor, PSYS_PART_END_COLOR, endColor, PSYS_PART_START_ALPHA, startAlpha, PSYS_PART_END_ALPHA, endAlpha, PSYS_PART_START_SCALE, startSize, PSYS_PART_END_SCALE, endSize, PSYS_PART_MAX_AGE, particleAge, PSYS_SRC_ACCEL, acceleration, PSYS_SRC_TEXTURE, texture, PSYS_SRC_BURST_RATE, burstRate, PSYS_SRC_ANGLE_BEGIN, angleStart, PSYS_SRC_ANGLE_END, angleEnd, PSYS_SRC_BURST_PART_COUNT, burstCount, PSYS_SRC_BURST_RADIUS, radius, PSYS_SRC_BURST_SPEED_MIN, minSpeed, PSYS_SRC_BURST_SPEED_MAX, maxSpeed, PSYS_SRC_MAX_AGE, systemAge, PSYS_SRC_TARGET_KEY, target, PSYS_SRC_OMEGA, omega ]); } //send request to dataserver ReadNotecard(string n){ //Memory(llGetFreeMemory()); nLine = 0; llOwnerSay("/me >> Reading particle parameters from notecard \"" + n + "\". Please wait;"); if(spam)llOwnerSay("/me //Start; Particle parameters."); queryID = llGetNotecardLine(Notecard, nLine); } //check memory Memory(llGetFreeMemory()); Memory(integer mem){ llOwnerSay("/me >> "+(string)mem + " of free memory available `0'"); } //check if a key is valid integer isKey(key in){ if(in) return 2; return (in == NULL_KEY); } // check to make sure notecard exists list dList; list InventoryList(){integer i; list result = []; integer n = llGetInventoryNumber(INVENTORY_NOTECARD); for( i = 0; i < n; i++ ){result += [llGetInventoryName(INVENTORY_NOTECARD, i)]; } return result; } // StopEffects(){ llStopSound(); llParticleSystem([]); } default{ state_entry(){ Owner = llGetOwner(); Load();//load inventory dChannel = (integer)llFrand(DEBUG_CHANNEL) * -1; StopEffects(); llOwnerSay("/me >> Script successfully Reset;"); //llOwnerSay((string)llGetLinkNumber()); } // touch_start(integer total_number){ if(llDetectedKey(0) != Owner)return;//Only work for set user mainMenu();//open menu // Some effects for button; integer touchedFace = llDetectedTouchFace(0); vector oldColor = llGetColor(touchedFace);// Store away the original color llSetColor(<0., 255., 0.>, touchedFace);// Flash color llSleep(0.04); llSetColor(oldColor, touchedFace);// Put the color back to how we found it. } // timer(){//remove lag/listen & stop timer llSetTimerEvent(0.0); llListenRemove(dHandle); } // listen(integer chan, string who, key id, string msg){//we listen for responses from menu //llOwnerSay((string)chan+", "+who+", "+(string)id+", "+msg); if(chan == dChannel){ if(msg == "<<<<"){ dMenu=0; mainMenu(); }else if(msg == "Notecards"){ invMenu(); }else if(msg == "•OFF•"){ StopEffects(); }else if(msg == "•HELP•"){ Help(); }else if(msg == "•RESET•"){ llResetScript(); }else if(msg == "Spam ON"){spam = TRUE; llOwnerSay("/me >> Spam ON; The particle parameters will now be posted privately into chat. (This is helpful when copy-pasting params into another script/project)"); }else if(msg == "Spam OFF"){spam = FALSE; llOwnerSay("/me >> Spam OFF;"); }else if(msg == "INVU ON"){UpdateOnChange = TRUE; llOwnerSay("/me >> Inventory Update ON; When you save a notecard it will update the current particle system. (This is helpful when editing notecards to see the changes quickly, keep it off for day-2-day usage)"); }else if(msg == "INVU OFF"){UpdateOnChange = FALSE; llOwnerSay("/me >> Inventory Update OFF;"); }else if(msg == "<<Back"){ dMenu--; invMenu(); }else if(msg == "-Main-"){ dMenu=0; invMenu(); }else if(msg == "Next>>"){ dMenu++; invMenu(); }else if(llListFindList(List,[Name2full(msg)])!=-1){ Notecard = Name2full(msg); ReadNotecard(Notecard); } } } // dataserver(key qid, string data){ if (qid == queryID){ if (data != EOF){ //llOwnerSay((string)(nLine + 1) + ". Read: " + data); // search the "=" sign and take the rest of the text integer nEqualPos = llSubStringIndex(data, "="); if (nEqualPos != -1){ // before string Entry = llGetSubString(data, 0, nEqualPos - 1); // after string Value = llGetSubString(data, nEqualPos + 1, -1); if (Entry == "target"){// Target if(Value == "NULL_KEY"||Value == "target="){target = NULL_KEY; if(spam) llOwnerSay("/me key target = \"" + (string)target + "\";"); }else if(Value == "llGetKey()"){target = llGetKey(); if(spam) llOwnerSay("/me target = \"" + (string)target + "\";"); }else if(Value == "llGetOwner()"){target = llGetOwner(); if(spam) llOwnerSay("/me target = \"" + (string)target + "\";"); }else{target = (key)Value; if(spam) llOwnerSay("/me key target = \"" + (string)target + "\";"); } } else if (Entry == "texture"){// Texture integer result = isKey(Value); if(result){texture = (key)Value; if(spam)llOwnerSay("/me key texture = \"" + (string)texture + "\";"); }else{ if(Value == "texture="||Value == "NULL_KEY"){texture = NULL_KEY; if(spam)llOwnerSay("/me key texture = \"" + Value + "\";"); }else{ llOwnerSay("/me >> texture ERROR; You did not enter a valid texture key; You tried to input "+Value); } } } else if (Entry == "startSize"){// Start size vector v = (vector)Value; if(v.x > 4.0 || v.y > 4.0 || v.z > 4.0){ llOwnerSay("/me >> startSize ERROR; You did not enter a valid vector; Maximum size is 4.0m.. You tried to input "+Value); }if(v.x < 0.0 || v.y < 0.0 || v.z < 0.0){ llOwnerSay("/me >> startSize ERROR; You did not enter a valid vector; Minimum size is 0.0m.. You tried to input "+Value); }else{startSize = (vector)Value; if(spam)llOwnerSay("/me vector startSize = " + (string)startSize + ";"); } }else if (Entry == "endSize"){// End size vector v = (vector)Value; if(v.x > 4.0 || v.y > 4.0 || v.z > 4.0){ llOwnerSay("/me >> endSize ERROR; You did not enter a valid vector; Maximum size is 4.0m.. You tried to input "+Value); }if(v.x < 0.0 || v.y < 0.0 || v.z < 0.0){ llOwnerSay("/me >> endSize ERROR; You did not enter a valid vector; Minimum size is 0.0m.. You tried to input "+Value); }else{endSize = (vector)Value; if(spam)llOwnerSay("/me vector endSize = " + (string)endSize + ";"); } }else if (Entry == "startColor"){// Start Color vector v = (vector)Value; if(v.x > 1.0 || v.y > 1.0 || v.z > 1.0){ llOwnerSay("/me >> startColor ERROR; You did not enter a valid color vector; Maximum value is from 0 to 1.. You tried to input "+Value); }if(v.x < 0.0 || v.y < 0.0 || v.z < 0.0){ llOwnerSay("/me >> startColor ERROR; You did not enter a valid color vector; Minimum value is from 0 to 1.. You tried to input "+Value); }else{startColor = (vector)Value; if(spam)llOwnerSay("/me vector startColor = " + (string)startColor + ";"); } }else if (Entry == "endColor"){//End color vector v = (vector)Value; if(v.x > 1.0 || v.y > 1.0 || v.z > 1.0){ llOwnerSay("/me >> endColor ERROR; You did not enter a valid color vector; Maximum value is from 0 to 1.. You tried to input "+Value); }if(v.x < 0.0 || v.y < 0.0 || v.z < 0.0){ llOwnerSay("/me >> endColor ERROR; You did not enter a valid color vector; Minimum value is from 0 to 1.. You tried to input "+Value); }else{endColor = (vector)Value; if(spam)llOwnerSay("/me vector endColor = " + (string)endColor + ";"); } }else if (Entry == "startAlpha"){// Start alpha if((float)Value > 1.0){ llOwnerSay("/me >> startAlpha ERROR; The values we can set for alpha = from 0.00 (invisible) to 1.00 (visible); You tried to input value "+Value); }else if((float)Value < 0.0){ llOwnerSay("/me >> startAlpha ERROR; The values we can set for alpha = from 0.00 (invisible) to 1.00 (visible); You tried to input value "+Value); }else{ startAlpha = (float)Value; if(spam)llOwnerSay("/me float startAlpha = " + (string)startAlpha+ ";"); } }else if (Entry == "endAlpha"){// End alpha if((float)Value > 1.0){ llOwnerSay("/me >> endAlpha ERROR; The values we can set for alpha = from 0.00 (invisible) to 1.00 (visible); You tried to input value "+Value); }else if((float)Value < 0.0){ llOwnerSay("/me >> endAlpha ERROR; The values we can set for alpha = from 0.00 (invisible) to 1.00 (visible); You tried to input value "+Value); }else{//we have a valid value, so we'll set it endAlpha = (float)Value; if(spam)llOwnerSay("/me float endAlpha = " + (string)endAlpha + ";"); } }else if (Entry == "particleAge"){// Particle age if((float)Value > 30.0){ llOwnerSay("/me >> particleAge ERROR; Maximum age for particle age is 30 seconds; You tried to input value "+Value); }else if((float)Value < 0.0){ llOwnerSay("/me >> particleAge ERROR; Minimum age for particle age is 0 seconds; You tried to input value "+Value); }else{//we have a valid value, so we'll set it particleAge = (float)Value; if(spam)llOwnerSay("/me float particleAge = " + (string)particleAge + ";"); } }else if (Entry == "systemAge"){// System Age if((float)Value < 0.0){ llOwnerSay("/me >> systemLife ERROR; Minimum system age is 0 seconds(set to 0 for endless/infinite); You tried to input value "+Value); }else{systemAge = (float)Value; if(spam)llOwnerSay("/me float systemAge = " + (string)systemAge + ";"); } }else if (Entry == "burstRate"){// Burst Rate if((float)Value < 0.0){ llOwnerSay("/me >> burstRate ERROR; Minimum burst rate is 0 seconds(set to 0 for fastest possible emission rate); You tried to input value "+Value); }else{burstRate = (float)Value; if(spam)llOwnerSay("/me float burstRate = " + (string)burstRate + ";"); } }else if (Entry == "burstCount"){// Burst Count if((float)Value > 1000){ llOwnerSay("/me >> burstCount ERROR; Setting burst count too high can result in lag material, its not suggested you go much over 1000; You tried to input value "+Value+" (tip; small clouds etc 100 to 200)"); }else{burstCount = (integer)Value; if(spam)llOwnerSay("/me integer burstCount = " + (string)burstCount + ";"); } }else if (Entry == "radius"){// Radius if((float)Value < 0.0 || (float)Value > 50.0){ llOwnerSay("/me >> radius ERROR; Maximum radius is believed to be 50m; You tried to input value "+Value); }else{radius = (float)Value; if(spam)llOwnerSay("/me float radius = " + (string)radius + ";"); } }else if (Entry == "angleStart"){// Angle Start angleStart = (float)Value; if(spam)llOwnerSay("/me float angleStart = " + Value + ";"); }else if (Entry == "angleEnd"){// Angle End angleEnd = (float)Value; if(spam)llOwnerSay("/me float angleEnd = " + Value + ";"); }else if (Entry == "minSpeed"){// Min Speed minSpeed = (float)Value; if(spam)llOwnerSay("/me float minSpeed = " + Value + ";"); }else if (Entry == "maxSpeed"){// Max Speed maxSpeed = (float)Value; if(spam)llOwnerSay("/me float maxSpeed = " + Value + ";"); }else if (Entry == "omega"){// Omega omega = (vector)Value; if(spam)llOwnerSay("/me vector omega = " + Value + ";"); }else if (Entry == "acceleration"){// Accel / Push acceleration = (vector)Value; if(spam)llOwnerSay("/me vector acceleration = " + Value + ";"); }// TRUE / FALSE conditions else if (Entry == "glowEffect"){// Glow Effect if(Value == "TRUE"){glowEffect = TRUE; }else if(Value == "FALSE"){glowEffect = FALSE; }else{ llOwnerSay("/me >> glowEffect ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer glowEffect = " + Value + ";"); }else if (Entry == "colorInterpolation"){// Color interpol if(Value == "TRUE"){colorInterpolation = TRUE; }else if(Value == "FALSE"){colorInterpolation = FALSE; }else{ llOwnerSay("/me >> colorInterpolation ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer colorInterpolation = " + Value + ";"); }else if (Entry == "sizeInterpolation"){// Size interpol if(Value == "TRUE"){sizeInterpolation = TRUE; }else if(Value == "FALSE"){sizeInterpolation = FALSE; }else{ llOwnerSay("/me >> sizeInterpolation ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer sizeInterpolation = " + Value + ";"); }else if (Entry == "followVelocity"){// Follow Vel if(Value == "TRUE"){followVelocity = TRUE; }else if(Value == "FALSE"){followVelocity = FALSE; }else{ llOwnerSay("/me >> followVelocity ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer followVelocity = " + Value + ";"); }else if (Entry == "windEffect"){// Wind effect if(Value == "TRUE"){windEffect = TRUE; }else if(Value == "FALSE"){windEffect = FALSE; }else{ llOwnerSay("/me >> windEffect ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer windEffect = " + Value + ";"); }else if (Entry == "bounceEffect"){// Bounce effect if(Value == "TRUE"){bounceEffect = TRUE; }else if(Value == "FALSE"){bounceEffect = FALSE; }else{ llOwnerSay("/me >> bounceEffect ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer bounceEffect = " + Value + ";"); }else if (Entry == "followSource"){// Follow source if(Value == "TRUE"){followSource = TRUE; }else if(Value == "FALSE"){followSource = FALSE; }else{ llOwnerSay("/me >> followSource ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer followSource = " + Value + ";"); }else if (Entry == "pattern"){// Pattern if(Value == "PSYS_SRC_PATTERN_EXPLODE"){pattern = 0x02;} else if(Value == "PSYS_SRC_PATTERN_DROP"){pattern = 0x01;} else if(Value == "PSYS_SRC_PATTERN_ANGLE_CONE"){pattern = 0x08;} else if(Value == "PSYS_SRC_PATTERN_ANGLE"){pattern = 0x04;} else if(Value == "PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY"){pattern = 0x10;} else{ llOwnerSay("/me >> pattern ERROR; You can only have the following parameters PSYS_SRC_PATTERN_EXPLODE PSYS_SRC_PATTERN_DROP PSYS_SRC_PATTERN_ANGLE_CONE PSYS_SRC_PATTERN_ANGLE PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY You tried to input value "+Value+"."); } if(spam)llOwnerSay("/me integer pattern = " + Value + ";"); } //Uncomment the following selections once they've been implemented //else if (Entry == "randomVelocity"){ //if(Value == "TRUE"){randomVelocity = TRUE; //}else{randomVelocity = FALSE;} //if(spam)llOwnerSay("/me integer randomVelocity = " + Value + ";"); //} //else if (Entry == "randomAcceleration"){ //if(Value == "TRUE"){randomAcceleration = TRUE; //}else{randomAcceleration = FALSE;} //if(spam)llOwnerSay("/me integer randomAcceleration = " + Value + ";"); //} //else if (Entry == "particleTrails"){ //if(Value == "TRUE"){particleTrails = TRUE; //}else{particleTrails = FALSE;} //if(spam)llOwnerSay("/me integer particleTrails = " + Value + ";"); //} // Other effects else if (Entry == "loopSound"){ if(Value == "TRUE"){loopSound = TRUE; }else if(Value == "FALSE"){loopSound = FALSE; }else{ llOwnerSay("/me >> loopSound ERROR; You can only have a TRUE or FALSE setting; You tried to input value "+Value); } if(spam)llOwnerSay("/me integer loopSound = " + Value + ";"); }else if (Entry == "soundEffect"){ integer result = isKey(Value); if(result){soundEffect = (key)Value; if(spam)llOwnerSay("/me key soundEffect = \"" + Value + "\";"); }else{ llOwnerSay("/me >> soundEffect ERROR; You did not enter a valid sound key; You tried to input "+Value); } }else if (Entry == "soundLooped"){ integer result = isKey(Value); if(result){soundLooped = (key)Value; if(spam)llOwnerSay("/me key soundLooped = \"" + Value + "\";"); }else{ llOwnerSay("/me >> soundLooped ERROR; You did not enter a valid sound key; You tried to input "+Value); } }else if (Entry == "soundVolume"){ if((float)Value > 1.0){ llOwnerSay("/me >> soundVolume ERROR; The values we can set for volume = from 0.00 (silent) to 1.00 (loud); You tried to input value "+Value); }else if((float)Value < 0.0){ llOwnerSay("/me >> soundVolume ERROR; The values we can set for volume = from 0.00 (silent) to 1.00 (loud); You tried to input value "+Value); }else{soundVolume = (float)Value; if(spam)llOwnerSay("/me float soundVolume = " + (string)soundVolume + ";"); } } // Example of reading a list(ed) entry // listExample = red,5,TRUE,NULL_KEY //else if (Entry == "listExample"){ //list l = llCSV2List(Value); //integer i; //for (i = 0; i < llGetListLength(l); i++){ //if(spam)llOwnerSay("list " + (string)i + " = " + llList2String(l, i)); //} //} } ++nLine; queryID = llGetNotecardLine(Notecard, nLine); }else{// all done.. reset our particle params with our new settings if(spam)llOwnerSay("/me //End"); StopEffects(); Particles(); llTriggerSound(soundEffect,soundVolume); if(loopSound)llLoopSound(soundLooped,soundVolume); llOwnerSay("/me >> New particle parameters set;"); } } } // changed(integer change){ if(change & CHANGED_OWNER){llResetScript(); } if(change & CHANGED_INVENTORY){ Load();//we reload inventory menu list to show new changes if(!UpdateOnChange) return; dList = InventoryList();//update our list if(llListFindList(dList,[Notecard])!=-1){//check our notecard is still in there, prevent error if deleting ReadNotecard(Notecard);//notecard found, read it }else{//we didnt find the notecard that was last set, maybe we changed it's name llOwnerSay("/me >> INVUpdating failed; Parameters have not been changed; \""+Notecard+"\" was not found. (Notecard deleted or name of the notecard has changed)"); } } } // }
|
|
|
|