// Partners Terminal 0.2 // All rights reserved by Dreamland Metaverse, 2014 // configuration parameters //string URL = "http://grid./ssl/"; // not SSL string URL = "https://.dreamlandmetaverse.com/"; // SSL string PW = ""; list PAR = [ ]; float TIMEOUT = 10.0; // seconds vector COLOR = <1.000, 0.255, 0.212>; float ALPHA = 0.9; // variables key id1; // 1st user string name1; // 1st user key id2; // 2nd user string name2; // 2nd user key id3; // partner of 2nd user string name3; // partner of 2nd user key http_request_id1; // get_partner; 1st user key http_request_id2; // begin: get_partner; 2nd user key http_request_id3; // begin: set_partner; 1st user key http_request_id4; // begin: set_partner; 2nd user key http_request_id5; // dissolve: set_partner; 1st user key http_request_id6; // dissolve: set_partner; 2nd user // default state default { state_entry() { llSetText("Click here to begin or\ndissolve partnership", COLOR, ALPHA); } touch_start(integer num_detected) { id1 = llDetectedKey(0); name1 = llDetectedName(0); string req = URL + "/get_partner.php?PW=" + PW + "&User=" + (string)id1; http_request_id1 = llHTTPRequest(req, PAR, ""); } // called for all HTTP responses of all states http_response(key request_id, integer status, list metadata, string body) { if (request_id == http_request_id1) { // get_partner; 1st user id2 = (key)body; name2 = llGetDisplayName(id2); if (!name2) name2 = (string)id2; if (id2 == NULL_KEY) { llSay(0, name1 + ", you have no partnership at the moment"); state begin_partnership; } else { llSay(0, name1 + ", your partner is " + name2); state dissolve_partnership; } } else if (request_id == http_request_id2) { // begin: get_partner; 2nd user id3 = (key)body; name3 = llGetDisplayName(id3); if (!name3) name3 = (string)id3; if (id3 == NULL_KEY) { string req = URL + "/set_partner.php?PW=" + PW + "&User=" + (string)id1 + "&Partner=" + (string)id2; http_request_id3 = llHTTPRequest(req, PAR, ""); } else { llSay(0, name2 + ", you have " + name3 + " as partner already"); state default; } } else if (request_id == http_request_id3) { // begin: set_partner; 1st user string req = URL + "/set_partner.php?PW=" + PW + "&User=" + (string)id2 + "&Partner=" + (string)id1; http_request_id4 = llHTTPRequest(req, PAR, ""); } else if (request_id == http_request_id4) { // begin: set_partner; 2nd user llSay(0, name1 + " and " + name2 + " are partners, now"); state default; } else if (request_id == http_request_id5) { // dissolve: set_partner; 1st user string req = URL + "/set_partner.php?PW=" + PW + "&User=" + (string)id2 + "&Partner=" + (string)NULL_KEY; http_request_id6 = llHTTPRequest(req, PAR, ""); } else if (request_id == http_request_id6) { // dissolve: set_partner; 2nd user llSay(0, name1 + " and " + name2 + " are not partners anymore"); state default; } else { // unknown response llOwnerSay("Error: unknown response"); } } } // begin partnership state begin_partnership { state_entry() { llSetText("Future partner of\n" + name1 + "\nplease click here", COLOR, ALPHA); llSetTimerEvent(TIMEOUT); } timer() { llSay(0, "timeout"); llSetTimerEvent(0.0); state default; } touch_start(integer num_detected) { llSetTimerEvent(0.0); id2 = llDetectedKey(0); name2 = llDetectedName(0); if ((string)id1 == (string)id2) { llSay(0, "canceled"); state default; } // check if new partner has no partnership string req = URL + "/get_partner.php?PW=" + PW + "&User=" + (string)id2; http_request_id2 = llHTTPRequest(req, PAR, ""); state default; } } // dissolve partnership state dissolve_partnership { state_entry() { llSetText(name1 + ", click here,\nif you want to dissolve\nyour current partnership", COLOR, ALPHA); llSetTimerEvent(TIMEOUT); } timer() { llSay(0, "timeout"); llSetTimerEvent(0.0); state default; } touch_start(integer num_detected) { llSetTimerEvent(0.0); id2 = llDetectedKey(0); name2 = llDetectedName(0); if ((string)id1 != (string)id2) { llSay(0, "canceled"); state default; } string req = URL + "/set_partner.php?PW=" + PW + "&User=" + (string)id1 + "&Partner=" + (string)NULL_KEY; http_request_id5 = llHTTPRequest(req, PAR, ""); state default; } }