Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Particle emission on fly

Teffler Detritus
Registered User
Join date: 14 Dec 2005
Posts: 19
04-08-2006 08:19
Im creating my first object that isnt a simple prim with a script attached.

The basic model is a simple jet, the flight script is a basic script as featured pretty much everywhere, and works fine.

What I am having problems with is getting it to emite particles when it is flying.

I trying to use the script at /54/77/20630/1.html , i have a small sphere that has this script and the particle script in it. The particle script on its own works, but not with the activate on flight script.

CODE


integer isFlying = FALSE;

// 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 = TRUE; // Particles effected by wind
integer followSource = TRUE; // 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_ANGLE_CONE;

// 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 = "self";

// Particle paramaters
float age = 3; // Life of each particle
float maxSpeed = 10; // Max speed each particle is spit out at
float minSpeed = 10; // Min speed each particle is spit out at
string texture; // Texture used for particles, default used if blank
float startAlpha = 1; // Start alpha (transparency) value
float endAlpha = 0.1; // End alpha (transparency) value
vector startColor = <0,1,1>; // Start color of particles <R,G,B>
vector endColor = <0,0,1>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <1,1,1>; // Start size of particles
vector endSize = <1,1,1>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0>; // Force pushed on particles

// System paramaters
float rate = 1.5; // How fast (rate) to emit particles
float radius = 15; // Radius to emit particles for BURST pattern
integer count = 100; // 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()
{
llSetTimerEvent( 2 ) ;
}

timer()
{
if( (llGetAgentInfo( llGetOwner() ) & AGENT_FLYING) && !isFlying )
{
updateParticles() ;
isFlying = TRUE;
}

else if( !(llGetAgentInfo( llGetOwner() ) & AGENT_FLYING) && isFlying )
{
llParticleSystem( [] ) ;
isFlying = FALSE;
}
}
}



Can anyone tell me how to get the on flight script to work, or point me in the direction of a relevant tutorial please?
Baron Hauptmann
Just Designs / Scripter
Join date: 29 Oct 2005
Posts: 358
04-08-2006 09:18
If I'm not misreading this, your code checks to see if the avatar is flying.

CODE


(llGetAgentInfo( llGetOwner() ) & AGENT_FLYING)



If your avatar is sitting in a jet (if I understand your plans right), then he is sitting, not flying. So this will come back false.

One thing I often do to check things is have the program tell me (llOwnerSay) the value of a particular variable so that I can see if it is functioning as I think it is. For example, here I would do

CODE

llOwnerSay((string)llGetAgentInfo(llGetOwner()) & AGENT_FLYING)


If this is supposed to evaluate to TRUE but evaluates to FALSE, then you know that the script is not interpreting quite what you want, and you know where to look for the problem.

Then, if that didn't give a value that you expected, I would try to send back some other message until I figured out what was going wrong.

Baron