Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local tool = script.Parent.Parent
- local player = game:GetService("Players").LocalPlayer
- local mouse = player:GetMouse()
- local hole = tool:WaitForChild("Hole")
- local handle = tool:WaitForChild("Handle")
- local actionService = game:GetService("ContextActionService")
- local mouseDown = false
- local equipped = false
- local oldIcon = mouse.Icon
- local sprinting = false
- local relDeb = false
- local animations = tool:WaitForChild("Animations")
- local configs = tool:WaitForChild("Configs")
- local remotes = tool:WaitForChild("Remotes")
- local holdAnim = animations:WaitForChild("Hold")
- local sprintAnim = animations:WaitForChild("Sprint")
- local reloadAnim = animations:WaitForChild("Reload")
- local holdTrack
- local sprintTrack
- local reloadTrack
- local allowTracing = configs:WaitForChild("AllowTracing")
- local range = configs:WaitForChild("Range")
- local canShoot = remotes:WaitForChild("CanShoot")
- local canReload = remotes:WaitForChild("CanReload")
- local hitRemote = remotes:WaitForChild("Hit")
- local reloadRemote = remotes:WaitForChild("Reload")
- local shootRemote = remotes:WaitForChild("Shoot")
- local function equip()
- equipped = true
- local oldIcon = mouse.Icon
- mouse.Icon = "rbxassetid://4132185302"
- local character = player.Character or player.CharacterAdded:Wait()
- local humanoid = character:WaitForChild("Humanoid")
- if humanoid then
- pcall(function()
- holdTrack = humanoid:LoadAnimation(holdAnim)
- holdTrack:Play()
- end)
- pcall(function()
- sprintTrack = humanoid:LoadAnimation(sprintAnim)
- end)
- pcall(function()
- reloadTrack = humanoid:LoadAnimation(reloadAnim)
- end)
- end
- end
- local function unequip()
- equipped = false
- local character = player.Character or player.CharacterAdded:Wait()
- local humanoid = character:WaitForChild("Humanoid")
- sprinting = false
- humanoid.WalkSpeed = 16
- mouse.Icon = oldIcon
- if holdTrack then
- holdTrack:Stop()
- end
- if sprintTrack then
- sprintTrack:Stop()
- end
- end
- local function reload()
- reloadRemote:FireServer()
- wait()
- if canReload and relDeb == false and script.Parent.Parent.Configs.Reload.Value == true then
- relDeb = true
- reloadTrack:Play()
- wait(.01)
- reloadRemote:FireServer()
- wait(2)
- relDeb = false
- end
- end
- local function sprint(actionName, inputState, inputObj)
- local character = player.Character or player.CharacterAdded:Wait()
- local humanoid = character:WaitForChild("Humanoid")
- if inputState == Enum.UserInputState.Begin then
- if sprinting == false then
- sprintTrack:Play()
- holdTrack:Stop()
- humanoid.WalkSpeed = 30
- sprinting = true
- else
- sprintTrack:Stop()
- holdTrack:Play()
- humanoid.WalkSpeed = 16
- sprinting = false
- end
- end
- end
- local function fire()
- if canShoot then
- wait()
- local ray = Ray.new(hole.CFrame.p, (mouse.hit.p - hole.CFrame.p).unit * range.Value)
- local touch, position = workspace:FindPartOnRay(ray, player.Character, false, true)
- if touch then
- hitRemote:FireServer()
- end
- shootRemote:FireServer()
- local character = player.Character or player.CharacterAdded:Wait()
- local humanoid = character:WaitForChild("Humanoid")
- if sprintTrack then
- sprintTrack:Stop()
- holdTrack:Play()
- humanoid.WalkSpeed = 16
- end
- if allowTracing.Value and script.Parent.Parent.Configs.Trace.Value == true then
- local trace = Instance.new("Part")
- trace.Anchored = trace
- trace.CanCollide = false
- trace.Transparency = 0.5
- trace.BrickColor = BrickColor.new("Cool yellow")
- trace.Material = Enum.Material.Neon
- local distance = (hole.CFrame.p - position).magnitude
- trace.Size = Vector3.new(.1, .1, distance)
- trace.CFrame = CFrame.new(hole.CFrame.p, position) * CFrame.new(0, 0, -distance/2)
- trace.Parent = workspace
- game:GetService("Debris"):AddItem(trace, 0.025)
- end
- end
- end
- tool.Equipped:Connect(function()
- equip()
- mouse.Button1Up:Connect(function()
- mouseDown = false
- end)
- tool.Activated:Connect(function()
- mouseDown = true
- repeat
- fire()
- until not mouseDown
- end)
- end)
- tool.Unequipped:Connect(unequip)
- actionService:BindAction("Reload", reload, false, Enum.KeyCode.R)
- actionService:BindAction("Sprint", sprint, false, Enum.KeyCode.E)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement