Advertisement
salahzar

sedia quiz multiple questions

Nov 30th, 2013
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. string notecard;
  2. integer line;
  3. integer punteggio;
  4.  
  5. key av; string name="";
  6. integer idlisten;
  7. integer tempoinizio;
  8.  
  9. list domande;
  10.  
  11. list answers;
  12. integer correct;
  13.  
  14. vector iniziale;
  15.  
  16.  
  17. mostra(string x)
  18. {
  19.     llSetText(x+"\nPunteggio:"+(string)punteggio+"\n"+name,<1,1,1>,1);
  20. }
  21. domanda()
  22. {
  23.     mostra("domanda "+(string)(line+1)+"/"+(string)llGetListLength(domande));
  24.     string q=llList2String(domande,line);
  25.     list pieces=llParseStringKeepNulls(q,["|"],[]);
  26.    
  27.     string question=llList2String(pieces,0);
  28.     answers=[]; list buttons=[];
  29.     integer i;
  30.    
  31.     // remove question
  32.     pieces=llDeleteSubList(pieces,0,0);
  33.     // have pieces in random order
  34.     pieces=llListRandomize(pieces,1);
  35.    
  36.    
  37.     for(i=0;i<llGetListLength(pieces);i++)
  38.     {
  39.         string answer=llList2String(pieces,i);
  40.         if(llGetSubString(answer,0,0)=="*")
  41.         {
  42.             correct=i+1;
  43.             answer=llGetSubString(answer,1,-1);
  44.         }
  45.         question+="\n"+(string)(i+1)+":"+answer;
  46.         buttons+=[(string)(i+1) ];
  47.     }
  48.    
  49.     llDialog(av,question,buttons,100);
  50.    
  51.    
  52. }
  53.  
  54.  
  55. // leggi notecard
  56. default
  57. {
  58.     state_entry()
  59.     {
  60.         iniziale=llGetPos(); punteggio=0; name="";
  61.         mostra("Legge notecard");
  62.         notecard=llGetInventoryName(INVENTORY_NOTECARD,0);
  63.         line=0; domande=[];
  64.         llGetNotecardLine(notecard,line);
  65.     }
  66.    
  67.     dataserver(key id,string data)
  68.     {
  69.         if(data==EOF) state ready;
  70.         domande+=data;
  71.         line++;
  72.         llGetNotecardLine(notecard,line);
  73.     }
  74. }
  75. state ready
  76. {
  77.        
  78.     state_entry()
  79.     {
  80.        
  81.         domande=llListRandomize(domande,1); // sets questions in random order
  82.         mostra("Pronto, siediti per le domande");
  83.         llSitTarget(<0,0,0.5>,ZERO_ROTATION);
  84.     }
  85.     changed(integer change)
  86.     {
  87.         if(change & CHANGED_LINK)
  88.         {
  89.             av=llAvatarOnSitTarget(); name=llKey2Name(av);
  90.             if(av!=NULL_KEY)
  91.                 state faidomande;
  92.         }
  93.     }
  94.    
  95. }
  96. state faidomande
  97. {
  98.     state_entry()
  99.     {
  100.         tempoinizio=llGetUnixTime();
  101.         idlisten=llListen(100,"",av,"");
  102.         line=0;
  103.         domanda();
  104.     }
  105.     listen(integer channel,string name,key id,string msg)
  106.     {
  107.         integer num=(integer)msg;
  108.         if(num==correct)
  109.         {
  110.             llSay(0,"Corretto");
  111.             llSetPos(llGetPos()+<0,0,1>);
  112.             line++; punteggio++;
  113.            
  114.         }
  115.         else
  116.         {
  117.             llSay(0,"Sbagliato");
  118.             llSetPos(llGetPos()+<0,0,-1>);
  119.             punteggio--;
  120.         }
  121.         if(line>=llGetListLength(domande))
  122.             state fine;
  123.         domanda();
  124.     }
  125.  
  126. }
  127. state fine
  128. {
  129.     state_entry()
  130.     {
  131.         llUnSit(av);
  132.         mostra("Finito");
  133.         llSay(0,name+" finito con punteggio "+(string)punteggio+" in "+(string)(llGetUnixTime()-tempoinizio)+" secondi");
  134.         llSleep(10);
  135.    
  136.        
  137.         llSetPos(iniziale);
  138.         state default;
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement