User:Daemonika Nightfire/Scripts/Daes Particle

From Second Life Wiki
Jump to navigation Jump to search

*DS* Particle Wiki v4.0.03 (2021-05-09 23:01:10 lsl2 script)

/*
        ╔════════════════════════════════−−−−−−−−−→
        ║ Dae's Particle by Daemonika Nightfire
        ╚═══════════════════−−−−−−−−−→
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem
*/

Particle()
{
    llLinkParticleSystem(LINK_THIS,[
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // option ganz hell
                                 //| PSYS_PART_BOUNCE_MASK              // bleiben auf ebene
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung
                                 | PSYS_PART_WIND_MASK                // Particle folgen dem wind
                                 //| PSYS_PART_FOLLOW_SRC_MASK          // Particle halten relative position zum Prim (!PSYS_SRC_BURST_RADIUS)
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur Ausrichtung "Oben" zum Ziel
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // auf direktem weg zum Ziel (!PSYS_SRC_ACCEL & !PSYS_SRC_BURST_RADIUS)
                                 //| PSYS_PART_TARGET_POS_MASK          // auf Umweg zum Ziel
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)
                                 ,
    
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explusion
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS & !SYS_SRC_BURST_SPEED_MIN & !PSYS_SRC_BURST_SPEED_MAX)
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // unvollstaendige Implementierung (NUTZLOS)
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // kugelfoermiger Effekt mit start und end Begrenzung
                                 //PSYS_SRC_PATTERN_ANGLE               // ringfoermiger Effekt mit start und end Begrenzung
                                 ,
                                
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // 
                                 //PSYS_PART_BF_ZERO                    // 
                                 //PSYS_PART_BF_DEST_COLOR              // 
                                 //PSYS_PART_BF_SOURCE_COLOR            // 
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // 
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // 
                                 PSYS_PART_BF_SOURCE_ALPHA            // Standard
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  //
                                 ,
                                 
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // 
                                 //PSYS_PART_BF_ZERO                    // 
                                 //PSYS_PART_BF_DEST_COLOR              // 
                                 //PSYS_PART_BF_SOURCE_COLOR            // 
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // 
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // 
                                 //PSYS_PART_BF_SOURCE_ALPHA            //   
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // Standard
                                 ,
    
    //PSYS_SRC_TARGET_KEY,        "",                 // Particle zum Ziel (UUID)          | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK
/**/PSYS_PART_MAX_AGE,          5.0,                // Lebensdauer                       | max. 30.0 Sekunden
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                    | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)
    PSYS_PART_START_COLOR,      <1.0,0.0,0.0>,      // Farbe Begin                       | <0.0,0.0,0.0> bis <1.0,1.0,1.0>    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_COLOR,        <0.0,0.0,1.0>,      // Farbe Ende                        | <0.0,0.0,0.0> bis <1.0,1.0,1.0>    ''
    PSYS_PART_START_SCALE,      <0.30,0.30,0.00>,   // Groesse Begin <x,y,z>             | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK
    PSYS_PART_END_SCALE,        <0.15,0.15,0.00>,   // Groesse Ende  <x,y,z>             | min. = 0.03125 | max. = 4.00 | z = ungenutzt   ''
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                 | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                  | 0.0 bis 1.0    ''
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                     | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                      | 0.0 bis 1.0    ''
/**/PSYS_SRC_BURST_RATE,        0.05,               // Geschwindigkeit pro Sekunde       | min. = 0.01
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                   | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total
    PSYS_SRC_BURST_RADIUS,      0.75,               // Radius                            | max. = 50.0 meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)
    PSYS_SRC_BURST_SPEED_MIN,   0.10,               // minimal Austritts-Geschwindigkeit |
    PSYS_SRC_BURST_SPEED_MAX,   0.25,               // maximal Austritts-Geschwindigkeit |
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum       | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum     | ''
    PSYS_SRC_OMEGA,             <1,1,1>,            // Rotation                          | Globale Achse <x,y,z>
    PSYS_SRC_ACCEL,             <0.00,0.00,0.10>,   // Beschleunigung                    | Globale Ausrichtung <x,y,z>
    PSYS_SRC_TEXTURE,           ""                  // Textur UUID erforderlich          | Beispiel: "b1d84ecb-2a83-d3c4-7bfb-592648dcb20d"
    ]);
}

// hier unten beginnt das eigentliche script
default
{
    state_entry()
    {
        Particle(); // startet hier das oben angepasste Particlesystem
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle
    }
}

*DS* Particle Wiki v5.0.00 (2021-05-16 17:14:43 lsl2 script)

Dieses ist mein beforzugtes Format zum erstellen saemtlicher Particle-Effecte. Der Vorteil besteht darin, das sich diese Kurzfassung uebersichtlich in ein Script an die gewuenschte stelle einfuegen laesst.

