ZombieWolf Overdrive
Graphic Designer
Join date: 5 Jul 2005
Posts: 44
|
09-03-2005 06:54
Can someone point me to a script to use in a light that just pulses a small round white glow?
Thanks! - ZW
|
Psyra Extraordinaire
Corra Nacunda Chieftain
Join date: 24 Jul 2004
Posts: 1,533
|
09-03-2005 08:00
Heyo Zombiewolf!  These two scripts are for my Night Globes. Outdoor lighting that automatically lights up at night, and turns off in day. These two scripts will go into the prim that is the light itself. The particle script is based around Jopsy's, so it's easy to tweak and very well documented. Hope it helps! Script 1: "Night Light" default { state_entry() { llSetTimerEvent(4); } timer() { vector sun = llGetSunDirection(); if(sun.z > 0) { llSetPrimitiveParams([PRIM_MATERIAL,PRIM_MATERIAL_GLASS]); } else { llSetPrimitiveParams([PRIM_MATERIAL,PRIM_MATERIAL_LIGHT]); } } }
Script 2: "Night Particles" // Particle Script 0.4j // Created by Ama Omega 3-7-2004 // Updated by Jopsy Pendragon 5-11-2004 // For classes/tutorials/tricks, visit the Particle Labratory in Teal // Values marked with (*) are defaults. // Modified to 'activate at night only'
// SECTION ONE: APPEARANCE -- These settings affect how each particle LOOKS. integer glow = TRUE; // TRUE or FALSE(*) vector startColor = <1,1,0.5>; // RGB color, black<0,0,0> to white<1,1,1>(*) vector endColor = <1,1,0.5>; // float startAlpha = 0.3; // 0.0 to 1.0(*), lower = more transparent float endAlpha = 0.3; // vector startSize = <3.0,3.0,0>; // <0.04,0.04,0>(min) to <10,10,0>(max>, <1,1,0>(*) vector endSize = <3.0,3.0,0>; // (Z part of vector is discarded) string texture = ""; // Texture used for particles. Texture must be in prim's inventory.
// SECTION TWO: FLOW -- These settings affect how Many, how Quickly, and for how Long particles are created. // Note, integer count = 3; // Number of particles created per burst, 1(*) to 4096 float rate = 4.0; // Delay between bursts of new particles, 0.0 to 60, 0.1(*) float age = 20.0; // How long each particle lives, 0.1 to 60, 10.0(*) float life = 0.0; // When to stop creating new particles. never stops if 0.0(*)
// SECTION THREE: PLACEMENT -- Where are new particles created, and what direction are they facing? float radius = 0.0; // 0.0(default) to 64? Distance from Emitter where new particles are created. float innerAngle = 0; // "spread", for all ANGLE patterns, 0(default) to PI float outerAngle = 0; // "tilt", for ANGLE patterns, 0(default) to TWO_PI, can use PI_BY_TWO or PI as well. integer pattern = PSYS_SRC_PATTERN_ANGLE; // Choose one of the following: // PSYS_SRC_PATTERN_EXPLODE (sends particles in all directions) // PSYS_SRC_PATTERN_DROP (ignores minSpeed and maxSpeed. Don't bother with count>1 ) // PSYS_SRC_PATTERN_ANGLE_CONE (set innerangle/outerange to make rings/cones of particles) // PSYS_SRC_PATTERN_ANGLE (set innerangle/outerangle to make flat fanshapes of particles) vector omega = <0,0,0>; // How much to rotate the emitter around the <X,Y,Z> axises. <0,0,0>(*) // Warning, there's no way to RESET the emitter direction once you use Omega!! // You must attach the script to a new prim to clear the effect of omega.
// SECTION FOUR: MOVEMENT -- How do the particles move once they're created? integer followSource = FALSE; // TRUE or FALSE(*), Particles move as the emitter moves, (TRUE disables radius!) integer followVel = TRUE; // TRUE or FALSE(*), Particles rotate towards their direction integer wind = FALSE; // TRUE or FALSE(*), Particles get blown away by wind in the sim integer bounce = FALSE; // TRUE or FALSE(*), Make particles bounce on Z altitude of emitter float minSpeed = 0.01; // 0.01 to ? Min speed each particle is spit out at, 1.0(*) float maxSpeed = 0.01; // 0.01 to ? Max speed each particle is spit out at, 1.0(*) vector push = <0,0,0>; // Continuous force pushed on particles, use small settings for long lived particles key target = ""; // Select a target for particles to arrive at when they die // can be "self" (emitter), "owner" (you), "" or any prim/persons KEY.
// SECTION FIVE: Ama's "Create Short Particle Settings List" integer enableoutput = FALSE; // If this is TRUE, clicking on your emitter prim will cause it to speak // very terse "shorthand" version of your particle settings. You can cut'n'paste // this abbreviated version into a call to llParticleSystem([ ]); in another script. // Pros: Takes up far less scripting space, letting you focus on the rest of your code. // Cons: makes tune your settings afterwards rather awkward
// === Don't muck about below this line unless you're comfortable with the LSL scripting language ====
// Script variables integer pre = 2; //Adjust the precision of the generated list. integer flags; list sys; integer type; vector tempVector; rotation tempRot; string tempString; integer i;
string float2String(float in) { return llGetSubString((string)in,0,pre - 7); }
updateParticles() { flags = 0; if (target == "owner") target = llGetOwner(); if (target == "self") target = llGetKey(); if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK; if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK; if (startColor != endColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK; if (startSize != endSize) 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; sys = [ 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 ]; float newrate = rate; if (newrate == 0.0) newrate=.01; if ( (age/rate)*count < 4096) llParticleSystem(sys); else { llInstantMessage(llGetOwner(),"Your particle system creates too many concurrent particles."); llInstantMessage(llGetOwner(),"Reduce count or age, or increate rate."); llParticleSystem( [ ] ); } } integer onoff; default { state_entry() { onoff=0; updateParticles(); llSetTimerEvent( 4 ) ;
} timer() { vector sun = llGetSunDirection(); if(sun.z > 0) { llParticleSystem( [ ] ); } else { updateParticles(); }
}
touch_start(integer num) { if ( enableoutput == FALSE ) { if ( onoff ) llResetScript(); onoff++; llParticleSystem( [ ] ); return; } if (1) return; // Comment out this line to enable this function llWhisper(0,"...Generating List..."); for (i=1;i<42;i+=2) { type = llGetListEntryType(sys,i); if(type == TYPE_FLOAT) { tempString = float2String(llList2Float(sys,i)); sys = llDeleteSubList(sys,i,i); sys = llListInsertList(sys,[tempString],i); } else if (type == TYPE_VECTOR) { tempVector = llList2Vector(sys,i); tempString = "<" + float2String(tempVector.x) + "," + float2String(tempVector.y) + "," + float2String(tempVector.z) + ">"; sys = llDeleteSubList(sys,i,i); sys = llListInsertList(sys,[tempString],i); } else if (type == TYPE_ROTATION) { tempRot = llList2Rot(sys,i); tempString = "<" + float2String(tempRot.x) + "," + float2String(tempRot.y) + "," + float2String(tempRot.z) + "," + float2String(tempRot.s) + ">"; sys = llDeleteSubList(sys,i,i); sys = llListInsertList(sys,[tempString],i); } else if (type == TYPE_STRING || type == TYPE_KEY) { tempString = "\"" + llList2String(sys,i) + "\""; sys = llDeleteSubList(sys,i,i); sys = llListInsertList(sys,[tempString],i); } } i = llListFindList(sys,[20,""]); if (i != -1) sys = llDeleteSubList(sys,i,i+1); llWhisper(0,"[" + llList2CSV(llList2List(sys,0,22)) + ","); llWhisper(0,llList2CSV(llList2List(sys,23,-1)) + "]"); } }
_____________________
E-Mail Psyra at psyralbakor_at_yahoo_dot_com, Visit my Webpage at www.psyra.ca  Visit me in-world at the Avaria sims, in Grendel's Children! ^^
|
ZombieWolf Overdrive
Graphic Designer
Join date: 5 Jul 2005
Posts: 44
|
Re:
09-03-2005 08:15
Perfect! Thanks so much Psyra!!
-ZW
|
Keknehv Psaltery
Hacker
Join date: 11 Apr 2005
Posts: 1,185
|
09-03-2005 13:08
Psyra, would you mind posting that script up on the wiki's ParticleLibrary? I'd really appreciate it. Thanks 
|
Psyra Extraordinaire
Corra Nacunda Chieftain
Join date: 24 Jul 2004
Posts: 1,533
|
09-06-2005 15:28
I've avoided parking the second script onto the Wiki since: (1) It's based on Anna and Jopsy's script. I feel wrong posting it that way.  (2) .... How the heck does one post on those things? I am a wiki-wimp! 
_____________________
E-Mail Psyra at psyralbakor_at_yahoo_dot_com, Visit my Webpage at www.psyra.ca  Visit me in-world at the Avaria sims, in Grendel's Children! ^^
|
Keknehv Psaltery
Hacker
Join date: 11 Apr 2005
Posts: 1,185
|
09-06-2005 17:28
From: Psyra Extraordinaire I've avoided parking the second script onto the Wiki since: (1) It's based on Anna and Jopsy's script. I feel wrong posting it that way.  (2) .... How the heck does one post on those things? I am a wiki-wimp!  (1) Meh, just port it to my particle engine. In my completely unbiased opinion, it's better anyways. Besides, those other scripts are open-source, right? They wouldn't mind. (2) Register, login, then double click anywhere on a page. You'll see a bunch of text... read the WikiFormatting and related pages for that.
|