This one accepts messages on local chat based on a touch trigger. It also requires the n2k script in the same primitive.
/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// key _kReq = NULL_KEY; string _kName = ""; key _kKey = NULL_KEY; default { state_entry() { llSetText(_kName = "Touch me to look for an agent's status.", <1,1,1>, 1); } touch_start(integer num) { llListen(0, "", llDetectedKey(0), ""); llSetText("Type the name of the agent in local chat.", <1,1,1>, 1); } listen(integer channel, string name, key id, string message) { llSetText("Checking...", <1,1,1>, 1); _kName = message; llMessageLinked(LINK_THIS, 0, _kName, ""); llSetTimerEvent(10); } timer() { llSetTimerEvent(0); if(_kReq == NULL_KEY) { _kReq = "a"; llSetText("Agent could not be found.", <1,1,1>, 1); llSetTimerEvent(5); return; } llResetScript(); } link_message(integer sender, integer num, string str, key id) { if(str == "KN2K") if(id) { _kKey = (key)id; state check; return; } } changed(integer change) { if(change & CHANGED_INVENTORY) llResetScript(); } } state check { state_entry() { _kReq = llRequestAgentData(_kKey, DATA_ONLINE); llSetTimerEvent(10); } timer() { llSetTimerEvent(0); llSetText("Agent could not be found.", <1,1,1>, 1); llResetScript(); } dataserver(key id, string data) { if(id != _kReq) return; if(data == "1") { llSetText(_kName + " is online.", <0,1,0>, 1); return; } llSetText(_kName + " is offline.", <1,0,0>, 1); } touch_start(integer num) { state default; } }