Advertisement
Navarone19_CH

PowerLocalScript #1

Dec 5th, 2019
1,442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.58 KB | None | 0 0
  1. local Bomb = {
  2. Tool = script.Parent,
  3. Equipped = false,
  4.  
  5. Tracks = {},
  6. Controls = {
  7. Forward = 0,
  8. Backward = 0,
  9. Left = 0,
  10. Right = 0
  11. },
  12. FlyingSpeed = 20,
  13. FlyingTopSpeed = 50,
  14. Flying = false,
  15. Momentum = Vector3.new(),
  16. LastMomentum = Vector3.new(),
  17. TotalMomentum = 0,
  18. Tilt = 0,
  19. LastTilt = 0,
  20. MouseDown = false,
  21. StartChargeAt = 10,
  22.  
  23. -- to be initialized
  24. FlyingInertia = 0
  25. }
  26.  
  27. local UIS = Game:GetService'UserInputService'
  28. local textBoxFocused = false
  29.  
  30. UIS.TextBoxFocused:connect(function() textBoxFocused=true end)
  31. UIS.TextBoxFocusReleased:connect(function() textBoxFocused=false end)
  32.  
  33. --
  34. --
  35. function Bomb.Validate()
  36. assert(Bomb.Tool:WaitForChild'FlyAnimation':IsA'Animation', 'Failed to find FlyAnimation Animation')
  37. assert(Bomb.Tool:WaitForChild'ChargeEnergyBall':IsA'Animation', 'Failed to find ChargeEnergyBall')
  38. end
  39. function Bomb.Initialize()
  40. Bomb.FlyingInertia = 1 - Bomb.FlyingSpeed/Bomb.FlyingTopSpeed
  41. end
  42. function Bomb.Start()
  43. Bomb.Validate()
  44. Bomb.Initialize()
  45. Bomb.Connect()
  46. end
  47. function Bomb.Connect()
  48. Bomb.Tool.Equipped:connect(Bomb.OnEquip)
  49. Bomb.Tool.Unequipped:connect(Bomb.OnUnequip)
  50.  
  51. UIS.InputBegan:connect(Bomb.OnInput)
  52. UIS.InputEnded:connect(Bomb.OnInput)
  53. if UIS.TouchEnabled then
  54. UIS.JumpRequest:connect(Bomb.OnJumpRequest)
  55. end
  56. end
  57. function Bomb.OnEquip(mouse)
  58. Bomb.Equipped = true
  59.  
  60. Bomb.GetTrack'ChargeEnergyBall':Stop()
  61. mouse.Icon = 'rbxasset://133931805'
  62.  
  63. mouse.Button1Down:connect(function()
  64. if Bomb.MouseDown then return end
  65.  
  66. Bomb.MouseDown = true
  67.  
  68. local character = Bomb.Tool.Parent
  69. local head, humanoid = character:FindFirstChild'Head', character:FindFirstChild'Humanoid'
  70.  
  71. if head ~= nil and head:IsA'BasePart' and humanoid ~= nil and humanoid:IsA'Humanoid' then
  72. mouse.Icon = 'rbxasset://133931820'
  73. Bomb.Tool.StartCharge:FireServer()
  74.  
  75. Bomb.GetTrack'ChargeEnergyBall':Stop()
  76. Bomb.GetTrack'ChargeEnergyBall':Play()
  77. end
  78. end)
  79. mouse.Button1Up:connect(function()
  80. if not Bomb.MouseDown then return end
  81.  
  82. Bomb.MouseDown = false
  83.  
  84. Bomb.Tool.StopCharge:FireServer(mouse.Hit.p)
  85.  
  86. Bomb.GetTrack'ChargeEnergyBall':Stop()
  87.  
  88. wait()
  89. mouse.Icon = 'rbxasset://textures\\GunCursor.png'
  90. end)
  91. end
  92. function Bomb.OnUnequip()
  93. Bomb.Equipped = false
  94. end
  95. function Bomb.GetTrack(name)
  96. if Bomb.Tracks[name] then return Bomb.Tracks[name] end
  97.  
  98. local animation = Bomb.Tool:FindFirstChild(name, true)
  99. assert(animation, 'Failed to find animation '..name)
  100.  
  101. local humanoid = Bomb.Tool.Parent:FindFirstChild'Humanoid'
  102. assert(humanoid, 'Failed to find Humanoid')
  103.  
  104. Bomb.Tracks[name] = humanoid:LoadAnimation(animation)
  105.  
  106. return Bomb.GetTrack(name)
  107. end
  108. function Bomb.RemoveFlyStuff()
  109. local player = game.Players.LocalPlayer
  110. local character = player.Character
  111.  
  112. if character then
  113. local torso = character:FindFirstChild'Torso'
  114.  
  115. if torso and torso:IsA'BasePart' then
  116. for index, obj in next, torso:GetChildren() do
  117. if obj.Name == 'FlightGyro' or obj.Name == 'FlightVelocity' then
  118. obj:Destroy()
  119. end
  120. end
  121. end
  122. end
  123. end
  124. function Bomb.Fly()
  125. if not Bomb.Equipped then
  126. Bomb.Flying = false
  127. else
  128. Bomb.Flying = not Bomb.Flying
  129. end
  130.  
  131. Bomb.RemoveFlyStuff()
  132. if Bomb.Flying then
  133. local character = Bomb.Tool.Parent
  134. local torso = character:FindFirstChild'Torso'
  135. local humanoid = character:FindFirstChild'Humanoid'
  136.  
  137. if torso and torso:IsA'BasePart' and humanoid and humanoid:IsA'Humanoid' and humanoid.Health > 0 then
  138. Bomb.Momentum = torso.Velocity + torso.CFrame.lookVector*3 + Vector3.new(0, 10, 0)
  139.  
  140. local gyro = Instance.new'BodyGyro'
  141. gyro.Name = 'FlightGyro'
  142. gyro.P = 10^6
  143. gyro.maxTorque = Vector3.new(1,1,1)*gyro.P
  144. gyro.cframe = torso.CFrame
  145. gyro.Parent = torso
  146.  
  147. Bomb.Velocity = Instance.new'BodyVelocity'
  148. Bomb.Velocity.Name = 'FlightVelocity'
  149. Bomb.Velocity.velocity = Vector3.new()
  150. Bomb.Velocity.P = 10^4
  151. Bomb.Velocity.maxForce = Vector3.new(1,1,1)*10^6
  152. Bomb.Velocity.Parent = torso
  153.  
  154. Bomb.GetTrack'FlyAnimation':Stop()
  155. Bomb.GetTrack'FlyAnimation':Play()
  156.  
  157. while Bomb.Flying and humanoid.Health > 0 and Bomb.Equipped do
  158. local movement = workspace.CurrentCamera.CoordinateFrame:vectorToWorldSpace(Vector3.new(Bomb.Controls.Left+Bomb.Controls.Right, math.abs(Bomb.Controls.Forward)*0.2, Bomb.Controls.Forward+Bomb.Controls.Backward))*Bomb.FlyingSpeed
  159. --print(movement)
  160. Bomb.Momentum = (Bomb.FlyingInertia*Bomb.Momentum)+movement
  161. Bomb.TotalMomentum = Bomb.Momentum.magnitude
  162.  
  163. Bomb.TotalMomentum = math.min(Bomb.TotalMomentum, Bomb.FlyingTopSpeed)
  164.  
  165. local tilt = ((Bomb.Momentum*Vector3.new(1,0,1)).unit:Cross(((Bomb.LastMomentum*Vector3.new(1,0,1)).unit))).y
  166. if tostring(tilt)=="-1.#IND" or tostring(tilt)=="1.#IND" or tilt==math.huge or tilt==-math.huge or tostring(0/0) == tostring(tilt) then
  167. tilt=0
  168. end
  169. local abstilt = math.abs(tilt)
  170. if abstilt>0.06 or abstilt<0.0001 then
  171. if math.abs(Bomb.LastTilt)>0.0001 then
  172. tilt = Bomb.LastTilt*0.9
  173. else
  174. tilt = 0
  175. end
  176. else
  177. tilt=(Bomb.LastTilt*.77)+(tilt*.25)
  178. end
  179.  
  180. Bomb.LastTilt = tilt
  181.  
  182. if Bomb.TotalMomentum < 0.5 then
  183. Bomb.Momentum = Vector3.new()
  184. Bomb.TotalMomentum = 0
  185. gyro.cframe = workspace.CurrentCamera.CoordinateFrame
  186. else
  187. gyro.cframe = CFrame.new(Vector3.new(0,0,0),Bomb.Momentum)*CFrame.Angles(0,0,tilt*(-20))*CFrame.Angles(math.pi*(-.5)*(Bomb.TotalMomentum/Bomb.FlyingTopSpeed),0,0)
  188. end
  189.  
  190. Bomb.Velocity.velocity = Bomb.Momentum
  191. Bomb.LastMomentum = Bomb.Momentum
  192. wait()
  193. end
  194.  
  195. Bomb.RemoveFlyStuff()
  196. Bomb.GetTrack'FlyAnimation':Stop()
  197. Bomb.Flying = false
  198. end
  199. end
  200. end
  201. function Bomb.OnInput(input)
  202. if input.UserInputType == Enum.UserInputType.Keyboard and Bomb.Equipped then
  203. local dir = input.UserInputState == Enum.UserInputState.Begin and 1 or 0
  204.  
  205. if input.KeyCode == Enum.KeyCode.N and dir==1 then
  206. Bomb.OnJumpRequest()
  207. elseif input.KeyCode == Enum.KeyCode.W then
  208. Bomb.Controls.Forward = -1*dir
  209. elseif input.KeyCode == Enum.KeyCode.A then
  210. Bomb.Controls.Left = -1*dir
  211. elseif input.KeyCode == Enum.KeyCode.S then
  212. Bomb.Controls.Backward = 1*dir
  213. elseif input.KeyCode == Enum.KeyCode.D then
  214. Bomb.Controls.Right = 1*dir
  215. end
  216. end
  217. end
  218. function Bomb.OnJumpRequest()
  219. if Bomb.Equipped and not textBoxFocused then
  220. Bomb.Fly()
  221.  
  222. local torso = Bomb.Tool.Parent:FindFirstChild'Torso'
  223. if torso and torso:IsA'BasePart' then
  224. torso.Velocity = Bomb.Momentum
  225. end
  226. end
  227. end
  228.  
  229.  
  230. --
  231. --
  232. Bomb.Start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement