Difference between revisions of "Vote Simple"

From Second Life Wiki
Jump to navigation Jump to search
(New page: {{LSL Header}} Simple voting script. One avi, one vote with a click. <lsl> // Voting script, only allows one vote per avi // @author JB Kraft // ------------------------------------------...)
 
m (<lsl> tag to <source>)
 
(3 intermediate revisions by one other user not shown)
Line 2: Line 2:
Simple voting script. One avi, one vote with a click.
Simple voting script. One avi, one vote with a click.


<lsl>
<source lang="lsl2">
// Voting script, only allows one vote per avi
// Voting script, only allows one vote per avi
// @author JB Kraft
// by JB Kraft
// ------------------------------------------------------------------------
// Feb 16, 2008  v1.1  - one avi, one vote
// Feb 14, 2008  v1.0  - simple voting, orig code
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// this message will be IM'd to the voter after they vote
string g_THANKS_MSG = "Thanks for voting";
// this will be in the hover text over the prim
string g_HOVER_TEXT = "Vote for me!";


// -- dont need to edit anything below here probably unless you want to change
// how the message is delivered when someone votes. see: touch_start --
integer g_VOTES = 0;
// list of avis that voted
list g_VOTERS;


// ------------------------------------------------------------------------
string thankYouMessage = "Thanks for voting";
update()
string floatText = "Vote for me!";
 
 
//  _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//  _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 
integer numberOfVotes;
list listOfVoterNames;
 
update_floattext()
{
{
     llSetText( g_HOVER_TEXT + "\n" + (string)g_VOTES + " votes", <1,1,1>, 1.0 );
//  set white and opaque floattext
     llSetText(floatText + "\n"
        + (string)numberOfVotes + " votes", <1.0, 1.0, 1.0>, (float)TRUE);
}
}


// ------------------------------------------------------------------------
integer added_vote(key id)
integer addVote( key id )
{
{
    // check memory and purge the list if we are getting full
// cut list if memory shortage
     if( llGetFreeMemory() < 1000 ) {
     if(llGetFreeMemory() < 5000)
         g_VOTERS = [];
         listOfVoterNames = llList2List(listOfVoterNames, -50, -1);
     }
 
   
     string avatarLegacyName = llKey2Name(id);
    // make sure they have not voted already
 
     if( llListFindList( g_VOTERS, [id] ) == -1 ) {
// TRUE if found, else FALSE
         g_VOTES++;
//  watch out, this is bit-wise NOT (~) not minus (-)
         g_VOTERS = (g_VOTERS=[]) + g_VOTERS + [id];
     integer thisAvatarHasVotedAlready = ~llListFindList(listOfVoterNames, [avatarLegacyName]);
         update();
 
    if (thisAvatarHasVotedAlready)
        return FALSE;
//  else
//  {
         listOfVoterNames += [avatarLegacyName];
         numberOfVotes = llGetListLength(listOfVoterNames);
 
         update_floattext();
 
         return TRUE;
         return TRUE;
    }  
//  }
   
    return FALSE;
}
}


// ------------------------------------------------------------------------
// D E F A U L T
// ------------------------------------------------------------------------
default
default
{
{
     // --------------------------------------------------------------------
     on_rez(integer start_param)
    {
        llResetScript();
    }
 
     state_entry()
     state_entry()
     {
     {
         update();
         update_floattext();
     }
     }


    // --------------------------------------------------------------------
     touch_start(integer num_detected)
     touch_start(integer total_number)
     {
     {
         integer i;
         key id = llDetectedKey(0);
        for( i = 0; i < total_number; i++ ) {
 
            if( addVote( llDetectedKey(i))) {
 
                if( g_THANKS_MSG != "" ) {
        if( added_vote(id) && thankYouMessage != "" )
                    // uncomment one and only one of these next 3 lines
            llInstantMessage(id, thankYouMessage);
                    //llWhisper( 0, g_THANKS_MESSAGE );
                    //llSay( 0, g_THANKS_MSG );       
                    llInstantMessage( llDetectedKey(i), g_THANKS_MSG );
                }
            }
        }
     }
     }
}
}
 
</source>
</lsl>


{{LSLC|Library|Vote Simple}}{{LSLC|Examples|Vote Simple}}
{{LSLC|Library|Vote Simple}}{{LSLC|Examples|Vote Simple}}

Latest revision as of 18:16, 24 January 2015

Simple voting script. One avi, one vote with a click.

//  Voting script, only allows one vote per avi
//  by JB Kraft


string thankYouMessage = "Thanks for voting";
string floatText = "Vote for me!";


//  _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//  _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

integer numberOfVotes;
list listOfVoterNames;

update_floattext()
{
//  set white and opaque floattext
    llSetText(floatText + "\n"
        + (string)numberOfVotes + " votes", <1.0, 1.0, 1.0>, (float)TRUE);
}

integer added_vote(key id)
{
//  cut list if memory shortage
    if(llGetFreeMemory() < 5000)
        listOfVoterNames = llList2List(listOfVoterNames, -50, -1);

    string avatarLegacyName = llKey2Name(id);

//  TRUE if found, else FALSE
//  watch out, this is bit-wise NOT (~) not minus (-)
    integer thisAvatarHasVotedAlready = ~llListFindList(listOfVoterNames, [avatarLegacyName]);

    if (thisAvatarHasVotedAlready)
        return FALSE;
//  else
//  {
        listOfVoterNames += [avatarLegacyName];
        numberOfVotes = llGetListLength(listOfVoterNames);

        update_floattext();

        return TRUE;
//  }
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    state_entry()
    {
        update_floattext();
    }

    touch_start(integer num_detected)
    {
        key id = llDetectedKey(0);


        if( added_vote(id)  && thankYouMessage != "" )
            llInstantMessage(id, thankYouMessage);
    }
}