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
0 B
|👍
/👎
0 B
|👍
/👎