Kazuo Murakami
Sofa King
Join date: 31 Aug 2005
Posts: 359
|
09-17-2005 15:24
I'm fairly new to sl and I'd like to work on a poofer, but I can't find a basic script to modify anywhere... I've tried searching the forums and everything but no luck so far, can anyone point me in the right direction?
|
Eloise Pasteur
Curious Individual
Join date: 14 Jul 2004
Posts: 1,952
|
09-17-2005 19:21
trying looking at the on_rez event in the lsl wiki
|
Kazuo Murakami
Sofa King
Join date: 31 Aug 2005
Posts: 359
|
09-18-2005 00:35
From: Eloise Pasteur trying looking at the on_rez event in the lsl wiki Yah I'm not neccessarily looking for one to play automatically. Ideally I'd like to make one thats user activated, so its not constantly spamming everybody =P
|
Eloise Pasteur
Curious Individual
Join date: 14 Jul 2004
Posts: 1,952
|
09-18-2005 04:58
touch_start is your friend, listen is your enemy.
Have you also worked out that you're looking for a particle system to do the actual poofing?
Normally you have a highish number of particles and a moderately long repeat time, then a timer that you trigger that turns the the particle system off before if fires for the second time. The timer event then turns itself off.
|
Willow Zander
Having Blahgasms
Join date: 22 May 2004
Posts: 9,935
|
09-18-2005 05:05
sent you one in world, maybe you can mod it to your taste 
_____________________
*I'm not ready for the world outside...I keep pretending, but I just can't hide...* <3 Giddeon's <3
|
Keknehv Psaltery
Hacker
Join date: 11 Apr 2005
Posts: 1,185
|
09-19-2005 21:05
Here's one that I made a while ago... Poofer script // Particle Poofer // 7/6/05
//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
key oldkey; //For the teleportation and rezzing stuff...
integer POOF_NOTECARD_READ_REQUEST = 10003; integer POOF_COMMAND = 10004;
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 lasts1 ,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 ); 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 ) ); } }
default { on_rez( integer sparam ) { poof(); llResetScript(); } state_entry() { llParticleSystem([]); oldkey = llGetKey(); llMessageLinked( LINK_SET, POOF_NOTECARD_READ_REQUEST, "", "" ); llListen( commandchannel, "", llGetOwner(), "" ); } moving_start() { if ( oldkey != llGetKey() ) //We teleported! ( teleporting changes keys ) { oldkey = llGetKey(); poof(); } } listen( integer chan, string name, key id, string msg ) { docommand( msg ); } link_message( integer sender, integer num, string str, key id ) { if ( num == POOF_COMMAND ) docommand( str ); } changed( integer change ) { llParticleSystem( [] ); //Stop the particles going off with every modification } }
Config reader script: integer POOF_NOTECARD_READ_REQUEST = 10003; integer POOF_COMMAND = 10004;
key linekey; integer linenum;
string cardtoread = "poofconfig";
default { link_message( integer sender, integer num, string str, key id ) { if ( num == POOF_NOTECARD_READ_REQUEST ) { llOwnerSay( "Reading poofconfig" ); state readingcommands; } } }
state readingcommands { on_rez( integer sparam ) { llResetScript(); } state_entry() { llSetTimerEvent( 20 ); linenum = 0; linekey = llGetNotecardLine( cardtoread, linenum ); } timer() { llOwnerSay( "poofconfig reading timed out" ); state default; } dataserver( key id, string data ) { //llOwnerSay( data ); if ( id == linekey ) { if ( data != EOF ) { llMessageLinked( LINK_SET , POOF_COMMAND , data , "" ); ++linenum; linekey = llGetNotecardLine( cardtoread, linenum ); } else { state default; } } } }
Instructions notecard Poofer instructions:
All commands are, by default, on channel 1. To say something on channel one, put "/1" before your message.
"poof" or simply "p" will cause the it to poof. Optionally, a texture can be added, effectively combining the pooftexture [name] into the poof command. "pooftexture [name]" will cause the texture to change to [name]. (i.e. "pooftexture fire") "pooftime [time]" will change how long it poofs for. "poofrate [rate]" will change how often it emits during a poof. "poofnum [num]" will set how many particles emitted during each emission. "poofscale [size]" will set the scale of the particle. ( Size is a float, not a vector ) "poofspeed [speed]" will set the speed of emitted particles. "poofdump" will tell you all of the settings ( pooftime, poofspeed, etc. ). "poofreset" will cause the script to reset and load default values.
The notecard "poofconfig" contains commands to be executed when it is first run. Syntax is identical to the things described above. Please note, however, that you should not put "/1" before each of the config commands.
poofconfig notecard pooftexture 7620308f-24ce-79e9-1ee7-b4c635059f70 poof
|
Drizzt Naumova
Teh Foxeh DJ
Join date: 9 Oct 2005
Posts: 116
|
02-15-2006 10:44
very nice script, but i keep getting a "poofconfig reading timed out" error once in a while..i mean the poof works, but i get that error every now and then. Even in a low lag area. Any suggestions?
|
Ordinal Malaprop
really very ordinary
Join date: 9 Sep 2005
Posts: 4,607
|
02-15-2006 11:54
What in the name of Alan Turing is a "poofer"?
|
Drizzt Naumova
Teh Foxeh DJ
Join date: 9 Oct 2005
Posts: 116
|
02-15-2006 18:01
Poofer is a word we use for particles that explode out when we teleport or go "poof"  They work upon leaving a sim or arriving at one. 
|