Simple Sploder Script - SLUniverse Forums
Old 06-11-2009, 01:30 AM   #1 (permalink)
Nommable. Nom nom. Hee!
 
Ryker Beck's Avatar
 
Join Date: Mar 2008
Posts: 102
My Mood:
SL Join Date: February 22, 2007
Send a message via Skype™ to Ryker Beck
Simple Sploder Script

The notecard:
Code:
// === NOTECARD ===
// please set following parameters in a notecard named: SPLconfig
// and drop the notecard in the sploder prim
[timelimit]
100
[ownercut]
10
[minimumpay]
2
The script:

Code:
//  Second Life Sploder. Lets avatars donate to a pot. Once a certain amount of people donate, the pot starts counting down until it explodes. Everyone who donated gets a piece of the pot. The owner gets a percentage. 

// === THE SCRIPT === 
list entrantsKey = [];
integer pot = 0;
float ownersCut = 10;
integer amountLimit = 5;
float TimeLimit = 300;
integer entrantsCount = 0;
integer flag = 0;
integer i;
integer result = 0;
string Text = "";
key chave;
integer amount;
integer min_pay = 0; //minimum amount to pay ppl. Exemple, if you change this value to 2, everyone will receive at least 2 L$
string gName = "SPLconfig";
integer gLine = 0;        // current line number
key gQueryID; // id used to identify dataserver queries
string teste = "";
integer RandInt(integer lower, integer higher) {
    integer Range = higher - lower;
    integer Result = llFloor(llFrand(Range + 1)) + lower;
    return Result;
}

MakeParticles()//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_INTERP_COLOR_MASK       //Colors fade from start to end
    | PSYS_PART_INTERP_SCALE_MASK       //Scale fades from beginning to end
    | PSYS_PART_FOLLOW_VELOCITY_MASK    //Particles are created at the velocity of the emitter
    | PSYS_PART_EMISSIVE_MASK           //Particles are self-lit (glow)
    
    ,PSYS_SRC_PATTERN   
    ,PSYS_SRC_PATTERN_EXPLODE
    ,PSYS_SRC_TARGET_KEY,        llGetOwner()
    ,PSYS_SRC_TEXTURE,           "cifrao"     //UUID of the desired particle texture  
    ,PSYS_PART_MAX_AGE,          2.5                //Lifetime, in seconds, that a particle lasts
    ,PSYS_SRC_BURST_RATE,        .5            //How long, in seconds, between each emission
    ,PSYS_SRC_BURST_PART_COUNT,  10       //Number of particles per emission
    ,PSYS_SRC_BURST_RADIUS,      1.0                //Radius of emission
    ,PSYS_SRC_ACCEL,             <1.0,1.0,0.0>      //Acceleration of particles each second
    ,PSYS_PART_START_ALPHA,      1.0       //Starting transparency, 1 is opaque, 0 is transparent.
    ,PSYS_PART_END_ALPHA,        0.0                //Ending transparency
    ,PSYS_PART_START_SCALE,      <.35,.35,.35>      //Starting particle size
    ,PSYS_PART_END_SCALE,        <0.35,0.35,0.35>      //Ending particle size, if INTERP_SCALE_MASK is on
    ,PSYS_SRC_OMEGA,             <1.0,0.0,0.0>       //Rotation of ANGLE patterns, similar to llTargetOmega()
            ]);
}

