Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

particle control help

Deias Helvetic
Registered User
Join date: 29 Oct 2006
Posts: 2
08-18-2007 09:51
Im working on a multiple bling control script it has a few parts using both listen for the main activation script and shoots out llLinkMessage to other scripts in the same prim. this is all activated from a hud control that uses llSay function to activate the main script. unfortunatly I can not get it to work and Im at wits end. so Im hoping some helpfull soul can lend me some aid and point out what went wrong
thank you

main activation script
CODE

//BLING PARTICLES FOR BLINGY JEWELS AND STUFF Adapted by Stormy Roentgren

//For those not knowing how to alter particle scripts, the parameters you'll want to alter here (if you choose to) are the "float rate" and the start and end sizes.


// Particle Script 0.3
// Created by Ama Omega
// 10-10-2003

// Mask Flags - set to TRUE to enable
integer glow = TRUE; // Make the particles glow
integer bounce = FALSE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = FALSE; // Particles follow the source
integer followVel = TRUE; // Particles turn to velocity direction

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_EXPLODE;

// Select a target for particles to go towards
// "" for no target, "owner" will follow object owner
// and "self" will target this object
// or put the key of an object for particles to go to
key target = "";

// Particle paramaters
float age = .2; // Life of each particle
float maxSpeed = .1; // Max speed each particle is spit out at
float minSpeed = .1; // Min speed each particle is spit out at
string texture = "e520bbda-c76f-331c-2f7a-d211994b348a"; // Texture used for particles, default used if blank
float startAlpha = 10; // Start alpha (transparency) value
float endAlpha = 10; // End alpha (transparency) value
vector startColor = <1,1,1>; // Start color of particles <R,G,B>
vector endColor = <1,1,1>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.04,.25,.01>; // Start size of particles
vector endSize = <.03,.25,.01>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0>; // Force pushed on particles

// System paramaters
float rate = 5; // How fast (rate) to emit particles
float radius = .0; // Radius to emit particles for BURST pattern
integer count = 5; // How many particles to emit per BURST
float outerAngle = 1.54; // Outer angle for all ANGLE patterns
float innerAngle = 1.55; // Inner angle for all ANGLE patterns
vector omega = <0,0,10>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles

// Script variables
integer flags;

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 (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(25, "", NULL_KEY , "");

}
listen( integer channel, string name, key id, string message )
{
if (message == "amythist")
{
state amythist;
}
else if (message == "Blue E")
{

llMessageLinked(LINK_THIS, 654, "", NULL_KEY);
}
else if (message == "Blue L")
{
llMessageLinked(LINK_THIS, 456, "", NULL_KEY);
}
else if (message == "Emerald")
{
llMessageLinked(LINK_THIS, 258, "", NULL_KEY);
}
else if (message == "Gold")
{
llMessageLinked(LINK_THIS, 852, "", NULL_KEY);
}
else if (message == "Opal")
{
llMessageLinked(LINK_THIS, 159, "", NULL_KEY);
}
else if (message == "Red")
{
llMessageLinked(LINK_THIS, 951, "", NULL_KEY);
}
else if (message == "Saphire")
{
llMessageLinked(LINK_THIS, 357, "", NULL_KEY);
}
else if (message == "Silver")
{
llMessageLinked(LINK_THIS, 753, "", NULL_KEY);
}
else if (message == "Star")
{
llMessageLinked(LINK_THIS, 759, "", NULL_KEY);
}
}
}

state amythist
{
state_entry()
{
llWhisper(0,"Amythist bling started");
updateParticles();
}
}


one of the many other bling scripts that are activated
CODE

//BLING PARTICLES FOR BLINGY JEWELS AND STUFF Adapted by Stormy Roentgren

//For those not knowing how to alter particle scripts, the parameters you'll want to alter here (if you choose to) are the "float rate" and the start and end sizes.


// Particle Script 0.3
// Created by Ama Omega
// 10-10-2003

// Mask Flags - set to TRUE to enable
integer glow = TRUE; // Make the particles glow
integer bounce = FALSE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = TRUE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = FALSE; // Particles follow the source
integer followVel = TRUE; // Particles turn to velocity direction

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_EXPLODE;

// Select a target for particles to go towards
// "" for no target, "owner" will follow object owner
// and "self" will target this object
// or put the key of an object for particles to go to
key target = "";

// Particle paramaters
float age = .2; // Life of each particle
float maxSpeed = .1; // Max speed each particle is spit out at
float minSpeed = .1; // Min speed each particle is spit out at
string texture = "f72c27b9-db37-71c6-eb6c-cac85815e854"; // Texture used for particles, default used if blank
float startAlpha = 10; // Start alpha (transparency) value
float endAlpha = 10; // End alpha (transparency) value
vector startColor = <1,1,1>; // Start color of particles <R,G,B>
vector endColor = <1,1,1>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.04,.25,.01>; // Start size of particles
vector endSize = <.03,.25,.01>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0>; // Force pushed on particles

