FarmSystem/LSL/raw/tests/item_sink.lsl

67 lines
No EOL
1.9 KiB
Text

#include "Common.lsl"
integer global_ingredients;
list g_lDiscovered = [];
key g_kAv;
integer g_iChannel;
integer g_iListen;
default
{
state_entry()
{
XteaKey(PSK);
global_ingredients = getIngredientChannel(NULL_KEY);
llListen(global_ingredients, "", "", "");
llOwnerSay("Listening on " + (string)global_ingredients);
}
touch_start(integer t) {
if(g_kAv != "") {
return;
}
g_lDiscovered = [];
llSay(0, "Looking for nearby ingredients...");
llWhisper(global_ingredients, xtea_encrypt_string(llList2Json(JSON_OBJECT, ["cmd", "query"])));
llSetTimerEvent(3);
g_kAv = llDetectedKey(0);
}
timer() {
list lOpts = StrideOfList(g_lDiscovered, 3, 1, -1);
g_iChannel = llRound(llFrand(0xFFFF));
g_iListen = llListen(g_iChannel, "", "", "");
llDialog(g_kAv, "What item do you want to delete?", lOpts, g_iChannel);
llSetTimerEvent(0);
}
listen(integer c,string n,key i,string m) {
if(c == global_ingredients) {
string params = xtea_decrypt_string(m);
if(llJsonGetValue(params,["cmd"]) == "reply"){
g_lDiscovered += [llJsonGetValue(params,["id"]), llJsonGetValue(params, ["ingredient"]), i];
llWhisper(0, "Discovered: " + llJsonGetValue(params, ["ingredient"]));
}
} else if(c == g_iChannel) {
integer iIndex = llListFindList(g_lDiscovered, [m]);
if(iIndex == -1) {
llResetScript();
} else {
string sID = llList2String(g_lDiscovered, iIndex-1);
string sObj = llList2String(g_lDiscovered, iIndex+1);
integer iChan = getIngredientChannel(sObj);
llRegionSayTo(sObj, iChan, xtea_encrypt_string(llList2Json(JSON_OBJECT, ["cmd", "use", "id", sID])));
llResetScript();
}
}
}
}