Advertisement
radryk

Untitled

Jan 13th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 KB | None | 0 0
  1. //***************************
  2. // Master Opening Door Script s_doorsA
  3. //
  4. // Door is linked and second wing contains slave script (s_doorsB)
  5. // and its name must be same as this one with a postfix "_B"
  6. //***************************
  7. integer LINK_DA=LINK_THIS;
  8. integer LINK_DB;
  9.  
  10. float openingTime=1; // time to open
  11. float openingAngle=-120.0; // angle to open
  12. float autocloseTime=0.0; // auto close time (0-door remains open)
  13. float omega=0.0;
  14.  
  15. vector axis;
  16. rotation closedRot; rotation closedRot2;
  17. rotation openRot; rotation openRot2;
  18.  
  19. integer swinging;
  20. integer open;
  21. integer access = 3; // 0-public, 2-group, 3-owner
  22.  
  23. //==============================================
  24. default
  25. //==============================================
  26. {
  27. state_entry()
  28. {
  29. integer i;
  30. string pname=llGetLinkName(LINK_THIS)+"_B";
  31. for(i=2;i<=llGetNumberOfPrims();i++)
  32. if(pname==llGetLinkName(i))
  33. LINK_DB=i;
  34. else if(llGetLinkName(i)==llGetLinkName(LINK_THIS))
  35. LINK_DA=i;
  36. string pdesc = llToLower(llGetObjectDesc());
  37.  
  38. if( (i=llSubStringIndex(pdesc,"acc="))>=0)
  39. access = (integer)llGetSubString(pdesc,i+4,-1);
  40. if( (i=llSubStringIndex(pdesc,"ang="))>=0)
  41. openingAngle = (integer)llGetSubString(pdesc,i+4,-1);
  42. if( (i=llSubStringIndex(pdesc,"t1="))>=0)
  43. openingTime = (float)llGetSubString(pdesc,i+3,-1);
  44. if( (i=llSubStringIndex(pdesc,"t2="))>=0)
  45. autocloseTime = (float)llGetSubString(pdesc,i+3,-1);
  46. llOwnerSay("ANGLE="+(string)openingAngle);
  47. llOwnerSay("Started, accsess allowed to "+llList2String(["public","group","owner"],access) );
  48. swinging=FALSE;
  49. open=FALSE;
  50. omega=TWO_PI/360*openingAngle/openingTime;
  51. llTargetOmega(ZERO_VECTOR,1.0,1.0);
  52. }
  53.  
  54. on_rez(integer sp) { llResetScript(); }
  55.  
  56. changed(integer change)
  57. {
  58. if(change & CHANGED_LINK)
  59. {
  60. integer links = 0;
  61. if(llGetObjectPrimCount(llGetKey()) < (links = llGetNumberOfPrims()))
  62. ; // Seated on...
  63. else
  64. llResetScript();
  65. }
  66. }
  67.  
  68. touch_start(integer dummy)
  69. {
  70. llMessageLinked(LINK_THIS,100,"",llDetectedKey(0));
  71. }
  72.  
  73. link_message(integer src, integer cmd, string msg, key id)
  74. {
  75. if( (src!=LINK_DA) && (src!=LINK_DB) ) return;
  76. if(cmd==100) // TOUCHED
  77. {
  78. if( ((access==2) && (id!=llGetOwner()))
  79. || ((access==1) && (!llSameGroup(id)) ) )
  80. return;
  81. if(!swinging)
  82. {
  83. if(!open)
  84. llMessageLinked(LINK_SET,110,"","");
  85. llMessageLinked(LINK_SET,111,(string)(!open),"");
  86. }
  87. }
  88. else if (cmd==110)
  89. {
  90. axis=llRot2Up(llGetLocalRot());
  91. closedRot=llGetLocalRot();
  92. closedRot2=llEuler2Rot(<0, 0, 180>*DEG_TO_RAD)*closedRot;
  93. openRot=llEuler2Rot(<0, 0, openingAngle>*DEG_TO_RAD)*closedRot;
  94. // openRot2=llEuler2Rot((<0,0,180>-llRot2Euler(openRot)*RAD_TO_DEG)*DEG_TO_RAD);
  95. openRot2=llEuler2Rot(<0, 0, 180-openingAngle>*DEG_TO_RAD)*closedRot;
  96. }
  97.  
  98. else if(cmd==111)
  99. {
  100. if(!(open=(integer)msg))
  101. llMessageLinked(LINK_SET,112,(string)(-axis),(string)omega);
  102. else
  103. llMessageLinked(LINK_SET,112,(string)(axis),(string)omega);
  104. swinging=TRUE;
  105. llSetTimerEvent(openingTime);
  106. }
  107.  
  108. else if(cmd==112)
  109. {
  110. llTargetOmega((vector)msg,(float)((string)id),1.0);
  111. }
  112.  
  113. else if(cmd==124)
  114. {
  115. llTargetOmega((vector)msg,0.0,0.0);
  116. llSetLocalRot((rotation)((string)id));
  117. }
  118. }
  119.  
  120. timer()
  121. {
  122. if(swinging)
  123. {
  124. swinging=FALSE;
  125. if(open)
  126. {
  127. llMessageLinked(LINK_DA,124,(string)axis,(string)openRot);
  128. llMessageLinked(LINK_DB,124,(string)axis,(string )openRot2);
  129. llSetTimerEvent(autocloseTime);
  130. }
  131. else
  132. {
  133. llMessageLinked(LINK_DA,124,(string)axis,(string )closedRot);
  134. llMessageLinked(LINK_DB,124,(string)axis,(string )closedRot2);
  135. llSetTimerEvent(0.0);
  136. }
  137. }
  138. else
  139. llMessageLinked(LINK_SET,111,(string)(!open),"");
  140. }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement