integer menu_handler;
integer menu_channel;
integer command_channel = 333;
menu(key user,string title,list buttons)//make dialog easy, pick a channel by itself and destroy it after 5 seconds
{
menu_channel = (integer)(llFrand(99999.0) * -1);//yup a different channel at each use
menu_handler = llListen(menu_channel,"","",""
;llDialog(user,title,buttons,menu_channel);
llSetTimerEvent(5.0);
}
default
{on_rez(integer params){
llResetScript();}
state_entry()
{key uuid = llGetOwner();
string name = llKey2Name(uuid);
llSetObjectName(name);
}
touch_start(integer t)
{
menu(llDetectedKey(0)," \n \nTeleport Menu....",["Fav 1","Fav 2","Fav 3","Fav 4","Fav 5","Fav 6"]);
}
timer() //so the menu timeout and close its listener
{
llSetTimerEvent(0.0);
llListenRemove(menu_handler);
}
listen(integer channel,string name,key id,string message)
{
if (channel == menu_channel) //in case you have others listeners
{
if(message == "Fav 1"

{
key request;
string name;
string sim_name;
vector pos;
llAllowInventoryDrop(1);
if(llGetInventoryNumber(INVENTORY_LANDMARK))
{
name = llGetInventoryName(INVENTORY_LANDMARK,0);
request = llRequestInventoryData(name);
}
else
llWhisper(0,"Please drop a landmark on me"
;}
dataserver(key id, string data)
{
if(id == request)
{
pos = (vector)data;
sim_name = llGetRegionName();
llSetText("",<1.0,1.0,1.0>,1.0);
}
}
touch_start(integer a)
{
if(name != ""

llMapDestination(sim_name, pos, pos);
}
changed(integer a)
{
if(a & (CHANGED_INVENTORY | CHANGED_ALLOWED_DROP))
if(llGetInventoryNumber(INVENTORY_LANDMARK))
request = llRequestInventoryData(name = llGetInventoryName(INVENTORY_LANDMARK,0));
}
}
Any LSL guru's out there that may be able to help me make this work?