Vote Simple
Revision as of 13:30, 18 October 2012 by Kireji Haiku (talk | contribs) (some more minor readability improvements)
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
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;
// 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); }
} </lsl>