Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.10 KB | None | 0 0
  1. @name Magical Suspension
  2. @outputs Left:array Right:array Ent:entity
  3. @persist DRVWheel Width Left:array Right:array Lefts Rights Constant Dampening RelDampening LDone LCount RDone RCount RD LD Selecting Ent:entity Base:entity Go Spawning Q
  4. @trigger
  5. if(first()){
  6.  
  7. #Credits to Dakota for making the suspension code. Aerthas for making it chat controlled & user friendly.
  8.  
  9. #Credits to DatAmazingCheese for making it MORE user friendly :>
  10.  
  11. runOnTick(1)
  12. runOnChat(1)
  13.  
  14. ########## VARIABLES MAKE SURE TO CHANGE ##########
  15.  
  16. # DRIVE SPROCKET #
  17.  
  18. DRVWheel = 1 #which wheel *from the back forward* is the drive wheel
  19.  
  20. # ELASTIC SETTINGS #
  21.  
  22. Constant = 50000
  23. Dampening = 1500
  24. RelDampening = 150
  25.  
  26. # ELASTIC COUNT #
  27.  
  28. RCount = 2 #how many elastics per wheel on the right side
  29. LCount = 2 #how many elastics per wheel on the left side
  30.  
  31. ########## DONT TOUCH UNDER HERE ##########
  32.  
  33. RDone = 0
  34. LDone = 0
  35.  
  36. Left=array()
  37. Right=array()
  38. Lefts = 0
  39. Rights = 0
  40.  
  41. holoCreate(1)
  42. holoColor(1,vec(255,0,0))
  43. holoAlpha(1,0)
  44.  
  45. print("Use the gravity gun and right click on your base plate. Type >start in chat after you have selected it.")
  46. function number array:hasValue( Entity:entity ) {
  47. for(I=1,This:count()) {
  48. if (This[I,entity] == Entity) {
  49. return 1
  50. }
  51. }
  52. return 0
  53. }
  54.  
  55. function number array:returnIndex( Entity:entity){
  56. for(I=1,This:count()) {
  57. if (This[I,entity] == Entity) {
  58. return I
  59. }
  60. }
  61. return 0
  62. }
  63. }
  64. Ent = owner():aimEntity()
  65. if(changed(owner():keyAttack2())&owner():keyAttack2()&Ent:isValid() & Selecting == 0 & owner():weapon():type() == "weapon_physcannon"){
  66. holoUnparent(1)
  67. holoAlpha(1,255)
  68. holoPos(1,Ent:pos())
  69. holoAng(1,Ent:angles())
  70. holoModel(1,Ent:model())
  71. holoParent(1,Ent)
  72.  
  73. Base = Ent
  74. }
  75. if(chatClk(owner())&owner():lastSaid():explode(""):string(1)==">"){
  76. hideChat(1)
  77.  
  78. if(owner():lastSaid():explode(" "):string(1):lower()==">start"){
  79. Selecting = 1
  80. holoColor(1,vec(0,255,0))
  81. print("Begin selecting your wheels. Start selecting wheels from front to back.")
  82. print("Left click for left side, right click for right side")
  83. print("Once finished selecting type >end [THICKNESS] to complete the suspension.")
  84. }
  85. if(owner():lastSaid():explode(" "):string(1):lower()==">end"){
  86. if(lastSaid():explode(" "):string(2):toNumber():toString() != lastSaid():explode(" "):string(2)){
  87. print("Please define suspension thickness! (Say >end [THICKNESS])")
  88. }
  89. else{
  90. Selecting = 0
  91. Width = owner():lastSaid():explode(" "):string(2):toNumber()
  92. Spawning = 1
  93. print(Spawning)
  94. }
  95. }
  96. }
  97. if(Selecting==1){
  98. if(owner():weapon():type() == "weapon_physcannon"){
  99. if(changed(owner():keyAttack1())&owner():keyAttack1()&!Left:hasValue(Ent)&Ent:isValid()){
  100. Lefts += 1
  101. Left[Lefts,entity] = Ent
  102. Ent:setColor(vec(0,0,255))
  103. print("Added "+toString(Ent)+" to the left side! Total: "+Lefts)
  104. }
  105. if(changed(owner():keyAttack2())&owner():keyAttack2()&!Right:hasValue(Ent)&Ent:isValid()){
  106. Rights += 1
  107. Right[Rights,entity] = Ent
  108. Ent:setColor(vec(255,0,0))
  109. print("Added "+toString(Ent)+" to the right side! Total: "+Rights)
  110. }
  111. if(changed(owner():keyReload())&owner():keyReload()&Ent:isValid()){
  112. if(Left:hasValue(Ent)){
  113. Left:removeEntity(Left:returnIndex(Ent))
  114. Ent:setColor(vec(255,255,255))
  115. Lefts--
  116. }
  117. elseif(Right:hasValue(Ent)){
  118. Right:removeEntity(Right:returnIndex(Ent))
  119. Ent:setColor(vec(255,255,255))
  120. Rights--
  121. }
  122. }
  123. }
  124. }
  125. if(Spawning == 1){
  126. if(Q <= Lefts&propCanCreate()){
  127. Q++
  128. POS = Left[Q,entity]:pos()
  129. ANG = Left[Q,entity]:angles()
  130. MODEL = Left[Q,entity]:model()
  131. MAT = Left[Q,entity]:getMaterial()
  132. Left[Q,entity]:propDelete()
  133. Left[Q,entity]=propSpawn(MODEL,POS,ANG,1)
  134. Left[Q,entity]:setMaterial(MAT)
  135. }
  136. if(Q == Lefts){
  137. Spawning = 2
  138. print(Spawning)
  139. Q = 0
  140. }
  141. }
  142. elseif(Spawning == 2){
  143. if(Q <= Rights&propCanCreate()){
  144. Q++
  145. POS = Right[Q,entity]:pos()
  146. ANG = Right[Q,entity]:angles()
  147. MODEL = Right[Q,entity]:model()
  148. MAT = Right[Q,entity]:getMaterial()
  149. Right[Q,entity]:propDelete()
  150. Right[Q,entity]=propSpawn(MODEL,POS,ANG,1)
  151. Right[Q,entity]:setMaterial(MAT)
  152. }
  153. if(Q == Rights){
  154. Spawning = 0
  155. Go = 1
  156. }
  157. }
  158.  
  159. if(changed(Go)&Go){
  160. LeftPos = -(Left[1,entity]:massCenter() - Left[Left:count(),entity]:massCenter())
  161. RightPos = -(Right[1,entity]:massCenter() - Right[Right:count(),entity]:massCenter())
  162. ToLeftPos = -(Right[1,entity]:massCenter() - Left[Left:count(),entity]:massCenter())
  163. ToRightPos = -(Left[1,entity]:massCenter() - Right[Right:count(),entity]:massCenter())
  164.  
  165. for(I=1,Lefts){
  166. Left[I,entity]:advballsocketTo(Base,Left[I,entity]:boxCenter(),(Left[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),vec(-180,-0.1,-0.1),vec(180,0.1,0.1),vec(0,0,0),0,0,1,0)
  167. Left[I,entity]:advballsocketTo(Left[DRVWheel,entity],Left[I,entity]:boxCenter(),Left[I,entity]:boxCenter(),vec(-0.1,-0.1,-0.1),vec(0.1,0.1,0.1),vec(0,0,0),0,0,1,0)
  168. Left[I,entity]:ropeTo(Base,Left[I,entity]:boxCenter(),(LeftPos + Left[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),0,0,Width,"",1)
  169. Left[I,entity]:ropeTo(Base,Left[I,entity]:boxCenter(),(ToRightPos + Left[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),0,0,Width,"",1)
  170. #noCollide(Left[I,entity],Base)
  171.  
  172. for(J=1,LCount){
  173. Left[I,entity]:elasticTo(Base,Left[I,entity]:boxCenter(),(Left[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),Constant,Dampening,RelDampening,"",0,1)
  174. }
  175. #Left[I,entity]:makeSpherical(Left[I,entity]:boxSize():z()/2)
  176. if(I==Left:count()){
  177. LD = 1
  178. print("Left Done")
  179. }
  180. else{
  181. #noCollide(Left[I,entity],Left[I+1,entity])
  182. }
  183.  
  184. }
  185.  
  186. for(I=1,Rights){
  187. Right[I,entity]:advballsocketTo(Base,Right[I,entity]:boxCenter(),(Right[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),vec(-180,-0.1,-0.1),vec(180,0.1,0.1),vec(0,0,0),0,0,1,0)
  188. Right[I,entity]:advballsocketTo(Right[DRVWheel,entity],Right[I,entity]:boxCenter(),Right[I,entity]:boxCenter(),vec(-0.1,-0.1,-0.1),vec(0.1,0.1,0.1),vec(0,0,0),0,0,1,0)
  189. Right[I,entity]:ropeTo(Base,Right[I,entity]:boxCenter(),(RightPos + Right[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),0,0,Width,"",1)
  190. Right[I,entity]:ropeTo(Base,Right[I,entity]:boxCenter(),(ToLeftPos + Right[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),0,0,Width,"",1)
  191. #noCollide(Right[I,entity],Base)
  192.  
  193. for(J=1,RCount){
  194. Right[I,entity]:elasticTo(Base,Right[I,entity]:boxCenter(),(Right[I,entity]:massCenter()-Base:massCenter()):rotate(-Base:angles()),Constant,Dampening,RelDampening,"",0,1)
  195. }
  196. #Right[I,entity]:makeSpherical(Right[I,entity]:boxSize():z()/2)
  197.  
  198. if(I==Right:count()){
  199. RD = 1
  200. print("Right Done")
  201. }
  202. else{
  203. #noCollide(Right[I,entity],Right[I+1,entity])
  204. }
  205. }
  206. }
  207. if(changed(RD)&RD == 1 & LD == 1|changed(LD)&LD == 1 & RD == 1){
  208. print("Make sure to redo the following:\nMake Spherical\nNo-Collide\nACF Armor/HP/Weight")
  209. Selection = 0
  210. Go = 0
  211. holoAlpha(1,0)
  212. holoColor(1,vec(255,0,0))
  213.  
  214. Left:clear()
  215. Right:clear()
  216. Lefts = 0
  217. Rights = 0
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement