Advertisement
giratina1999

Untitled

May 27th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. integer Channel;
  2. float openingTime=0.6; // in seconds
  3. float openingAngle=-90.0; // in degrees
  4. float autocloseTime=15.0; // in seconds
  5. integer steps=4; // number of internal rotation steps
  6. integer world=TRUE; // align to world or root prim rotation
  7. integer listenHandle;
  8. string soundOpen="door_open";
  9. string soundClose="door_close";
  10. integer doorowner = TRUE;
  11. float omega=0.0;
  12. string User;
  13. vector axis;
  14. rotation closedRot;
  15. rotation openRot;
  16.  
  17. integer swinging;
  18. integer open;
  19. Reset()
  20. {
  21. llResetScript();
  22. }
  23. sound(string name)
  24. {
  25. if(llGetInventoryType(name)==INVENTORY_SOUND)
  26. llTriggerSound(name,1.0);
  27. }
  28.  
  29. openDoor(integer yes)
  30. {
  31. if(yes)
  32. sound(soundOpen);
  33.  
  34. vector useAxis=axis;
  35. open=yes;
  36.  
  37. if(!yes)
  38. useAxis=-axis;
  39.  
  40. llSetTimerEvent(openingTime/(float) steps);
  41. llTargetOmega(useAxis,omega,1.0);
  42. llLoopSound("177bfdd0-da9a-7145-29d7-1d8c6a48de4c",1);
  43. }
  44.  
  45. go()
  46. {
  47. if(swinging==0)
  48. {
  49. if(!open)
  50. {
  51. axis=<0.0,0.0,1.0>/llGetRootRotation();
  52.  
  53. closedRot=llGetLocalRot();
  54.  
  55. if(world)
  56. openRot=llGetRot()*llEuler2Rot(<0.0,0.0,openingAngle>*DEG_TO_RAD)/llGetRootRotation();
  57. else
  58.  
  59. openRot=closedRot*llEuler2Rot(<0.0,0.0,openingAngle>*DEG_TO_RAD);
  60. }
  61. swinging=steps;
  62.  
  63. openDoor(!open);
  64. }
  65. }
  66.  
  67. rotation slerp(rotation source,rotation target,float amount)
  68. {
  69. return llAxisAngle2Rot(llRot2Axis(target/=source),amount*llRot2Angle(target))*source;
  70. }
  71.  
  72. default
  73. {
  74. on_rez(integer start_param)
  75. {
  76. Reset();
  77. }
  78. state_entry()
  79. {
  80.  
  81. integer Channel = (integer) ( "0x" + (string) llGetOwner() ) - 654321;
  82. swinging=0;
  83. open=FALSE;
  84. omega=TWO_PI/360*openingAngle/openingTime;
  85. llTargetOmega(ZERO_VECTOR,1.0,1.0);
  86. listenHandle = llListen(Channel, "", NULL_KEY , "");
  87. }
  88. touch_start(integer num_detected)
  89. {
  90. User = llDetectedKey(0);
  91. Channel = (integer) ( "0x" + (string) llGetOwner() ) - 654321;
  92. if(doorowner == TRUE)
  93. {
  94. if(User == llGetOwner())
  95. {
  96. go();
  97. }
  98. else
  99. {
  100. llTriggerSound("6002da74-8ad8-0290-1310-695089090640",1);
  101. llInstantMessage(llDetectedKey(0), "You Are Unauthorized To Enter This TTC!");
  102.  
  103. }
  104. }
  105. if(doorowner == FALSE)
  106. {
  107. if(llDetectedKey(0))
  108. {
  109. llSay(Channel, "Open");
  110. go();
  111. }
  112. }
  113. }
  114. listen(integer Channel, string name, key id, string message)
  115. {
  116. integer Channel = (integer) ( "0x" + (string) llGetOwner() ) - 123456;
  117. if(message == "Open")
  118. {
  119. go();
  120. }
  121. if(message == "dooranyone")
  122. {
  123. doorowner = FALSE;
  124. }
  125. if(message == "doorowner")
  126. {
  127. doorowner = TRUE;
  128. }
  129. if(message == "Explode")
  130. {
  131. state exploded;
  132. }
  133. }
  134.  
  135. timer()
  136. {
  137. if(swinging>0)
  138. {
  139. swinging--;
  140. if(swinging!=0)
  141. {
  142. float amount=(float) swinging/(float) steps;
  143. if(open)
  144. amount=1.0-amount;
  145. llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL,slerp(closedRot,openRot,amount)]);
  146. return;
  147. }
  148.  
  149. llTargetOmega(axis,0.0,0.0);
  150. if(open)
  151. {
  152. llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL,openRot]);
  153. llSetTimerEvent(autocloseTime);
  154. }
  155. else
  156. {
  157.  
  158. llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_ROT_LOCAL,closedRot]);
  159. sound(soundClose);
  160. llStopSound();
  161. llSetTimerEvent(0.0);
  162. }
  163. }
  164.  
  165. }
  166. }
  167. state exploded
  168. {
  169. state_entry()
  170. {
  171.  
  172. }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement