#include "variables.lsl" #include "functions.lsl" default { state_entry() { llSetObjectName("Stall Board Flash Drive [AC]"); llListen(5, "", "", ""); llListen(99, "", llGetOwner(), ""); //llSay(0, "Memory stick is ready"); g_iProtocol = 0x2110c; llSetLinkColor(LINK_ROOT, <1,0,0>, 6); //llSay(0, "Flash Memory is empty"); llSetText("", ZERO_VECTOR, 0); llSetLinkTexture(2, TEXTURE_TRANSPARENT, 1); } listen(integer c,string n,key i,string m){ if(c == 99){ // This is the ID of the board to download llRegionSayTo((key)m, 5, llList2Json(JSON_OBJECT, ["cmd", "memcpy", "protocol", g_iProtocol])); }else if(c == 5){ if(llJsonGetValue(m,["cmd"])=="set" || llJsonGetValue(m,["cmd"])=="set_memstick"){ g_sPayload = m; state fill; } } } } state fill{ state_entry(){ llSetTimerEvent(1); } timer(){ switch(g_iFill){ case 0:{ llSetText("[]",<1,1,1>,1); g_kLeasedTo = (key)llJsonGetValue(g_sPayload, ["leasee"]); llSetLinkColor(LINK_ROOT, <0.75,0.15,0>, 6); break; } case 1:{ llSetText("[->]",<1,1,1>,1); g_kTexture = (key)llJsonGetValue(g_sPayload, ["texture"]); llSetLinkColor(LINK_ROOT, <0.75,0.25,0>, 6); break; } case 2:{ llSetText("[->->]",<1,1,1>,1); g_iExpireAt = (integer)llJsonGetValue(g_sPayload, ["expire_time"]); llSetLinkColor(LINK_ROOT, <0.5,0.5,0>, 6); break; } case 3:{ llSetText("[->->->]",<1,1,1>,1); g_kOwner = (key)llJsonGetValue(g_sPayload, ["owner"]); llSetLinkColor(LINK_ROOT, <0.25,0.75,0>, 6); break; } case 4:{ llSetText("[->->->->]",<1,1,1>,1); g_iNotifFlags = (integer)llJsonGetValue(g_sPayload, ["notif"]); llSetLinkColor(LINK_ROOT, <0.15,0.75,0>, 6); break; } default:{ state full; break; } } g_iFill++; } } state full { state_entry(){ llSetText("[Saving...]",<1,1,1>,1); UpdateDSRequest(NULL, llRequestAgentData(g_kLeasedTo, DATA_NAME), SetDSMeta(["leased"])); llSetLinkColor(LINK_ROOT, <0,1,0>, 6); llSetLinkTexture(2, g_kTexture, 1); llListen(0x9f, "", "", ""); } dataserver(key k,string d){ if(HasDSRequest(k)!=-1){ list lMeta = GetMetaList(k); if(llList2String(lMeta,0) == "leased"){ g_sLeasedTo = d; DeleteDSReq(k); llSetText(g_sLeasedTo+"\n----\nStall Board Settings: 1", <0,1,1>,1); llSetObjectName("["+d+"] Stall Board FlashMemory [ZNI]"); } } } touch_start(integer t){ llSay(0, "click and hold for 5 seconds or longer to erase"); llResetTime(); } touch(integer t){ if(llGetTime()>5){ state empty; } } listen(integer c,string n,key i,string m) { if(llJsonGetValue(m,["cmd"]) == "retrieve") { g_kTransferDest = i; state package; } } } state package { state_entry(){ llSetText("[scp /flash.raw newboard:/import.raw]",<1,1,1>,1); g_sPayload = llList2Json(JSON_OBJECT,["lease", g_kLeasedTo, "texture", g_kTexture, "expire", g_iExpireAt, "owner", g_kOwner]); g_sPayload = llList2Json(JSON_OBJECT, ["target", g_kTransferDest, "payload", g_sPayload]); state empty; } } state empty { state_entry(){ g_iFill = 0; llSetTimerEvent(1); } timer(){ switch(g_iFill){ case 0:{ llSetLinkColor(LINK_ROOT, <0.15,0.75,0>, 6); break; } case 1:{ llSetLinkTexture(2, TEXTURE_TRANSPARENT, 1); llSetLinkColor(LINK_ROOT, <0.25,0.75,0>, 6); break; } case 2:{ llSetLinkColor(LINK_ROOT, <0.5,0.5,0>, 6); break; } case 3:{ llSetLinkColor(LINK_ROOT, <0.75,0.25,0>, 6); break; } case 4:{ llSetLinkColor(LINK_ROOT, <0.75,0.15,0>, 6); break; } case 5:{ if(g_kTransferDest != NULL) llRegionSayTo(g_kTransferDest, 0x9f, g_sPayload); llSleep(1); llSetText("", ZERO_VECTOR,0); break; } default:{ llResetScript(); break; } } g_iFill++; } }