#Raycast gun
10 messages · Page 1 of 1 (latest)
local tool = script.Parent
local shoot_part = tool:WaitForChild("Handle"):FindFirstChild("Shot")
local remote = tool:WaitForChild("OnShoot")
local maxRange = tool:GetAttribute("MaxRange")
local Workspace = game:GetService("Workspace")
local ServerStorage = game:GetService("ServerStorage")
local Debris = game:GetService("Debris")
local Visuals = Workspace:WaitForChild("Visuals")
local function creatVisual(origin, direction)
local center = origin + direction / 2
local distance = direction.Magnitude
local visual = Instance.new("Part", Visuals)
visual.Anchored = true
visual.CanCollide = false
visual.CanQuery = false
visual.BrickColor = BrickColor.new("Dark stone grey")
visual.Material = Enum.Material.Neon
visual.CFrame = CFrame.new( center, origin )
visual.Size = Vector3.new( .5, .5, distance )
Debris:AddItem(visual, .05)
end
remote.OnServerEvent:Connect(function(player, position)
local origin = shoot_part.Position
local direction = (position - origin).Unit * maxRange
local result = Workspace:Raycast(origin, direction)
local intersection = result and result.Position or origin + direction
local distance = (origin - intersection).Magnitude
creatVisual(origin, direction)
if result then
local part = result.Instance
local humanoid = part.Parent:FindFirstChild("Humanoid") or part.Parent.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid:TakeDamage(10)
end
end
end) ```
Didn't put much brainpower into that one
Technically, it would be
createVisual(origin, direction / maxRange * distance)
But you should really be having createVisual taking and endpoint value instead
Which would just be intersection
ty this works