sp=script.Parent firerate=.075 range=950 power=300 rate=.033333333333333 spinuptime=0 barreloffset=Vector3.new(0,.35,-3.35)windvec=(Vector3.new(2,-1,1)).unit firetime=0 maxammo=400 reloadtime=3.65 ammo=maxammo debris=game:GetService("\068\101\098\114\105\115")equipped=false check=true firing=false reloading=false function waitfor(e,Q)while e:FindFirstChild(Q)==nil do wait()end return e:FindFirstChild(Q)end function checkintangible(e)if e and e~=nil then if e:IsDescendantOf(sp.Parent)or e.Transparency>.8 or e.Name=="\072\097\110\100\108\101"or e.Name=="\069\102\102\101\099\116"or e.Name=="\066\117\108\108\101\116"or e.Name=="\076\097\115\101\114"or string.lower(e.Name)=="\119\097\116\101\114"or e.Name=="\082\097\105\108"or e.Name=="\065\114\114\111\119"then return true end end return false end function castray(e,Q,o,H,Z)local M,D=game.Workspace:FindPartOnRay(Ray.new(e,Q*o),H)if M~=nil then if checkintangible(M)then if Z then wait()end M,D=castray(D+Q*.01,Q,o-(e-D).magnitude,H,Z)end end return M,D end function wait(e)if e~=nil then local Q=0 Q=Q+(game:GetService("\082\117\110\083\101\114\118\105\099\101")).Heartbeat:wait()while Q<e do Q=Q+(game:GetService("\082\117\110\083\101\114\118\105\099\101")).Heartbeat:wait()end else(game:GetService("\082\117\110\083\101\114\118\105\099\101")).Heartbeat:wait()end end function drawbeam(e,Q,o,H)local Z=(e-Q).magnitude local M=Instance.new("\080\097\114\116")M.Name="\069\102\102\101\099\116"M.Anchored=true M.CanCollide=false M.Shape="\066\108\111\099\107"M.formFactor="\067\117\115\116\111\109"M.Size=Vector3.new(.2,.2,.2)M.Transparency=0 M.Material=Enum.Material.Neon M.Locked=true M.TopSurface=0 M.BottomSurface=0 M.BrickColor=BrickColor.new("\076\105\109\101 \103\114\101\101\110")M.CFrame=(CFrame.new(Q,e)*CFrame.new(0,0,-Z/2))*CFrame.Angles(math.pi/2,0,0)local D=Instance.new("\083\112\101\099\105\097\108\077\101\115\104")D.Scale=Vector3.new(1,Z*5,1)D.MeshType="\066\114\105\099\107"D.Parent=M debris:AddItem(M,H*.5)M.Parent=game.Workspace wait(.5)M:remove()end function fire()local e=sp.Parent:FindFirstChild("\072\117\109\097\110\111\105\100")local Q=sp.Parent:FindFirstChild("\072\101\097\100")local o=sp.Parent:FindFirstChild("\084\111\114\115\111")local H=sp.Parent:FindFirstChild("\084\069\065\077")if e and(e.Health>0 and(o and(Q and(themouse~=nil and equipped))))then anim2=sp.Parent.Humanoid:LoadAnimation(sp.FireAni)if anim2 then anim2:Play()anim2:AdjustSpeed(5)end local e=Q.Position local Z=(sp.Handle.CFrame*CFrame.new(barreloffset)).p local M=(themouse.Hit.p-e).unit+Vector3.new(math.random(-1000,1000),math.random(-1000,1000),math.random(-1000,1000))/56250.0 local D=Instance.new("\080\097\114\116")D.Name="\069\102\102\101\099\116"D.BrickColor=BrickColor.new("\076\105\109\101 \103\114\101\101\110")D.CanCollide=false D.TopSurface="\083\109\111\111\116\104"D.BottomSurface="\083\109\111\111\116\104"D.formFactor="\067\117\115\116\111\109"D.Size=Vector3.new(0,0,0)D.Transparency=1 local t=Instance.new("\083\112\101\099\105\097\108\077\101\115\104")t.Parent=D local V,k=castray(e,M,range,sp.Parent,false)local K=(k-Z).unit if V~=nil then local e=(CFrame.new(k,k+K)*CFrame.Angles(math.pi/2,0,0))*CFrame.new(0,0,0)D.CFrame=e local Q=Instance.new("\087\101\108\100")Q.Part0=V Q.Part1=D Q.C0=V.CFrame:inverse()*e Q.C1=e:inverse()*e Q.Parent=D;(H:clone()).Parent=D local o=Instance.new("\079\098\106\101\099\116\086\097\108\117\101")o.Name="\099\114\101\097\116\111\114"o.Value=game.Players.LocalPlayer o.Parent=D local Z=script.Script:clone()Z.Parent=D Z.Disabled=false else D.CFrame=CFrame.new(k,k+K)D.Velocity=K*power D.Parent=game.Workspace end debris:AddItem(D,1)D.Parent=game.Workspace delay(0,function()drawbeam(Z,k,BrickColor.new("\066\114\105\103\104\116 \121\101\108\108\111\119"),.1)end)local b=o:FindFirstChild("\082\105\103\104\116 \083\104\111\117\108\100\101\114")if b~=nil then b.CurrentAngle=math.pi/2+.1 end end end function onEquipped(e)equipped=true if e~=nil then anim=sp.Parent.Humanoid:LoadAnimation(sp.idle)if anim then anim:Play()end themouse=e e.Icon="\104\116\116\112\058\047\047\119\119\119\046\114\111\098\108\111\120\046\099\111\109\047\097\115\115\101\116\047\063\105\100\061\050\057\054\054\048\049\050"e.Button1Down:connect(function()e.Icon="\104\116\116\112\058\047\047\119\119\119\046\114\111\098\108\111\120\046\099\111\109\047\097\115\115\101\116\047\063\105\100\061\050\057\054\054\048\049\050"firetime=tick()+spinuptime down=true end)e.Button1Up:connect(function()down=false e.Icon="\104\116\116\112\058\047\047\119\119\119\046\114\111\098\108\111\120\046\099\111\109\047\097\115\115\101\116\047\063\105\100\061\050\057\054\054\048\049\050"end)e.KeyDown:connect(function(e)if string.lower(e)=="\114"then if ammo~=maxammo and sp.Enabled==true then sp.Enabled=false Reload()sp.Enabled=true end end end)end end function Reload()sp.Handle.Fire:Stop()anim3=sp.Parent.Humanoid:LoadAnimation(sp.Reload)if anim3 then anim3:Play()anim3:AdjustSpeed(2.5)end local e=sp.Handle:FindFirstChild("\082\101\108\111\097\100")if e~=nil then e:Play()end wait(reloadtime)ammo=maxammo end function onUnequipped()if anim then anim:Stop()end equipped=false themouse=nil end sp.Equipped:connect(onEquipped)sp.Unequipped:connect(onUnequipped)while true do if down and(equipped and sp.Enabled==true)then sp.Enabled=false if ammo>0 then ammo=ammo-1 if sp.Handle.Fire.IsPlaying==false then sp.Handle.Fire:Play()end fire()wait(firerate)else Reload()end sp.Enabled=true else sp.Handle.Fire:Stop()wait()end end



