Bee.lsl 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // :CATEGORY:Flying Bee
  2. // :NAME:Flying Bee and Hive
  3. // :AUTHOR:Ferd Frederix
  4. // :CREATED:2013-09-08 12:59:45
  5. // :EDITED:2013-09-18 15:38:53
  6. // :ID:995
  7. // :NUM:1491
  8. // :REV:2
  9. // :WORLD:Second Life
  10. // :DESCRIPTION:
  11. // A free flying bee that gathers pollen and takes it to his hive
  12. // :CODE:
  13. // Simple Bee script to locate and gather pollen from all prims named "Flower" then returns to the Beehive"
  14. // Requires 2 sounds buzz1 and buzz2
  15. string FLOWER_NAME = "Flower";
  16. string HIVE_NAME = "Beehive";
  17. vector offset = <0,.10,.1>;
  18. vector hive_offset = <0,.5,0>;
  19. // This is an OpenSim compatible llLookAt()
  20. default
  21. {
  22. state_entry()
  23. {
  24. llSetTimerEvent(5); // move every 5 seconds
  25. }
  26. on_rez(integer p)
  27. {
  28. llSetTimerEvent(5); // move every 5 seconds
  29. }
  30. timer()
  31. {
  32. llSensor(FLOWER_NAME, NULL_KEY, ACTIVE|PASSIVE, 15.0,PI);
  33. llSetTimerEvent(0);
  34. }
  35. sensor(integer numDetected)
  36. {
  37. //llOwnerSay((string) numDetected);
  38. integer i;
  39. string name = llDetectedName(0);
  40. if (name == FLOWER_NAME)
  41. {
  42. for (i = 0; i < numDetected; i++)
  43. {
  44. llPlaySound("buzz1",1.0);
  45. vector new = <90,0,0> * DEG_TO_RAD;
  46. rotation r = llEuler2Rot(new);
  47. llLookAt(llDetectedPos(i),1,0.1);
  48. llSetPos(llDetectedPos(i) + <0,0.1,0>);
  49. llSetRot(llDetectedRot(i) * r);
  50. llSleep(4);
  51. }
  52. llSensor(HIVE_NAME,NULL_KEY,ACTIVE|PASSIVE,15.0,PI);
  53. } else {
  54. llPlaySound("buzz1",1.0);
  55. vector pos = llDetectedPos(0);
  56. llLookAt(llDetectedPos(0),1,0.1); // face beehive
  57. llSetPos(pos + hive_offset);
  58. vector new = <90,0,0> * DEG_TO_RAD;
  59. rotation r = llEuler2Rot(new);
  60. llSetRot(llDetectedRot(0) * r); // orient to it
  61. llSleep(1);
  62. llSetPos(pos ); // move in
  63. llSleep(10);
  64. llSetTimerEvent(2);
  65. llSetPos(pos + hive_offset); //move out
  66. llSleep(1);
  67. }
  68. }
  69. no_sensor()
  70. {
  71. llSetTimerEvent(15);
  72. }
  73. }