I don't want to take credit for this script, I tweaked a couple things, but the maincode was created by someone else -- just sharing it. And yes I have permission to do so.
CODE
integer glow;
integer bounce;
integer interpColor;
integer interpSize;
integer wind;
integer followSource;
integer followVel;
integer pattern;
float age;
float maxSpeed;
float minSpeed;
string texture;
float startAlpha;
float endAlpha;
vector startColor;
vector endColor;
vector startSize;
vector endSize;
vector pushi;
float rate;
float radius;
integer count;
float outerAngle;
float innerAngle;
vector omega;
integer r;
float life;
integer off;
integer flags;
updateParticles(key target)
{
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, pushi,
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
]);
}
reset()
{
glow = TRUE; age = 3; startSize = <.2,.2,.2>; omega = <0.001,0,0>;
bounce = FALSE; maxSpeed = 0.2; endSize = <.2,.2,.2>; life = 0;
interpColor = TRUE; minSpeed = 0.01; pushi = <0,0,0>;
interpSize = TRUE; texture = ""; rate = 1;
wind = FALSE; startAlpha = 1; radius = 0;
followSource = FALSE; endAlpha = 1; count = 25;
followVel = FALSE; startColor = <1,1,1>; outerAngle = 0;
pattern = PSYS_SRC_PATTERN_ANGLE; endColor = <0,0,0>; innerAngle = 0;
updateParticles("");
}
default
{
on_rez(integer num)
{
llResetScript();
}
state_entry()
{
reset();
llListen(3,"",llGetOwner(),"");
llSetTimerEvent(1);
}
timer()
{
updateParticles("");
}
listen(integer channel,string name,key id,string msg)
{
if(llGetSubString(msg,0,0) == "!")
{
string message = llToLower(llGetSubString(msg,1,llStringLength(msg)));
if(llGetSubString(message,0,4) == "glow ")
{
string temp = llGetSubString(message,5,llStringLength(message));
if(temp == "on")
{
glow = TRUE;
updateParticles("");
}
if(temp == "off")
{
glow = FALSE;
updateParticles("");
}
}
if(llGetSubString(message,0,6) == "bounce ")
{
string temp = llGetSubString(message,7,llStringLength(message));
if(temp == "on")
{
bounce = TRUE;
updateParticles("");
}
if(temp == "off")
{
bounce = FALSE;
updateParticles("");
}
}
if(llGetSubString(message,0,4) == "wind ")
{
string temp = llGetSubString(message,5,llStringLength(message));
if(temp == "on")
{
wind = TRUE;
updateParticles("");
}
if(temp == "off")
{
wind = FALSE;
updateParticles("");
}
}
if(llGetSubString(message,0,3) == "age ")
{
string temp = llGetSubString(message,4,llStringLength(message));
age = (float)temp;
llOwnerSay("Particle age set to "+(string)age+" second.");
}
if(llGetSubString(message,0,5) == "maxsp ")
{
string temp = llGetSubString(message,6,llStringLength(message));
maxSpeed = (float)temp;
llOwnerSay("Particle maxSpeed set to "+(string)maxSpeed+".");
}
if(llGetSubString(message,0,5) == "minsp ")
{
string temp = llGetSubString(message,6,llStringLength(message));
minSpeed = (float)temp;
llOwnerSay("Particle minSpeed set to "+(string)minSpeed+".");
}
if(llGetSubString(message,0,6) == "starta ")
{
string temp = llGetSubString(message,7,llStringLength(message));
startAlpha = (float)temp;
llOwnerSay("Particle startAlpha set to "+(string)startAlpha+".");
}
if(llGetSubString(message,0,4) == "enda ")
{
string temp = llGetSubString(message,5,llStringLength(message));
endAlpha = (float)temp;
llOwnerSay("Particle endAlpha set to "+(string)endAlpha+".");
}
if(llGetSubString(message,0,8) == "startcol ")
{
string temp = llGetSubString(message,9,llStringLength(message));
startColor = (vector)temp;
llOwnerSay("Particle startColor set to "+(string)startColor+".");
}
if(llGetSubString(message,0,6) == "endcol ")
{
string temp = llGetSubString(message,7,llStringLength(message));
endColor = (vector)temp;
llOwnerSay("Particle endColor set to "+(string)endColor+".");
}
if(llGetSubString(message,0,8) == "startsiz ")
{
string temp = llGetSubString(message,9,llStringLength(message));
startSize = (vector)temp;
llOwnerSay("Particle startSize set to "+(string)startSize+".");
}
if(llGetSubString(message,0,6) == "endsiz ")
{
string temp = llGetSubString(message,7,llStringLength(message));
endSize = (vector)temp;
llOwnerSay("Particle endSize set to "+(string)endSize+".");
}
if(llGetSubString(message,0,7) == "pushvec ")
{
string temp = llGetSubString(message,8,llStringLength(message));
pushi = (vector)temp;
llOwnerSay("Particle push set to "+(string)pushi+".");
}
if(llGetSubString(message,0,4) == "rate ")
{
string temp = llGetSubString(message,5,llStringLength(message));
rate = (float)temp;
llOwnerSay("Particle rate set to "+(string)rate+".");
}
if(llGetSubString(message,0,6) == "radius ")
{
string temp = llGetSubString(message,7,llStringLength(message));
radius = (float)temp;
llOwnerSay("Particle radius set to "+(string)radius+".");
}
if(llGetSubString(message,0,5) == "count ")
{
string temp = llGetSubString(message,6,llStringLength(message));
count = (integer)temp;
llOwnerSay("Particle count set to "+(string)count+".");
}
if(llGetSubString(message,0,7) == "outeran ")
{
string temp = llGetSubString(message,8,llStringLength(message));
outerAngle = (float)temp;
llOwnerSay("Particle outerAngle set to "+(string)outerAngle+".");
}
if(llGetSubString(message,0,7) == "inneran ")
{
string temp = llGetSubString(message,8,llStringLength(message));
innerAngle = (float)temp;
llOwnerSay("Particle innerAngle set to "+(string)innerAngle+".");
}
if(llGetSubString(message,0,5) == "omega ")
{
string temp = llGetSubString(message,6,llStringLength(message));
omega = (vector)temp;
llOwnerSay("Particle omega set to "+(string)omega+".");
}
}
}
}
