Advertisement
BobMe

MepLaser

Feb 17th, 2018
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local p = game.Players.LocalPlayer
  2. local lol = Instance.new("Tool",p.Backpack)
  3. lol.Name = "LaserGun"
  4. lol.TextureId = "http://www.roblox.com/asset?id=130093050"
  5. local lol2 = Instance.new("Part",lol)
  6. lol2.Name = "Handle"
  7. lol2.Size = Vector3.new(0.01,0.01,0.01)
  8. local lol3 = Instance.new("SpecialMesh",lol2)
  9. lol3.MeshId = "http://www.roblox.com/asset?id=304360628"
  10. lol3.Scale = Vector3.new(0.01, 0.01, 0.01)
  11. lol3.TextureId = "http://www.roblox.com/asset?id=130093033"
  12. local lol4 = Instance.new("PointLight",lol2)
  13. lol4.Color = Color3.new(255, 0, 255)
  14. lol4.Range = 400
  15. lol4.Brightness = 100
  16. local lol5 = Instance.new("Sound",lol2)
  17. lol5.Name = "Fire"
  18. lol5.SoundId = "http://www.roblox.com/asset?id=136523485"
  19. lol5.Pitch = 1.8
  20. lol5.Volume = 5
  21. lol6 = Instance.new("Sound",lol2)
  22. lol6.Name = "Reload"
  23. lol6.SoundId = "http://www.roblox.com/asset?id=166032807"
  24. lol6.Pitch = 2.3
  25. lol6.Volume = 5
  26. local lol7 = Instance.new("Sound",lol2)
  27. lol7.Name = "HitFade"
  28. lol7.Pitch = 0.5
  29. lol7.Volume = 10
  30. lol7.SoundId = "http://www.roblox.com/asset?id=12222242"
  31. -----------------
  32. --| Constants |--
  33. -----------------
  34.  
  35. local SHOT_SPEED = 400
  36. local SHOT_TIME = 5
  37.  
  38. local NOZZLE_OFFSET = Vector3.new(0, 0.4, -1.1)
  39.  
  40. -----------------
  41. --| Variables |--
  42. -----------------
  43.  
  44. local PlayersService = Game:GetService('Players')
  45. local DebrisService = Game:GetService('Debris')
  46.  
  47. local Tool = lol
  48. local Handle = Tool:WaitForChild('Handle')
  49.  
  50. local FireSound = Handle:WaitForChild('Fire')
  51. local ReloadSound = Handle:WaitForChild('Reload')
  52. local HitFadeSound = Handle:WaitForChild('HitFade')
  53.  
  54. local PointLight = Handle:WaitForChild('PointLight')
  55.  
  56. local Character = nil
  57. local Humanoid = nil
  58. local Player = nil
  59.  
  60. local BaseShot = nil
  61.  
  62. -----------------
  63. --| Functions |--
  64. -----------------
  65.  
  66. -- Returns a character ancestor and its Humanoid, or nil
  67. local function FindCharacterAncestor(subject)
  68. if subject and subject ~= Workspace then
  69. local humanoid = subject:FindFirstChild('Humanoid')
  70. if humanoid then
  71. return subject, humanoid
  72. else
  73. return FindCharacterAncestor(subject.Parent)
  74. end
  75. end
  76. return nil
  77. end
  78.  
  79. -- Removes any old creator tags and applies new ones to the specified target
  80. local function ApplyTags(target)
  81. while target:FindFirstChild('creator') do
  82. target.creator:Destroy()
  83. end
  84.  
  85. local creatorTag = Instance.new('ObjectValue')
  86. creatorTag.Value = Player
  87. creatorTag.Name = 'creator' --NOTE: Must be called 'creator' for website stats
  88.  
  89. local iconTag = Instance.new('StringValue')
  90. iconTag.Value = Tool.TextureId
  91. iconTag.Name = 'icon'
  92.  
  93. iconTag.Parent = creatorTag
  94. creatorTag.Parent = target
  95. DebrisService:AddItem(creatorTag, 4)
  96. end
  97.  
  98. -- Returns all objects under instance with Transparency
  99. local function GetTransparentsRecursive(instance, partsTable)
  100. local partsTable = partsTable or {}
  101. for _, child in pairs(instance:GetChildren()) do
  102. if child:IsA('BasePart') or child:IsA('Decal') then
  103. table.insert(partsTable, child)
  104. end
  105. GetTransparentsRecursive(child, partsTable)
  106. end
  107. return partsTable
  108. end
  109.  
  110. local function SelectionBoxify(instance)
  111. local selectionBox = Instance.new('SelectionBox')
  112. selectionBox.Adornee = instance
  113. selectionBox.Color = BrickColor.new('Hot pink')
  114. selectionBox.Parent = instance
  115. return selectionBox
  116. end
  117.  
  118. local function Light(instance)
  119. local light = PointLight:Clone()
  120. light.Range = light.Range + 2
  121. light.Parent = instance
  122. end
  123.  
  124. local function FadeOutObjects(objectsWithTransparency, fadeIncrement)
  125. repeat
  126. local lastObject = nil
  127. for _, object in pairs(objectsWithTransparency) do
  128. object.Transparency = object.Transparency + fadeIncrement
  129. lastObject = object
  130. end
  131. wait()
  132. until lastObject.Transparency >= 1 or not lastObject
  133. end
  134.  
  135. local function Dematerialize(character, humanoid, firstPart)
  136. humanoid.WalkSpeed = 0
  137.  
  138. local parts = {}
  139. for _, child in pairs(character:GetChildren()) do
  140. if child:IsA('BasePart') then
  141. child.Anchored = true
  142. table.insert(parts, child)
  143. elseif child:IsA('LocalScript') or child:IsA('Script') then
  144. child:Destroy()
  145. end
  146. end
  147.  
  148. local selectionBoxes = {}
  149.  
  150. local firstSelectionBox = SelectionBoxify(firstPart)
  151. Light(firstPart)
  152. wait(0.05)
  153.  
  154. for _, part in pairs(parts) do
  155. if part ~= firstPart then
  156. table.insert(selectionBoxes, SelectionBoxify(part))
  157. Light(part)
  158. end
  159. end
  160.  
  161. local objectsWithTransparency = GetTransparentsRecursive(character)
  162. FadeOutObjects(objectsWithTransparency, 0.1)
  163.  
  164. wait(0.5)
  165.  
  166. humanoid.Health = 0
  167. DebrisService:AddItem(character, 2)
  168.  
  169. local fadeIncrement = 0.05
  170. Delay(0.2, function()
  171. FadeOutObjects({firstSelectionBox}, fadeIncrement)
  172. if character then
  173. character:Destroy()
  174. end
  175. end)
  176. FadeOutObjects(selectionBoxes, fadeIncrement)
  177. end
  178.  
  179. local function OnTouched(shot, otherPart)
  180. local character, humanoid = FindCharacterAncestor(otherPart)
  181. if character and humanoid and character ~= Character then
  182. ApplyTags(humanoid)
  183. if shot then
  184. local hitFadeSound = shot:FindFirstChild(HitFadeSound.Name)
  185. if hitFadeSound then
  186. hitFadeSound.Parent = humanoid.Torso
  187. hitFadeSound:Play()
  188. wait()
  189. hitFadeSound:Play()
  190. wait()
  191. hitFadeSound:Play()
  192. wait()
  193. hitFadeSound:Play()
  194. wait()
  195. hitFadeSound:Play()
  196. wait()
  197. hitFadeSound:Play()
  198. wait()
  199. hitFadeSound:Play()
  200. wait()
  201. hitFadeSound:Play()
  202. end
  203. shot:Destroy()
  204. end
  205. Dematerialize(character, humanoid, otherPart)
  206. end
  207. end
  208.  
  209. local function OnEquipped()
  210. Character = Tool.Parent
  211. Humanoid = Character:WaitForChild('Humanoid')
  212. Player = PlayersService:GetPlayerFromCharacter(Character)
  213. end
  214.  
  215. local function OnActivated()
  216. if Tool.Enabled and Humanoid.Health > 0 then
  217. Tool.Enabled = false
  218.  
  219. FireSound:Play()
  220.  
  221. local handleCFrame = Handle.CFrame
  222. local firingPoint = handleCFrame.p + handleCFrame:vectorToWorldSpace(NOZZLE_OFFSET)
  223. local shotCFrame = CFrame.new(firingPoint, Humanoid.TargetPoint)
  224.  
  225. local laserShotClone = BaseShot:Clone()
  226. laserShotClone.CFrame = shotCFrame + (shotCFrame.lookVector * (BaseShot.Size.Z / 2))
  227. local bodyVelocity = Instance.new('BodyVelocity')
  228. bodyVelocity.velocity = shotCFrame.lookVector * SHOT_SPEED
  229. bodyVelocity.Parent = laserShotClone
  230. laserShotClone.Touched:connect(function(otherPart)
  231. OnTouched(laserShotClone, otherPart)
  232. end)
  233. DebrisService:AddItem(laserShotClone, SHOT_TIME)
  234. laserShotClone.Parent = Tool
  235.  
  236. wait(0.001) -- FireSound length
  237.  
  238. ReloadSound:Play()
  239. wait(0.001) -- ReloadSound length
  240.  
  241. Tool.Enabled = true
  242. end
  243. end
  244.  
  245. local function OnUnequipped()
  246.  
  247. end
  248.  
  249. --------------------
  250. --| Script Logic |--
  251. --------------------
  252.  
  253. BaseShot = Instance.new('Part')
  254. BaseShot.Name = 'Effect'
  255. BaseShot.FormFactor = Enum.FormFactor.Custom
  256. BaseShot.Size = Vector3.new(0.01, 0.01, 0.01)
  257. BaseShot.CanCollide = false
  258. BaseShot.BrickColor = BrickColor.new('Hot pink')
  259. SelectionBoxify(BaseShot)
  260. Light(BaseShot)
  261. HitFadeSound:Clone().Parent = BaseShot
  262.  
  263. Tool.Equipped:connect(OnEquipped)
  264. Tool.Unequipped:connect(OnUnequipped)
  265. Tool.Activated:connect(OnActivated)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement