|
|
Line 1: |
Line 1: |
− | <source lang="lsl"> | + | <source lang=php> |
− | //*********************
| + | <?php |
− | //****from notecard****
| + | function foo($bar) { |
− | //*********************
| + | echo "yes, genshi works!"; |
− | integer intchannel;
| + | |
− | integer paramchannel;
| + | |
− | integer scanrate;
| + | |
− | integer scanrange;
| + | |
− | integer salt;
| + | |
− | integer certificate;
| + | |
− | float logrange;
| + | |
− | float lograngewarning;
| + | |
− | string url;
| + | |
− | string sitetitle;
| + | |
− | vector textcolor;
| + | |
− | //*********************
| + | |
− | | + | |
− | | + | |
− | //*********************
| + | |
− | //*****avatar vars*****
| + | |
− | //*********************
| + | |
− | key av_key;
| + | |
− | string username;
| + | |
− | string av_name;
| + | |
− | string av_surname;
| + | |
− | string av_created;
| + | |
− | string av_payinfo;
| + | |
− | //*********************
| + | |
− | | + | |
− | | + | |
− | //*********************
| + | |
− | //******menu vars******
| + | |
− | //*********************
| + | |
− | list menuAdmin = ["Settings", "My Account", "Website","Logoff"];
| + | |
− | list menuRegistered = ["My Account", "Website", "Logoff"];
| + | |
− | list menuInactive = ["Website", "About", "Logoff"];
| + | |
− | list menuNewUser = ["Register", "Website", "About","Logoff"];
| + | |
− | //*********************
| + | |
− | | + | |
− | | + | |
− | //*********************
| + | |
− | //*****http id's*******
| + | |
− | //*********************
| + | |
− | string item_request_id;
| + | |
− | string authenticate_request_id;
| + | |
− | string register_request_id;
| + | |
− | string logoff_request_id;
| + | |
− | string x_request_id;
| + | |
− | string account_request_id;
| + | |
− | //*********************
| + | |
− | | + | |
− | | + | |
− | //*********************
| + | |
− | //*****dataserver******
| + | |
− | //*********************
| + | |
− | key settingsDS;
| + | |
− | key payinfoDS;
| + | |
− | key bornDS;
| + | |
− | //*********************
| + | |
− | | + | |
− | | + | |
− | //*********************
| + | |
− | //******handlers*******
| + | |
− | //*********************
| + | |
− | string settingsFileName="jSLplus Settings";
| + | |
− | integer settingsEntry;
| + | |
− | integer defaultSalt=666;
| + | |
− | integer online=-2;
| + | |
− | string settingsNotify;
| + | |
− | string sid;
| + | |
− | string menu;
| + | |
− | list objectSpecs;
| + | |
− | string secretWord;
| + | |
− | string status;
| + | |
− | string itemName;
| + | |
− | //*********************
| + | |
− | //Settings Notecard stuff
| + | |
− | init() {
| + | |
− | if (llGetInventoryType(settingsFileName) == INVENTORY_NOTECARD) {
| + | |
− | online=-1;
| + | |
− | readSettings();
| + | |
− | }
| + | |
− | else {
| + | |
− | llOwnerSay("===ERROR===\nNo settings-notecard found!");
| + | |
− | }
| + | |
− | }
| + | |
− | //Settings Notecard stuff
| + | |
− | readSettings() {
| + | |
− | llOwnerSay("Initializing settings. Please wait...");
| + | |
− | settingsEntry = 0;
| + | |
− | settingsNotify="===SETUP SETTINGS===";
| + | |
− | settingsDS = llGetNotecardLine(settingsFileName, settingsEntry) ;
| + | |
− | }
| + | |
− | | + | |
− | checkSettings(string entry) {
| + | |
− | if((entry != "") && (llGetSubString(entry, 0, 1) != "//")) {
| + | |
− | list Details = llParseString2List(entry, ["="], []);
| + | |
− | string keyname = llList2String(Details, 0);
| + | |
− | string contents = llList2String(Details, 1);
| + | |
− | if ((keyname != "") && (contents != "")) {
| + | |
− | if(keyname=="url") {url=contents;settingsNotify+="\nURL: "+contents;}
| + | |
− | if(keyname=="ssl") {if((integer)contents==1) {url="https://"+url;settingsNotify+="\nSSL: enabled";}
| + | |
− | else if((integer)contents==0){url="http://"+url;settingsNotify+="\nSSL: disabled (NOT recommended)";}
| + | |
− | }
| + | |
− | else if(keyname=="certificate") {
| + | |
− | certificate=(integer)contents;
| + | |
− | if(certificate==0) {settingsNotify+="\nCertificate: not required";}
| + | |
− | else if(certificate==1) {settingsNotify+="\nCertificate: required";}
| + | |
− | }
| + | |
− | else if(keyname=="sitetitle") {sitetitle=contents;settingsNotify+="\nSite-title: "+contents;}
| + | |
− | else if(keyname=="intchannel") {intchannel=(integer)contents;settingsNotify+="\nInternal channel: "+contents;}
| + | |
− | else if(keyname=="paramchannel") {paramchannel=(integer)contents;settingsNotify+="\nParameter channel: "+contents;}
| + | |
− | else if(keyname=="salt") {salt=(integer)contents;settingsNotify+="\nHash-Salt: "+contents;}
| + | |
− | else if(keyname=="scanrate") {scanrate=(integer)contents;settingsNotify+="\nIdle Scan: "+contents+" seconds per scan";}
| + | |
− | else if(keyname=="scanrange") {scanrange=(integer)contents;settingsNotify+="\nIdle Scanrange: "+contents+" meters";}
| + | |
− | else if(keyname=="logrange") {logrange=(float)contents;settingsNotify+="\nLogs off: "+contents+" meters from console";}
| + | |
− | else if(keyname=="lograngewarning") {lograngewarning=(float)contents;settingsNotify+="\nLogoff warning: "+contents+" meters from console";}
| + | |
− | else if(keyname=="textcolor") {textcolor=string2vector(contents);settingsNotify+="\nTextcolor: "+contents;}
| + | |
− | }
| + | |
− | }
| + | |
− | settingsEntry+=1;
| + | |
− | settingsDS = llGetNotecardLine(settingsFileName, settingsEntry) ;
| + | |
− | }
| + | |
− | | + | |
− | vector string2vector(string s) {
| + | |
− | list foo = llCSV2List(s);
| + | |
− | vector v;
| + | |
− | v.x = llList2Float(foo,0);
| + | |
− | v.y = llList2Float(foo,1);
| + | |
− | v.z = llList2Float(foo,2);
| + | |
− | return v;
| + | |
− | }
| + | |
− | | + | |
− | //Generates secretWord, and a MD5-hash from secretWord and Salt
| + | |
− | string generatePW(float uniqueness) {
| + | |
− | list primewords = ["alpha","beta","gamma","zulu","bravo","cappa","tango"];
| + | |
− | string randomWord = llList2String(primewords,(integer)llFrand(llGetListLength(primewords)));
| + | |
− | string randomNumber = (string)llRound(llFrand(uniqueness));
| + | |
− | secretWord = randomWord+randomNumber;
| + | |
− | return llMD5String(secretWord,salt);
| + | |
− | }
| + | |
− | | + | |
− | returnDialog(string returnMenu) {
| + | |
− | if(returnMenu == "MENU_UNREGISTERED") {
| + | |
− | llDialog( av_key, "Select an option...", menuNewUser, intchannel);
| + | |
− | }
| + | |
− | else if(returnMenu == "MENU_PROFILE_ACTIVE") {
| + | |
− | llDialog( av_key, "Select an option...", menuRegistered, intchannel);
| + | |
− | }
| + | |
− | else if(returnMenu == "MENU_PROFILE_INACTIVE") {
| + | |
− | llDialog( av_key, "Select an option...", menuInactive, intchannel);
| + | |
− | }
| + | |
− | else if(returnMenu == "MENU_ADMIN") {
| + | |
− | llDialog( av_key, "Select an option...", menuAdmin, intchannel);
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | httpRequest(string function,list params) {
| + | |
− | if(function=="login") {
| + | |
− | authenticate_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=login",
| + | |
− | [HTTP_METHOD,"POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],
| + | |
− | "&k="+llList2String(params,0)+"&n="+llList2String(params,1)+"&s="+llList2String(params,2)+"&p="+llList2String(params,3)+"&c="
| + | |
− | +llList2String(params,4)+"&h="+generatePW(1000)+"&o="+llList2String(params,5)+"&format=raw");
| + | |
− | }
| + | |
− | if(function =="logoff") {
| + | |
− | logoff_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=logoff",
| + | |
− | [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],
| + | |
− | "&sid="+llList2String(params,0)+"&format=raw");
| + | |
− | }
| + | |
− | if(function=="register") {
| + | |
− | register_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=register",
| + | |
− | [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],
| + | |
− | "&h="+llList2String(params,0)+"&e="+llList2String(params,1)+"&sid="+sid+"&format=raw");
| + | |
− | }
| + | |
− | if(function=="additem") {
| + | |
− | item_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=additem",
| + | |
− | [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],
| + | |
− | "&k="+llList2String(params,0)+"&n="+llList2String(params,1)+"&t="+llList2String(params,2)+"&p="+llList2String(params,3)+llList2String(params,4)+
| + | |
− | llList2String(params,5)+"&sid="+sid+"&format=raw");
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | login(key id) {
| + | |
− | av_key = id;
| + | |
− | username = llKey2Name(av_key);
| + | |
− | av_surname = llGetSubString(username, llSubStringIndex(username, " ") + 1, -1);
| + | |
− | av_name = llGetSubString(username, 0, llSubStringIndex(username, " "));
| + | |
− | llSetText("Controller: "+username, textcolor, 1);
| + | |
− | llInstantMessage(av_key, "Contacting server. Please wait...");
| + | |
− | bornDS = llRequestAgentData(av_key, DATA_BORN);
| + | |
− | payinfoDS = llRequestAgentData(av_key, DATA_PAYINFO);
| + | |
− | }
| + | |
− |
| + | |
− | default {
| + | |
− | on_rez(integer startparam){
| + | |
− | llResetScript();
| + | |
− | }
| + | |
− |
| + | |
− | state_entry() {
| + | |
− | if(online==-2) {
| + | |
− | init();
| + | |
− | }
| + | |
− | llAllowInventoryDrop(FALSE);
| + | |
− | if(online==TRUE || online==FALSE){
| + | |
− | llSetText("Terminal online...",textcolor,1);
| + | |
− | }
| + | |
− | else {
| + | |
− | llSetText("Terminal offline...",<0,0,0>,1);
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | touch_start( integer num ) {
| + | |
− |
| + | |
− | if(llDetectedKey(0)!=av_key) {
| + | |
− | return;
| + | |
− | }
| + | |
− | else {
| + | |
− | if(online==-1) {
| + | |
− | init();
| + | |
− | }
| + | |
− | else {
| + | |
− | login(llDetectedKey(0));
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | dataserver(key query_id, string data) {
| + | |
− | if(query_id == bornDS) {
| + | |
− | av_created=data;
| + | |
− | }
| + | |
− | else if (query_id == payinfoDS) {
| + | |
− | av_payinfo=data;
| + | |
− | httpRequest("login",[av_key,av_name,av_surname,av_payinfo,av_created,(string)llGetLinkKey(2)]);
| + | |
− | }
| + | |
− | else if (query_id == settingsDS) {
| + | |
− | if (data != EOF) {
| + | |
− | checkSettings(data) ;
| + | |
− | return;
| + | |
− | }
| + | |
− | else {
| + | |
− | llOwnerSay("Settings are loaded. Checking content...");
| + | |
− | if(salt==defaultSalt) {
| + | |
− | llOwnerSay("You didn't setup a unique hash-salt. Please correct the problem...");
| + | |
− | state restart_default;
| + | |
− | }
| + | |
− | else {
| + | |
− | llOwnerSay(settingsNotify+"\nSettings ok...\n");
| + | |
− | settingsNotify="";
| + | |
− | login(llGetOwner());
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | //RESPONSE FROM INITIAL HTTP-REQUEST
| + | |
− | http_response(key request_id, integer httpStatus, list metadata, string body) {
| + | |
− | if (authenticate_request_id == request_id) {
| + | |
− | body = llStringTrim(body, STRING_TRIM);
| + | |
− | list parameters;
| + | |
− | parameters = llCSV2List(body);
| + | |
− | status = llList2String(parameters,0);
| + | |
− | sid = llList2String(parameters,1);
| + | |
− | string visited = llList2String(parameters,2);
| + | |
− | //Send link-message to feedback-module(3)
| + | |
− | llMessageLinked(3,0,status+","+username+","+visited+","+secretWord,av_key);
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | //Receives link-messages from feedback-module(3)
| + | |
− | link_message(integer sender_num, integer lineResponse, string str, key id) {
| + | |
− | if (sender_num==3) {
| + | |
− | list input = llCSV2List(str);
| + | |
− | menu = llList2String(input,0);
| + | |
− | //Positive message, proceed to logged-in state
| + | |
− | if(lineResponse==TRUE) {
| + | |
− | state inuse;
| + | |
− | }
| + | |
− | //Reboot when an error-message comes back...
| + | |
− | else {
| + | |
− | //Critical error(lineResponse=-1) or non-critical error(lineResponse=0/FALSE)
| + | |
− | online=lineResponse;
| + | |
− | state restart_default;
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | changed( integer change ) {
| + | |
− | if ( change == CHANGED_INVENTORY ) {
| + | |
− | integer itemCount = llGetInventoryNumber(INVENTORY_ALL);
| + | |
− | integer i=0;
| + | |
− | if(itemCount>3) {
| + | |
− | for(i=0;i<itemCount;i++) {
| + | |
− | string itemName = llGetInventoryName(INVENTORY_ALL, i);
| + | |
− | if (itemName != "About" && itemName!="jSLplus Interface" && itemName!="jSLplus Visitor-Tracker" && itemName!="jSLplus Settings") {
| + | |
− | llSay(0,"You must be logged in, before you may upload items to the ODS!");
| + | |
− | llRemoveInventory(itemName);
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | else {
| + | |
− | llOwnerSay("Settings have been changed. Please wait while the terminal reboots...");
| + | |
− | online=-2;
| + | |
− | state restart_default;
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | state restart_default {
| + | |
− | state_entry() {
| + | |
− | state default;
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | | + | |
− | state inuse {
| + | |
− | state_entry() {
| + | |
− | llSensorRepeat( "", "", AGENT, scanrange, TWO_PI, scanrate);
| + | |
− | llListen(intchannel, "", av_key, "" );
| + | |
− | llListen(paramchannel,"",av_key,"");
| + | |
− | if(menu=="MENU_PROFILE_ACTIVE" || status=="MENU_ADMIN") {
| + | |
− | llAllowInventoryDrop(TRUE);
| + | |
− | string folder = llGetObjectName();
| + | |
− | }
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− |
| + | |
− | touch_start( integer number_detected ) {
| + | |
− | integer i;
| + | |
− | for( i = 0; i < number_detected; i++ ) {
| + | |
− | if (llDetectedKey(i) == av_key) {
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | else {
| + | |
− | llSay(0,username+" is currently logged into this terminal. Please wait until this user logged off...");
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− |
| + | |
− | }
| + | |
− |
| + | |
− | sensor( integer number_detected ) {
| + | |
− | integer i;
| + | |
− | for( i = 0; i < number_detected; i++ ) {
| + | |
− | key detected_key = llDetectedKey(i);
| + | |
− | if(av_key==detected_key) {
| + | |
− | vector agentPos = llDetectedPos(i);
| + | |
− | vector terminalPos = llGetPos();
| + | |
− | float distance = llVecDist(agentPos, terminalPos);
| + | |
− | if (distance > logrange) {
| + | |
− | llInstantMessage(av_key, "===NOTICE===\nYou are out of range. logging off now...");
| + | |
− | httpRequest("logoff",[]);
| + | |
− | llSensorRemove();
| + | |
− | }
| + | |
− | else if(distance > lograngewarning){
| + | |
− | llInstantMessage(av_key, "===NOTICE===\nYou are "+(string)(logrange-distance)+" meters from being logged out.");
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | listen( integer chan, string name, key id, string msg ) {
| + | |
− | if(id == av_key) {
| + | |
− | msg = llStringTrim(msg, STRING_TRIM);
| + | |
− | list paramList;
| + | |
− | string command;
| + | |
− | if(msg!="") {
| + | |
− | paramList = llCSV2List(msg);
| + | |
− | command = llList2String(paramList,0);
| + | |
− | }
| + | |
− | if (command == "Website") {
| + | |
− | llLoadURL(av_key, sitetitle, url);
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | else if (command == "About") {
| + | |
− | llGiveInventory(av_key,"About");
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | else if (command == "Request") {
| + | |
− | x_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=request&sid="+sid+
| + | |
− | "&format=raw", [HTTP_METHOD, "GET"],"");
| + | |
− | }
| + | |
− | else if (command == "Logoff") {
| + | |
− | llSetText(username+" logs out...",textcolor,1);
| + | |
− | httpRequest("logoff",[sid]);
| + | |
− | llInstantMessage(av_key,"Preparing to log off...");
| + | |
− | }
| + | |
− |
| + | |
− | if(menu=="MENU_UNREGISTERED") {
| + | |
− | if (command == "Register") {
| + | |
− | llInstantMessage(av_key,"===NOTICE===\nYou must provide a valid emailaddress.\nType: /"+(string)paramchannel+
| + | |
− | " registermail,myemail@address.org' in order to finish the registration process.");
| + | |
− | }
| + | |
− | if (command == "registermail") {
| + | |
− | httpRequest("register",[generatePW(1000),llStringTrim(llList2String(paramList,1), STRING_TRIM)]);
| + | |
− | }
| + | |
− | }
| + | |
− | else if(menu=="MENU_PROFILE_ACTIVE") {
| + | |
− | if (command == "My Account") {
| + | |
− | string myAccount = "===MY ACCOUNT===\n";
| + | |
− | myAccount += "Avatar-key: "+(string)av_key;
| + | |
− | llInstantMessage(av_key,myAccount);
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | }
| + | |
− | else if(menu=="MENU_ADMIN") {
| + | |
− | if (command == "Settings") {
| + | |
− | string terminalSettings = "===SETTINGS===\n";
| + | |
− | terminalSettings += "terminal-key: "+(string)llGetKey()+"\n";
| + | |
− | terminalSettings += "heap: "+(string)llGetFreeMemory() + " bytes\n";
| + | |
− | llInstantMessage(av_key, terminalSettings);
| + | |
− | llMessageLinked(2, 0, "settings",av_key);
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | else if (command == "My Account") {
| + | |
− | string myAccount = "===MY ACCOUNT===\n";
| + | |
− | account_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=getaccount&sid="+sid+
| + | |
− | "&format=raw", [HTTP_METHOD, "GET"],"");
| + | |
− | myAccount += "Avatar-key: "+(string)av_key;
| + | |
− | llInstantMessage(av_key,myAccount);
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | http_response(key request_id, integer httpStatus, list metadata, string body) {
| + | |
− | list parameters;
| + | |
− | body = llStringTrim(body, STRING_TRIM);
| + | |
− | parameters = llCSV2List(body);
| + | |
− | status = llList2String(parameters,0);
| + | |
− | if (request_id == register_request_id) {
| + | |
− | llMessageLinked(3,0,status+","+username+","+secretWord,av_key);
| + | |
− | }
| + | |
− | if (request_id == item_request_id) {
| + | |
− | llMessageLinked(3,0,status+","+username,av_key);
| + | |
− | }
| + | |
− |
| + | |
− | if (request_id == logoff_request_id) {
| + | |
− | llMessageLinked(3,0,status+","+username,av_key);
| + | |
− | }
| + | |
− |
| + | |
− | if (request_id == x_request_id) {
| + | |
− | llMessageLinked(3,0,status+","+username,av_key);
| + | |
− | }
| + | |
− |
| + | |
− | if (request_id == account_request_id) {
| + | |
− | llMessageLinked(3,0,status+","+username,av_key);
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | link_message(integer sender_num, integer lineResponse, string str, key id) {
| + | |
− | online = lineResponse;
| + | |
− | if(lineResponse==TRUE) {
| + | |
− | list input = llCSV2List(str);
| + | |
− | menu = llList2String(input,0);
| + | |
− | returnDialog(menu);
| + | |
− | }
| + | |
− | else {
| + | |
− | state default;
| + | |
− | }
| + | |
− | }
| + | |
− |
| + | |
− | changed( integer change ) {
| + | |
− | if (change & CHANGED_ALLOWED_DROP) {
| + | |
− | llOwnerSay("The inventory has changed as a result of a user without mod permissions dropping an item on the prim"+
| + | |
− | "and it being allowed by the script.");
| + | |
− | }
| + | |
− |
| + | |
− | if ( change == CHANGED_INVENTORY ) {
| + | |
− | integer itemCount = llGetInventoryNumber(INVENTORY_ALL);
| + | |
− | if(itemCount>3) {
| + | |
− | llSay(0,"A new item was submitted!");
| + | |
− | integer i=0;
| + | |
− | string newItem;
| + | |
− | for(i=0;i<itemCount;i++) {
| + | |
− | string itemName = llGetInventoryName(INVENTORY_ALL, i);
| + | |
− | if (itemName != "About" && itemName!="jSLplus Interface" && itemName!="jSLplus Visitor-Tracker" && itemName!="jSLplus Settings") {
| + | |
− | newItem = itemName;
| + | |
− | }
| + | |
− | }
| + | |
− | key itemKey = llGetInventoryKey(newItem);
| + | |
− | key itemCreatorKey = llGetInventoryCreator(newItem);
| + | |
− | if(av_key != itemCreatorKey) {
| + | |
− | llSay(0,"Item denied! You must be the creator of the submitted item!");
| + | |
− | llRemoveInventory(newItem);
| + | |
− | return;
| + | |
− | }
| + | |
− | else {
| + | |
− | if (llStringLength(newItem) <=30) {
| + | |
− | llSay(0,"Item accepted. You have been recognised as the creator of this item...");
| + | |
− | }
| + | |
− | else {
| + | |
− | llSay(0,"Item denied! Please shorten the objectname to a maximum of 30 characters...");
| + | |
− | llRemoveInventory(newItem);
| + | |
− | return;
| + | |
− | }
| + | |
− | }
| + | |
− | integer itemType = llGetInventoryType(newItem);
| + | |
− | integer permCopy; integer permMod; integer permTransfer;
| + | |
− | string itemSpecs = "\n===Item specifications===\n";
| + | |
− | itemSpecs+="item-Key: "+(string)itemKey+"\n";
| + | |
− | itemSpecs+="item-Name: "+newItem+"\n";
| + | |
− | itemSpecs+="=Permissions=\n";
| + | |
− | if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_COPY) {permCopy=1;itemSpecs+="Copy:Yes\n";}
| + | |
− | else {permCopy=0;itemSpecs+="Copy:No\n";}
| + | |
− | if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_MODIFY) {permMod=1;itemSpecs+="Modify:Yes\n";}
| + | |
− | else {permMod=0;itemSpecs+="Modify:No\n";}
| + | |
− | if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_TRANSFER) {permTransfer=1;itemSpecs+="Transfer:Yes\n";}
| + | |
− | else {permTransfer=0;itemSpecs+="Transfer:No\n";}
| + | |
− | llSay(0,itemSpecs);
| + | |
− | llGiveInventory(llGetLinkKey(2), newItem);
| + | |
− | llRemoveInventory(newItem);
| + | |
− | llSay(0,"Sending request to ODS-Site...");
| + | |
− | newItem = llEscapeURL(newItem);
| + | |
− | httpRequest("additem",[itemKey,newItem,itemType,permCopy,permMod,permTransfer]);
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
| } | | } |
| + | ?> |
| </source> | | </source> |