Advertisement
mathmasterphil

Machine Face

Mar 21st, 2015
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 16.04 KB | None | 0 0
  1. local pjts = {}
  2. function FireProjectile(origin, velocity, raycallback, ignore, draw)
  3.     table.insert(pjts,{origin, origin, velocity, raycallback, ignore, draw})
  4. end
  5. local player = game:GetService("Players").LocalPlayer
  6. local mouse = player:GetMouse()
  7. local mousedown = false
  8. local downtime = 0
  9. local spin = false
  10. local selected = false
  11. local swagbullets = 200
  12. local neck = player.Character.Torso.Neck
  13. local neckc0 = neck.C0
  14. local bin = Instance.new("HopperBin", player.Backpack)
  15. bin.Name = "Machine Face"
  16. local staspin = Instance.new("Sound", player.Character.Head)
  17. staspin.SoundId = "http://roblox.com/asset/?id=10209788"
  18. local stospin = Instance.new("Sound", player.Character.Head)
  19. stospin.SoundId = "http://roblox.com/asset/?id=10209786"
  20. local sping = Instance.new("Sound", player.Character.Head)
  21. sping.SoundId = "http://roblox.com/asset/?id=10209780"
  22. sping.Looped = true
  23. local bang = Instance.new("Sound", player.Character.Head)
  24. bang.SoundId = "http://roblox.com/asset/?id=10209776"
  25. bang.Looped = true
  26. local clicking = Instance.new("Sound", player.Character.Head)
  27. clicking.SoundId = "http://roblox.com/asset/?id=10209771"
  28. clicking.Looped = true
  29. local face = nil
  30. if player.Character.Head:FindFirstChild("face") then
  31.         face = player.Character.Head.face:clone()
  32. end
  33. local controlpart = Instance.new("Part", player.Character)
  34. controlpart.Anchored = false
  35. controlpart.CanCollide = false
  36. controlpart.TopSurface = 0
  37. controlpart.BottomSurface = 0
  38. controlpart.FormFactor = "Custom"
  39. controlpart.Size = Vector3.new(0,0,0)
  40. controlpart.Transparency = 1
  41. local muzzle = Instance.new("Part", player.Character)
  42. muzzle.Anchored = false
  43. muzzle.CanCollide = false
  44. muzzle.TopSurface = 0
  45. muzzle.BottomSurface = 0
  46. muzzle.FormFactor = "Custom"
  47. muzzle.Size = Vector3.new(0,0,0)
  48. muzzle.Transparency = 1
  49. local casething = Instance.new("Part", player.Character)
  50. casething.Anchored = false
  51. casething.CanCollide = false
  52. casething.TopSurface = 0
  53. casething.BottomSurface = 0
  54. casething.FormFactor = "Custom"
  55. casething.Size = Vector3.new(0.5,0.3,0.7)
  56. casething.BrickColor = BrickColor.new("Really black")
  57. local control = Instance.new("Weld", controlpart)
  58. control.Part0 = player.Character.Head
  59. control.Part1 = controlpart
  60. control.C0 = CFrame.new(0,0,1)
  61. local muzweld = Instance.new("Weld", controlpart)
  62. muzweld.Part0 = player.Character.Head
  63. muzweld.Part1 = muzzle
  64. muzweld.C0 = CFrame.new(0,0.2,-1.4)
  65. local ctweld = Instance.new("Weld", controlpart)
  66. ctweld.Part0 = player.Character.Head
  67. ctweld.Part1 = casething
  68. ctweld.C0 = CFrame.new(0,0,0.1)
  69. local muzflash = Instance.new("PointLight", muzzle)
  70. muzflash.Range = 10
  71. muzflash.Color = Color3.new(1,0.8,0)
  72. muzflash.Enabled = false
  73. for i = 0,300,60 do
  74.         local mpart = Instance.new("Part", player.Character)
  75.         mpart.Anchored = false
  76.         mpart.CanCollide = false
  77.         mpart.TopSurface = 0
  78.         mpart.BottomSurface = 0
  79.         mpart.FormFactor = "Custom"
  80.         mpart.Size = Vector3.new(0.2,1,0.2)
  81.         mpart.BrickColor = BrickColor.new("Black")
  82.         Instance.new("CylinderMesh",mpart)
  83.         local weld = Instance.new("Weld", mpart)
  84.         weld.Part0 = controlpart
  85.         weld.Part1 = mpart
  86.         weld.C0 = CFrame.new(0,0,-1) * CFrame.Angles(math.rad(90),0,0) * CFrame.Angles(0,math.rad(i),0) * CFrame.new(0,0,0.2)
  87. end
  88. local dpart = Instance.new("Part", player.Character)
  89. dpart.Anchored = false
  90. dpart.CanCollide = false
  91. dpart.TopSurface = 0
  92. dpart.BottomSurface = 0
  93. dpart.FormFactor = "Custom"
  94. dpart.Size = Vector3.new(0.7,0.2,0.7)
  95. dpart.BrickColor = BrickColor.new("Black")
  96. Instance.new("CylinderMesh",dpart).Scale = Vector3.new(1,0.6,1)
  97. local dweld = Instance.new("Weld", dpart)
  98. dweld.Part0 = controlpart
  99. dweld.Part1 = dpart
  100. dweld.C0 = CFrame.new(0,0,-0.9) * CFrame.Angles(math.rad(90),0,0)
  101. local dpart = Instance.new("Part", player.Character)
  102. dpart.Anchored = false
  103. dpart.CanCollide = false
  104. dpart.TopSurface = 0
  105. dpart.BottomSurface = 0
  106. dpart.FormFactor = "Custom"
  107. dpart.Size = Vector3.new(0.7,0.2,0.7)
  108. dpart.BrickColor = BrickColor.new("Black")
  109. Instance.new("CylinderMesh",dpart).Scale = Vector3.new(1,0.6,1)
  110. local dweld = Instance.new("Weld", dpart)
  111. dweld.Part0 = controlpart
  112. dweld.Part1 = dpart
  113. dweld.C0 = CFrame.new(0,0,-1.3) * CFrame.Angles(math.rad(90),0,0)
  114. bin.Selected:connect(function()
  115.         local asd = 1
  116.         local tcount = 0
  117.         if player.Character.Head:FindFirstChild("face") then player.Character.Head.face:Destroy() end
  118.         while true do
  119.                 local dt = wait()
  120.                 tcount = tcount + dt
  121.                 asd = 1+math.cos((math.pi/2)+(tcount*4))*1.1
  122.                 if tcount >= 0.5 then
  123.                         break
  124.                 end
  125.                 control.C0 = CFrame.new(0,0,asd)
  126.         end
  127.         control.C0 = CFrame.new()
  128.         local asd = 0.1
  129.         while true do
  130.                 local dt = wait()
  131.                 asd = asd + dt
  132.                 if asd >= 0.3 then
  133.                         break
  134.                 end
  135.                 ctweld.C0 = CFrame.new(0,0,asd)
  136.         end
  137.         ctweld.C0 = CFrame.new(0,0,0.3)
  138.         selected = true
  139. end)
  140. bin.Deselected:connect(function()
  141.         selected = false
  142.         if spin then
  143.                 sping:Stop()
  144.                 staspin:Stop()
  145.                 bang:Stop()
  146.                 clicking:Stop()
  147.                 stospin:Play()
  148.         end
  149.         spin = false
  150.         mousedown = false
  151.         local asd = 0.3
  152.         while true do
  153.                 local dt = wait()
  154.                 asd = asd - dt
  155.                 if asd <= 0.1 then
  156.                         break
  157.                 end
  158.                 ctweld.C0 = CFrame.new(0,0,asd)
  159.         end
  160.         ctweld.C0 = CFrame.new(0,0,0.1)
  161.         local asd = 0
  162.         local tcount = 0
  163.         while true do
  164.                 local dt = wait()
  165.                 tcount = tcount + dt
  166.                 asd = 1+math.sin(((tcount-0.1)*4)-(math.pi/2))*1.1
  167.                 if tcount >= 0.48 then
  168.                         break
  169.                 end
  170.                 control.C0 = CFrame.new(0,0,asd)
  171.         end
  172.         control.C0 = CFrame.new(0,0,1)
  173.         face:clone().Parent = player.Character.Head
  174. end)
  175. mouse.KeyDown:connect(function(key)
  176.         if key == "q" and selected then
  177.                 spin = true
  178.                 staspin:Play()
  179.                 coroutine.wrap(function()
  180.                         wait(0.8)
  181.                         if spin then
  182.                                 staspin:Stop()
  183.                                 sping:Play()
  184.                         end
  185.                 end)()
  186.         elseif key == "r" and selected then
  187.                
  188.                 swagbullets = 200
  189.         end
  190. end)
  191. mouse.KeyUp:connect(function(key)
  192.         if key == "q" and selected and spin then
  193.                 spin = false
  194.                 mousedown = false
  195.                 sping:Stop()
  196.                 staspin:Stop()
  197.                 bang:Stop()
  198.                 clicking:Stop()
  199.                 stospin:Play()
  200.         end
  201. end)
  202. mouse.Button1Down:connect(function()
  203.         if spin then
  204.                 mousedown = true
  205.                 bang:Play()
  206.         end
  207. end)
  208. mouse.Button1Up:connect(function()
  209.         mousedown = false
  210.         bang:Stop()
  211.         clicking:Stop()
  212. end)
  213. function gethums(part)
  214.         local hums = {}
  215.         local function scanparent(asd)
  216.                 local humscan = {}
  217.                 for _,v in pairs(asd.Parent:GetChildren()) do
  218.                         if v:IsA("Humanoid") then
  219.                                 table.insert(humscan,v)
  220.                         end
  221.                 end
  222.                 return asd.Parent, humscan
  223.         end
  224.         local currentasd = part
  225.         while true do
  226.                 if currentasd.Parent ~= workspace then
  227.                         local parent, humscan = scanparent(currentasd)
  228.                         hums = {unpack(hums),unpack(humscan)}
  229.                         currentasd = parent
  230.                 else
  231.                         break
  232.                 end
  233.         end
  234.         return hums
  235. end
  236. --FireProjectile(player.Character.Head.Position, player.Character.Head.Velocity+mouse.UnitRay.Direction*400, function(self,...) return false end, {player.Character})
  237. while true do
  238.         local dt = wait()
  239.         local ax,ay,az = player.Character.Torso.CFrame:toEulerAnglesXYZ()
  240.         local cx,cy,cz = CFrame.new(Vector3.new(),mouse.UnitRay.Direction):toEulerAnglesXYZ()
  241.         neck.C0 = CFrame.new(0,1,0)*(CFrame.Angles(ax,ay,az):inverse())*CFrame.Angles(cx,cy,cz)*CFrame.Angles(-math.pi/2,0,math.pi)
  242.         if spin then
  243.                 control.C0 = control.C0 * CFrame.Angles(0,0,10*dt)
  244.         end
  245.         if mousedown and spin then
  246.                 downtime = downtime + dt
  247.         else
  248.                 downtime = 0
  249.         end
  250.         if downtime >= 0.05 then
  251.                 muzflash.Enabled = true
  252.                 for i = 0.05, downtime, 0.05 do
  253.                         if swagbullets > 0 then
  254.                                 downtime = downtime - 0.05
  255.                                 swagbullets = swagbullets - 1
  256.                                 FireProjectile((muzzle.CFrame).p, player.Character.Head.Velocity+((Vector3.new(math.random()-0.5,math.random()-0.5,math.random()-0.5)*0.05)+mouse.UnitRay.Direction)*250, function(self,opart)
  257.                                         local humans = gethums(opart)
  258.                                         for _,hum in pairs(humans) do
  259.                                                 hum:TakeDamage(5)
  260.                                         end
  261.                                         return false
  262.                                 end, {player.Character}, function(p1,p2)
  263.                                         asdpart = Instance.new("Part")
  264.                                         asdpart.Anchored = true
  265.                                         asdpart.CanCollide = false
  266.                                         asdpart.TopSurface = 0
  267.                                         asdpart.BottomSurface = 0
  268.                                         asdpart.FormFactor = "Custom"
  269.                                         asdpart.Size = Vector3.new(1,1,1)
  270.                                         asdpart.BrickColor = BrickColor.new("Bright yellow")
  271.                                         asdpart.Reflectance = 0.5
  272.                                         asdpart.CFrame = CFrame.new(p1:Lerp(p2,0.5),p2)+Vector3.new(100,100,0)
  273.                                         local asdmesh = Instance.new("BlockMesh",asdpart)
  274.                                         asdmesh.Scale = Vector3.new(0.1,0.1,(p1-p2).magnitude)
  275.                                         asdmesh.Offset = ((asdpart.CFrame - asdpart.CFrame.p):inverse() * CFrame.new(-100,-100,0)).p
  276.                                         asdpart.Parent = workspace
  277.                                         coroutine.wrap(function()
  278.                                                 local noobfacepartlol = asdpart
  279.                                                 wait()
  280.                                                 if noobfacepartlol then noobfacepartlol:Destroy() end
  281.                                         end)()
  282.                                         return asdpart
  283.                                 end)
  284.                         else
  285.                                 if not clicking.IsPlaying then
  286.                                         clicking:Play()
  287.                                         bang:Stop()
  288.                                 end
  289.                         end
  290.                 end
  291.                 coroutine.wrap(function()
  292.                         if swagbullets <= 0 then
  293.                                 muzflash.Enabled = false
  294.                         end
  295.                         wait()
  296.                         if swagbullets > 0 then
  297.                                 muzflash.Enabled = false
  298.                                 local scr = Instance.new("BillboardGui", muzzle)
  299.                                 scr.Adornee = muzzle
  300.                                 scr.Size = UDim2.new(2, 0, 2, 0)
  301.                                 scr.StudsOffset = Vector3.new(0,0,0.2)
  302.                                 scr.Name = "flash"
  303.                                 local pic = Instance.new("ImageLabel", scr)
  304.                                 pic.Image = "http://www.roblox.com/asset/?id=62701218"
  305.                                 pic.Size = UDim2.new(1, 0, 1, 0)
  306.                                 pic.BorderSizePixel = 0
  307.                                 pic.BackgroundTransparency = 1
  308.                                 game:GetService("Debris"):AddItem(scr,0.1)
  309.                                 local case = Instance.new("Part", player.Character)
  310.                                 case.Name = "BulletShell"
  311.                                 case.Anchored = false
  312.                                 case.CanCollide = true
  313.                                 case.TopSurface = "Smooth"
  314.                                 case.BottomSurface = "Smooth"
  315.                                 case.FormFactor = "Custom"
  316.                                 case.Size = Vector3.new(0.2, 0.4, 0.2)
  317.                                 case.Elasticity = 0
  318.                                 case.Reflectance = 0.1
  319.                                 case.BrickColor = BrickColor.new("Bright yellow")
  320.                                 case.CFrame = player.Character.Head.CFrame * CFrame.new(0,0,0.9) * CFrame.Angles(0,0,math.pi/2)
  321.                                 case.Velocity = Vector3.new(0,11,0)-mouse.UnitRay.Direction*7
  322.                                 local casemesh = Instance.new("CylinderMesh", case)
  323.                                 casemesh.Scale = Vector3.new(0.7, 0.7, 0.7)
  324.                                 game:GetService("Debris"):AddItem(case,0.6)
  325.                                 ctweld.C0 = CFrame.new(0,0,0.7)
  326.                                 wait()
  327.                                 ctweld.C0 = CFrame.new(0,0,0.3)
  328.                         end
  329.                 end)()
  330.         end
  331.         for i,pjt in pairs(pjts) do
  332.                 pjt[2] = pjt[1]
  333.                 pjt[1] = pjt[1] + pjt[3]*dt
  334.                 pjt[3] = pjt[3] - Vector3.new(0,196.2,0)*dt
  335.                 local pjtray = Ray.new(pjt[2],pjt[1]-pjt[2])
  336.                 local pjtig = {unpack(pjt[5]),pjt[7]}
  337.                 for _,opjt in pairs(pjts) do
  338.                         if opjt[7] then
  339.                                 table.insert(pjtig,opjt[7])
  340.                         end
  341.                 end
  342.                 local hpart, hpos = workspace:FindPartOnRayWithIgnoreList(pjtray, pjtig, false)
  343.                 if hpart and hpos then
  344.                         local stillgoes = pjt[4](pjt,hpart,hpos,pjt[3])
  345.                         if stillgoes then
  346.                                 hpos = pjt[1]
  347.                         else
  348.                                 pjts[i] = nil
  349.                         end
  350.                 end
  351.                 if pjt[6] then
  352.                         pjt[7] = pjt[6](pjt[2],hpos)
  353.                 else
  354.                         pjt[7] = Instance.new("Part")
  355.                         pjt[7].Anchored = true
  356.                         pjt[7].CanCollide = false
  357.                         pjt[7].TopSurface = 0
  358.                         pjt[7].BottomSurface = 0
  359.                         pjt[7].FormFactor = "Custom"
  360.                         pjt[7].Size = Vector3.new(1,1,1)
  361.                         pjt[7].CFrame = CFrame.new(pjt[2]:Lerp(hpos,0.5),hpos)+Vector3.new(100,100,0)
  362.                         local asdmesh = Instance.new("BlockMesh",pjt[7])
  363.                         asdmesh.Scale = Vector3.new(0.2,0.2,(pjt[2]-hpos).magnitude)
  364.                         asdmesh.Offset = ((pjt[7].CFrame - pjt[7].CFrame.p):inverse() * CFrame.new(-100,-100,0)).p
  365.                         pjt[7].Parent = workspace
  366.                         coroutine.wrap(function()
  367.                                 local noobfacepartlol = pjt[7]
  368.                                 wait()
  369.                                 if noobfacepartlol then noobfacepartlol:Destroy() end
  370.                         end)()
  371.                 end
  372.                 if pjt[1].y < -300 then
  373.                         pjts[i] = nil
  374.                 end
  375.         end
  376. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement