salahzar icon

Script Quiz Porta

salahzar | PRO | 04/05/13 09:26:35 PM UTC | 1 ⭐ | 9090 👁️ | Never ⏰ | []
LScript |

3.63 KB

|

None

|

1 👍

/

0 👎

list lines;
list avatars=[];
list flags=[]; // per ogni avatar segno 1 se ha risposto esatto oppure -1 -2 se ha sbagliato n volte
integer MAXERRORS=-2; // massimo numero di volte
 
 
integer i=0;
 
string question;
list answers;
integer correct;
 
integer CHANNEL=9999;
 
 
default
{
    state_entry()
    {
        llOwnerSay("Reading notecard");
        llSetText("Reading notecard...",<1,1,1>,1);
        lines=[];
        i=0;
        llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD,0),i);
    }
 
    dataserver(key id, string data)
    {
        //llOwnerSay("data: "+data);
        if(data==EOF) state ready;
        lines+=[data];
        i++;
        llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD,0),i);
    }
}
state ready
{
    state_entry()
    {
        llOwnerSay("Ready");
        llSetText(".",<1,1,1>,1);
        question=llList2String(lines,0);
        integer c=1; 
        for(c=1;c<llGetListLength(lines);c++)
        {
            string l=llList2String(lines,c);
            if(llGetSubString(l,0,0)=="*")
            {
                l=llGetSubString(l,1,-1);
                correct=c;
                //llSay(0,"corretta: "+(string)correct);
                
            }
            //llSay(0,"adding "+l+" to array ");
            answers+= [l];
        }
 
        llSetText(" " /* "Ready ("+(string)llGetListLength(answers)+")"*/ ,<1,1,1>,1);
        //llVolumeDetect(TRUE);
        CHANNEL=(integer)(10000000+llFrand(10000000));
        llListen(CHANNEL,"",NULL_KEY,"");
        llListen(100,"",llGetOwner(),"");
 
        
    }
    listen(integer channel, string name, key id, string str)
    {
        if(channel==100)
        {
            llSay(0,"resetting script");
            llResetScript();
            return;
        }
        integer av=llListFindList(avatars,[id]);
        if(av<0) return;
        
        integer position=llListFindList(answers,[str])+1;
        //llSay(0,"position: "+(string)position+" correct: "+(string)correct);
        if(position==correct)
        {
            flags=llListReplaceList(flags,[1],av,av);
            llSay(0,name+" hai risposto correttamente");
            //llRegionSay(CHANNEL,name+",1,1");
            llMessageLinked(LINK_THIS,0,"OPEN",NULL_KEY);
            return;
        }
 
        //llRegionSay(CHANNEL,name+",0,1");
        
        //llSay((integer)("0x"+(string)id),(string)id+" -10");
        integer flag=(integer)llList2String(flags,av)-1;
        flags=llListReplaceList(flags,[  flag ],av,av);
        
        llSay(0,name+" Risposta errata");
        
        
    }
    touch_start(integer count)
    {
        integer c;
        for(c=0;c<count;c++)
        {
            string name=llDetectedName(c);
            key av=llDetectedKey(c);
            
            integer found=0;
            if((found=llListFindList(avatars,[ av ]))<0) 
            {
                // non c'era prima aggiungi 
                avatars+= [ av ];
                flags+= [ 0 ];
                found=llGetListLength(avatars)-1;
            }
            integer flag=(integer)llList2String(flags,found);
            //llSay(0,(string)flag);
            if(flag<=MAXERRORS)
            {
                llSay(0,name+" non puoi più hai già fatto troppi tentativi");
                return;
            }
            if(flag>0)
            {
               
                llMessageLinked(LINK_THIS,0,"OPEN",NULL_KEY);
                return;
            }
            llSay(0,"Domanda per "+name);
            llDialog(av,question,answers,CHANNEL);
        }
        
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