Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local UIS = game:GetService("UserInputService")
- local RS = game:GetService("ReplicatedStorage")
- local events = RS:WaitForChild("Events")
- local gunFired = events:WaitForChild("GunFired")
- local gun = script.Parent
- local handle = gun:WaitForChild("Handle")
- local config = gun:WaitForChild("Config")
- local fireRate = config:WaitForChild("FireRate")
- local character = gun.Parent
- local fireBegin = nil
- local fireStop = nil
- local firing = false
- gun.Equipped:Connect(function()
- if fireBegin or fireStop or firing then
- fireBegin:Disconnect()
- fireStop:Disconnect()
- fireBegin = nil
- fireStop = nil
- firing = false
- end
- fireBegin = UIS.InputBegan:Connect(function(input, GPE)
- if GPE then return end
- if input.UserInputType == Enum.UserInputType.MouseButton1 then
- firing = true
- while firing do
- local direction
- local mousePosition = UIS:GetMouseLocation()
- local mouseRay = workspace.Camera:ViewportPointToRay(mousePosition.X, mousePosition.Y)
- local raycastParams = RaycastParams.new()
- raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
- raycastParams.FilterDescendantsInstances = {gun, character}
- local raycastResult = workspace:Raycast(mouseRay.Origin, mouseRay.Direction * 1000, raycastParams)
- if raycastResult then
- direction = CFrame.lookAt(handle.Barrel.WorldPosition, raycastResult.Position)
- else
- direction = CFrame.lookAt(handle.Barrel.WorldPosition, mouseRay.Origin)
- end
- gunFired:FireServer(gun, direction)
- task.wait(1 / fireRate.Value)
- end
- end
- end)
- fireStop = UIS.InputEnded:Connect(function(input, GPE)
- if GPE then return end
- if input.UserInputType == Enum.UserInputType.MouseButton1 then
- firing = false
- end
- end)
- end)
- gun.Unequipped:Connect(function()
- if fireBegin or fireStop or firing then
- fireBegin:Disconnect()
- fireStop:Disconnect()
- fireBegin = nil
- fireStop = nil
- firing = false
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment