| Example Script:
|
/*********************************************
* Copyright (c) 2009 Paul Preibisch
* Released under the GNU GPL 3.0
* This script can be used in your scripts, but you must include this copyright header as per the GPL Licence
* For more information about GPL 3.0 - see: http://www.gnu.org/copyleft/gpl.html
*
*
* This script is part of the SLOODLE Project see http://sloodle.org
*
* Copyright:
* Paul G. Preibisch (Fire Centaur in SL)
* fire@b3dMultiTech.com
*
* API DEMO OBJECT.lsl
*
* PURPOSE
* This script is part of the SLOODLE HQ.
*
/**********************************************************************************************/
key owner;
// *************************************************** HOVER TEXT VARIABLES
integer DISPLAY_DATA =-774477; //every time the display is updated, data goes on this channel
integer PLUGIN_RESPONSE_CHANNEL =998822; //sloodle_api.lsl responses
integer PLUGIN_CHANNEL =998821;//sloodle_api requests
integer SLOODLE_CHANNEL_TRANSLATION_REQUEST = -1928374651;//translation channel
integer SLOODLE_CHANNEL_TRANSLATION_RESPONSE = -1928374652;//translation channel
integer SLOODLE_CHANNEL_OBJECT_DIALOG = -3857343;//configuration channel
/***********************************************
* getFieldData-- returns data from a table based on the column name
***********************************************/
string getFieldData(list tableRowData, string colName){
return llList2String(tableRowData,llListFindList(tableRowData, [colName])+1);
}
/***********************************************
* s() used so that sending of linked messages is more readable by humans. Ie: instead of sending a linked message as
* GETDATA|50091bcd-d86d-3749-c8a2-055842b33484
* Context is added instead: COMMAND:GETDATA|PLAYERUUID:50091bcd-d86d-3749-c8a2-055842b33484
* All this function does is strip off the text before the ":" char and return a string
***********************************************/
string s (string ss){
return llList2String(llParseString2List(ss, [":"], []),1);
}
/***********************************************
* k() used so that sending of linked messages is more readable by humans. Ie: instead of sending a linked message as
* GETDATA|50091bcd-d86d-3749-c8a2-055842b33484
* Context is added instead: COMMAND:GETDATA|PLAYERUUID:50091bcd-d86d-3749-c8a2-055842b33484
* All this function does is strip off the text before the ":" char and return a key
***********************************************/
key k (string kk){
return llList2Key(llParseString2List(kk, [":"], []),1);
}
/***********************************************
* counter() used so that sending of linked messages is more readable by humans. Ie: instead of sending a linked message as
* GETDATA|50091bcd-d86d-3749-c8a2-055842b33484
* Context is added instead: COMMAND:GETDATA|PLAYERUUID:50091bcd-d86d-3749-c8a2-055842b33484
* All this function does is strip off the text before the ":" char and return an integer
***********************************************/
integer i (string ii){
return llList2Integer(llParseString2List(ii, [":"], []),1);
}
/* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*
* default state
* In this state we wait until the rest of the scripts in this object init
*
* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
default{
state_entry() {
//set owner
owner = llGetOwner();
}
link_message(integer sender_num, integer channel, string str, key id) {
list dataLines=llParseString2List(str, ["\n"],[]);
list cmdLine = llParseString2List(str, ["|"],[]);
string cmd=s(llList2String(cmdLine,0));
if (channel==PLUGIN_RESPONSE_CHANNEL){
if (cmd=="API READY") state go;
}//endif channel=PLUGIN_RESPONSE_CHANNEL
}//end linked_message event
/***********************************************
* changed event
* |-->Every time the inventory changes, reset the script
*
***********************************************/
changed(integer change) {
if (change ==CHANGED_INVENTORY){
llResetScript();
}//endif
}//end changed state
}//end default state
state go{
touch_start(integer num_detected) {
/*********************************************************************************
* API CALL: getLessons: Return all lessons in the course
**********************************************************************************/
llMessageLinked(LINK_SET, PLUGIN_CHANNEL, "plugin:lessons,function:getLessons\nSLOODLEID:null\nindex:0|lessonsPerPage:9", NULL_KEY);
}
link_message(integer sender_num, integer channel, string str, key id) {
if (channel==PLUGIN_RESPONSE_CHANNEL){
list dataLines = llParseStringKeepNulls(str,["\n"],[]);
//get status code
list statusLine =llParseString2List(llList2String(dataLines,0),["|"],[]);
integer status =llList2Integer(statusLine,0);
string descripter = llList2String(statusLine,1);
string response = s(llList2String(dataLines,1));
integer index = i(llList2String(dataLines,2));
integer totalGrps= i(llList2String(dataLines,3));
integer counter=0;
if (response=="lessons|getLessons"){
//check status of returned response
if (status==1){
//get all of the lesson activities returned
list lessons = llList2List(dataLines, 5,llGetListLength(dataLines)-1);
integer len = llGetListLength(lessons);
list colNames =llParseString2List(llList2String(dataLines,4), ["|"], []);
integer colLen = llGetListLength(colNames);
list data;
for (counter=0;counter<len;counter++){
list colData=llParseString2List(llList2String(lessons,counter), ["|"], []); //parse the message into a list
integer j;
//add all data from this line into a 2 dimensional list called tableRowData:
//["nameOfColumn","value"]
list tableRowData;
for (j=0;j<colLen;j++){
tableRowData +=[llList2String(colNames,j),llList2String(colData,j)];
llOwnerSay(llList2String(colNames,j)+": "+llList2String(colData,j));
}//end for
}//for
}//status==1
}//endif response=="getLessons"
}//end if channel==PLUGIN_RESPONSE_CHANNEL
}//end link_message
/***********************************************
* changed event
* |-->Every time the inventory changes, reset the script
*
***********************************************/
changed(integer change) {
if (change ==CHANGED_INVENTORY){
llResetScript();
}//endif
}//end changed state
}//end state
|