Skype Online Status - Multi-User Version
// zwischen die Anführungszeichen Deinen Skype-Name einfügen
string skype_handle = "";
// you are done! no more changes!
key notecode;
string notecard;
integer noteline;
key skype_request_id = NULL_KEY; // id of http request
showStatus(string skype_status)
{
// build up our message
string message = "Skype";
message += "\nName: " + skype_handle;
message += "\nStatus: " + skype_status;
// write out the message as hovering text
llSetText(message, <.5,.5,1>, 1);
}
// AMD64 ADD: readnotecard() liest eine zeile
// Im Dataserver Event wird die gewünschte Variable dann gefüllt
// Sollte einmal beim rezzen/reseten und Inventory Change durchgeführt werden
readnotecard()
{
// Der name der NC ist egal
notecard = llGetInventoryName(INVENTORY_NOTECARD, 0);
// Wenn aber keine da ist, setze die Variable auch auf leer und beende das ganze
if (notecard == "")
{
skype_handle = "";
return;
}
// Lesen beginnen bei Zeile Null (anfang)
noteline = 0;
// Ab hier gehts im Dataserver Event weiter
notecode = llGetNotecardLine(notecard, noteline);
}
default
{
on_rez(integer start_param)
{
readnotecard();
}
state_entry()
{
llSetTimerEvent(0);
readnotecard();
}
changed(integer change)
{
// Änderung im Inventar des Objekts
if (change & CHANGED_INVENTORY)
{
// NC am besten neu einlesen
readnotecard();
}
}
dataserver(key queryid, string data)
{
if (queryid == notecode)
{
// Für den Fall dass die NC leer ist
if (data != EOF)
{
skype_handle = data;
}
else
{
skype_handle = "";
}
}
}
touch_start(integer total_number)
{
// make sure owner has specified handle
if(skype_handle == "")
{
// send message to debugger
llWhisper(DEBUG_CHANNEL, "skype_handle can not be empty.");
return;
}
// prevent extra requests happening at the same time
if(skype_request_id != NULL_KEY) return;
// make a request over the internet
skype_request_id = llHTTPRequest("http://mystatus.skype.com/" + skype_handle + ".txt", [HTTP_METHOD, "GET"], "");
// set a timeout for http request
llSetTimerEvent(5);
}
http_response(key request_id, integer status, list metadata, string body)
{
// is this a response to our request?
if(request_id == skype_request_id)
{
// show status
showStatus(body);
// change to view state
state viewing;
}
}
timer()
{
// Didn't get a response in time.
showStatus("No Response");
// change to view state
state viewing;
}
}
state viewing
{
state_entry()
{
// Set next timer for 3 minutes
llSetTimerEvent(180);
}
timer()
{
state default;
}
state_exit()
{
// stop the timer
llSetTimerEvent(0);
// hide the text
llSetText("", ZERO_VECTOR, 0);
// reset the request id
skype_request_id = NULL_KEY;
}
}