User:Allen Kerensky/Myriad Lite Preview2/Myriad Lite Bullet v0.0.2 20110522
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Myriad Lite Bullet v0.0.2 20110522
<lsl> //============================================================================ // Myriad Lite Bullet v0.0.2 20110522 // Copyright (c) 2011 By Allen Kerensky (OSG/SL) // The Myriad RPG System was designed, written, and illustrated by Ashok Desai // Myriad is published under a: // Creative Commons License (Attribution 2.0 UK: England and Wales) // Myriad Lite Bullet is published under a: // Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported //============================================================================ // Davada Gallant (John Girard), WWIIOLers // Retrieved 2011-04-30 from http://wiki.secondlife.com/wiki/Bullet // Copyright (c) 2009 Linden Research, Inc. Licensed under Creative Commons Attribution-Share Alike 3.0 (CC-BY-SA 3.0) // Adapted to OSSL by Allen Kerensky (SL/OSG) // Includes Keknehv's Particle Script v1.2
//============================================================================ // Bullet Configuration //============================================================================ string RICOCHET = "nebs_smoke_particle_01"; // puff-of-smoke texture to show on bullet hits/ricochets - put this texture in bullet prim float BOUYANCY = 1.0; // how buoyant is the bullet for physics float TIMEOUT = 20.0; // control timer to force bullet to die
// Myriad config integer MINDAMAGE = 1; integer MAXDAMAGE = 5; integer DAMAGE = 1; string DIV = "|"; integer CHANMYRIAD = -999;
SETUP(integer type) {
if ( llGetStatus(STATUS_PHYSICS) == FALSE ) { llSetStatus(STATUS_PHYSICS, TRUE); } llSetStatus(STATUS_DIE_AT_EDGE, TRUE); llSetPrimitiveParams([PRIM_TEMP_ON_REZ,TRUE]); llSetBuoyancy(BOUYANCY); if ( type >= MINDAMAGE && type <= MAXDAMAGE ) { DAMAGE = type; } llSetDamage((float)DAMAGE); llSetTimerEvent(TIMEOUT);
}
//============================================================================ // Keknehv's Particle Script v1.2 // Retrieved 2011-04-30 from http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryKeknehvParticles // 1.0 -- 5/30/05 // 1.1 -- 6/17/05 // 1.2 -- 9/22/05 (Forgot PSYS_SRC_MAX_AGE) // This script may be used in anything you choose, including and not limited to commercial products. // Just copy the MakeParticles() function; it will function without any other variables in a different script // ( You can, of course, rename MakeParticles() to something else, such as StartFlames() ) MAKEPARTICLES(string texture) { //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 , NULL_KEY, //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, texture //UUID of the desired particle texture, or inventory name ,PSYS_SRC_MAX_AGE, 1.0 //Time, in seconds, for particles to be emitted. 0 = forever ,PSYS_PART_MAX_AGE, 5.0 //Lifetime, in seconds, that a particle lasts ,PSYS_SRC_BURST_RATE, 0.02 //How long, in seconds, between each emission ,PSYS_SRC_BURST_PART_COUNT, 1 //Number of particles per emission ,PSYS_SRC_BURST_RADIUS, 0.01 //Radius of emission ,PSYS_SRC_BURST_SPEED_MIN, 0.01 //Minimum speed of an emitted particle ,PSYS_SRC_BURST_SPEED_MAX, 1.0 //Maximum speed of an emitted particle ,PSYS_SRC_ACCEL, <0.05,0.05,0.05> //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.0 //Ending transparency ,PSYS_PART_START_SCALE, <0.5,0.5,0.0> //Starting particle size ,PSYS_PART_END_SCALE, <1.0,1.0,0.0> //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() ]);
}
DIE() {
while ( TRUE == TRUE ) { llDie(); }
}
default {
state_entry() { SETUP(DAMAGE); } on_rez(integer start_param) { SETUP(start_param); } collision_start(integer collisions) { while(collisions--) { integer dynchan = (integer)("0x"+llGetSubString((string)llGetOwner(),0,6)); llRegionSay(dynchan,"TOHIT"+DIV+(string)DAMAGE+DIV+(string)llDetectedKey(collisions)+DIV+(string)llGetOwner()+DIV+llGetObjectName()); key who = llDetectedKey(collisions); key owner = llList2Key(llGetObjectDetails(who,[OBJECT_OWNER]),0); if ( who == owner ) { // we hit an avatar llRegionSay(CHANMYRIAD,"RPEVENT"+DIV+llKey2Name(llGetOwner())+" shot "+llDetectedName(collisions)+"!"); } } // Shrapnel? // Through and through? MAKEPARTICLES(RICOCHET); DIE(); } land_collision_start( vector collisions) { MAKEPARTICLES(RICOCHET); DIE(); } timer() { DIE(); }
} </lsl>