Advertisement
Guest User

Untitled

a guest
Oct 24th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1.  
  2. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3. // FARM WATER BUCKET
  4. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  5.  
  6. key followUser=NULL_KEY;
  7. float uHeight = 0;
  8. vector rezPos;
  9. float rezPosZ;
  10. vector curPos;
  11. integer lastTs;
  12. string PASSWORD="";
  13. integer EXPIRES = -1;
  14. integer DRINKABLE = -1;
  15. vector FLOWCOLOR=<0.0, 0.5, 1.0>;
  16. key POURSND = "e12bc097-609b-4912-8ba0-3569b9a8d5a9";
  17.  
  18. integer chatchan = 0;
  19. string watercan;
  20. key watercanid;
  21. string itemname;
  22. vector itempos;
  23. rotation itemrot;
  24. rotation rezrot;
  25. vector item0pos = <0.0,-2.0,0.0>; // WATERCAN
  26. rotation item0rot = <0.0,0.0,0.0,1.0>;
  27.  
  28. rezobj()
  29. {
  30. itemname = watercan;
  31. itempos = item0pos;
  32. itemrot = item0rot;
  33. rezrot = itemrot * llGetRot();
  34. llRezAtRoot(itemname, llGetPos() + (itempos * llGetRot()), ZERO_VECTOR, rezrot, 1);
  35. }
  36.  
  37. water(key u)
  38. {
  39. llTriggerSound(llGetInventoryName(INVENTORY_SOUND,0), 1.0);
  40.  
  41. llParticleSystem(
  42. [
  43. PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_ANGLE_CONE,
  44. PSYS_SRC_BURST_RADIUS,.2,
  45. PSYS_SRC_ANGLE_BEGIN,0.,
  46. PSYS_SRC_ANGLE_END,.5,
  47. PSYS_PART_START_COLOR,FLOWCOLOR,
  48. PSYS_PART_END_COLOR,<1.0,1.0,1.0>,
  49. PSYS_PART_START_ALPHA,.9,
  50. PSYS_PART_END_ALPHA,.0,
  51. PSYS_PART_START_GLOW,0.0,
  52. PSYS_PART_END_GLOW,0.0,
  53. PSYS_PART_START_SCALE,<.1000000,.1000000,0.00000>,
  54. PSYS_PART_END_SCALE,<.9000000,.9000000,0.000000>,
  55. PSYS_SRC_TEXTURE,llGetInventoryName(INVENTORY_TEXTURE,0),
  56. PSYS_SRC_TARGET_KEY, u,
  57. PSYS_SRC_MAX_AGE,3,
  58. PSYS_PART_MAX_AGE,4,
  59. PSYS_SRC_BURST_RATE, .01,
  60. PSYS_SRC_BURST_PART_COUNT,3,
  61. PSYS_SRC_ACCEL,<0.000000,0.000000,-1.1>,
  62. PSYS_SRC_OMEGA,<0.000000,0.000000,0.000000>,
  63. PSYS_SRC_BURST_SPEED_MIN,1,
  64. PSYS_SRC_BURST_SPEED_MAX,2,
  65. PSYS_PART_FLAGS,
  66. 0 |
  67. PSYS_PART_EMISSIVE_MASK |
  68. PSYS_PART_TARGET_POS_MASK |
  69. PSYS_PART_INTERP_COLOR_MASK |
  70. PSYS_PART_INTERP_SCALE_MASK
  71. ] );
  72. }
  73.  
  74. reset()
  75. {
  76. lastTs = llGetUnixTime();
  77. llParticleSystem([]);
  78. llSetTimerEvent(900);
  79. }
  80.  
  81. string myName()
  82. {
  83. return llGetSubString(llGetObjectName(), 3, -1);
  84. }
  85.  
  86. default
  87. {
  88. state_entry()
  89. {
  90. rezPos = llGetPos();
  91. rezPosZ = rezPos.z;
  92. watercan = llGetInventoryName(INVENTORY_OBJECT,0);
  93. llListen(chatchan,"","","pour");
  94. llListen(chatchan,"","","kill water");
  95. }
  96.  
  97. on_rez(integer n)
  98. {
  99. llResetScript();
  100. }
  101.  
  102. object_rez(key id)
  103. {
  104. watercanid = id;
  105. llOwnerSay("WATERCANID " + (string)id);
  106. }
  107.  
  108. touch_start(integer n)
  109. {
  110. llParticleSystem([]);
  111.  
  112. if (!llSameGroup(llDetectedKey(0))) return;
  113.  
  114. if (followUser == NULL_KEY)
  115. {
  116. followUser = llDetectedKey(0);
  117. llSetTimerEvent(1.0);
  118. }
  119.  
  120. else
  121. {
  122. llSetKeyframedMotion( [], []);
  123. followUser = NULL_KEY;
  124. llSleep(.2);
  125. curPos = llGetPos();
  126. llSetPos(<curPos.x,curPos.y,rezPosZ>);
  127. }
  128. }
  129.  
  130. listen(integer channel, string name, key id, string message)
  131. {
  132. if(message == "kill water")
  133. {
  134. llDie();
  135. }
  136.  
  137. else if(message == "pour")
  138. {
  139. rezobj();
  140. llSleep(0.5);
  141. key u = watercanid;
  142. llOwnerSay("GOT WATERCANID " + (string)u);
  143. llSetRot(llEuler2Rot(<0,PI/1.4, 0>));
  144. water(u);
  145. llSleep(2);
  146. llDie();
  147. }
  148. }
  149.  
  150. timer()
  151. {
  152. if (followUser!= NULL_KEY)
  153. {
  154. list userData=llGetObjectDetails((key)followUser, [OBJECT_NAME,OBJECT_POS, OBJECT_ROT]);
  155. if (llGetListLength(userData)==0)
  156. {
  157. followUser = NULL_KEY;
  158. }
  159.  
  160. else
  161. {
  162. llSetKeyframedMotion( [], []);
  163. llSleep(.1);
  164. list kf;
  165. vector mypos = llGetPos();
  166. vector size = llGetAgentSize(followUser);
  167. uHeight = size.z;
  168. vector v = llList2Vector(userData, 1) + <0.6, 0.0, -0.1> * llList2Rot(userData,2);
  169.  
  170. float t = llVecDist(mypos, v)/10;
  171. if (t > .05)
  172. {
  173. if (t > 5) t = 5;
  174. vector vn = llVecNorm(v - mypos );
  175. vn.z = 0;
  176. rotation r2 = llRotBetween(<1,0,0>,vn);
  177.  
  178. kf += v- mypos;
  179. kf += ZERO_ROTATION;
  180. kf += t;
  181. llSetKeyframedMotion( kf, [KFM_DATA, KFM_TRANSLATION|KFM_ROTATION, KFM_MODE, KFM_FORWARD]);
  182. llSetTimerEvent(t+1);
  183. }
  184. }
  185.  
  186. return;
  187. }
  188.  
  189. llSetTimerEvent(900);
  190. }
  191.  
  192. dataserver(key id, string msg)
  193. {
  194. list tk = llParseStringKeepNulls(msg, ["|"], []);
  195.  
  196. if (llList2String(tk,0) == "DIE")
  197. {
  198. integer days = llFloor((llGetUnixTime()- lastTs)/86400);
  199. key u = llList2Key(tk,1);
  200. llSetRot(llEuler2Rot(<0,PI/1.4, 0>));
  201. water(u);
  202. llSleep(2);
  203. osMessageObject(u, llToUpper(myName())+"|"+PASSWORD);
  204. llDie();
  205. }
  206.  
  207. else if (llList2String(tk,0)== "INIT")
  208. {
  209. PASSWORD = llList2String(tk,1);
  210.  
  211. if (EXPIRES <0)
  212. EXPIRES = llList2Integer(tk,2);
  213.  
  214. if (DRINKABLE <0)
  215. DRINKABLE = llList2Integer(tk,3);
  216.  
  217. FLOWCOLOR = llList2Vector(tk,4);
  218. if (llList2String(tk,5) != "")
  219. POURSND = llList2Key(tk,5);
  220.  
  221. reset();
  222. }
  223. }
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement