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,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;c0) { llMessageLinked(LINK_THIS,0,"OPEN",NULL_KEY); return; } llSay(0,"Domanda per "+name); llDialog(av,question,answers,CHANNEL); } } }