StallBoard/LSL/raw/Board.lsl

874 lines
No EOL
34 KiB
Text
Executable file

#include "MasterFile.lsl"
#define DEVELOPER 0
integer g_iWaitFor = 0;
key FFF_CIRCLE_LOGO = "f063237e-429b-5e02-dbfb-8a2a69535cdc";
key OFFLINE_TEXTURE = "62f26398-4d32-15fb-38d8-d59e31dd0a86";
key ONLINE_TEXTURE = "69fdb503-d13b-8b21-98c9-70011db399d3";
#if DEVELOPER == 0
key AVAILABLE = "8833aa83-b7f1-5c40-f4e8-fdf6d397ef1b";
#else
key AVAILABLE = "8833aa83-b7f1-5c40-f4e8-fdf6d397ef1b";
#endif
key NO_TEXTURE = "a67ed6f6-dca8-4ce4-a338-13ac5f32e9d0";
list g_lAdminTag = ["FFF Stable Mistress", "FFF Stable Master"];
list g_lManagerTag = ["FFF Trainer", "FFF Senior Trainer"];
integer LINK_MENU_DISPLAY = 300;
integer LINK_MENU_REMOVE = 310;
integer LINK_MENU_RETURN = 320;
integer LINK_MENU_TIMEOUT = 330;
string g_sDate;
list MAIN_MENU_BUTTONS = ["Reboot"];
string MAIN_MENU_TEXT = "";
string IMPORT_MENU_TEXT = "";
key g_kInvLoad;
key g_kTransferID=NULL_KEY;
integer g_iTransferTimeout;
integer g_iHaveKVP = 0;
integer g_iLastKVPTry;
#define THIRTY_DAYS (((60*60)*24)*30)
#define ONE_DAY ((60*60)*24)
string HEADER = "FFF Stall Board\n[By ZNI Creations]\nVersion 3.9.0430220029 (Apr 30, 2022)\n \n";
integer g_iAuthorized;
key g_kAuthorized;
key g_kLeasedTo=NULL_KEY;
key g_kTexture=NULL_KEY;
integer g_iExpireAt;
key g_kOwner=NULL_KEY;
string g_sPreferredName;
integer g_iWhiteFrame = FALSE;
integer g_iNotification;
string g_sName;
string g_sDisplayName;
integer g_iOnline;
list g_lSupport = [];
MainMenu(key kAv)
{
list lAppend = [];
// Check against ZNI Support roster
integer iAdmin=0;
string sAppend;
string sTag = llList2String(llGetObjectDetails(kAv,[OBJECT_GROUP_TAG]),0);
if(llListFindList(g_lSupport, [(string)kAv])!=-1 || llListFindList(g_lAdminTag, [sTag])!=-1){
if(g_kLeasedTo!=NULL)lAppend += ["PermaLease"];
iAdmin=1;
lAppend += ["Import", "Export", "MemStick"];
}
if(llListFindList(g_lManagerTag, [sTag])!=-1)iAdmin=1;
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*"];
sAppend += "\n* CustomTxt, and SetTxtC relate to custom text colors.";
}
if(g_kLeasedTo != NULL){
lAppend += ["TimeRemain", "WhoLeased"];
}
if(g_kOwner!=NULL)sAppend+="\nOwner is : secondlife:///app/agent/"+(string)g_kOwner+"/about";
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);
}
GetArbitraryData(key kAv, string sText, string sIdent){
llMessageLinked(LINK_THIS, LINK_MENU_DISPLAY, llDumpList2String([sIdent, "FALSE", sText, ""], "|"), kAv);
}
string StripResident(string a)
{
list lParam = llParseString2List(a,[" ", "."],[]);
if(llGetListLength(lParam)==0 || llGetListLength(lParam)==1)return a;
if(llToLower(llList2String(lParam,1)) == "resident"){
lParam = llDeleteSubList(lParam,1,1);
}else return a;
return llDumpList2String(lParam, " ");
}
Text(){
string sColor = GetColorStr(g_iWhiteFrame);
g_sName = StripResident(g_sName);
if(g_sPreferredName == ""){
if(g_sDisplayName != g_sName)
llMessageLinked(LINK_SET, 0,"<!c="+sColor+">"+ llGetSubString(g_sDisplayName+" ("+g_sName+")",0,23), "fw_data");
else
llMessageLinked(LINK_SET,0,"<!c="+sColor+">"+llGetSubString(g_sName,0,23),"fw_data");
} else llMessageLinked(LINK_SET,0,"<!c="+sColor+">"+g_sPreferredName, "fw_data");
}
CleanInventory()
{
list lDefaults = ["Board [ZNI]", "Dialog Module", "Text", "FFF Stall Board Flash Drive [ZNI]", "Update Module [ZNI]"];
integer i=0;
integer end = llGetInventoryNumber(INVENTORY_ALL);
for(i=0;i<end;i++){
string sName = llGetInventoryName(INVENTORY_ALL,i);
if(llListFindList( lDefaults, [sName] ) == -1) {
llRemoveInventory(sName);
i=-1;
end = llGetInventoryNumber(INVENTORY_ALL);
}
}
}
integer g_iLogo=1;
vector g_vCustomColorText;
integer g_iCustomTextColor=FALSE;
SavePayload(){
llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op", "request", "get", "kvp_store", "var", "$.FFF."+llGetObjectDesc(), "val", llList2Json(JSON_OBJECT, ["lease", g_kLeasedTo, "texture", g_kTexture, "expire", g_iExpireAt, "owner", g_kOwner, "notif", g_iNotification, "name", g_sPreferredName, "whiteframe", g_iWhiteFrame, "logo", g_iLogo, "transfer", g_kTransferID, "transfer_expire", g_iTransferTimeout, "customtxtcolor", g_vCustomColorText, "usecustomtxt", g_iCustomTextColor])]));
}
DeletePayload(){
llRegionSay(0x99f9, llList2Json(JSON_OBJECT, ["op", "request", "get", "kvp_del", "var", "$.FFF."+llGetObjectDesc()]));
}
string GetColorStr(integer iWhite)
{
if(g_iCustomTextColor){
return (((string)g_vCustomColorText.x)+","+((string)g_vCustomColorText.y)+","+((string)g_vCustomColorText.z));
}else {
if(iWhite)return "0,0,0.5";
else return "white"; // black frame
}
}
default
{
state_entry()
{
g_lCheckboxes = ["[ ]", "[X]"];
if(llGetObjectDesc()==""||llGetObjectDesc()=="(No Description)"){
llSay(0, "Please wait - Requesting assignment of a unique datastorage ID from ZNI Creations");
llSetObjectDesc((string)llGenerateKey());
llSay(0, "ID assigned. Please note : If you are moving a board, without using a Memory Stick, simply set the object description to match that of the old board and reset my scripts.");
}
CleanInventory();
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";
llMessageLinked(LINK_SET,0,"","fw_reset");
}
link_message(integer s,integer n,string m,key i){
if(i == "fw_ready")
{
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");
#if DEVELOPER == 1
g_iWaitFor=llRound(llFrand(20));
#else
g_iWaitFor = llRound(llFrand(120));
#endif
llSetTimerEvent(1);
}
}
timer(){
g_iWaitFor--;
llMessageLinked(LINK_SET,0,"Startup in : "+(string)g_iWaitFor, "fw_data");
if(g_iWaitFor == -1){
llMessageLinked(LINK_SET,0,"Starting up", "fw_data");
llSetTimerEvent(0);
state boot;
}
}
changed(integer t){
if(t&CHANGED_REGION_START){
state reboot;
}
}
on_rez(integer i){
state reboot;
}
}
state off{
state_entry(){
llMessageLinked(LINK_SET, 0, "<!c=red>Currently Offline", "fw_data");
}
changed(integer t){
if(t&CHANGED_REGION_START){
state reboot;
}
}
on_rez(integer i){
state reboot;
}
}
state reboot
{
state_entry(){
state default;
}
}
state boot
{
state_entry(){
if(g_iLogo){
llSetLinkTexture(LINK_ROOT,FFF_CIRCLE_LOGO,2);
llSetLinkColor(LINK_ROOT, <1,1,1>,2);
}else {
llSetLinkTexture(LINK_ROOT,TEXTURE_TRANSPARENT,2);
}
//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.
llSetLinkPrimitiveParams(LINK_ROOT, [PRIM_FULLBRIGHT, 0, FALSE]); // Eyesore alert
llSetLinkTexture(LINK_ROOT, AVAILABLE, 4);
llSetLinkColor(LINK_ROOT, <1,1,1>,4);
llListen(0x9f, "", "", "");
llListen(70, "", "", ""); // old group server channels
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);
llSetTimerEvent(600);
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);
#if DEVELOPER == 0
llMessageLinked(LINK_SET, 0, "<!c=red>Loading... Patience","fw_data");
#else
llMessageLinked(LINK_SET,0,(string)llGetFreeMemory()+" bytes free", "fw_data");
#endif
}
if(g_iWhiteFrame){
llMessageLinked(LINK_SET, 0, "c="+GetColorStr(TRUE)+"; f=03812794-535b-f546-6171-6bec5bf399be", "fw_conf");
llSetLinkColor(LINK_ROOT, <1,1,1>, 0);
}
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()]));
g_iHaveKVP=0;
g_iLastKVPTry=llGetUnixTime();
}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]));
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, "<!c=red>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_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;
}
}
}
}
on_rez(integer i){
state reboot;
}
listen(integer c,string n,key i,string m){
if(c==0x9f)
{
if(llJsonGetValue(m,["target"]) == (string)llGetKey())
{
string sPayload = llJsonGetValue(m,["payload"]);
g_kLeasedTo = (key)llJsonGetValue(sPayload, ["lease"]);
g_kTexture = (key)llJsonGetValue(sPayload, ["texture"]);
g_iExpireAt = (integer)llJsonGetValue(sPayload, ["expire"]);
g_kOwner = (key)llJsonGetValue(sPayload, ["owner"]);
if(g_kOwner == "NONE")g_kOwner = NULL_KEY;
g_kTransferID=NULL_KEY;
g_iLogo=1;
SavePayload();
//llSay(0, "Data has been imported! Rebooting...");
state reboot;
}
} else if(c == 5){
if(m == "shutdown"){
llSetTimerEvent(0);
} else if(m == "reboot"){
if(g_kLeasedTo!=NULL_KEY)
SavePayload();
llSleep(10);
state reboot;
} else if(m == "restore9f"){
llResetScript(); // immediately shut off and reset the script to initiate a full system restore.
} else if(m == "backup"){
llSleep(llFrand(20));
if(g_kLeasedTo != NULL_KEY)
SavePayload();
} else if(m == "replacedie"){
list lD = llGetObjectDetails(i, [OBJECT_DESC]);
if(llList2String(lD,0)==llGetObjectDesc())llDie();
}
}else if(c == 70)
{
// Parse!
list lP = llParseStringKeepNulls(m,["%"],[]);
key kBoard = (key)llList2String(lP,0);
if(kBoard == llGetKey()){
key kAv = (key)llList2String(lP,2);
if(llList2String(lP,3) == "yg1"){
g_iAuthorized = 1;
g_kAuthorized = kAv;
//llSay(0, "authorization discovered");
MainMenu(g_kAuthorized);
}else {
//llSay(0, "authorization rejected");
}
}
} else if(c == 0x99f9){
//llSay(0, m);
if(llJsonGetValue(m,["op"])=="reply")
{
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);
}
} 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 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, "<!c=green>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, "<!c=red>Restored Information", "fw_data");
llSleep(10);
state rebootfast;
}
}
}
touch_start(integer i)
{
if(!g_iHaveKVP){
llRegionSayTo(llDetectedKey(0), 0, "/!\\ WARNING: The board is not done loading yet, please be patient");
return;
}
if(g_kTexture!=NULL && g_kLeasedTo == NULL){
if(llSameGroup(llDetectedKey(0))){
g_kLeasedTo = llDetectedKey(0);
state reboot;
return;
}else{
llSay(0, "Group tag is required to lease");
llResetScript(); // refuse to lease
}
}
if(g_kTransferID!=NULL && g_kTransferID == llDetectedKey(0)){
g_kLeasedTo = llDetectedKey(0);
llWhisper(0, "Transfer Completed");
g_kTransferID=NULL;
g_iTransferTimeout = 0;
g_sPreferredName="";
SavePayload();
llSleep(10);
state rebootfast;
return;
}
llRegionSay(70, llDumpList2String(["checkgroup", "menu", llDetectedKey(0)], "%"));
}
link_message(integer s,integer n,string m,key i)
{
if(n == LINK_MENU_TIMEOUT)
{
llInstantMessage(i, "Menu Timed out!");
if(i==g_kInvLoad){
llAllowInventoryDrop(FALSE);
}
} 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
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":
{
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="<!c=red>*RESERVED*";
SavePayload();
MainMenu(i);
break;
}
}
}
}
http_response(key k,integer s,list m,string b){
if(HasDSRequest(k)!=-1){
list lMeta = GetMetaList(k);
DeleteDSReq(k);
list lPar = llParseStringKeepNulls(b,[";;"],[]);
if(llList2String(lPar,0)=="GetSupport"){
g_lSupport = llParseString2List(llList2String(lPar,1), ["~"],[]);
}
}
}
}
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");
state boot;
}
}