sp=script.Parent


firerate=0.075
range=950
power=300
rate=1/30
spinuptime=0
barreloffset=Vector3.new(0,0.35,-3.35)
windvec=Vector3.new(2,-1,1).unit
firetime=0
maxammo=400
reloadtime = 3.65
ammo=maxammo

debris=game:GetService("Debris")
equipped=false
check=true
firing=false
reloading=false

function waitfor(parent,name)
	while parent:FindFirstChild(name)==nil do
		wait()
	end
	return parent:FindFirstChild(name)
end

function checkintangible(hit)
	if hit and hit~=nil then
		if hit:IsDescendantOf(sp.Parent) or hit.Transparency>.8 or hit.Name=="Handle" or hit.Name=="Effect" or hit.Name=="Bullet" or hit.Name=="Laser" or string.lower(hit.Name)=="water" or hit.Name=="Rail" or hit.Name=="Arrow" then
			return true
		end
	end
	return false
end

function castray(startpos,vec,length,ignore,delayifhit)
	local hit,endpos2=game.Workspace:FindPartOnRay(Ray.new(startpos,vec*length),ignore)
	if hit~=nil then
		if checkintangible(hit) then
			if delayifhit then
				wait()
			end
			hit,endpos2=castray(endpos2+(vec*.01),vec,length-((startpos-endpos2).magnitude),ignore,delayifhit)
		end
	end
	return hit,endpos2
end

function wait(TimeToWait)
	if TimeToWait ~= nil then
		local TotalTime = 0
		TotalTime = TotalTime + game:GetService("RunService").Heartbeat:wait()
		while TotalTime < TimeToWait do
			TotalTime = TotalTime + game:GetService("RunService").Heartbeat:wait()
		end
	else
		game:GetService("RunService").Heartbeat:wait()
	end
end

function drawbeam(beamstart,beamend,clr,fadedelay)
	local dist=(beamstart-beamend).magnitude
	local laser=Instance.new("Part")
	laser.Name="Effect"
	laser.Anchored=true
	laser.CanCollide=false
	laser.Shape="Block"
	laser.formFactor="Custom"
	laser.Size=Vector3.new(.2,.2,.2)
	laser.Transparency=0
	laser.Material=Enum.Material.Neon
	laser.Locked=true
	laser.TopSurface=0
	laser.BottomSurface=0
	laser.BrickColor=BrickColor.new("Lime green")
	laser.CFrame=CFrame.new(beamend,beamstart)*CFrame.new(0,0,-dist/2)*CFrame.Angles(math.pi/2,0,0)
	local m=Instance.new("SpecialMesh")
	m.Scale=Vector3.new(1,dist*5,1)
	m.MeshType="Brick"
	m.Parent=laser
	debris:AddItem(laser,fadedelay*0.5)
	laser.Parent=game.Workspace

	--[[local frames=math.floor(fadedelay/rate)
	for frame=1,frames do
		wait(rate)
		local percent=frame/frames
		laser.CFrame=laser.CFrame+windvec*rate
		laser.Transparency=.5+(percent*.5)
	end]]
	wait(.5)
	laser:remove()