start()
{
    llSetTimerEvent(0);
    entrantsKey = [];
    result = 0;
    entrantsCount = 0;
    flag = 0;
    llParticleSystem([]);
    Text = "Pay the sploder to begin the countdown! (minimun L$ "+ (string)amountLimit +")";
    llSetText(Text, <0, 1.0, 0>,  1); 
}
default
{
    
    on_rez(integer num)
    {
        llResetScript();
    }
    
    state_entry()
    {
        gQueryID = llGetNotecardLine(gName, gLine);
        //start();
        llListen(7, "", llGetOwner(), "");
        llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
    }
    
    dataserver(key query_id, string data) 
    {      
        if (query_id == gQueryID) 
        {
            if (data != EOF) 
            {    // not at the end of the notecard 
                
                if (teste == "ownercut")
                ownersCut = (integer)data;
                if (teste == "minimumpay")
                amountLimit = (integer)data;
                if (teste == "timelimit")
                TimeLimit = (float)data;             
                   
                if (llToLower(data) == "[ownercut]")  
                {
                    ++gLine;
                    gQueryID = llGetNotecardLine(gName, gLine);    // request next line
                    teste = "ownercut";   
                }
                else if (llToLower(data)== "[minimumpay]") 
                {
                    ++gLine;
                    gQueryID = llGetNotecardLine(gName, gLine);    // request next line 
                    teste = "minimumpay";   
                } 
                else if (llToLower(data) == "[timelimit]") 
                {
                    ++gLine;
                    gQueryID = llGetNotecardLine(gName, gLine);    // request next line 
                    teste = "timelimit";   
                }                              
                else 
                {
                    ++gLine;                // increase line count
                    gQueryID = llGetNotecardLine(gName, gLine);    // request next line
                    teste = "";
                }
            }
            else start();
        }
    }  
    
    
    
    money(key giver, integer amount) 
    {
        if (amount < amountLimit)
        {
            llSay(0, "The minimum amount is L$"+ (string)amountLimit+".");
            llGiveMoney(giver,amount);
        }
        else
        {        
            if (llListFindList(entrantsKey, [giver]) == -1)        
                entrantsKey += giver;
            entrantsCount = llGetListLength(entrantsKey);
            pot += amount; 
            
            llSay(0, llKey2Name(giver) + " adds L$" + (string)amount + " to the SPLODER. Current pot is L$"+ (string)pot +".");
            
            
            if (entrantsCount >= 5)
            {
                llSetText("Ready to explode!!! Current pot is L$ "+ (string)pot, <0, 1.0, 0>,  1);
                if (flag == 0)
                {
                    llSay(0, "SPLODER'S COUNTDOWN BEGINS!");
                    llSay(0, (string)(llRound(TimeLimit)) + " seconds before it explodes!!!");
                    llSetText("Ready to explode!!! Current pot is L$ "+ (string)pot, <0, 1.0, 0>,  1);
                    llSetTimerEvent(TimeLimit);
                    flag = 1;
                }
                    
            }
            else
            {
            string message = ((string)(5 - entrantsCount)) +" more participants needed to begin countdown!"; 
            llSay(0, message);
            llSetText(Text + "\n" + message, <0, 1.0, 0>,  1);
            }
        }        
        
    }
    
    timer()
    {            
        for (i=9; i > 0; i--)
        {
            llSay(0, "Exploding in "+ (string)i);
            llSleep(1.0);
        }
        list payment = [];
        integer cut_pot = 0;
        float cut = 0;        
        cut = ownersCut/100;
        cut = cut * pot;   
        cut_pot = pot - (integer)cut;            
        
        for (i=0; i< entrantsCount; i++) 
        {
            payment += min_pay;
            cut_pot -= min_pay;                                                       
        }
            
        integer j=0;
        integer value = 0;
        
        while (cut_pot > 0)
        {            
            j = RandInt(0, (entrantsCount - 1));
            integer rand;
            rand = RandInt(1, cut_pot);
            value = ((integer)llList2String(payment, j));
            value += rand;            
            //llOwnerSay("value: " + (string)value + "  j:" + (string)j); //just for debugging
            payment = llListReplaceList(payment, [value], j, j);            
            cut_pot -= rand;                               
        }
            
        //pot = cut_pot;        
        pot = 0;
        
        MakeParticles(); 
        
        for (i=0; i< entrantsCount; i++) 
        {             
            llSleep(0.5);
            result = (integer)llList2String(payment, i);    
            llSay(0, llKey2Name((key)llList2String(entrantsKey, i)) + " just won L$" + (string)result +" from the sploder!"); 
            llGiveMoney((key)llList2String(entrantsKey, i), result);                                 
        } 
        
        llSleep(3.0);
        start();   
    }
    
    
    no_sensor()
    {
        pot += result;
        llSay(0, llKey2Name((key)llList2String(entrantsKey, i)) + " won nothing for being out of range!");        
    }    
    
    listen( integer channel, string name, key id, string message )
    {
        if (channel == 7)
        {
            if (llToLower(message) == "reset")
            {
                llResetScript();
                //gQueryID = llGetNotecardLine(gName, gLine);
                //start();                    
            }    
        }    
    }    
}
__________________
For a tree's branches to reach heaven, its roots must reach to hell. -- Unknown
Ryker Beck is offline   Reply With Quote
Old 10-01-2013, 01:47 AM   #2 (permalink)
Smexy Dj & Exotic Dancer

*SLU Supporter*
 
EnvyJayaram's Avatar
That goes where? Lol
 
Join Date: Sep 2013
Location: Second Life
Posts: 88
My Mood:
SL Join Date: May 21,2008 (but really started around 2006)
Client: Singularity
Blog Entries: 4
Send a message via Skype™ to EnvyJayaram
Thanks for this script ma'am :-p
__________________
EnvyJayaram is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On