Files
LSL-Scripts/NPC HUD/NPC HUD/Object/~follow.lsl
2015-08-09 16:54:31 -05:00

88 lines
2.1 KiB
Plaintext

// :CATEGORY:NPC
// :NAME:NPC HUD
// :AUTHOR:Anonymous
// :CREATED:2013-09-06
// :EDITED:2013-09-18 15:38:58
// :ID:568
// :NUM:778
// :REV:1
// :WORLD:Second Life
// :DESCRIPTION:
// follow
// :CODE:
// npc follow
list lstFollowMenu = ["Start","Stop"];
integer channel = -34;
integer listener;
key npc;
string clonetype;
vector offset = < 3, 0, 1.0>; //3 meter behind. 1.5 up (bot does seamto walk if not raised a bit
list order_buttons(list buttons)
{
return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4) + llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
}
default
{
link_message(integer sender_number, integer number, string msg, key id)
{
if (number == 24)
{
llDialog(llGetOwner(), "Start/ Stop Following:", order_buttons(lstFollowMenu), channel);
listener = llListen(channel, "", NULL_KEY, "");
clonetype=msg;
npc= id;
}
else
{ osNpcStopMoveToTarget(npc) ;
llSetTimerEvent(0.0);}
}
listen(integer channel, string name, key id, string msg)
{
llListenRemove(listener);
//
//--------------------------------------
// main menu results here
//--------------------------------------
if (msg == "Start")
{
llSetTimerEvent(1.0);
}
if (msg == "Stop")
{
osNpcStopMoveToTarget(npc) ;
llSetTimerEvent(0.0);
}
//}
}
timer()
{
llSensor("",npc,AGENT,4,PI);
}
no_sensor()
{
list det = llGetObjectDetails(llGetOwner(),[OBJECT_POS,OBJECT_ROT]);
// Get position and rotation
vector pos = llList2Vector(det,0);
rotation rot = (rotation)llList2String(det,1);
// use whatever offset you want.
vector worldOffset = offset;
// Offset relative to owner needs a quaternion.
vector avOffset = offset * rot;
pos += avOffset;
osNpcMoveToTarget(npc,pos, OS_NPC_NO_FLY );
}
}