Advertisement
cat568

Untitled

Jan 27th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --just put this on the top of a script and boom 89% works
  2. --note this does not work on big scripts
  3. if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
  4. local Player,game,owner = owner,game
  5. local RealPlayer = Player
  6. do
  7. local rp = RealPlayer
  8. script.Parent = rp.Character
  9.  
  10. --RemoteEvent for communicating
  11. local Event = Instance.new("RemoteEvent")
  12. Event.Name = "UserInput_Event"
  13.  
  14. --Fake event to make stuff like Mouse.KeyDown work
  15. local function fakeEvent()
  16. local t = {_fakeEvent=true,Functions={},Connect=function(self,f)table.insert(self.Functions,f) end}
  17. t.connect = t.Connect
  18. return t
  19. end
  20.  
  21. --Creating fake input objects with fake variables
  22. local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()}
  23. local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
  24. local CAS = {Actions={},BindAction=function(self,name,fun,touch,...)
  25. CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil
  26. end}
  27. --Merged 2 functions into one by checking amount of arguments
  28. CAS.UnbindAction = CAS.BindAction
  29.  
  30. --This function will trigger the events that have been :Connect()'ed
  31. local function te(self,ev,...)
  32. local t = m[ev]
  33. if t and t._fakeEvent then
  34. for _,f in pairs(t.Functions) do
  35. f(...)
  36. end
  37. end
  38. end
  39. m.TrigEvent = te
  40. UIS.TrigEvent = te
  41.  
  42. Event.OnServerEvent:Connect(function(plr,io)
  43. if plr~=rp then return end
  44. m.Target = io.Target
  45. m.Hit = io.Hit
  46. if not io.isMouse then
  47. local b = io.UserInputState == Enum.UserInputState.Begin
  48. if io.UserInputType == Enum.UserInputType.MouseButton1 then
  49. return m:TrigEvent(b and "Button1Down" or "Button1Up")
  50. end
  51. for _,t in pairs(CAS.Actions) do
  52. for _,k in pairs(t.Keys) do
  53. if k==io.KeyCode then
  54. t.Function(t.Name,io.UserInputState,io)
  55. end
  56. end
  57. end
  58. m:TrigEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower())
  59. UIS:TrigEvent(b and "InputBegan" or "InputEnded",io,false)
  60. end
  61. end)
  62. Event.Parent = NLS([==[
  63. local Player = game:GetService("Players").LocalPlayer
  64. local Event = script:WaitForChild("UserInput_Event")
  65.  
  66. local Mouse = Player:GetMouse()
  67. local UIS = game:GetService("UserInputService")
  68. local input = function(io,a)
  69. if a then return end
  70. --Since InputObject is a client-side instance, we create and pass table instead
  71. Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState,Hit=Mouse.Hit,Target=Mouse.Target})
  72. end
  73. UIS.InputBegan:Connect(input)
  74. UIS.InputEnded:Connect(input)
  75.  
  76. local h,t
  77. --Give the server mouse data 30 times every second, but only if the values changed
  78. --If player is not moving their mouse, client won't fire events
  79. while wait(1/30) do
  80. if h~=Mouse.Hit or t~=Mouse.Target then
  81. h,t=Mouse.Hit,Mouse.Target
  82. Event:FireServer({isMouse=true,Target=t,Hit=h})
  83. end
  84. end]==],Player.Character)
  85.  
  86. ----Sandboxed game object that allows the usage of client-side methods and services
  87. --Real game object
  88. local _rg = game
  89.  
  90. --Metatable for fake service
  91. local fsmt = {
  92. __index = function(self,k)
  93. local s = rawget(self,"_RealService")
  94. if s then return s[k] end
  95. end,
  96. __newindex = function(self,k,v)
  97. local s = rawget(self,"_RealService")
  98. if s then s[k]=v end
  99. end,
  100. __call = function(self,...)
  101. local s = rawget(self,"_RealService")
  102. if s then return s(...) end
  103. end
  104. }
  105. local function FakeService(t,RealService)
  106. t._RealService = typeof(RealService)=="string" and _rg:GetService(RealService) or RealService
  107. return setmetatable(t,fsmt)
  108. end
  109.  
  110. --Fake game object
  111. local g = {
  112. GetService = function(self,s)
  113. return self[s]
  114. end,
  115. Players = FakeService({
  116. LocalPlayer = FakeService({GetMouse=function(self)return m end},Player)
  117. },"Players"),
  118. UserInputService = FakeService(UIS,"UserInputService"),
  119. ContextActionService = FakeService(CAS,"ContextActionService"),
  120. }
  121. rawset(g.Players,"localPlayer",g.Players.LocalPlayer)
  122. g.service = g.GetService
  123.  
  124. g.RunService = FakeService({
  125. RenderStepped = _rg:GetService("RunService").Heartbeat,
  126. BindToRenderStep = function(self,name,_,fun)
  127. self._btrs[name] = self.Heartbeat:Connect(fun)
  128. end,
  129. UnbindFromRenderStep = function(self,name)
  130. self._btrs[name]:Disconnect()
  131. end,
  132. },"RunService")
  133.  
  134. setmetatable(g,{
  135. __index=function(self,s)
  136. return _rg:GetService(s) or typeof(_rg[s])=="function"
  137. and function(_,...)return _rg[s](_rg,...)end or _rg[s]
  138. end,
  139. __newindex = fsmt.__newindex,
  140. __call = fsmt.__call
  141. })
  142. --Changing owner to fake player object to support owner:GetMouse()
  143. game,owner = g,g.Players.LocalPlayer
  144. end
  145.  
  146.  
  147.  
  148. wait(1)
  149. local debris = game:GetService("Debris")
  150. local playerservice = game:GetService("Players")
  151. local xplayer = playerservice.LocalPlayer
  152. repeat wait(.5) until xplayer ~= nil
  153. local xcharacter = xplayer.Character
  154. local playermouse = xplayer:GetMouse()
  155. local playercam = workspace.CurrentCamera
  156. local playercharacter = xplayer.Character
  157.  
  158. repeat wait(.5) until xplayer.Character ~=nil
  159.  
  160. local xhumanoid = xcharacter:WaitForChild('Humanoid')
  161. local rltool = Instance.new("Tool")
  162. rltool.Name = 'GuidedMissile'
  163. rltool.GripForward = Vector3.new(0,0,-1)
  164. rltool.GripPos = Vector3.new(0.05,-0.6,-1)
  165. rltool.GripRight = Vector3.new(1,0,0)
  166. rltool.GripUp = Vector3.new(0,1,0)
  167. rltool.ToolTip = 'Launch the rocket and you will begin controlling the rocket'
  168. local handle = Instance.new("Part",rltool)
  169. handle.Name = "Handle"
  170. handle.Material = 'Plastic'
  171. handle.CanCollide = true
  172. handle.Locked = true
  173. handle.Size = Vector3.new(0.84,1.15,3.55)
  174. handle.TopSurface = 'Smooth'
  175. handle.BottomSurface = 'Smooth'
  176. local handlemesh = Instance.new("SpecialMesh",handle)
  177. handlemesh.MeshType = Enum.MeshType.FileMesh
  178. handlemesh.MeshId = "http://www.roblox.com/asset/?id=94690054"
  179. handlemesh.TextureId = "http://www.roblox.com/asset/?id=94689966"
  180. handlemesh.Scale = Vector3.new(1.5,1.5,1.5)
  181.  
  182. local MainTool = rltool
  183. local AmmoSize = 1
  184. local CurrentAmmo = 1
  185. local AmmoMax = math.huge
  186. local ToolEnabled = true
  187. local GuidedRocket = false
  188. local camerafollow = xhumanoid
  189. BaseRocket = nil
  190. local cooldown = 4
  191. local RocketSpeed = 75
  192.  
  193. local newsound = Instance.new("Sound")
  194. newsound.Name = 'NewSound'
  195. newsound.Volume = 1
  196. newsound.PlaybackSpeed = 1
  197. newsound.EmitterSize = 10
  198. newsound.MaxDistance = 10000
  199. newsound.Looped = false
  200.  
  201. MainTool.Parent = xplayer.Backpack
  202.  
  203. local RocketSize = Vector3.new(1,1,4)
  204.  
  205. function CreateBaseRocket()
  206. local rocket = Instance.new("Part")
  207. rocket.Name = "Rocket"
  208. rocket.Size = RocketSize
  209. rocket.CanCollide = false
  210. rocket.BottomSurface = 'Smooth'
  211. rocket.TopSurface = 'Smooth'
  212. rocket.BrickColor = BrickColor.Random()
  213. local specialmesh = Instance.new("SpecialMesh",rocket)
  214. specialmesh.MeshType = Enum.MeshType.FileMesh
  215. specialmesh.Scale = Vector3.new(.5,.5,.2)
  216. specialmesh.MeshId = "http://www.roblox.com/asset/?id=2251534"
  217. local attachmentr1 = Instance.new("Attachment",rocket)
  218. attachmentr1.Name = 'R0'
  219. attachmentr1.Position = Vector3.new(-1,0,-1)
  220. local attachmentr2 = attachmentr1:Clone()
  221. attachmentr2.Name = 'R1'
  222. attachmentr2.Position = Vector3.new(1,0,1)
  223. attachmentr2.Parent = rocket
  224. local trail = Instance.new("Trail",rocket)
  225. trail.LightEmission = .75
  226. trail.Color = ColorSequence.new(Color3.new(255/255,0,0),Color3.new(255/255,120/255,0))
  227. trail.Attachment0 = attachmentr1
  228. trail.Attachment1 = attachmentr2
  229. trail.MaxLength = 15
  230. trail.MinLength = .1
  231. trail.Lifetime = 4.5
  232. trail.Transparency = NumberSequence.new({
  233. NumberSequenceKeypoint.new(0,0.0);
  234. NumberSequenceKeypoint.new(.858,.081);
  235. NumberSequenceKeypoint.new(.958,.181);
  236. NumberSequenceKeypoint.new(1,1.0);
  237. })
  238. --[[local bodyForce = Instance.new('BodyForce', rocket)
  239. bodyForce.Name = 'Antigravity'
  240. bodyForce.force = Vector3.new(0, rocket:GetMass() * workspace.Gravity, 0)]]
  241.  
  242. BaseRocket = rocket
  243. end
  244.  
  245. function ToolEquipped()
  246. CreateBaseRocket()
  247.  
  248. if GuidedRocket == true then
  249. MainTool.Enabled = false
  250. end
  251. if GuidedRocket == false then
  252. MainTool.Enabled = true
  253. end
  254.  
  255. end
  256.  
  257. --[[function ControlRocket(main,Control_OBJ,Target_Position)
  258.  
  259. Control_OBJ.TargetOffset = Target_Position
  260.  
  261. end]]
  262.  
  263. function ToolActivated()
  264. if ToolEnabled== true and xcharacter and xhumanoid.Health > 0 then
  265. local targetPosition = xhumanoid.TargetPoint
  266. ToolEnabled = false
  267.  
  268. local SwooshSound = newsound:Clone()
  269. SwooshSound.PlaybackSpeed = .5
  270. SwooshSound.SoundId = "http://www.roblox.com/Asset?ID=132456187"
  271. SwooshSound.Name = 'Swoosh'
  272. SwooshSound.Volume = 1
  273. SwooshSound.Looped = true
  274.  
  275. local BoomSound = newsound:Clone()
  276. BoomSound.PlaybackSpeed = .7
  277. BoomSound.Volume = 3
  278. BoomSound.PlayOnRemove = true
  279. BoomSound.SoundId = "http://www.roblox.com/Asset?ID=138186576"
  280. BoomSound.Name = 'Boom'
  281. BoomSound.Looped = false
  282.  
  283.  
  284. local GRocket = BaseRocket:Clone()
  285.  
  286. local RocketControl = Instance.new("RocketPropulsion",GRocket)
  287. RocketControl.CartoonFactor = 1
  288. RocketControl.MaxSpeed = RocketSpeed
  289. RocketControl.TargetOffset = targetPosition
  290. RocketControl.ThrustD = 50000
  291. RocketControl.ThrustP = 500
  292. RocketControl.TargetRadius = 5
  293. RocketControl.MaxThrust = 50000
  294. RocketControl.MaxTorque = Vector3.new(4e6, 4e6, 0)
  295.  
  296. local spawnPosition = (handle.CFrame * CFrame.new(0, 0, -4)).p
  297. GRocket.CFrame = CFrame.new(spawnPosition, targetPosition)
  298. GRocket.Velocity = GRocket.CFrame.lookVector * RocketSpeed
  299.  
  300. SwooshSound.Parent = GRocket
  301. BoomSound.Parent = GRocket
  302. debris:AddItem(GRocket,20)
  303. GRocket.Parent = workspace
  304. playercam.CameraSubject = GRocket
  305. RocketControl:Fire()
  306.  
  307. SwooshSound.Playing = false
  308. wait(.15)
  309. wait(.15)
  310. SwooshSound:Play()
  311.  
  312.  
  313. GRocket.Touched:connect(function(part)
  314. if part and GRocket then
  315. if part.Parent then
  316. if part.Parent and part.Parent.Name ~= xcharacter.Name then
  317. local Explosion = Instance.new("Explosion",workspace)
  318. Explosion.Position = GRocket.Position
  319. Explosion.BlastPressure = 100000
  320. Explosion.BlastRadius = 14
  321. Explosion.ExplosionType = Enum.ExplosionType.CratersAndDebris
  322. GuidedRocket = false
  323. playercam.CameraSubject = xhumanoid
  324. GRocket:Destroy()
  325. end
  326. end
  327. end
  328. end)
  329.  
  330. GuidedRocket = true
  331.  
  332. playermouse.Move:Connect(function()
  333. if GuidedRocket == true then
  334. playermouse.TargetFilter = GRocket
  335. RocketControl.TargetOffset = Vector3.new(playermouse.Hit.X,playermouse.Hit.Y,playermouse.Hit.Z)
  336. end
  337. end)
  338.  
  339. if GRocket.Parent ~= nil and GuidedRocket==true then
  340. print('Controlling the rocket')
  341. end
  342. repeat wait(1) until GRocket.Parent == nil
  343. GuidedRocket = false
  344. playermouse.TargetFilter = nil
  345. playercam.CameraSubject = xhumanoid
  346. GuidedRocket = false
  347. wait(3)
  348. GuidedRocket = false
  349. ToolEnabled = true
  350. end
  351. end
  352.  
  353. function PlayerDied()
  354. if GuidedRocket == true and playercam.CameraSubject ~= xhumanoid then
  355. GuidedRocket = false
  356. playercam.CameraSubject = xhumanoid
  357. ToolEnabled = false
  358. MainTool.Enabled = false
  359. end
  360. if playercam.CameraSubject ~= xhumanoid then
  361. ToolEnabled = false
  362. MainTool.Enabled = false
  363. playercam.CameraSubject = xhumanoid
  364. GuidedRocket = false
  365. end
  366. end
  367. function ToolUnequipped()
  368. MainTool.Enabled = false
  369. end
  370.  
  371. MainTool.Equipped:Connect(ToolEquipped)
  372. MainTool.Unequipped:Connect(ToolUnequipped)
  373. MainTool.Activated:Connect(ToolActivated)
  374. xhumanoid.Died:Connect(PlayerDied)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement