Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Can someone please help with this poofer script? :)

Hellboy Tal
Registered User
Join date: 21 Aug 2006
Posts: 82
08-22-2006 00:19
I got this poofer script from this message board. Thank you to the writer of it. Can someone please fix it so that it will work for anyone? Right now it only works for the owner. I would really appreciate that help.
Thank you!

// Particle Poofer
// 7/6/05
// update 7/1/06

// Enjoy
// --Keknehv Psaltery

//Just change this variable to change the (default) texture.
//It needs either the name of a texture in the inventory, or a key ( asset UUID )
string pooftexture = "hug poofer";

float pooftime = 2; //How long it poofs
float poofrate = 0.4; //How long between each emission ( during poofing )
integer poofnum = 10; //How many particles per emission
float poofscale = 2; //The scale of the particles
float poofspeed = 5.5; //Speed of emitted particles
integer commandchannel = 1; //What channel to listen for commands on

list poofCommands; //The commands
list poofTextures; //The associated textures

key requestId;
integer lineNum;
string cardToRead = "poofconfig";


poof() //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, pooftexture //UUID of the desired particle texture
,PSYS_PART_MAX_AGE, 5.0 //Lifetime, in seconds, that a particle lasts
,PSYS_SRC_MAX_AGE, pooftime //How long, in seconds, that the system lasts
,PSYS_SRC_BURST_RATE, poofrate //How long, in seconds, between each emission
,PSYS_SRC_BURST_PART_COUNT, 10 //Number of particles per emission
,PSYS_SRC_BURST_RADIUS, 5.0 //Radius of emission
,PSYS_SRC_BURST_SPEED_MIN, poofspeed //Minimum speed of an emitted particle
,PSYS_SRC_BURST_SPEED_MAX, poofspeed + .5 //Maximum speed of an emitted particle
,PSYS_SRC_ACCEL, <0.0,0.0,0.0> //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.9 //Starting transparency, 1 is opaque, 0 is transparent.
,PSYS_PART_END_ALPHA, 0.5 //Ending transparency
,PSYS_PART_START_SCALE, poofscale*<1,1,1> //Starting particle size
,PSYS_PART_END_SCALE, poofscale*<1,1,1>-<.3,.3,.3> //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,0.0,0.0> //Rotation of ANGLE patterns, similar to llTargetOmega()
]);
}

string trim( string f2s ) //This will trim a typecast float
{
integer length = llStringLength( f2s ) - 1;
while( llGetSubString( f2s, length, length ) == "0" )
{
--length;
f2s = llGetSubString( f2s, 0, length );
}
if ( llGetSubString( f2s, length, length ) == "." )
{
--length;
f2s = llGetSubString( f2s, 0, length );
}
return f2s;
}

doCommand( string msg ) //This will parse out a command for the poofer
{
msg = llToLower( msg ); //Make it accept commands in any case
list parsedcommand = llParseString2List( msg, [" "], [] );
string part1 = llList2String( parsedcommand, 0 );
string part2 = llList2String( parsedcommand, 1 );
if ( part1 == "poof" )
{
if ( llGetListLength( parsedcommand ) > 1 ) //They gave us a texture parameter
{
pooftexture = llDumpList2String( llList2List( parsedcommand, 1, llGetListLength( parsedcommand ) ), " " );
poof();
} else
{
poof();
}
} else if ( ( part1 == "pooftexture" ) || ( part1 == "pt" ) )
//This is so long because it needs to ignore the spaces
pooftexture = llDumpList2String( llList2List( parsedcommand, 1, llGetListLength( parsedcommand ) ), " " );
else if ( part1 == "pooftime" )
pooftime = (float)llList2String( parsedcommand, 1 );
else if ( part1 == "poofrate" )
poofrate = (float)llList2String( parsedcommand, 1 );
else if ( part1 == "poofnum" )
poofnum = (integer)llList2String( parsedcommand, 1 );
else if ( part1 == "poofscale" )
poofscale = (float)llList2String( parsedcommand, 1 );
else if ( part1 == "poofspeed" )
poofspeed = (float)llList2String( parsedcommand, 1 );
else if ( part1 == "poofreset" )
llResetScript();

else if ( part1 == "poofdump" )
{
llOwnerSay( "pooftexture : " + pooftexture );
llOwnerSay( "pooftime : " + trim( (string)pooftime ) );
llOwnerSay( "poofrate: " + trim( (string)poofrate ) );
llOwnerSay( "poofnum: " + (string)poofnum );
llOwnerSay( "poofscale: " + trim( (string)poofscale ) );
llOwnerSay( "poofspeed: " + trim( (string)poofspeed ) );
} else if ( part1 == "poofadd" )
{
//Check to make sure we don't already have this in the command list
if (llListFindList( [ "poof","pooftexture","pooftime","poofrate","poofnum","poofscale","poofspeed","poofreset","poofdump","poofadd"]+
poofCommands, [ part2 ] ) != -1 )
{
llOwnerSay( "The command \""+ part2 + "\" already exists!" );
} else
{
llOwnerSay("Command \"" + part2 + "\" added";);
poofCommands += [ part2 ];
poofTextures += [ llDumpList2String( llList2List( parsedcommand, 2, llGetListLength( parsedcommand ) ), " " ) ];
}
} else if ( part1 == "poofremove" )
{
integer commandLoc = llListFindList( poofCommands, [part2] );
if ( commandLoc != -1 )
{
llDeleteSubList( poofCommands, commandLoc, commandLoc );
llDeleteSubList( poofTextures, commandLoc, commandLoc );
} else
{
llOwnerSay( "No command to delete!" );
}
} else if ( part1 == "help" )
{
llGiveInventory( llGetOwner(), "Instructions" );
} else
{
integer commandLoc = llListFindList( poofCommands, [ part1 ] );
if ( commandLoc != -1 )
{
string temp = pooftexture;
pooftexture = llList2String( poofTextures, commandLoc );
poof();
pooftexture = temp;
}
}
}

default
{
on_rez( integer sparam )
{
poof();
llResetScript();
}

state_entry()
{
llParticleSystem([]);
llSetTimerEvent( 20 );
lineNum = 0;
requestId = llGetNotecardLine( cardToRead, lineNum++ );
llListen( commandchannel, "", llGetOwner(), "" );
}

listen( integer chan, string name, key id, string msg )
{
doCommand( msg );
}

timer()
{
llOwnerSay( cardToRead + " reading timed out" );
requestId = "";
}

dataserver( key id, string data )
{
if ( requestId == id )
{
if ( data != EOF )
{
doCommand( data );
llSetTimerEvent( 20 );
requestId = llGetNotecardLine( cardToRead, lineNum++ );
} else
llSetTimerEvent( 0 );
}
}

changed( integer change )
{
if ( change & CHANGED_TELEPORT )
poof();
else
llParticleSystem( [] ); //Stop the particles going off with every modification
}
}
Travis Lambert
White dog, red collar
Join date: 3 Jun 2004
Posts: 2,819
08-22-2006 00:58
Hellboy - 'Particle Poofers' are usually objects that you attach to your own AV. For this reason, whoever has it attached should always be the owner anyway. (You can't attach an object you don't own)

I'm guessing you're not using it this way. What are you trying to do with this thing, so we can understand better what you want it to be able to do?
_____________________
------------------
The Shelter

The Shelter is a non-profit recreation center for new residents, and supporters of new residents. Our goal is to provide a positive & supportive social environment for those looking for one in our overwhelming world.
Seagel Neville
Far East User
Join date: 2 Jan 2005
Posts: 1,476
08-22-2006 07:00
Travis is right. But if you dare to let everybody be able to perform, change the following line.

From
llListen( commandchannel, "", llGetOwner(), "" );

To
llListen( commandchannel, "", NULL_KEY, "" );

But all messages still recieve to the owner because they speaks by "llOwnerSay". You might need change it to llSay or llWhisper.
_____________________
:) Seagel Neville :)
Hellboy Tal
Registered User
Join date: 21 Aug 2006
Posts: 82
08-22-2006 08:57
Thank you very much.
The reason I was wanting it to set for anyone is so when I make one to sell I can have a demo version that others can try out. :)
I really appreciate the help.
Jason Foo
Old Timer
Join date: 6 Feb 2004
Posts: 105
08-22-2006 09:46
Please correct me if I am wrong, but your plan is to take a FREE public script that you got from the forums, modify a few variable settings, and then close the script and actually sell it?
Please tell me that I am wrong, and you are just using this script as a reference as you actually create a script of your own accord. Otherwise you are really just selling a freebie, and it will have no real value whatsoever.
_____________________
If my doctor told me I had only six minutes to live, I wouldn't brood. I'd type a little faster.
Seagel Neville
Far East User
Join date: 2 Jan 2005
Posts: 1,476
08-22-2006 14:42
I guess the selling point of this product is the effect with his original texture, not this script itself.
_____________________
:) Seagel Neville :)