/*
    ╔════════════════════════════════════════════════════════−−−−−−−−−→
    ║ *DS* Particle Wiki v5.0.00 for advanced by Daemonika Nightfire
    ╚═════════════════════════════−−−−−−−−−→
    http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem


System Behavior
integer        0 = PSYS_PART_FLAGS                      // fuer folgende Befehle wichtig:
integer    0x004 = PSYS_PART_BOUNCE_MASK                // bleiben auf ebene
integer    0x100 = PSYS_PART_EMISSIVE_MASK              // option ganz hell
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK            // Particle halten relative position zum Prim (!PSYS_SRC_BURST_RADIUS)
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK       // Textur ausrichtung "Oben" zum ziel
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK          // erlaubt den farbwechsel
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK          // erlaubt die groessenaenderung
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK         // auf direktem weg zum ziel (!PSYS_SRC_ACCEL & !PSYS_SRC_BURST_RADIUS)
integer    0x040 = PSYS_PART_TARGET_POS_MASK            // auf umweg zum ziel
integer    0x008 = PSYS_PART_WIND_MASK                  // Particle folgen dem Wind
integer    0x400 = PSYS_PART_RIBBON_MASK                // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)

System Presentation
integer       9 = PSYS_SRC_PATTERN                      // fuer folgende Befehle wichtig:
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE              // Explusion
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE           // kugelfoermiger Effekt mit start und end Begrenzung
integer    0x04 = PSYS_SRC_PATTERN_ANGLE                // ringfoermiger Effekt mit start und end Begrenzung
integer    0x01 = PSYS_SRC_PATTERN_DROP                 // Tropfen (!PSYS_SRC_BURST_RADIUS & !SYS_SRC_BURST_SPEED_MIN & !PSYS_SRC_BURST_SPEED_MAX)
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY     // unvollstaendige Implementierung (NUTZLOS)

Particle Blending
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:
integer     0x0 = PSYS_PART_BF_ONE
integer     0x1 = PSYS_PART_BF_ZERO  
integer     0x2 = PSYS_PART_BF_DEST_COLOR 
integer     0x3 = PSYS_PART_BF_SOURCE_COLOR
integer     0x4 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR
integer     0x5 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR
integer     0x7 = PSYS_PART_BF_SOURCE_ALPHA             // Standard
integer     0x9 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Standard

Particle Parameter
integer      0 = PSYS_PART_FLAGS                // System Behavior                   | Beispiel: 0,0x100 | 0x004 | 0x001 | 0x002 | 0x020,
vector       1 = PSYS_PART_START_COLOR          // Farbe Begin                       | <0.0,0.0,0.0> bis <1.0,1.0,1.0>  PSYS_PART_INTERP_COLOR_MASK
float        2 = PSYS_PART_START_ALPHA          // Transparenz Begin                 | 0.0 bis 1.0                      PSYS_PART_INTERP_COLOR_MASK
vector       3 = PSYS_PART_END_COLOR            // Farbe Ende                        | <0.0,0.0,0.0> bis <1.0,1.0,1.0>  PSYS_PART_INTERP_COLOR_MASK
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende                  | 0.0 bis 1.0                      PSYS_PART_INTERP_COLOR_MASK
vector       5 = PSYS_PART_START_SCALE          // Groesse Begin <x,y,z>             | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK
vector       6 = PSYS_PART_END_SCALE            // Groesse Ende  <x,y,z>             | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer                       | max. 30.0 secunden
vector       8 = PSYS_SRC_ACCEL                 // Beschleunigung                    | Globale Ausrichtung <x,y,z>
integer      9 = PSYS_SRC_PATTERN               // System Presentation               | Beispiel: 9,0x08,
            10 = // deleted
            11 = // deleted
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich          | Beispiel: 12,"b1d84ecb-2a83-d3c4-7bfb-592648dcb20d",
float       13 = PSYS_SRC_BURST_RATE            // Geschwindigkeit pro Sekunde       | min. = 0.01
            14 = // not used
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Particle Anzahl                   | Viewer Limit berechnen, _COUNT x _RATE x _MAX_AGE = Total
float       16 = PSYS_SRC_BURST_RADIUS          // Radius                            | max. = 50.0 meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)
float       17 = PSYS_SRC_BURST_SPEED_MIN       // minimal Austrits-Geschrwindigkeit |
float       18 = PSYS_SRC_BURST_SPEED_MAX       // maximal Austrits-Geschrwindigkeit |
float       19 = PSYS_SRC_MAX_AGE               // Abschalt-Timer                    | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)
key         20 = PSYS_SRC_TARGET_KEY            // Particle zum Ziehl (key)"UUID"    | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK
vector      21 = PSYS_SRC_OMEGA                 // Rotation                          | Globale Achse <x,y,z>
float       22 = PSYS_SRC_ANGLE_BEGIN           // innerer Abstand zum Zentrum       | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE
float       23 = PSYS_SRC_ANGLE_END             // aeusserer Abstand zum Zentrum     | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE
integer     24 = PSYS_PART_BLEND_FUNC_SOURCE    // Particle Blending                 | Beispiel: 24,0x7,
integer     25 = PSYS_PART_BLEND_FUNC_DEST      // Particle Blending                 | Beispiel: 25,0x9,
float       26 = PSYS_PART_START_GLOW           // Gluehen Begin                     | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK
float       27 = PSYS_PART_END_GLOW             // Gluehen Ende                      | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK

*/
Im eigentlichen Script wird lediglich folgendes Beispiel benoetigt.
default
{
    state_entry()
    {
        // In der Liste verwende ich nur benoetigte Parameter.
 
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,
        1,<0.8,0.6,0.2>, 3,<1.0,0.0,0.0>, 5,<0.10,0.10,0.00>, 6,<0.05,0.05,0.00>, 8,<0.00,0.00,0.1>, 
        13,0.1, 15,2, 16,0.5, 17,0.01, 18,0.02, 21,<0,0,1>, 2,1.0, 4,0.5, 26,0.10, 27,0.00,
        12,"b1d84ecb-2a83-d3c4-7bfb-592648dcb20d"]);
        
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle
    }
}