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