|
Thunder Starbrook
Registered User
Join date: 25 Dec 2006
Posts: 98
|
04-24-2007 05:54
Hi all, i'm trying to make a smoke machine that can be turned on and off but i cant seem to get it to work. The smoke part of the script was a freebie that i messed about with, i've added my own bit that i thought would allow me to stop and start it by clicking on it, i dont get any errors when saving but nothing happens when i click on it. Could someone help me out? default { state_entry() { llSay(0, "Power On"  ; llParticleSystem( [ PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), PSYS_PART_START_SCALE, <10,10, 10>, PSYS_PART_END_SCALE, <10,10, 10>, PSYS_PART_START_COLOR, <0,0,0>, PSYS_PART_END_COLOR, <255,0,0>, PSYS_PART_START_ALPHA, .8, PSYS_PART_END_ALPHA, 0.0, PSYS_SRC_BURST_PART_COUNT, 50, PSYS_SRC_BURST_RATE, 0.02, PSYS_PART_MAX_AGE, 3.0, PSYS_SRC_MAX_AGE, 0.0, PSYS_SRC_PATTERN, 4, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE, PSYS_SRC_ACCEL, <0.0,0.0, 0.1>, PSYS_SRC_BURST_RADIUS, 0.6, PSYS_SRC_BURST_SPEED_MIN, 9.0, PSYS_SRC_BURST_SPEED_MAX, 0.0, PSYS_SRC_ANGLE_BEGIN, 90*DEG_TO_RAD, PSYS_SRC_ANGLE_END, 90*DEG_TO_RAD, PSYS_SRC_OMEGA, <0,0,0>, // PSYS_SRC_TARGET_KEY, llGetLinkKey(llGetLinkNum() + 1), PSYS_PART_FLAGS, ( 0 | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_EMISSIVE_MASK // | PSYS_PART_FOLLOW_VELOCITY_MASK // | PSYS_PART_WIND_MASK | PSYS_PART_BOUNCE_MASK // | PSYS_PART_FOLLOW_SRC_MASK // | PSYS_PART_TARGET_POS_MASK // | PSYS_PART_TARGET_LINEAR_MASK ) ] ); }touch_start(integer total_number) { state off; } } state off { state_entry() { llSay(0, "Power Off"  ; llSetColor(<0,0,0>, ALL_SIDES); } touch_start(integer total_number) { state default; } } Thanks for any assistance 
|
|
Jacques Groshomme
Registered User
Join date: 16 Mar 2005
Posts: 355
|
04-24-2007 06:30
llParticleSystem isn't tied to a particular state and, once turned on, will stay on until explicitly turned off.
In your stop state, add llParticleSystem( [] ); and you should be fine.
|
|
Pip Helios
Registered User
Join date: 29 Sep 2006
Posts: 22
|
04-24-2007 06:32
Tell you what, lets cut out states. unless you have a particular reason you're using them. integer on;
default { touch_start(integer total_number) { if(!on) { llSay(0, "Power On"); llParticleSystem( [ PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), PSYS_PART_START_SCALE, <10,10, 10>, PSYS_PART_END_SCALE, <10,10, 10>, PSYS_PART_START_COLOR, <0,0,0>, PSYS_PART_END_COLOR, <255,0,0>, PSYS_PART_START_ALPHA, .8, PSYS_PART_END_ALPHA, 0.0,
PSYS_SRC_BURST_PART_COUNT, 50, PSYS_SRC_BURST_RATE, 0.02, PSYS_PART_MAX_AGE, 3.0, PSYS_SRC_MAX_AGE, 0.0,
PSYS_SRC_PATTERN, 4, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE, PSYS_SRC_ACCEL, <0.0,0.0, 0.1>,
PSYS_SRC_BURST_RADIUS, 0.6, PSYS_SRC_BURST_SPEED_MIN, 9.0, PSYS_SRC_BURST_SPEED_MAX, 0.0,
PSYS_SRC_ANGLE_BEGIN, 90*DEG_TO_RAD, PSYS_SRC_ANGLE_END, 90*DEG_TO_RAD, PSYS_SRC_OMEGA, <0,0,0>,
// PSYS_SRC_TARGET_KEY, llGetLinkKey(llGetLinkNum() + 1),
PSYS_PART_FLAGS, ( 0 | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_EMISSIVE_MASK // | PSYS_PART_FOLLOW_VELOCITY_MASK // | PSYS_PART_WIND_MASK | PSYS_PART_BOUNCE_MASK // | PSYS_PART_FOLLOW_SRC_MASK // | PSYS_PART_TARGET_POS_MASK // | PSYS_PART_TARGET_LINEAR_MASK
) ] ); on=!on; }
else { llSay(0, "Power Off"); llParticleSystem( [] ); on=!on; } } }
As to the problem you were having, particles are not a color but another prim property and you need to set the parameters to blank to cancel it out. Further more, you might want to change llSay() to llOwnerSay(). (edit) also, theirs something to be said about making partical systems global to clean up your code, especially if you plan on using it multiple times.... also less of a eyesore when reading. integer on;
particles() { llParticleSystem( [ PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), PSYS_PART_START_SCALE, <10,10, 10>, PSYS_PART_END_SCALE, <10,10, 10>, PSYS_PART_START_COLOR, <0,0,0>, PSYS_PART_END_COLOR, <255,0,0>, PSYS_PART_START_ALPHA, .8, PSYS_PART_END_ALPHA, 0.0,
PSYS_SRC_BURST_PART_COUNT, 50, PSYS_SRC_BURST_RATE, 0.02, PSYS_PART_MAX_AGE, 3.0, PSYS_SRC_MAX_AGE, 0.0,
PSYS_SRC_PATTERN, 4, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE, PSYS_SRC_ACCEL, <0.0,0.0, 0.1>,
PSYS_SRC_BURST_RADIUS, 0.6, PSYS_SRC_BURST_SPEED_MIN, 9.0, PSYS_SRC_BURST_SPEED_MAX, 0.0,
PSYS_SRC_ANGLE_BEGIN, 90*DEG_TO_RAD, PSYS_SRC_ANGLE_END, 90*DEG_TO_RAD, PSYS_SRC_OMEGA, <0,0,0>,
// PSYS_SRC_TARGET_KEY, llGetLinkKey(llGetLinkNum() + 1),
PSYS_PART_FLAGS, ( 0 | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_EMISSIVE_MASK // | PSYS_PART_FOLLOW_VELOCITY_MASK // | PSYS_PART_WIND_MASK | PSYS_PART_BOUNCE_MASK // | PSYS_PART_FOLLOW_SRC_MASK // | PSYS_PART_TARGET_POS_MASK // | PSYS_PART_TARGET_LINEAR_MASK
) ] ); }
default { touch_start(integer total_number) { if(!on) { llSay(0, "Power On"); particles(); on=!on; }
else { llSay(0, "Power Off"); llParticleSystem( [] ); on=!on; } } }
|
|
Thunder Starbrook
Registered User
Join date: 25 Dec 2006
Posts: 98
|
04-24-2007 07:20
Thanks very much, i'm still learning, this helps alot 
|