StallBoard/LSL/raw/Flash.lsl

179 lines
No EOL
5 KiB
Text

#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++;
}
}