diff --git a/LSL/raw/tree.lsl b/LSL/raw/tree.lsl index c5a9a39..382bdff 100644 --- a/LSL/raw/tree.lsl +++ b/LSL/raw/tree.lsl @@ -9,7 +9,10 @@ float g_fMaxGrowth = 150.0; // Maximum growth value integer g_iLastGrowthStep = 0; integer g_iLastUsedWater; - +integer g_iChannel; +integer g_iListen; +key g_kAv; +string API_SERVER; integer g_iTree; integer g_iTreeStump; @@ -64,6 +67,8 @@ setText() { llSetText("Water: " + (string)g_iTotalWater+"%\nStage: " + (string)g_iTreeStage + "/1" + "\nProgress: " + (string)g_iTreeGrowth+"%\n \n \n \n \n \n \n \n", <1,1,1>,1); } +integer g_iLastOwnerDev=1; + default { state_entry() @@ -90,17 +95,72 @@ default llSay(0, "I am now ready to be packaged"); llListen(global_ingredients, "", "", ""); + #ifdef DEBUG llSay(0, "DEBUG MODE DETECTED.\n\n[ STARTING TIMERS ]"); llSetTimerEvent(1); + #endif setText(); } + changed(integer c) { + if(c&CHANGED_OWNER) { + if(!g_iLastOwnerDev)return; + + g_iLastOwnerDev=0; + + + /*g_iTreeGrowth=0; + g_iTreeStage=0; + InitialAppearance(); + g_iTotalWater=100;*/ + llSetTimerEvent(2); + + setText(); + } + } + + link_message(integer s,integer n,string m,key i) { + if(n == 0x004f) { + API_SERVER = DecipherService(m, "api") + "/zni"; + } + } + + on_rez(integer t) { + if(t == 0 && llGetObjectName() == SAPLING_NAME) { + llSetObjectName(TREE_NAME); + } + } + + touch_start(integer t) { + // Show the menu if done growing + if(g_iTreeStage == 1 && g_iTreeGrowth >= 100) { + g_iChannel = llRound(llFrand(0xFFFF)); + g_iListen = llListen(g_iChannel, "", llDetectedKey(0), ""); + + llDialog(llDetectedKey(0), "Tree\n=====\nDo you want to chop the tree down?\n\n* Tools are not yet implemented", ["Yes", "No"], g_iChannel); + } + } + + http_response(key k, integer s, list m, string b) { + list lPar = llParseString2List(b, [";;"], []); + if(llList2String(lPar,0) == "GetServerID") { + string sJson = llList2String(lPar,1); + g_sServerID = llJsonGetValue(sJson, ["id"]); + requestProductForDelivery(SAPLING_NAME, g_kAv); + } + } + timer() { if(llGetUnixTime() > g_iLastUsedWater+5) llWhisper(global_ingredients, xtea_encrypt_string(llList2Json(JSON_OBJECT, ["cmd", "query"]))); - - if(llGetUnixTime() > g_iLastGrowthStep + 120) { + + integer iGrowTime = 120; + #ifdef DEBUG + iGrowTime = 1; + #endif + + if(llGetUnixTime() > g_iLastGrowthStep + iGrowTime) { if(g_iTotalWater == 0) return; @@ -117,13 +177,18 @@ default setText(); iRoll = llRound(llFrand(100)); - if((iRoll%2)==0) { + if(iRoll >= 75) { g_iTotalWater--; if(g_iTotalWater <= 0) g_iTotalWater = 0; setText(); } + if(g_iTreeStage == 1 && g_iTreeGrowth == 100) { + llSetTimerEvent(0); + return; + } + if(g_iTreeGrowth == 100) { g_iTreeStage++; g_iTreeGrowth = 0; @@ -133,26 +198,64 @@ default llSetLinkPrimitiveParams(g_iSapling, [PRIM_SIZE,ZERO_VECTOR]); } - if(g_iTreeStage == 1 && g_iTreeGrowth == 100) { - llSetTimerEvent(0); - } } } } + object_rez(key kID) { + llSleep(2); + llRegionSayTo(kID, getIngredientChannel(kID), xtea_encrypt_string(llList2Json(JSON_OBJECT, [ + "cmd", "init" + ]))); + + llSleep(1); + llRegionSayTo(kID, getIngredientChannel(kID), xtea_encrypt_string(llList2Json(JSON_OBJECT, [ + "cmd", "deposit", + "type", "Large Log", + "amount", 1, + "particle", "<0.502, 0.251, 0.000>", + "texture", NULL_KEY, + "dies", 1 + ]))); + + llRemoveInventory("Service Daemon [AC]"); + llRemoveInventory(llGetScriptName()); + } + listen(integer c,string n,key i,string m) { - string sJson = xtea_decrypt_string(m); - if(llJsonGetValue(sJson, ["cmd"]) == "reply") { - if(llJsonGetValue(sJson, ["ingredient"]) == "Water") { - if(g_iTotalWater <= 75 && llGetUnixTime() > g_iLastUsedWater + 5) { + if(c == global_ingredients) { - g_iTotalWater += 25; - g_iLastUsedWater = llGetUnixTime(); - llRegionSayTo(i, getIngredientChannel(i), xtea_encrypt_string(llList2Json(JSON_OBJECT, ["cmd", "use", "id", llJsonGetValue(sJson, ["id"])]))); + string sJson = xtea_decrypt_string(m); + if(llJsonGetValue(sJson, ["cmd"]) == "reply") { + if(llJsonGetValue(sJson, ["ingredient"]) == "Water") { + if(g_iTotalWater <= 75 && llGetUnixTime() > g_iLastUsedWater + 5) { - setText(); + g_iTotalWater += 25; + g_iLastUsedWater = llGetUnixTime(); + llRegionSayTo(i, getIngredientChannel(i), xtea_encrypt_string(llList2Json(JSON_OBJECT, ["cmd", "use", "id", llJsonGetValue(sJson, ["id"])]))); + + setText(); + } } } + }else if( c == g_iChannel) { + + llListenRemove(g_iListen); + if(m == "Yes") { + llRezObject("Tree Log [AC]", llGetPos()+<0,0,0.5>, ZERO_VECTOR, ZERO_ROTATION, 1990); + + llSetLinkAlpha(g_iTreeStump, 1, ALL_SIDES); + llSetLinkAlpha(g_iTree, 0, ALL_SIDES); + + llSetLinkPrimitiveParams(g_iTree, [PRIM_POS_LOCAL, ZERO_VECTOR, PRIM_SIZE, ZERO_VECTOR]); + + // Deliver 1 sapling, additional ones need to be bought + llHTTPRequest(API_SERVER + "/Get_Server_ID.php", [HTTP_MIMETYPE, "application/json", HTTP_METHOD, "POST"], xtea_encrypt_string(llList2Json(JSON_OBJECT, [ + "psk", SERVER_PSK, + "name", "Farming" + ]))); + //requestProductForDelivery("Tree A Sapling [AC]"); + } } } } \ No newline at end of file diff --git a/LSL/src/Tree [AC].lsl b/LSL/src/Tree [AC].lsl index ef6d0f7..9564766 100644 --- a/LSL/src/Tree [AC].lsl +++ b/LSL/src/Tree [AC].lsl @@ -1 +1,5 @@ +//#define DEBUG 1 +#define SAPLING_NAME "Tree A Sapling [AC]" +#define TREE_NAME "Tree A [AC]" + #include "../raw/tree.lsl" \ No newline at end of file