So i'm trying to make a script that shoots a bullet whenever the gun fires, but I dont know how to make it so that the bullet stops at the hit target
local tool = script.Parent
local Handle = tool:WaitForChild("Handle")
local Shoot = tool:WaitForChild("Shoot")
local Debris = game:GetService("Debris")
local range = 100
local damage = 20
local headshotDamage = 40
Shoot.OnServerEvent:Connect(function(Player, mousePos, originPos)
local Character = Player.Character
local Humanoid = Character:WaitForChild("Humanoid")
local bulletDirection = (mousePos - originPos).unit * range
local midpointPos = originPos + bulletDirection / 2
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {Character, workspace:WaitForChild("Bullets")}
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
local raycastResults = workspace:Raycast(originPos, bulletDirection, raycastParams)
local bullet = Instance.new("Part", workspace:WaitForChild("Bullets"))
bullet.BrickColor = BrickColor.new("Institutional white")
bullet.Material = "SmoothPlastic"
bullet.Name = Player.Name.."'s bullet"
bullet.Transparency = 0.5
bullet.Anchored = true
bullet.Locked = true
bullet.CanCollide = false
bullet.CFrame = CFrame.new(midpointPos, originPos)
bullet.Size = Vector3.new(.3,.3,bulletDirection.magnitude)
Debris:AddItem(bullet, .75)
if raycastResults then
local ECharacter = raycastResults.Instance.Parent
local EHumanoid = ECharacter:FindFirstChild("Humanoid")
if EHumanoid and EHumanoid ~= Character then
if raycastResults.Instance.Name == "Head" or raycastResults.Instance:IsA("Hat") then
EHumanoid:TakeDamage(headshotDamage)
else
EHumanoid:TakeDamage(damage)
end
print(EHumanoid.Health)
end
end
Shoot:FireClient(Player)
end)

1 comment
I dont quite understand what the bullet and rsycast does. Does the bullet go to the end point (hitbposition) of raycast or does it point towards the hit position and constantly move in that direction?