Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How would I add spread to a raycasting gun?

I followed the ROBLOX Raycasting tutorial and made some edits to make it fully auto, but I can't figure out how to give it spread. Help?

This is my script.

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local tool = script.Parent

local mouseDown = false
local canPlay = true

mouse.Button1Down:Connect(function()
    mouseDown = true
end)

mouse.Button1Up:Connect(function()
    mouseDown = false
end)

tool.Equipped:Connect(function(mouse)
	while wait(0.1) do
		if mouseDown then
			if canPlay then
				canPlay = false
				
				tool.Sounds.Shoot:Play()
            	local ray = Ray.new(tool.Barrel.CFrame.p, (mouse.Hit.p - tool.Handle.CFrame.p).unit * 300)
				local part, position = workspace:FindPartOnRay(ray, player.Character, false, true)
				
				local bullet = Instance.new("Part", workspace)
				bullet.BrickColor = BrickColor.new("New Yeller")
				bullet.FormFactor = "Custom"
				bullet.Material = "Plastic"
				bullet.Transparency = 0.9
				bullet.Anchored = true
				bullet.Locked = true
				bullet.CanCollide = false
				
				local distance = (tool.Barrel.CFrame.p - position).magnitude
				bullet.Size = Vector3.new(0.1, 0.1, distance)
				bullet.CFrame = CFrame.new(tool.Barrel.CFrame.p, position) * CFrame.new(0, 0, -distance / 2)
				
				game:GetService("Debris"):AddItem(bullet, 0.1)
				
				if part then
					local humanoid = part.Parent:FindFirstChild("Humanoid")
					
					if not humanoid then
						humanoid = part.Parent.Parent:FindFirstChild("Humanoid")
					end
					
					if humanoid then
						humanoid:TakeDamage(34)
					end
				end
				
				canPlay = true
			end
		end
		
	end
end)

1 comment

0

use a little math.random() magic

1 answer

When creating the ray, you can add a random component to the look vector:

local randomnum = math.random(2)-1

local randomvector = Vector3.new(randomnum,randomnum,randomnum)

local ray = Ray.new(tool.Barrel.CFrame.p, (mouse.Hit.p + randomvector  -tool.Handle.CFrame.p).unit * 300)

since math.random(num) returns a random number from >= 0 and <num, doing math.random(num)-num/2 will return a random number from -num/2 to num/2.

This discussion is preserved as it was. New answers, comments, and votes are closed.