end

function fire()
	local hu=sp.Parent:FindFirstChild("Humanoid")
	local he=sp.Parent:FindFirstChild("Head")
	local t=sp.Parent:FindFirstChild("Torso")
	local team=sp.Parent:FindFirstChild("TEAM")
	if hu and hu.Health>0 and t and he and themouse~=nil and equipped then

		anim2 = sp.Parent.Humanoid:LoadAnimation(sp.FireAni)
		if anim2 then anim2:Play() anim2:AdjustSpeed(5) end
		local startpos=he.Position
		local fakestartpos=(sp.Handle.CFrame*CFrame.new(barreloffset)).p
		local vec=(themouse.Hit.p-startpos).unit + (Vector3.new(math.random(-1000,1000),math.random(-1000,1000),math.random(-1000,1000)) / (1500*37.5))

		local p=Instance.new("Part")
		p.Name="Effect"
		p.BrickColor=BrickColor.new("Lime green")
		p.CanCollide=false
		p.TopSurface="Smooth"
		p.BottomSurface="Smooth"
		p.formFactor="Custom"
		p.Size=Vector3.new(0,0,0)
		p.Transparency=1
		local m=Instance.new("SpecialMesh")
		m.Parent=p

		local hit,endpos=castray(startpos,vec,range,sp.Parent,false)
		local fakevec=(endpos-fakestartpos).unit
		if hit~=nil then
			local newcf=CFrame.new(endpos,endpos+fakevec)*CFrame.Angles(math.pi/2,0,0)*CFrame.new(0,0,0)
			p.CFrame=newcf
			local w=Instance.new("Weld")
			w.Part0=hit
			w.Part1=p
			w.C0=hit.CFrame:inverse()*newcf
			w.C1=newcf:inverse()*newcf
			w.Parent=p
			
			team:clone().Parent=p

			local c=Instance.new("ObjectValue")
			c.Name="creator"
			c.Value=game.Players.LocalPlayer
			c.Parent=p

			local s=script.Script:clone()
			s.Parent=p
			s.Disabled=false
		else
			p.CFrame=CFrame.new(endpos,endpos+fakevec)
			p.Velocity=fakevec*power
			p.Parent=game.Workspace
		end

		debris:AddItem(p,1)
		p.Parent=game.Workspace

		delay(0,function()
			drawbeam(fakestartpos,endpos,BrickColor.new("Bright yellow"),.1)
		end)

		--[[local sound=sp.Handle:FindFirstChild("Fire")
		if sound~=nil then
			--sound:Stop()
			sound:Play()
		end]]

		local shoulder=t:FindFirstChild("Right Shoulder")
		if shoulder~=nil then
			shoulder.CurrentAngle=(math.pi/2)+.1
		end
	end
end

function onEquipped(mouse)
	equipped=true
	if mouse~=nil then
		anim = sp.Parent.Humanoid:LoadAnimation(sp.idle)
		if anim then anim:Play() end
		themouse=mouse
		mouse.Icon="http://www.roblox.com/asset/?id=2966012"
		mouse.Button1Down:connect(function()
			mouse.Icon="http://www.roblox.com/asset/?id=2966012"
			firetime=tick()+spinuptime
			down=true
		end)
		mouse.Button1Up:connect(function()
			down=false
			mouse.Icon="http://www.roblox.com/asset/?id=2966012"
		end)
		mouse.KeyDown:connect(function(Key)
			if string.lower(Key) == "r" then
				if ammo ~= maxammo and sp.Enabled == true then sp.Enabled = false Reload() sp.Enabled = true end
			end
		end)
	end
end

function Reload()
	sp.Handle.Fire:Stop()
	anim3 = sp.Parent.Humanoid:LoadAnimation(sp.Reload)
	if anim3 then anim3:Play() anim3:AdjustSpeed(2.5) end
	local sound=sp.Handle:FindFirstChild("Reload")
	if sound~=nil then
		sound:Play()
	end
	wait(reloadtime)
	ammo = maxammo
end

function onUnequipped()
	if anim then anim:Stop() end
	equipped=false
	themouse=nil
end

sp.Equipped:connect(onEquipped)
sp.Unequipped:connect(onUnequipped)

while true do
	if down and equipped and sp.Enabled == true then
		sp.Enabled = false
		if ammo > 0 then
			ammo = ammo - 1
			if sp.Handle.Fire.IsPlaying == false then sp.Handle.Fire:Play() end
			fire()
			wait(firerate)
		else
			Reload()
		end
		sp.Enabled = true
	else
		sp.Handle.Fire:Stop()
		wait()
	end
end





