This is my first question on this site, I making a Projectile based gun and it is way too accurate so I want to add bullet spread but I can't get it to work. Where do I put the bullet spread part?
I'm pretty sure this is the full function
function isFiring() repeat local Bullet = Instance.new("Part",workspace) ammo=ammo-1 print(ammo) function onTouched(hit) if hit.Parent.Name==(player.Name) then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*0 elseif hit.Name == "Head" then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*2 Bullet:Destroy() elseif hit.Name == "Torso" then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*1 Bullet:Destroy() elseif hit.Name == "Right Leg" then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*0.5 Bullet:Destroy() elseif hit.Name == "Left Leg" then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*0.5 Bullet:Destroy() elseif hit.Name == "Right Arm" then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*0.5 Bullet:Destroy() elseif hit.Name == "Left Arm" then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*0.5 Bullet:Destroy() elseif hit:IsA("Hat") then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - Damage*math.random(0.25,2) Bullet:Destroy() end end if ammo == 0 or Reloading then Firing=false end --Bullet-- game.Debris:AddItem(Bullet,1) Bullet.Name= "Bullet" Bullet.CanCollide= false Bullet.Shape = "Block" Bullet.Material = "Neon" Bullet.BrickColor = BrickColor.new ("Bright yellow")--Colour-- Bullet.Size=Vector3.new (0.1,0.1,2.5)--Size-- Bullet.CFrame = Barrel.CFrame*CFrame.new(0,0,0)--Where-- Bullet.CFrame= CFrame.new(Bullet.Position,mouse.hit.p) local Velo = Instance.new ("BodyVelocity",Bullet) Velo.velocity = Bullet.CFrame.lookVector*200--Speed of Bullet-- Velo.MaxForce = Vector3.new(math.huge,math.huge,math.huge) Bullet.CustomPhysicalProperties = PhysicalProperties.new(0.01,0,0,0,0) local weld =Instance.new("Weld",Bullet) weld.C0= Bullet.CFrame:inverse()*Bullet.CFrame weld.Part0=Bullet weld.Part1=Bullet local a0 = Instance.new("Attachment") a0.Parent = Bullet a0.Position = Vector3.new(0,.5,0) a0.Name = "Trail Attachment 0" local a1 = Instance.new("Attachment") a1.Parent = Bullet a1.Position = Vector3.new(0,-.5,0) a1.Name = "Trail Attachment 1" local trail = Instance.new("Trail") trail.Parent = Bullet trail.Attachment0 = a0 trail.Attachment1 = a1 trail.Transparency = NumberSequence.new(0.5,1) trail.WidthScale=NumberSequence.new(0.1,0.1) trail.Color = ColorSequence.new(Color3.new(205,150,0)) trail.LightEmission=0.75 trail.Lifetime = 0.5 Bullet.Touched:Connect(onTouched) wait(.075)--FireRate-- enabled= true --Bullet-- until Firing == false or Ammo == 0 end
So we can think of this as a rotational problem.
if we say our direction is something like this from the wiki: local rotation = Bullet.CFrame - Bullet.Position
then we can also change each component by a possible spread value.
local spread = 5 --I chose this randomly you may need to play with this. local rotation = Bullet.CFrame - Bullet.Position rotation = rotation + CFrame.Angles(math.random(-spread,spread),math.random(-spread,spread),math.random(-spread,spread)) --and finally we have to recombine them Bullet.CFrame = Bullet.Position + rotation --Then our velocity should be the look vector of this new CFrame. Velo.velocity = Bullet.CFrame.lookVector*200
That should work, I hope I understood your question. If there are mistakes let me know and I'll fix them in the morning :)