// System paramaters
float rate = 5; // How fast (rate) to emit particles
float radius = .0; // Radius to emit particles for BURST pattern
integer count = 5; // How many particles to emit per BURST
float outerAngle = 1.54; // Outer angle for all ANGLE patterns
float innerAngle = 1.55; // Inner angle for all ANGLE patterns
vector omega = <0,0,10>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles

// Script variables
integer flags;

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 (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
{
link_message(integer sender_num, integer num, string str, key id)
{
if (num == 654)
{
llWhisper(0,"Electric Blue bling started");
updateParticles();
}
else if (num != 654)
{
state default;
}
}
}


and the hud script
CODE

list Bling = ["Amythist", "Blue_E","Blue_L","Emerald","Gold","Opal","Red","Saphire","Silver","Star_S"];
integer Amythist = -1234;
integer Blue_E = -1235 ;
integer Blue_L = 8565;
integer Emerald = 5565;
integer Gold = 4585;
integer Opal = 8978;
integer Red = 1252;
integer Saphire = 1222;
integer Silver = 7412;
integer Star_S = 9636;
integer CHANNEL = -8788;
integer wallChannel;
integer allWalls;
string name=llKey2Name;



default {
state_entry()
{
llListen(CHANNEL, "", NULL_KEY, ""); // listen for dialog answers (from multiple users)
} // end state_entry()

touch_start(integer total_number)
{
llDialog(llDetectedKey(0), "Change shoe bling?", Bling, CHANNEL); // present dialog on click
allWalls = 0;
}// end touch_start()

listen(integer channel, string name, key id, string message)
{
if (llListFindList(Bling, [message]) != -1) // verify dialog choice
{
if (message == "Amythist")
{

llSay(25, "amythist");


}
else if (message == "Blue_E")
{

llSay(25, "Blue E");
}
else if (message == "Blue_L")
{
llSay(25, "Blue L");
}
else if (message == "Emerald")
{
llSay(25, " Emerald");
}
else if (message == "Gold")
{
llSay(25, "Gold");
}
else if (message == "Opal")
{
llSay(25, "Opal");
}
else if (message == "Red")
{
llSay(25, "Red");
}
else if (message == "Saphire")
{
llSay(25, "Saphire");
}
else if (message == "Silver")
{
llSay(25, "Silver");
}
else if (message == "Star_S")
{
llSay(25, "Star");
}

}
}
}



any help anybody can offer would be very well recieved
again thank you kindly
Pale Spectre
Registered User
Join date: 2 Sep 2005
Posts: 586
08-18-2007 10:53
When you say it doesn't work... what doesn't work? :)

Is the Dialog appearing from the HUD?
Do any of the llWhisper's ever report in from the bling scripts?

The only thing I didn't like the look of is the state amythist. I don't see how the script ever returns to its state default. Is that the problem - it gets stuck on the amythist bling? I'm not sure why you decided to treat the amythist occurance differently from the rest.

Incidentally, there are ways you can optimise the listen Event Handler code with things like this:

llSay(25, llList2String(Bling, llListFindList(Bling, [message])))

Similarly:

llMessageLinked(LINK_THIS, (integer)llList2String(BlingNum, llListFindList(Bling, [message])), "", NULL_KEY);

(in this case you'll need to have the lists Bling and BlingNum to carry the bling names and their corresponding link_message numbers).


As a general rule I find it best to avoid long sections of code that 'else if' through lots of constants only to issue almost identical code.
Deias Helvetic
Registered User
Join date: 29 Oct 2006
Posts: 2
08-18-2007 14:12
From: someone

As a general rule I find it best to avoid long sections of code that 'else if' through lots of constants only to issue almost identical code.


yeah. your right I took your advice on that aspect. as far as what is not working, and sorry for not including that...probably would have helped right lol

It doesnt seem to be listening to anything. so there for non of the llWhispers report in. as far as I can tell the theory behind it all should work just fine...
Pale Spectre
Registered User
Join date: 2 Sep 2005
Posts: 586
08-18-2007 14:24
It does pretty much work... I tried it.

The only other thing I can think of is that you have all the scripts in the same object. An object cannot listen to itself talk.

The way I had it set up to test was with the HUD script in a separate object to the activation and bling scripts. Works fine so long as you keep away from the amythist - that one's a one way trip.

I imagined the HUD to be something I wear as a HUD attachment that I see only on my screen, and the bling stuff is something I wear as a body attachment.