User:Allen Kerensky/Myriad Lite Preview2/Myriad Lite Bullet v0.0.2 20110522

From Second Life Wiki
Jump to navigation Jump to search

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>