Files
LSL-Scripts/Flying Bee and Hive/Bee/Object/Bee.lsl
2015-08-09 16:54:31 -05:00

92 lines
1.8 KiB
Plaintext

// :CATEGORY:Flying Bee
// :NAME:Flying Bee and Hive
// :AUTHOR:Ferd Frederix
// :CREATED:2013-09-08 12:59:45
// :EDITED:2013-09-18 15:38:53
// :ID:995
// :NUM:1491
// :REV:2
// :WORLD:Second Life
// :DESCRIPTION:
// A free flying bee that gathers pollen and takes it to his hive
// :CODE:
// Simple Bee script to locate and gather pollen from all prims named "Flower" then returns to the Beehive"
// Requires 2 sounds buzz1 and buzz2
string FLOWER_NAME = "Flower";
string HIVE_NAME = "Beehive";
vector offset = <0,.10,.1>;
vector hive_offset = <0,.5,0>;
// This is an OpenSim compatible llLookAt()
default
{
state_entry()
{
llSetTimerEvent(5); // move every 5 seconds
}
on_rez(integer p)
{
llSetTimerEvent(5); // move every 5 seconds
}
timer()
{
llSensor(FLOWER_NAME, NULL_KEY, ACTIVE|PASSIVE, 15.0,PI);
llSetTimerEvent(0);
}
sensor(integer numDetected)
{
//llOwnerSay((string) numDetected);
integer i;
string name = llDetectedName(0);
if (name == FLOWER_NAME)
{
for (i = 0; i < numDetected; i++)
{
llPlaySound("buzz1",1.0);
vector new = <90,0,0> * DEG_TO_RAD;
rotation r = llEuler2Rot(new);
llLookAt(llDetectedPos(i),1,0.1);
llSetPos(llDetectedPos(i) + <0,0.1,0>);
llSetRot(llDetectedRot(i) * r);
llSleep(4);
}
llSensor(HIVE_NAME,NULL_KEY,ACTIVE|PASSIVE,15.0,PI);
} else {
llPlaySound("buzz1",1.0);
vector pos = llDetectedPos(0);
llLookAt(llDetectedPos(0),1,0.1); // face beehive
llSetPos(pos + hive_offset);
vector new = <90,0,0> * DEG_TO_RAD;
rotation r = llEuler2Rot(new);
llSetRot(llDetectedRot(0) * r); // orient to it
llSleep(1);
llSetPos(pos ); // move in
llSleep(10);
llSetTimerEvent(2);
llSetPos(pos + hive_offset); //move out
llSleep(1);
}
}
no_sensor()
{
llSetTimerEvent(15);
}
}