// SECTION ONE: APPEARANCE -- These settings affect how each particle LOOKS. integer glow = TRUE; // TRUE or FALSE(*) vector startColor = <1,1,1>; // RGB color, black<0,0,0> to white<1,1,1>(*) vector endColor = <1,1,0>; // float startAlpha = 2.0; // 0.0 to 1.0(*), lower = more transparent float endAlpha = 2.0; // vector startSize = <0,1.1,0>; // <0.04,0.04,0>(min) to <10,10,0>(max>, <1,1,0>(*) vector endSize = <1.5,1.1,0>; // (Z part of vector is discarded) string texture = "pi_lightning2"; // 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 = 0.1; // Delay between bursts of new particles, 0.0 to 60, 0.1(*) float age = 1.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.25; // 0.0(default) to 64? Distance from Emitter where new particles are created. float innerAngle = 0.1; // "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 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.3; // 0.01 to ? Min speed each particle is spit out at, 1.0(*) float maxSpeed = 0.2; // 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 = "self"; // Select a target for particles to arrive at when they die // can be "self" (emitter), "owner" (you), "" or any prim/persons KEY. integer interpColor = TRUE; // Go from start to end color integer interpSize = TRUE; // Go from start to end size // 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 integer flags; updateParticles() { startColor = ; endColor = ; 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 (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 ]); } string smoke_texture = "pi_lightning2"; // qui ho modificato prima c'era = texture MakeSmoke(string xTexture) //This is the function that actually starts the particle system. { llParticleSystem([ //KPSv1.0 PSYS_PART_FLAGS , 0 //Comment out any of the following masks to deactivate them //| PSYS_PART_BOUNCE_MASK //Bounce on object's z-axis //| PSYS_PART_WIND_MASK //Particles are moved by wind | PSYS_PART_INTERP_COLOR_MASK //Colors fade from start to end | PSYS_PART_INTERP_SCALE_MASK //Scale fades from beginning to end //| PSYS_PART_FOLLOW_SRC_MASK //Particles follow the emitter //| PSYS_PART_FOLLOW_VELOCITY_MASK //Particles are created at the velocity of the emitter //| PSYS_PART_TARGET_POS_MASK //Particles follow the target | PSYS_PART_EMISSIVE_MASK //Particles are self-lit (glow) //| PSYS_PART_TARGET_LINEAR_MASK //Undocumented--Sends particles in straight line? , //PSYS_SRC_TARGET_KEY , NULL_KEY, //Key of the target for the particles to head towards //This one is particularly finicky, so be careful. //Choose one of these as a pattern: //PSYS_SRC_PATTERN_DROP Particles start at emitter with no velocity //PSYS_SRC_PATTERN_EXPLODE Particles explode from the emitter //PSYS_SRC_PATTERN_ANGLE Particles are emitted in a 2-D angle //PSYS_SRC_PATTERN_ANGLE_CONE Particles are emitted in a 3-D cone //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY Particles are emitted everywhere except for a 3-D cone PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE_CONE ,PSYS_SRC_TEXTURE, xTexture //UUID of the desired particle texture, or inventory name ,PSYS_SRC_MAX_AGE, 0.0 //Time, in seconds, for particles to be emitted. 0 = forever ,PSYS_PART_MAX_AGE, 10.0 //Lifetime, in seconds, that a particle lasts ,PSYS_SRC_BURST_RATE, 0.2 //How long, in seconds, between each emission ,PSYS_SRC_BURST_PART_COUNT, 15 //Number of particles per emission ,PSYS_SRC_BURST_RADIUS, 0.1 //Radius of emission ,PSYS_SRC_BURST_SPEED_MIN, 0.1 //Minimum speed of an emitted particle ,PSYS_SRC_BURST_SPEED_MAX, 0.3 //Maximum speed of an emitted particle ,PSYS_SRC_ACCEL, <0.0,0.0,0.01> //Acceleration of particles each second ,PSYS_PART_START_COLOR, <1.0,1.0,1.0> //Starting RGB color ,PSYS_PART_END_COLOR, <1.0,1.0,1.0> //Ending RGB color, if INTERP_COLOR_MASK is on ,PSYS_PART_START_ALPHA, 0.4 //Starting transparency, 1 is opaque, 0 is transparent. ,PSYS_PART_END_ALPHA, 0.0 //Ending transparency ,PSYS_PART_START_SCALE, <0.1,0.1,1.0> //Starting particle size ,PSYS_PART_END_SCALE, <1.0,1.0,1.0> //Ending particle size, if INTERP_SCALE_MASK is on ,PSYS_SRC_ANGLE_BEGIN, 0.1 //Inner angle for ANGLE patterns ,PSYS_SRC_ANGLE_END, 0.11 //Outer angle for ANGLE patterns ,PSYS_SRC_OMEGA, <0.0,0.0,0.0> //Rotation of ANGLE patterns, similar to llTargetOmega() ]); } SprayParticles(string xTexture) //This is the function that actually starts the particle system. { llParticleSystem([ //KPSv1.0 PSYS_PART_FLAGS , 0 //Comment out any of the following masks to deactivate them //| PSYS_PART_BOUNCE_MASK //Bounce on object's z-axis //| PSYS_PART_WIND_MASK //Particles are moved by wind | PSYS_PART_INTERP_COLOR_MASK //Colors fade from start to end | PSYS_PART_INTERP_SCALE_MASK //Scale fades from beginning to end //| PSYS_PART_FOLLOW_SRC_MASK //Particles follow the emitter //| PSYS_PART_FOLLOW_VELOCITY_MASK //Particles are created at the velocity of the emitter | PSYS_PART_TARGET_POS_MASK //Particles follow the target | PSYS_PART_EMISSIVE_MASK //Particles are self-lit (glow) //| PSYS_PART_TARGET_LINEAR_MASK //Undocumented--Sends particles in straight line? , PSYS_SRC_TARGET_KEY , llGetKey(), //Key of the target for the particles to head towards //This one is particularly finicky, so be careful. //Choose one of these as a pattern: //PSYS_SRC_PATTERN_DROP Particles start at emitter with no velocity //PSYS_SRC_PATTERN_EXPLODE Particles explode from the emitter //PSYS_SRC_PATTERN_ANGLE Particles are emitted in a 2-D angle //PSYS_SRC_PATTERN_ANGLE_CONE Particles are emitted in a 3-D cone //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY Particles are emitted everywhere except for a 3-D cone PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE ,PSYS_SRC_TEXTURE, xTexture //UUID of the desired particle texture, or inventory name ,PSYS_SRC_MAX_AGE, 0.0 //Time, in seconds, for particles to be emitted. 0 = forever ,PSYS_PART_MAX_AGE, 60.0 //Lifetime, in seconds, that a particle lasts ,PSYS_SRC_BURST_RATE, 0.02 //How long, in seconds, between each emission ,PSYS_SRC_BURST_PART_COUNT, 6 //Number of particles per emission ,PSYS_SRC_BURST_RADIUS, 0.2 //Radius of emission ,PSYS_SRC_BURST_SPEED_MIN, 0.9 //Minimum speed of an emitted particle ,PSYS_SRC_BURST_SPEED_MAX, 1.8 //Maximum speed of an emitted particle ,PSYS_SRC_ACCEL, <0.0,0.0,0.0> //Acceleration of particles each second ,PSYS_PART_START_COLOR, //Starting RGB color ,PSYS_PART_END_COLOR, //Ending RGB color, if INTERP_COLOR_MASK is on ,PSYS_PART_START_ALPHA, 0.4 //Starting transparency, 1 is opaque, 0 is transparent. ,PSYS_PART_END_ALPHA, 0.0 //Ending transparency ,PSYS_PART_START_SCALE, <10.0, 10.0, 10.0> //Starting particle size ,PSYS_PART_END_SCALE, <0,0,0.0> //Ending particle size, if INTERP_SCALE_MASK is on ,PSYS_SRC_ANGLE_BEGIN, PI //Inner angle for ANGLE patterns ,PSYS_SRC_ANGLE_END, PI //Outer angle for ANGLE patterns ,PSYS_SRC_OMEGA, <0.0,5.0,5.0> //Rotation of ANGLE patterns, similar to llTargetOmega() ]); } default { state_entry() { updateParticles(); llSetTimerEvent(0.2); llListen(0, "", llGetOwner(), ""); } timer() { updateParticles(); } touch(integer num_detected) { state default2; } listen(integer channel, string name, key id, string message) { if(llToLower(message) == "staroff") { state off; } } } state default2 { state_entry() { SprayParticles(smoke_texture); llSetTimerEvent(15.0); llListen(0, "", llGetOwner(), ""); } timer() { state default; } touch(integer num_detected) { state default; } listen(integer channel, string name, key id, string message) { if(llToLower(message) == "staroff") { state off; } } } state off { state_entry() { llParticleSystem([]); llListen(0, "", llGetOwner(), ""); } listen(integer channel, string name, key id, string message) { if(llToLower(message) == "staron") { state default; } } }