Vote Simple

From Second Life Wiki
Revision as of 14:24, 18 October 2012 by Kireji Haiku (talk | contribs) (minor fix)
Jump to navigation Jump to search

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

<lsl> // 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;
   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);
   }

} </lsl>