diff --git a/LSL/includes/functions.lsl b/LSL/includes/functions.lsl index 6384f90..c77ac97 100644 --- a/LSL/includes/functions.lsl +++ b/LSL/includes/functions.lsl @@ -18,7 +18,7 @@ MainMenu(key kAv) if(g_kLeasedTo == NULL){ lAppend += ["Lease"]; }else if(g_kLeasedTo == kAv || iAdmin || g_kOwner == kAv){ - lAppend += ["End Lease", "Renew", "Set Picture", "Set Owner", "TransferLease", "Set Name", Checkbox(g_iWhiteFrame, "White Frame"), Checkbox(g_iLogo, "Logo"), Checkbox(g_iCustomTextColor, "CustomTxt"), "SetTxtC", "*RESET*"]; + lAppend += ["End Lease", sSetor((g_iFlags&4)," ", "Renew"), "Set Picture", "Set Owner", sSetor ((g_iFlags & 2),"TransferLease", " "), "Set Name", Checkbox(bool(g_iMask & MASK_WHITEFRAME), "White Frame"), Checkbox(bool(g_iMask & MASK_LOGO), "Logo"), Checkbox(bool(g_iMask & MASK_CUSTOM_TEXT_COLOR), "CustomTxt"), "SetTxtC", "*RESET*"]; sAppend += "\n* CustomTxt, and SetTxtC relate to custom text colors."; } @@ -31,6 +31,7 @@ MainMenu(key kAv) Menu(g_kAuthorized, MAIN_MENU_TEXT+sAppend, MAIN_MENU_BUTTONS+lAppend, "menu~main"); } + Menu(key kAv, string sText, list lButtons, string sIdent) { llMessageLinked(LINK_THIS, LINK_MENU_DISPLAY, llDumpList2String([sIdent, "TRUE", sText, llDumpList2String(lButtons, "~")], "|"), kAv); @@ -50,8 +51,11 @@ string StripResident(string a) return llDumpList2String(lParam, " "); } + + + Text(){ - string sColor = GetColorStr(g_iWhiteFrame); + string sColor = GetColorStr(bool(g_iMask & MASK_WHITEFRAME)); g_sName = StripResident(g_sName); if(g_sPreferredName == ""){ if(g_sDisplayName != g_sName) @@ -63,7 +67,7 @@ Text(){ CleanInventory() { - list lDefaults = ["Board [ZNI]", "Dialog Module", "Text", "FFF Stall Board Flash Drive [ZNI]", "Update Module [ZNI]"]; + list lDefaults = ["Board [ZNI]", "Board Menu [ZNI]", "Dialog Module", "Text", "Stall Board Flash Drive [ZNI]", "Update Module [ZNI]", "Board Notifier [ZNI]"]; integer i=0; integer end = llGetInventoryNumber(INVENTORY_ALL); for(i=0;i[SYNCDONE] Admins", "fw_data"); + llSleep(1); + llSetTimerEvent(1); + //llSay(0, "Administrative server synchronized"); + g_iBoot=1; + } } link_message(integer s,integer n,string m,key i){ if(i == "fw_ready") { - llMessageLinked(LINK_SET, 0, "Please Wait", "fw_data"); + llRegionSay(SERVER_CHANNEL, llList2Json(JSON_OBJECT, ["op", "get_admins"])); + llMessageLinked(LINK_SET, 0, "Sync Admin Server...", "fw_data"); llSetLinkTexture(LINK_ROOT, TEXTURE_BLANK, 3); llSetLinkTexture(LINK_ROOT, TEXTURE_BLANK, 4); llSetLinkTexture(LINK_ROOT, TEXTURE_TRANSPARENT, 2); @@ -32,19 +72,27 @@ default llSetLinkColor(LINK_ROOT, ZERO_VECTOR, 0); llMessageLinked(LINK_SET, 0, "c="+GetColorStr(FALSE)+"; f=03812794-535b-f546-6171-6bec5bf399be", "fw_conf"); #if DEVELOPER == 1 - g_iWaitFor=llRound(llFrand(20)); + g_iWaitFor=llRound(llFrand(20))+4; #else - g_iWaitFor = llRound(llFrand(120)); + g_iWaitFor = llRound(llFrand(120))+4; #endif - llSetTimerEvent(1); + //llSetTimerEvent(1); } } - timer(){ + + timer() + { + if(g_iState & STATE_REBOOT_FAST) + { + g_iState=mask(UNSET, g_iState, STATE_REBOOT_FAST); + + state boot; + } g_iWaitFor--; - llMessageLinked(LINK_SET,0,"Startup in : "+(string)g_iWaitFor, "fw_data"); + llMessageLinked(LINK_SET,0,"Startup in : "+(string)g_iWaitFor, "fw_data"); if(g_iWaitFor == -1){ - llMessageLinked(LINK_SET,0,"Starting up", "fw_data"); + llMessageLinked(LINK_SET,0,"Starting up", "fw_data"); llSetTimerEvent(0); state boot; } @@ -57,8 +105,8 @@ default on_rez(integer i){ state reboot; } -} +} state off{ state_entry(){ llMessageLinked(LINK_SET, 0, "Currently Offline", "fw_data"); @@ -78,18 +126,23 @@ state reboot state default; } } -state boot -{ - state_entry(){ - if(g_iLogo){ +state boot{ + state_entry() + { + if(g_iHaveKVP)RestoreFromKVP(); // solve some issues related to the bitmasks + if(!g_iBoot) + { + llSay(0, "FATAL ERROR: Initial synchronization did not occur"); + llResetScript(); + } + if(g_iMask & MASK_LOGO){ - llSetLinkTexture(LINK_ROOT,FFF_CIRCLE_LOGO,2); + llSetLinkTexture(LINK_ROOT,CIRCLE_LOGO,2); llSetLinkColor(LINK_ROOT, <1,1,1>,2); }else { llSetLinkTexture(LINK_ROOT,TEXTURE_TRANSPARENT,2); } - initBasicSupport(); //llSetLinkTexture(LINK_ROOT, OFFLINE_TEXTURE, 3); //llSetLinkColor(LINK_ROOT, <1,1,1>, 3); llSetLinkPrimitiveParams(LINK_SET, [PRIM_FULLBRIGHT, ALL_SIDES, TRUE]); // Set the entire linkset to fullbright.. this will help with night time lighting problems. @@ -100,23 +153,21 @@ state boot llListen(0x9f, "", "", ""); llListen(70, "", "", ""); // old group server channels - llListen(0x99f9, "", "", ""); + //llListen(0x99f9, "", "", ""); llListen(5, "", "", ""); //chat commands g_sDate = llGetDate(); - g_iLastKVPTry = llGetUnixTime(); if(g_kLeasedTo!=NULL){ if(g_kTexture!=NULL && g_kTexture != "") llSetLinkTexture(LINK_ROOT, g_kTexture, 4); else llSetLinkTexture(LINK_ROOT,NO_TEXTURE,4); + + GetName(); - llSetTimerEvent(600); + GetOnline(); - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get", "name", "var", g_kLeasedTo])); - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get", "displayname", "var", g_kLeasedTo])); - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get", "online", "var", g_kLeasedTo])); llAllowInventoryDrop(FALSE); }else { llAllowInventoryDrop(TRUE); @@ -125,148 +176,68 @@ state boot #else llMessageLinked(LINK_SET,0,(string)llGetFreeMemory()+" bytes free", "fw_data"); #endif + + RestoreFromKVP(); } - if(g_iWhiteFrame){ + if(g_iMask & MASK_WHITEFRAME){ llMessageLinked(LINK_SET, 0, "c="+GetColorStr(TRUE)+"; f=03812794-535b-f546-6171-6bec5bf399be", "fw_conf"); llSetLinkColor(LINK_ROOT, <1,1,1>, 0); } - checkSupport(); + UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.dev/zni/Get_Support.php", [], ""), "get_sup"); - if(g_kLeasedTo==NULL){ - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request","get","kvp_get", "var", "$.FFF."+llGetObjectDesc()])); + if(g_kLeasedTo==NULL && !g_iHaveKVP){ + //llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request","get","kvp_get", "var", "$.FFF."+llGetObjectDesc()])); g_iHaveKVP=0; - g_iLastKVPTry=llGetUnixTime(); + RestoreFromKVP(); }else g_iHaveKVP = 1; - } - - timer() - { - if(g_sPreferredName == ""){ - if(llGetDate() != g_sDate){ - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get","name", "var", g_kLeasedTo])); - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get","displayname", "var", g_kLeasedTo])); + llSetTimerEvent(5); - g_sDate = llGetDate(); - SavePayload(); - } - } - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get","online", "var", g_kLeasedTo])); - - if(llGetUnixTime() > (g_iLastKVPTry+30) && !g_iHaveKVP){ - g_iLastKVPTry=llGetUnixTime(); - - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op", "request", "get", "kvp_get", "var", "$.FFF."+llGetObjectDesc()])); - } - - - if(g_iExpireAt != -1){ - integer Diff = (g_iExpireAt - llGetUnixTime()); - if(Diff!=0){ - // OK - integer Days = Diff/ONE_DAY; - - // NOW - Check days remaining - if(!(g_iNotification & 1)){ - if(Days <= 7){ - llInstantMessage(g_kLeasedTo, "/!\\ ATTENTION /!\\\n \n [ 7 days remain on your stall ]"); - g_iNotification+=1; - SavePayload(); - } - } - if(!(g_iNotification & 2)){ - if(Days <= 6){ - llInstantMessage(g_kLeasedTo, "/!\\ ATTENTION /!\\\n \n [ 6 days remain on your stall ]"); - g_iNotification+=2; - SavePayload(); - } - } - - if(!(g_iNotification & 4)){ - if(Days <= 3){ - llInstantMessage(g_kLeasedTo, "/!\\ ATTENTION /!\\\n \n [ 3 days remaining on your stall, please renew soon ]"); - g_iNotification += 4; - SavePayload(); - } - } - - if(!(g_iNotification & 8)){ - if(Days <= 2){ - llInstantMessage(g_kLeasedTo, "/!\\ ATTENTION /!\\\n \n [ 2 days remaining on your stall, please renew soon ]"); - g_iNotification += 8; - SavePayload(); - } - } - - if(!(g_iNotification & 16)){ - if(Days <= 1){ - llInstantMessage(g_kLeasedTo, "/!\\ ATTENTION /!\\\n \n [ Your lease will expire within 24 hours ]"); - g_iNotification += 16; - SavePayload(); - } - } - - if(!(g_iNotification & 32)) - { - if(Days <= 14) - { - llInstantMessage(g_kLeasedTo, "/!\\ ATTENTION /!\\\n \n [ Your lease will expire in less than 14 ]"); - g_iNotification += 32; - SavePayload(); - } - } - } - - if(llGetUnixTime()>=g_iExpireAt){ - llMessageLinked(LINK_SET, 0, "Lease Expired","fw_data"); - llInstantMessage(g_kLeasedTo, "Your lease has expired!"); - DeletePayload(); - llSleep(30); - llResetScript(); - } - } - - - if(g_iTransferTimeout && llGetUnixTime()>g_iTransferTimeout){ - g_iTransferTimeout = 0; - llInstantMessage(g_kTransferID, "The transfer operation has expired."); - llInstantMessage(g_kLeasedTo, "Transfer cancelled due to timeout"); - g_kTransferID = NULL; - } - - } - - changed(integer t){ - if(t&CHANGED_REGION_START){ - state reboot; - } - if(t&(CHANGED_INVENTORY|CHANGED_ALLOWED_DROP)) + if(g_iFlags & 4) { + llSetPayPrice(g_iPricePerDay, [g_iPricePerDay * 2, g_iPricePerDay * 7, g_iPricePerDay * 14, g_iPricePerDay * 30]); + } else llSetPayPrice(PAY_HIDE, [PAY_HIDE, PAY_HIDE, PAY_HIDE, PAY_HIDE]); + } + + money( key id, integer amount ) + { + integer days = amount/g_iPricePerDay; + integer expect = g_iPricePerDay * days; + integer diff = amount-expect; + if(diff<0)diff *= -1; + if(diff!= 0 || !(g_iFlags & 4)) + { + if(!(g_iFlags&4))diff=amount; + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op","pay","L", diff]), id); + if(!(g_iFlags&4))return; // terminate! + } + + if(days > 0) + { + g_iNotification=0; // Reset the notification mask + // Add days to lease if(g_kLeasedTo == NULL) { - // We are assigning a lease - if(llGetInventoryNumber(INVENTORY_TEXTURE)>0){ - g_iExpireAt = llGetUnixTime()+THIRTY_DAYS; - g_kTexture=llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE,0)); - llMessageLinked(LINK_SET,0,"Touch me now", "fw_data"); - llSay(0, "Touch this board now to finalize the lease"); - llSetLinkTexture(LINK_ROOT,TEXTURE_BLANK, 4); - } - } else { - // Update picture - if(llGetInventoryNumber(INVENTORY_TEXTURE)>0){ - g_kTexture=llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE,0)); - state rebootfast; - } + SetLease(id); + g_iExpireAt = llGetUnixTime() + (days*ONE_DAY); + }else { + // add time + g_iExpireAt += (days * ONE_DAY); } + SavePayload(); + llRegionSayTo(id, 0, (string)days+" days added to the lease"); + g_iState = mask(SET,g_iState,STATE_REBOOT_PENDING); } } - on_rez(integer i){ - state reboot; + + state_exit() + { + g_iState = mask(UNSET, g_iState, STATE_REBOOT_PENDING); + g_iState = mask(SET, g_iState, STATE_REBOOT_FAST); } - + listen(integer c,string n,key i,string m){ if(c==0x9f) { @@ -279,12 +250,12 @@ state boot g_kOwner = (key)llJsonGetValue(sPayload, ["owner"]); if(g_kOwner == "NONE")g_kOwner = NULL_KEY; g_kTransferID=NULL_KEY; - g_iLogo=1; + g_iMask = mask(SET, 0, MASK_LOGO); SavePayload(); - //llSay(0, "Data has been imported! Rebooting..."); - state reboot; + llSay(0, "Data has been imported! Rebooting..."); + llResetScript(); } } else if(c == 5){ if(m == "shutdown"){ @@ -315,109 +286,48 @@ state boot g_iAuthorized = 1; g_kAuthorized = kAv; //llSay(0, "authorization discovered"); - MainMenu(g_kAuthorized); + llMessageLinked(LINK_SET, 0x1D, llList2Json(JSON_ARRAY, g_lSupport),""); + llSleep(1); + llMessageLinked(LINK_SET, 0x2E1D, "", g_kAuthorized); + //MainMenu(g_kAuthorized); }else { //llSay(0, "authorization rejected"); } } - } else if(c == 0x99f9){ - //llSay(0, m); - if(llJsonGetValue(m,["op"])=="reply") + } + } + changed(integer t){ + if(t&CHANGED_REGION_START){ + state reboot; + } + if(t&(CHANGED_INVENTORY|CHANGED_ALLOWED_DROP)) + { + if(g_kLeasedTo == NULL) { - if(g_kLeasedTo==NULL_KEY)return; - if(llJsonGetValue(m,["var"])=="name"){ - g_sName = llJsonGetValue(m,["val"]); - Text(); - } else if(llJsonGetValue(m,["var"])=="displayname"){ - g_sDisplayName = llJsonGetValue(m,["val"]); - Text(); - } else if(llJsonGetValue(m,["var"]) == "online"){ - integer iOnline = (integer)llJsonGetValue(m,["val"]); - llSetLinkColor(LINK_ROOT, <1,1,1>, 3); - if(iOnline){ - llSetLinkTexture(LINK_ROOT, ONLINE_TEXTURE, 3); - }else { - llSetLinkTexture(LINK_ROOT, OFFLINE_TEXTURE, 3); + if(g_iFlags & 1) + { + // We are assigning a lease + if(llGetInventoryNumber(INVENTORY_TEXTURE)>0){ + g_iExpireAt = llGetUnixTime()+THIRTY_DAYS; + g_kTexture=llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE,0)); + llMessageLinked(LINK_SET,0,"Touch me now", "fw_data"); + llSay(0, "Touch this board now to finalize the lease"); + llSetLinkTexture(LINK_ROOT,TEXTURE_BLANK, 4); } - } else if(llJsonGetValue(m,["var"])=="owner"){ - g_kOwner = (key)llJsonGetValue(m,["val"]); - SavePayload(); - } else if(llJsonGetValue(m,["var"])=="transfer"){ - g_kTransferID = (key)llJsonGetValue(m,["val"]); - llSay(0, "Lease transfer has been initiated. secondlife:///app/agent/"+(string)g_kTransferID+"/about has 48 hours to touch this board to finalize the transfer process"); - llInstantMessage(g_kTransferID, "A lease is being transfered to you. To confirm, you must click this board within 48 hours. My position is : "+(string)llGetPos()); - g_iTransferTimeout = llGetUnixTime()+(2*ONE_DAY); + }else CleanInventory(); + } else { + // Update picture + if(llGetInventoryNumber(INVENTORY_TEXTURE)>0){ + g_kTexture=llGetInventoryKey(llGetInventoryName(INVENTORY_TEXTURE,0)); + g_iState = mask(SET, g_iState, STATE_REBOOT_FAST); + state reboot; } - } else if(llJsonGetValue(m,["op"])=="kvp_no"){ - // Stay as we are! - llMessageLinked(LINK_SET, 0, "No Restore Info", "fw_data"); - llSleep(6); - g_iHaveKVP=1; - - #if DEVELOPER == 0 - llMessageLinked(LINK_SET, 0, "Vacant - Available","fw_data"); - #else - llMessageLinked(LINK_SET,0,(string)llGetFreeMemory()+" bytes free", "fw_data"); - #endif - } else if(llJsonGetValue(m,["op"])=="kvp_reply"){ - - string sPayload = llJsonGetValue(m,["value"]); - g_kLeasedTo = (key)llJsonGetValue(sPayload, ["lease"]); - g_kTexture = (key)llJsonGetValue(sPayload, ["texture"]); - g_iExpireAt = (integer)llJsonGetValue(sPayload, ["expire"]); - g_kOwner = (key)llJsonGetValue(sPayload, ["owner"]); - g_iNotification = (integer)llJsonGetValue(sPayload, ["notif"]); - g_sPreferredName = llJsonGetValue(sPayload, ["name"]); - g_iWhiteFrame = (integer)llJsonGetValue(sPayload, ["whiteframe"]); - g_iLogo=(integer)llJsonGetValue(sPayload, ["logo"]); - g_kTransferID=(key)llJsonGetValue(sPayload,["transfer"]); - g_iTransferTimeout = (integer)llJsonGetValue(sPayload, ["transfer_timeout"]); - g_vCustomColorText = (vector)llJsonGetValue(sPayload, ["customtxtcolor"]); - g_iCustomTextColor = (integer)llJsonGetValue(sPayload, ["usecustomtxt"]); - - integer iChange=0; - - g_iHaveKVP=1; - - if(g_kLeasedTo == NULL_KEY){ - DeletePayload(); - llSleep(10); - llResetScript(); - return; - } - - if(g_kTexture == ""){ - g_kTexture = NULL_KEY; - iChange++; - } - if(g_kTransferID == ""){ - g_kTransferID=NULL_KEY; - g_iTransferTimeout=0; - iChange++; - } - - if(llStringLength(g_kOwner) != 36){ - if(g_kOwner == ""){ - g_kOwner = NULL_KEY; - iChange++; - }else { - - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get","owner", "var", g_kOwner])); - } - } - - if(iChange){ - SavePayload(); - } - - llMessageLinked(LINK_SET, 0, "Restored Information", "fw_data"); - llSleep(10); - - state rebootfast; } } } - + on_rez(integer i){ + state reboot; + } touch_start(integer i) { if(!g_iHaveKVP){ @@ -444,246 +354,106 @@ state boot g_sPreferredName=""; SavePayload(); llSleep(10); - state rebootfast; + + g_iState = mask(SET, g_iState, STATE_REBOOT_PENDING); + return; } llRegionSay(70, llDumpList2String(["checkgroup", "menu", llDetectedKey(0)], "%")); } - - link_message(integer s,integer n,string m,key i) + + timer() { - if(n == LINK_MENU_TIMEOUT) - { - llInstantMessage(i, "Menu Timed out!"); - if(i==g_kInvLoad){ - llAllowInventoryDrop(FALSE); + #if DEVELOPER == 1 + llSetText("BITMASK: "+(string)g_iMask+"\nMASK_LOGO "+(string)MASK_LOGO+"\nMASK_WHITEFRAME "+(string)MASK_WHITEFRAME+"\nMASK_CUSTOM_TEXT_COLOR "+(string)MASK_CUSTOM_TEXT_COLOR +"\n\n STATE "+(string)g_iState, <1,1,1>, 1); + #else + llSetText("",ZERO_VECTOR,0); + #endif + + if(g_iState & STATE_REBOOT_PENDING) state reboot; + + if(g_kLeasedTo == NULL)return; + + if(g_sPreferredName == ""){ + if(llGetDate() != g_sDate){ + + GetName(); + + g_sDate = llGetDate(); + SavePayload(); } - } else if(n == LINK_MENU_RETURN) + } + GetOnline(); + + if(!g_iHaveKVP){ + RestoreFromKVP(); + } + + if(g_iExpireAt != -1) { - list returnMenu = llParseString2List(m,["|"],[]); - string sIdent = llList2String(returnMenu,0); - string sButton = llList2String(returnMenu,1); - switch(sIdent) + integer Diff = (g_iExpireAt - llGetUnixTime()); + if(Diff!=0){ + // OK + integer Days = Diff/ONE_DAY; + + llMessageLinked(LINK_SET, 0x4C9F, llList2Json(JSON_OBJECT, ["days", Days, "mask", g_iNotification]), g_kLeasedTo); + + llSetTimerEvent(120); + } + + } + + + if(g_iTransferTimeout && llGetUnixTime()>g_iTransferTimeout){ + g_iTransferTimeout = 0; + llInstantMessage(g_kTransferID, "The transfer operation has expired."); + llInstantMessage(g_kLeasedTo, "Transfer cancelled due to timeout"); + g_kTransferID = NULL; + } + } + + dataserver(key kID, string sData) + { + if(HasDSRequest(kID) != -1) + { + list lMeta = GetMetaList(kID); + if(llList2String(lMeta,0) == "online") { - case "menu~main":{ - switch(sButton){ - case "Import":{ - GetArbitraryData(i, IMPORT_MENU_TEXT, "main~import"); - break; - } - case "-exit-":{ - llInstantMessage(i, "Menu Closed!"); - llMessageLinked(LINK_THIS, LINK_MENU_REMOVE, "", i); - break; - } - case "Export":{ - llWhisper(5, llList2Json(JSON_OBJECT,["cmd","set_memstick","leasee",g_kLeasedTo,"expire_time",g_iExpireAt,"texture",g_kTexture,"owner",g_kOwner])); - break; - } - case "Lease":{ - // Set - g_kLeasedTo = i; - g_iExpireAt = llGetUnixTime() + THIRTY_DAYS; - llSay(0, "Leased! You will need to set the texture after reboot finishes"); - SavePayload(); - llSleep(2); - state rebootfast; - break; - } - case "End Lease":{ - DeletePayload(); - llInstantMessage(g_kLeasedTo, "Your lease has been terminated by secondlife:///app/agent/"+(string)i+"/about"); - llSleep(10); - llResetScript(); - break; - } - case "Renew":{ - if(g_iExpireAt == -1) - { - llInstantMessage(g_kLeasedTo, "Your lease timer has been restarted and is no longer indefinite"); - } - g_iExpireAt = llGetUnixTime() + THIRTY_DAYS; - g_iNotification=0; - SavePayload(); - llInstantMessage(i, "Renew complete!"); - break; - } - case "Set Picture":{ - GetArbitraryData(i, HEADER+"Please input the texture UUID, or you can drag and drop a full permission texture into my inventory by holding CTRL", "menu~settxt"); - llAllowInventoryDrop(TRUE); - g_kInvLoad=i; - break; - } - case "WhoLeased":{ - if(g_kLeasedTo == NULL){ - llSay(0, "Vacant - This board is available to be leased"); - }else{ - llSay(0, "Leased by : secondlife:///app/agent/"+(string)g_kLeasedTo+"/about"); - if(g_kOwner != NULL)llSay(0, "The pony's owner is : secondlife:///app/agent/"+(string)g_kOwner+"/about"); - } - break; - } - case "PermaLease":{ - g_iExpireAt = -1; - SavePayload(); - llInstantMessage(g_kLeasedTo, "Your lease is now set to not expire"); - llInstantMessage(i, "Action Successful"); - break; - } - case "*RESET*":{ - llResetScript(); - break; - } - case "TimeRemain":{ - if(g_iExpireAt == -1){ - llSay(0, "No Expiration is set"); - }else { - integer iDifference = g_iExpireAt - llGetUnixTime(); - integer Days = iDifference/ONE_DAY; - iDifference -= (ONE_DAY*Days); - integer Hours = iDifference/60/60; - iDifference -= (Hours*60*60); - integer Minutes = iDifference/60; - iDifference -= (Minutes*60); - - llSay(0, "Time Remaining: "+(string)Days+" days, "+(string)Hours+" hours, "+(string)Minutes+" minutes, "+(string)iDifference+" seconds"); - - } - break; - } - case "Set Owner":{ - GetArbitraryData(i, HEADER+"What is the owner's secondlife name?", "main~owner"); - break; - } - case "MemStick":{ - llGiveInventory(i,"FFF Stall Board Flash Drive [ZNI]"); - break; - } - case "TransferLease":{ - GetArbitraryData(i, HEADER+"Enter the username of the person you want to transfer this lease to", "main~leasetrans"); - break; - } - case "Set Name":{ - GetArbitraryData(i, HEADER+"Enter the name you want displayed on the panel. This is useful when Unicode is showing as question marks. Please only input ASCII.\n \n* To clear the current preference, submit the leave the box empty and hit submit.", "main~name"); - break; - } - case Checkbox(g_iWhiteFrame, "White Frame"):{ - g_iWhiteFrame = 1- g_iWhiteFrame; - SavePayload(); - llSleep(5); - state rebootfast; - break; - } - case "Reboot":{ - SavePayload(); - llMessageLinked(LINK_SET,0,"*REBOOTING*","fw_data"); - llSleep(10); - state rebootfast; - break; - } - case Checkbox(g_iLogo,"Logo"):{ - g_iLogo=1-g_iLogo; - SavePayload(); - if(g_iLogo){ - llSetLinkTexture(LINK_ROOT,FFF_CIRCLE_LOGO,2); - llSetLinkColor(LINK_ROOT,<1,1,1>,2); - }else{ - llSetLinkTexture(LINK_ROOT,TEXTURE_TRANSPARENT,2); - } - break; - } - case Checkbox(g_iCustomTextColor, "CustomTxt"): - { - g_iCustomTextColor=1-g_iCustomTextColor; - SavePayload(); - Text(); - MainMenu(i); - break; - } - case "SetTxtC": - { - Menu(i, "Pick a color, or enter a custom one", ["colormenu"], "CTxt"); - break; - } - default:{ - MainMenu(i); - llSay(0, "Button : "+sButton+" not implemented"); - break; - } - } - break; - } - case "main~import":{ - llMessageLinked(LINK_SET, 0, "Importing Data", "fw_data"); - llRegionSayTo((key)sButton, 0x9f, llList2Json(JSON_OBJECT, ["cmd","retrieve"])); - break; - } - case "main~name":{ - g_sPreferredName = sButton; - SavePayload(); - Text(); - MainMenu(i); - break; - } - case "CTxt": + integer iOn = (integer)sData; + llSetLinkColor(LINK_ROOT, <1,1,1>, 3); + DeleteDSReq(kID); + + if(iOn) { - g_vCustomColorText = (vector)sButton; - SavePayload(); - Text(); - MainMenu(i); - break; - } - case "menu~settxt":{ - if(sButton == ""){ - g_kTexture = NULL_KEY; - SavePayload(); - }else { - g_kTexture = (key)sButton; - SavePayload(); - - } - state rebootfast; - break; - } - case "main~owner":{ - if(sButton == ""){ - g_kOwner=NULL_KEY; - SavePayload(); - MainMenu(i); - return; - } - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get","owner", "var", sButton])); - - //UpdateDSRequest(NULL, llRequestUserKey(sButton), SetDSMeta(["set_owner"])); - //g_kOwner = (key)sButton; - //SavePayload(); - MainMenu(i); - break; - } - case "main~leasetrans":{ - if(sButton == ""){ - // Cancel transfer - if(g_kTransferID != NULL_KEY){ - g_sPreferredName=""; - SavePayload(); - Text(); - } - g_kTransferID=NULL_KEY; - g_iTransferTimeout=-1; - - MainMenu(i); - return; - } - llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get", "transfer", "var", sButton])); - g_sPreferredName="*RESERVED*"; - SavePayload(); - MainMenu(i); - break; - } + llSetLinkTexture(LINK_ROOT, ONLINE_TEXTURE, 3); + }else llSetLinkTexture(LINK_ROOT, OFFLINE_TEXTURE, 3); + } else if(llList2String(lMeta,0) == "name") + { + g_sName = sData; + DeleteDSReq(kID); + + GetDisplayName(); + } else if(llList2String(lMeta,0) == "displayname") + { + g_sDisplayName = sData; + DeleteDSReq(kID); + + Text(); + } else if(llList2String(lMeta,0) == "set_owner") + { + g_kOwner = sData; + DeleteDSReq(kID); + SavePayload(); + + llMessageLinked(LINK_SET, 0x2E1D, "", llList2String(lMeta,1)); + } else if(llList2String(lMeta,0) == "lease_get") + { + SetLease(sData); + SavePayload(); + state reboot; } } } - http_response(key k,integer s,list m,string b){ if(HasDSRequest(k)!=-1){ list lMeta = GetMetaList(k); @@ -692,26 +462,69 @@ state boot list lPar = llParseStringKeepNulls(b,[";;"],[]); if(llList2String(lPar,0)=="GetSupport"){ g_lSupport = llParseString2List(llList2String(lPar,1), ["~"],[]); + llMessageLinked(LINK_SET, 0x1D, llList2Json(JSON_ARRAY, g_lSupport), ""); + } } } -} -state rebootfast -{ - state_entry(){ - CleanInventory(); - llMessageLinked(LINK_SET, 0, "Please Wait", "fw_data"); - llSetLinkTexture(LINK_ROOT, TEXTURE_BLANK, 3); - llSetLinkTexture(LINK_ROOT, TEXTURE_BLANK, 4); - llSetLinkTexture(LINK_ROOT, TEXTURE_TRANSPARENT, 2); - llSetLinkColor(LINK_ROOT, ZERO_VECTOR, 3); - llSetLinkColor(LINK_ROOT, ZERO_VECTOR, 4); - llSetLinkColor(LINK_ROOT, ZERO_VECTOR, 2); - llSetLinkColor(LINK_ROOT, ZERO_VECTOR, 0); - llMessageLinked(LINK_SET, 0, "c="+GetColorStr(FALSE)+"; f=03812794-535b-f546-6171-6bec5bf399be", "fw_conf"); + link_message(integer s,integer n,string m,key i) + { + if(n == 0x4C9F1) + { + integer iNotification = (integer)llJsonGetValue(m,["mask"]); + if(iNotification != g_iNotification) + llLinksetDataWrite("notif", (string)g_iNotification); - state boot; - } + g_iNotification = iNotification; + llSetTimerEvent(5); + } else if(n == 0x3E) + { + if(llJsonGetValue(m,["op"]) == "reset") + { + + DeletePayload(); + llSleep(2); + llResetScript(); + } else if(llJsonGetValue(m,["op"]) == "renew") + { + + g_iExpireAt = llGetUnixTime() + THIRTY_DAYS; + g_iNotification=0; + SavePayload(); + + } else if(llJsonGetValue(m,["op"]) == "pic") + { + + llAllowInventoryDrop(TRUE); + g_kInvLoad=i; + } else if(llJsonGetValue(m,["op"])=="nopic") + { + + llAllowInventoryDrop(FALSE); + g_kInvLoad = NULL; + } else if(llJsonGetValue(m,["op"]) == "perma") + { + g_iExpireAt = -1; + SavePayload(); + llInstantMessage(g_kLeasedTo, "Your lease is now set to not expire"); + llInstantMessage(i, "Action Successful"); + + } else if(llJsonGetValue(m,["op"]) == "reboot") + { + g_iState = mask(SET, g_iState, STATE_REBOOT_PENDING); + } else if(llJsonGetValue(m,["op"]) == "lease") + { + SetLease(i); + }else if(llJsonGetValue(m,["op"]) == "actlease") + { + + UpdateDSRequest(NULL, llRequestUserKey(i), SetDSMeta(["lease_get", i])); + } else if(llJsonGetValue(m,["op"]) == "setowner") + { + UpdateDSRequest(NULL, llRequestUserKey(i), SetDSMeta(["set_owner", llJsonGetValue(m,["id"])])); + } + } + } } \ No newline at end of file diff --git a/LSL/raw/KVPDailyBkp.lsl b/LSL/raw/KVPDailyBkp.lsl deleted file mode 100755 index 58d36b4..0000000 --- a/LSL/raw/KVPDailyBkp.lsl +++ /dev/null @@ -1,111 +0,0 @@ -#include "variables.lsl" -#include "functions.lsl" - -integer g_iTotalKeys; -integer g_iProcessedKeys; - -integer Percent(integer I, integer M) -{ - return I*100/M; -} - -string Progress(integer iProg){ - // 64 chars max, must account for the brackets, percent sign, and the numbers. - integer iMax = 32; - iMax -= 2; // Brackets - iMax -= 6; // Numbers, spaces, % sign - - integer i=0; - string sFinal = "["; - - float fProg = (float)("0."+(string)iProg); - if(iProg>=100)fProg=1.0; - if(iProg<10)fProg=(float)("0.0"+(string)iProg); - - integer pos = llFloor(iMax * fProg); - for(i=0;i<=iMax;i++){ - if(i < pos) sFinal += "█"; - else if(i == pos)sFinal += ">"; - else sFinal += "░"; - } - sFinal += "] "+(string)iProg+"%"; - return sFinal; -} - -SET_HOVER() -{ - - llSetText("* BACKING UP *\n"+(string)g_iProcessedKeys+"/"+(string)g_iTotalKeys+"\n"+Progress(Percent(g_iProcessedKeys, g_iTotalKeys)), <1,0,0>,1); -} - -string g_sLastDate; -default -{ - state_entry() - { - llSetTimerEvent(60); - } - dataserver(key kID, string sData) - { - if(HasDSRequest(kID)!=-1) - { - list lMeta = GetMetaList(kID); - if(llList2String(lMeta,0) == "count") - { - g_iTotalKeys = (integer)llGetSubString(sData,2,-1); - g_iProcessedKeys = 0; - SET_HOVER(); - - llSleep(0.25); - UpdateDSRequest(kID, llKeysKeyValue(g_iProcessedKeys, 1), "get_key_name"); - }else if(llList2String(lMeta,0) == "get_key_name") - { - llSleep(0.25); - UpdateDSRequest(kID, llReadKeyValue(llGetSubString(sData,2,-1)), SetDSMeta(["read_value", llGetSubString(sData,2,-1)])); - } else if(llList2String(lMeta,0) == "read_value"){ - string sKey = llList2String(lMeta,1); - string sValue = llStringToBase64(llGetSubString(sData,2,-1)); - DeleteDSReq(kID); - - llSleep(0.5); - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStore.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","set", "id", sKey, "val", sValue])), "sv"); - g_iProcessedKeys++; - SET_HOVER(); - llSleep(0.5); - if(g_iProcessedKeys <= g_iTotalKeys-1) - UpdateDSRequest(NULL, llKeysKeyValue(g_iProcessedKeys,1), "get_key_name"); - else { - llSleep(10); - //DeleteDSReq(kID); - llSetText("** Daily Backup **\nLast Completed: "+g_sLastDate, <0,1,0>, 0.5); - } - } - } - } - timer() - { - if(llGetDate()!=g_sLastDate) - { - g_sLastDate = llGetDate(); - llRegionSay(5, "backup"); - llSleep(30); - llRegionSay(5, "restore9f"); - - llSetText("Please Stand By\nPerforming daily KVP store backup",<1,0,0>,1); - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStore.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","clear"])), "sv"); - - llSleep(10); - UpdateDSRequest(NULL, llKeyCountKeyValue(), "count"); - } - } - http_response(key k,integer s,list m,string b) - { - if(HasDSRequest(k)!=-1){ - DeleteDSReq(k); - list lTmp = llParseString2List(b,[";;",";"],[]); - if(llList2String(lTmp,1) != "OK"){ - llSay(0, "ERROR ("+(string)s+"): "+b); - } - } - } -} diff --git a/LSL/raw/KVPDailyBkpTesting.lsl b/LSL/raw/KVPDailyBkpTesting.lsl deleted file mode 100755 index e922ddc..0000000 --- a/LSL/raw/KVPDailyBkpTesting.lsl +++ /dev/null @@ -1,112 +0,0 @@ -#include "variables.lsl" -#include "functions.lsl" - - -integer g_iTotalKeys; -integer g_iProcessedKeys; - -integer Percent(integer I, integer M) -{ - return I*100/M; -} - -string Progress(integer iProg){ - // 64 chars max, must account for the brackets, percent sign, and the numbers. - integer iMax = 32; - iMax -= 2; // Brackets - iMax -= 6; // Numbers, spaces, % sign - - integer i=0; - string sFinal = "["; - - float fProg = (float)("0."+(string)iProg); - if(iProg>=100)fProg=1.0; - if(iProg<10)fProg=(float)("0.0"+(string)iProg); - - integer pos = llFloor(iMax * fProg); - for(i=0;i<=iMax;i++){ - if(i < pos) sFinal += "█"; - else if(i == pos)sFinal += ">"; - else sFinal += "░"; - } - sFinal += "] "+(string)iProg+"%"; - return sFinal; -} - -SET_HOVER() -{ - - llSetText("* BACKING UP TEST *\n"+(string)g_iProcessedKeys+"/"+(string)g_iTotalKeys+"\n"+Progress(Percent(g_iProcessedKeys, g_iTotalKeys)), <1,0,0>,1); -} - -string g_sLastDate; -default -{ - state_entry() - { - llSetTimerEvent(60); - } - dataserver(key kID, string sData) - { - if(HasDSRequest(kID)!=-1) - { - list lMeta = GetMetaList(kID); - if(llList2String(lMeta,0) == "count") - { - g_iTotalKeys = (integer)llGetSubString(sData,2,-1); - g_iProcessedKeys = 0; - SET_HOVER(); - - llSleep(0.25); - UpdateDSRequest(kID, llKeysKeyValue(g_iProcessedKeys, 1), "get_key_name"); - }else if(llList2String(lMeta,0) == "get_key_name") - { - llSleep(0.25); - UpdateDSRequest(kID, llReadKeyValue(llGetSubString(sData,2,-1)), SetDSMeta(["read_value", llGetSubString(sData,2,-1)])); - } else if(llList2String(lMeta,0) == "read_value"){ - string sKey = llList2String(lMeta,1); - string sValue = llStringToBase64(llGetSubString(sData,2,-1)); - DeleteDSReq(kID); - - llSleep(0.5); - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStoreTesting.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","set", "id", sKey, "val", sValue])), "sv"); - g_iProcessedKeys++; - SET_HOVER(); - llSleep(0.5); - if(g_iProcessedKeys <= g_iTotalKeys-1) - UpdateDSRequest(NULL, llKeysKeyValue(g_iProcessedKeys,1), "get_key_name"); - else { - llSleep(10); - //DeleteDSReq(kID); - llSetText("** Daily Backup Testing **\nLast Completed: "+g_sLastDate, <0,1,0>, 0.5); - } - } - } - } - timer() - { - if(llGetDate()!=g_sLastDate) - { - g_sLastDate = llGetDate(); - llRegionSay(5, "backup"); - llSleep(30); - llRegionSay(5, "restore9f"); - - llSetText("Please Stand By\nPerforming daily KVP store backup",<1,0,0>,1); - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStoreTesting.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","clear"])), "sv"); - - llSleep(10); - UpdateDSRequest(NULL, llKeyCountKeyValue(), "count"); - } - } - http_response(key k,integer s,list m,string b) - { - if(HasDSRequest(k)!=-1){ - DeleteDSReq(k); - list lTmp = llParseString2List(b,[";;",";"],[]); - if(llList2String(lTmp,1) != "OK"){ - llSay(0, "ERROR ("+(string)s+"): "+b); - } - } - } -} diff --git a/LSL/raw/KVPRestore.lsl b/LSL/raw/KVPRestore.lsl deleted file mode 100755 index 6922f5c..0000000 --- a/LSL/raw/KVPRestore.lsl +++ /dev/null @@ -1,163 +0,0 @@ -#include "variables.lsl" -#include "functions.lsl" - -string g_sDate; -integer g_iTotal = 0; -integer g_iTotalDB; -integer g_iProcessed = 0; -GetKVP(integer iOffset) -{ - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStore.php", [HTTP_METHOD,"POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op","get","offset",iOffset])), SetDSMeta(["get", iOffset])); -} - -integer Percent(integer I, integer M) -{ - return I*100/M; -} - -string Progress(integer iProg){ - // 64 chars max, must account for the brackets, percent sign, and the numbers. - integer iMax = 32; - iMax -= 2; // Brackets - iMax -= 6; // Numbers, spaces, % sign - - integer i=0; - string sFinal = "["; - - float fProg = (float)("0."+(string)iProg); - if(iProg>=100)fProg=1.0; - if(iProg<10)fProg=(float)("0.0"+(string)iProg); - - integer pos = llFloor(iMax * fProg); - for(i=0;i<=iMax;i++){ - if(i < pos) sFinal += "█"; - else if(i == pos)sFinal += ">"; - else sFinal += "░"; - } - sFinal += "] "+(string)iProg+"%"; - return sFinal; -} -text(){ - llSetText("Downloading KVP from ZNI\n \n"+Progress(Percent(g_iProcessed,g_iTotal)), <0,1,0>,1); -} - -bootstrap() -{ - llSleep(2); - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStore.php", [HTTP_METHOD,"POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op", "get", "offset", g_iProcessed])), SetDSMeta(["download"])); -} -default -{ - state_entry() - { - llSetText("ZNI KVP Restore Terminal", <0,1,1>,1); - } - - touch_start(integer total_number) - { - if(llGetOwner()!=llDetectedKey(0))return; - llListen(929, "", llGetOwner(), ""); - llTextBox(llGetOwner(), "What date to restore?", 929); - } - listen(integer c,string n,key i,string m){ - g_sDate = m; - llSay(0, "Preparing to restore date: "+g_sDate); - UpdateDSRequest(NULL, llHTTPRequest("https://api.zontreck.com/zni/SLKVPStore.php", [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json"], llList2Json(JSON_OBJECT,["op", "restore", "date", g_sDate])), SetDSMeta(["restore"])); - } - http_response(key k, integer s,list m,string b){ - if(HasDSRequest(k)!=-1){ - //llSay(0, "["+(string)s+"]: "+b); - list lMeta = GetMetaList(k); - DeleteDSReq(k); - string sOp = llList2String(lMeta,0); - list lParam = llParseStringKeepNulls(b,[";;",";"],[]); - //llSay(0, "HTTP Response: "+b); - if(sOp == "restore"){ - if(llList2String(lParam,1) == "OK"){ - g_iTotalDB = (integer)llList2String(lParam,2); - llSay(0, "Restore from file to database, successful, preparing to download.\n \n[ Total KVP in database: "+(string)g_iTotalDB+" ]"); - llSay(0, "Preparing to delete all data..."); - UpdateDSRequest(NULL, llKeyCountKeyValue(), SetDSMeta(["count"])); - }else { - llSay(0, "Fatal: Data could not be restored"); - } - }else if(sOp == "download") - { - g_iProcessed++; - text(); - string sJson = llList2String(lParam,2); - //llSay(0, "SERVER: "+sJson); - /*if(llJsonGetValue(sJson,["expire"])!="-1" && llJsonValueType(sJson,["expire"]) == JSON_NUMBER){ - - integer newExpireTime = llGetUnixTime(); - newExpireTime = (newExpireTime+((60*60*24)*30)); - sJson = llJsonSetValue(sJson, ["expire"], (string)newExpireTime); - //llSay(0, "Record is a stallboard, resetting expiretimer"); - //llSay(0, "NEW: "+sJson); - }*/ - //llSay(0, "Set Key ["+llList2String(lParam,1)+"] with value: "+sJson); - llUpdateKeyValue(llList2String(lParam,1), sJson, FALSE, ""); - if(g_iProcessed>=g_iTotal){ - llSay(0, "Finished restoring all data from ZNI Central control. Cooling down before resetting scripts!"); - llSleep(120); - llRegionSay(5, "restore9f"); - llSay(0, "Completed!\n \n[ Have a nice day ]"); - llResetScript(); - return; - } - bootstrap(); - - } - } - } - dataserver(key kID, string sData) - { - if(HasDSRequest(kID)!=-1) - { - list lMeta = GetMetaList(kID); - DeleteDSReq(kID); - string sValue = llGetSubString(sData,2,-1); - llSleep(1); - if(llList2String(lMeta,0)=="count"){ - g_iTotal = (integer)sValue; - if(g_iTotal == 0){ - g_iTotal = 1; - g_iProcessed=1; - llSetText("Erasing KVP Storage\n \n"+Progress(Percent(g_iProcessed,g_iTotal)), <1,0,0>,1); - llRegionSay(5, "restore9f"); - llSay(0, "No Database keys\n \n[ Downloading backup from ZNI KVP Server ]"); - llSleep(30); - g_iTotal = g_iTotalDB; - g_iProcessed=0; - - text(); - bootstrap(); - return; - } - g_iProcessed = 0; - - llSetText("Erasing SL KVP Storage\n \n"+Progress(Percent(g_iProcessed,g_iTotal)), <1,0,0>,1); - UpdateDSRequest(NULL, llKeysKeyValue(0, 1), SetDSMeta(["getkey", 0])); - } else if(llList2String(lMeta,0) == "getkey"){ - integer iKVP = (integer)llList2String(lMeta,1); - iKVP++; - UpdateDSRequest(NULL, llDeleteKeyValue(sValue), SetDSMeta(["delkey", iKVP])); - } else if(llList2String(lMeta,0) == "delkey"){ - integer iKVP = (integer)llList2String(lMeta,1); - g_iProcessed=iKVP; - llSleep(1); - llDeleteKeyValue(sValue); - if(g_iProcessed >= g_iTotal) - { - llSetText("Erasing SL KVP Storage\n \n"+Progress(Percent(g_iProcessed,g_iTotal)), <1,0,0>,1); - llSay(0, "Finished SL erasing all data\n \n[ Rechecking KVP ]"); - - UpdateDSRequest(NULL, llKeyCountKeyValue(), SetDSMeta(["count"])); - return; - } - llSetText("Erasing SL KVP Storage\n \n"+Progress(Percent(g_iProcessed,g_iTotal)), <1,0,0>,1); - UpdateDSRequest(NULL, llKeysKeyValue(0, 1), SetDSMeta(["getkey", iKVP])); - } - } - } -} diff --git a/LSL/raw/Menu.lsl b/LSL/raw/Menu.lsl new file mode 100755 index 0000000..e04a30c --- /dev/null +++ b/LSL/raw/Menu.lsl @@ -0,0 +1,299 @@ +#include "variables.lsl" +#include "functions.lsl" + + +default +{ + state_entry() + { + g_lCheckboxes = ["[ ]", "[X]"]; + + MAIN_MENU_TEXT = HEADER+"Please choose from the following options"; + IMPORT_MENU_TEXT = HEADER+"Enter the ID of the Flash Module which contains the data you wish to import from\n* Flash Module must be of protocol 0x2110b or newer"; + } + + + link_message(integer s,integer n,string m,key i) + { + //llSay(0, llDumpList2String([n,m,i], " ~ ")); + if(n == 0x2E1D) + { + g_iAuthorized=1; + g_kAuthorized=i; + + RestoreFromKVP(); + MainMenu(i); + + } else if(n == 0x1D) + { + g_lSupport = llJson2List(m); + }else if(n == LINK_MENU_TIMEOUT) + { + llInstantMessage(i, "Menu Timed out!"); + if(i==g_kInvLoad){ + g_kInvLoad=NULL; + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "nopic"]),""); + } + } else if(n == LINK_MENU_RETURN) + { + list returnMenu = llParseString2List(m,["|"],[]); + string sIdent = llList2String(returnMenu,0); + string sButton = llList2String(returnMenu,1); + switch(sIdent) + { + case "menu~main":{ + switch(sButton){ + case "Import":{ + GetArbitraryData(i, IMPORT_MENU_TEXT, "main~import"); + break; + } + case "-exit-":{ + llInstantMessage(i, "Menu Closed!"); + llMessageLinked(LINK_THIS, LINK_MENU_REMOVE, "", i); + break; + } + case "Export":{ + llWhisper(5, llList2Json(JSON_OBJECT,["cmd","set_memstick","leasee",g_kLeasedTo,"expire_time",g_iExpireAt,"texture",g_kTexture,"owner",g_kOwner])); + break; + } + case "Lease":{ + // Set + if(g_iFlags&1) + { + llMessageLinked(LINK_SET,0x3E, llList2Json(JSON_OBJECT, ["op", "lease"]), i); + }else { + GetArbitraryData(i, "Who should the board be leased to? \nAccepts: [SLURL, Username, UUID]", "main~adminlease"); + } + break; + } + case "End Lease":{ + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reset"]), ""); + + llInstantMessage(g_kLeasedTo, "Your lease has been terminated by secondlife:///app/agent/"+(string)i+"/about"); + llResetScript(); + break; + } + case "Renew":{ + if(g_iExpireAt == -1) + { + llInstantMessage(g_kLeasedTo, "Your lease timer has been restarted and is no longer indefinite"); + } + llInstantMessage(i, "Renew complete!"); + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "renew"]), ""); + break; + } + case "Set Picture":{ + GetArbitraryData(i, HEADER+"Please input the texture UUID, or you can drag and drop a full permission texture into my inventory by holding CTRL", "menu~settxt"); + + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "pic"]), i); + g_kInvLoad=i; + + break; + } + case "WhoLeased":{ + if(g_kLeasedTo == NULL){ + llSay(0, "Vacant - This board is available to be leased"); + }else{ + llSay(0, "Leased by : secondlife:///app/agent/"+(string)g_kLeasedTo+"/about"); + if(g_kOwner != NULL)llSay(0, "The pony's owner is : secondlife:///app/agent/"+(string)g_kOwner+"/about"); + } + break; + } + case "PermaLease":{ + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "perma"]), ""); + break; + } + case "*RESET*":{ + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reset"]), ""); + llResetScript(); + break; + } + case "TimeRemain":{ + if(g_iExpireAt == -1){ + llSay(0, "No Expiration is set"); + }else { + integer iDifference = g_iExpireAt - llGetUnixTime(); + integer Days = iDifference/ONE_DAY; + iDifference -= (ONE_DAY*Days); + integer Hours = iDifference/60/60; + iDifference -= (Hours*60*60); + integer Minutes = iDifference/60; + iDifference -= (Minutes*60); + + llSay(0, "Time Remaining: "+(string)Days+" days, "+(string)Hours+" hours, "+(string)Minutes+" minutes, "+(string)iDifference+" seconds"); + + } + break; + } + case "Set Owner":{ + GetArbitraryData(i, HEADER+"What is the owner's secondlife name?", "main~owner"); + break; + } + case "MemStick":{ + llGiveInventory(i,"Stall Board Flash Drive [ZNI]"); + break; + } + case "TransferLease":{ + GetArbitraryData(i, HEADER+"Enter the username of the person you want to transfer this lease to", "main~leasetrans"); + break; + } + case "Set Name":{ + GetArbitraryData(i, HEADER+"Enter the name you want displayed on the panel. This is useful when Unicode is showing as question marks. Please only input ASCII.\n \n* To clear the current preference, submit the leave the box empty and hit submit.", "main~name"); + break; + } + case Checkbox(bool(g_iMask & MASK_WHITEFRAME), "White Frame"):{ + g_iMask = mask(TOGGLE, g_iMask, MASK_WHITEFRAME); + + llLinksetDataWrite("mask", (string)g_iMask); + + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + break; + } + case "Reboot":{ + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + break; + } + case Checkbox(bool(g_iMask & MASK_LOGO),"Logo"):{ + g_iMask = mask(TOGGLE, g_iMask, MASK_LOGO); + + llLinksetDataWrite("mask", (string)g_iMask); + + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + break; + } + case Checkbox(bool((g_iMask & MASK_CUSTOM_TEXT_COLOR)), "CustomTxt"): + { + g_iMask = mask(TOGGLE, g_iMask, MASK_CUSTOM_TEXT_COLOR); + + llLinksetDataWrite("mask", (string)g_iMask); + + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + break; + } + case "SetTxtC": + { + Menu(i, "Pick a color, or enter a custom one", ["colormenu"], "CTxt"); + break; + } + default:{ + MainMenu(i); + llSay(0, "Button : "+sButton+" not implemented"); + break; + } + } + break; + } + case "main~import":{ + llMessageLinked(LINK_SET, 0, "Importing Data", "fw_data"); + llRegionSayTo((key)sButton, 0x9f, llList2Json(JSON_OBJECT, ["cmd","retrieve"])); + break; + } + case "main~name":{ + llLinksetDataWrite("name", sButton); + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + MainMenu(i); + break; + } + case "main~adminlease": + { + key kTemp = ""; + if(IsLikelyAvatarID(sButton)) + { + // Avatar ID. + kTemp = sButton; + }else { + // Determine if this is a SLURL + + list lTemp = llParseString2List(sButton, ["/"],[]); + if(llList2String(lTemp,0) == "secondlife:") + { + kTemp = llList2String(lTemp,3); + }else { + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "actlease"]), sButton); + } + } + + if(kTemp != "") + { + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "lease"]), kTemp); + } + break; + } + case "CTxt": + { + llLinksetDataWrite("customtxtcolor", sButton); + + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + MainMenu(i); + break; + } + case "menu~settxt":{ + if(sButton == ""){ + g_kTexture = NULL_KEY; + }else { + g_kTexture = (key)sButton; + + } + llLinksetDataWrite("texture", (string)g_kTexture); + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + break; + } + case "main~owner":{ + if(sButton == ""){ + g_kOwner=NULL_KEY; + llLinksetDataWrite("owner", (string)g_kOwner); + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + MainMenu(i); + return; + } + + llMessageLinked(LINK_SET, 0x3E, llList2Json(JSON_OBJECT, ["op", "setowner", "id", i]), sButton); + //UpdateDSRequest(NULL, llRequestUserKey(sButton), SetDSMeta(["set_owner"])); + //g_kOwner = (key)sButton; + //SavePayload(); + //MainMenu(i); + break; + } + case "main~leasetrans":{ + if(sButton == ""){ + // Cancel transfer + if(g_kTransferID != NULL_KEY){ + llLinksetDataWrite("name", ""); + } + g_kTransferID=NULL_KEY; + g_iTransferTimeout=-1; + + llLinksetDataWrite("transfer", g_kTransferID); + llLinksetDataWrite("transfer_expire", (string)g_iTransferTimeout); + + llMessageLinked(LINK_SET,0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + MainMenu(i); + return; + } + //llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op","request", "get", "transfer", "var", sButton])); + g_sPreferredName="*RESERVED*"; + g_iTransferTimeout = llGetUnixTime()+(2*ONE_DAY); + + llLinksetDataWrite("name", g_sPreferredName); + g_kTransferID=sButton; + llLinksetDataWrite("transfer", sButton); + llLinksetDataWrite("transfer_expire", (string)g_iTransferTimeout); + llMessageLinked(LINK_SET,0x3E, llList2Json(JSON_OBJECT, ["op", "reboot"]), ""); + + + llSay(0, "Lease transfer has been initiated. secondlife:///app/agent/"+(string)g_kTransferID+"/about has 48 hours to touch this board to finalize the transfer process"); + llInstantMessage(g_kTransferID, "A lease is being transfered to you. To confirm, you must click this board within 48 hours. My position is : "+(string)llGetPos()); + + MainMenu(i); + break; + } + } + } + } +} \ No newline at end of file diff --git a/LSL/raw/Notifier.lsl b/LSL/raw/Notifier.lsl new file mode 100755 index 0000000..8a21382 --- /dev/null +++ b/LSL/raw/Notifier.lsl @@ -0,0 +1,73 @@ +#include "variables.lsl" +#include "functions.lsl" + + +default +{ + link_message(integer s,integer n,string m,key i){ + if(n == 0x4C9F) + { + integer iDays = (integer)llJsonGetValue(m,["days"]); + integer iMask = (integer)llJsonGetValue(m,["mask"]); + + // NOW - Check days remaining + if(!(iMask & 32)) + { + if(iDays <= 14) + { + llInstantMessage(i, "/!\\ ATTENTION /!\\\n \n [ 14 days remain on your stall ]"); + iMask += 32; + } + } + + if(!(iMask & 1)){ + if(iDays <= 7){ + llInstantMessage(i, "/!\\ ATTENTION /!\\\n \n [ 7 days remain on your stall ]"); + iMask+=1; + } + } + if(!(iMask & 2)){ + if(iDays <= 6){ + llInstantMessage(i, "/!\\ ATTENTION /!\\\n \n [ 6 days remain on your stall ]"); + iMask+=2; + } + } + + if(!(iMask & 4)){ + if(iDays <= 3){ + llInstantMessage(i, "/!\\ ATTENTION /!\\\n \n [ 3 days remaining on your stall, please renew soon ]"); + iMask += 4; + } + } + + if(!(iMask & 8)){ + if(iDays <= 2){ + llInstantMessage(i, "/!\\ ATTENTION /!\\\n \n [ 2 days remaining on your stall, please renew soon ]"); + iMask += 8; + } + } + + if(!(iMask & 16)){ + if(iDays <= 1){ + llInstantMessage(i, "/!\\ ATTENTION /!\\\n \n [ Your lease will expire within 24 hours ]"); + iMask += 16; + } + } + + + llMessageLinked(LINK_SET, 0x4C9F1, llList2Json(JSON_OBJECT, ["mask", iMask]), i); + } else if(n == 0x3E) + { + if(llJsonGetValue(m,["op"]) == "pay") + { + integer L = (integer)llJsonGetValue(m,["L"]); + llGiveMoney(i, L); + } else if(llJsonGetValue(m,["op"]) == "money_enabled") + { + // OK + if(!(llGetPermissions()&PERMISSION_DEBIT)) + llRequestPermissions(llGetOwner(), PERMISSION_DEBIT); + } + } + } +} \ No newline at end of file diff --git a/LSL/raw/Server.lsl b/LSL/raw/Server.lsl new file mode 100755 index 0000000..f76c3c3 --- /dev/null +++ b/LSL/raw/Server.lsl @@ -0,0 +1,112 @@ +#include "Common.lsl" +#include "ZNICommon.lsl" + +integer SERVER_CHANNEL = 0x9F1C; + +list g_lAdminTag; +list g_lManagerTag; + +string g_sTextureSet; +integer g_iFlags; +integer g_iPricePerDay; + +default +{ + state_entry() + { + llListen(SERVER_CHANNEL, "", "", ""); + + UpdateDSRequest(NULL, llGetNotecardLine("config", 0), SetDSMeta(["read",0])); + } + + listen(integer c,string n,key i,string m) + { + if(llJsonGetValue(m,["op"]) == "get_admins") + { + llRegionSayTo(i,c,llList2Json(JSON_OBJECT, ["op", "set_admins", "adm", llList2Json(JSON_ARRAY, g_lAdminTag)])); + } else if(llJsonGetValue(m,["op"]) == "get_managers") + { + llRegionSayTo(i,c,llList2Json(JSON_OBJECT, ["op", "set_managers", "mgr", llList2Json(JSON_ARRAY, g_lManagerTag)])); + } else if(llJsonGetValue(m,["op"]) == "get_flags") + { + llRegionSayTo(i,c,llList2Json(JSON_OBJECT, ["op", "set_flags", "flag", g_iFlags, "ppd", g_iPricePerDay])); + } else if(llJsonGetValue(m,["op"]) == "get_textures") + { + llRegionSayTo(i,c,llList2Json(JSON_OBJECT, ["op", "set_textures", "txt", g_sTextureSet])); + } + } + + changed(integer c){ + if(c & CHANGED_INVENTORY) + { + llResetScript(); + } + } + + dataserver( key queryid, string data ) + { + if(HasDSRequest(queryid) != -1) + { + list lMeta = GetMetaList(queryid); + + if(llList2String(lMeta,0) == "read") + { + if(data==EOF) + { + DeleteDSReq(queryid); + llSay(0, "Server is now ready"); + }else{ + integer iLine = (integer)llList2String(lMeta,1); + + if(data=="" || llGetSubString(data,0,0)=="#")jump next; + + list lTmp = llParseStringKeepNulls(data,[" = "], []); + if(llList2String(lTmp,0) == "Admin") + { + g_lAdminTag += [llList2String(lTmp,1)]; + }else if(llList2String(lTmp,0) == "Manager") + { + g_lManagerTag += [llList2String(lTmp,1)]; + } else if(llList2String(lTmp,0) == "TextureLogo") + { + g_sTextureSet = llJsonSetValue(g_sTextureSet, ["logo"], llList2String(lTmp,1)); + } else if(llList2String(lTmp,0) == "TextureOffline") + { + g_sTextureSet = llJsonSetValue(g_sTextureSet, ["offline"], llList2String(lTmp,1)); + } else if(llList2String(lTmp,0) == "TextureOnline") + { + g_sTextureSet = llJsonSetValue(g_sTextureSet, ["online"], llList2String(lTmp,1)); + } else if(llList2String(lTmp,0) == "TextureAvailable") + { + g_sTextureSet = llJsonSetValue(g_sTextureSet, ["available"], llList2String(lTmp,1)); + } else if(llList2String(lTmp,0) == "TextureAvailDeveloper") + { + g_sTextureSet = llJsonSetValue(g_sTextureSet, ["dev"], llList2String(lTmp,1)); + }else if(llList2String(lTmp,0) == "NoTexture") + { + g_sTextureSet = llJsonSetValue(g_sTextureSet, ["none"], llList2String(lTmp,1)); + } else if(llList2String(lTmp,0) == "SelfLease") + { + integer iEnabled = (integer)llList2String(lTmp,1); + g_iFlags = mask(iEnabled, g_iFlags, 1); + } else if(llList2String(lTmp,0) == "AllowTransferLeases") + { + integer iEnabled = (integer)llList2String(lTmp,1); + g_iFlags = mask(iEnabled, g_iFlags, 2); + }else if(llList2String(lTmp,0) == "LeaseRequiresPayment") + { + integer iEnabled = (integer)llList2String(lTmp,1); + g_iFlags = mask(iEnabled, g_iFlags, 4); + } else if(llList2String(lTmp,0) == "LeasePricePerDay") + { + g_iPricePerDay = (integer)llList2String(lTmp,1); + } + + @next; + iLine++; + UpdateDSRequest(queryid, llGetNotecardLine("config", iLine), SetDSMeta(["read", iLine])); + } + } + } + } +} \ No newline at end of file diff --git a/LSL/raw/server_config.conf b/LSL/raw/server_config.conf new file mode 100755 index 0000000..776313b --- /dev/null +++ b/LSL/raw/server_config.conf @@ -0,0 +1,22 @@ + +Admin = BPF Stable Mistress +Admin = BPF Stable Master +Admin = BPF Manager + +Manager = BPF Trainer +Manager = BPF Senior Trainer + +TextureLogo = 8dcd4a48-2d37-4909-9f78-f7a9eb4ef903 +TextureOffline = 62f26398-4d32-15fb-38d8-d59e31dd0a86 +TextureOnline = 69fdb503-d13b-8b21-98c9-70011db399d3 +TextureAvailable = c4ec7078-575f-a6d2-55b3-374d20434873 +TextureAvailDeveloper = c4ec7078-575f-a6d2-55b3-374d20434873 +NoTexture = a67ed6f6-dca8-4ce4-a338-13ac5f32e9d0 + + +# Admin or Manager must lease the object to the person +SelfLease = 0 +AllowTransferLeases = 0 + +LeaseRequiresPayment = 0 +LeasePricePerDay = 1 \ No newline at end of file diff --git a/LSL/raw/test.lsl b/LSL/raw/test.lsl deleted file mode 100644 index 12f1a49..0000000 --- a/LSL/raw/test.lsl +++ /dev/null @@ -1,11 +0,0 @@ -#include "variables.lsl" -#include "functions.lsl" - - -default -{ - state_entry() - { - - } -} \ No newline at end of file diff --git a/LSL/src/Board Menu [ZNI].lsl b/LSL/src/Board Menu [ZNI].lsl new file mode 100644 index 0000000..35ea3ff --- /dev/null +++ b/LSL/src/Board Menu [ZNI].lsl @@ -0,0 +1,4 @@ +#include "../external/CommonLSL/variables.lsl" +#include "../external/CommonLSL/functions.lsl" + +#include "../raw/Menu.lsl" \ No newline at end of file diff --git a/LSL/src/Board Notifier [ZNI].lsl b/LSL/src/Board Notifier [ZNI].lsl new file mode 100644 index 0000000..fc82fb8 --- /dev/null +++ b/LSL/src/Board Notifier [ZNI].lsl @@ -0,0 +1,4 @@ +#include "../external/CommonLSL/variables.lsl" +#include "../external/CommonLSL/functions.lsl" + +#include "../raw/Notifier.lsl" \ No newline at end of file diff --git a/LSL/src/Board [ZNI].lsl b/LSL/src/Board [ZNI].lsl index 2e52f18..a3367f6 100644 --- a/LSL/src/Board [ZNI].lsl +++ b/LSL/src/Board [ZNI].lsl @@ -1,4 +1,4 @@ #include "../external/CommonLSL/variables.lsl" #include "../external/CommonLSL/functions.lsl" -#include "../raw/Board.lsl" \ No newline at end of file +#include "../raw/Logic.lsl" \ No newline at end of file diff --git a/assets/textures/logo.png b/assets/textures/logo.png deleted file mode 100644 index 1f807c8..0000000 Binary files a/assets/textures/logo.png and /dev/null differ