Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Why does the "part" in FindPartOnRayWithIgnoreList return nil?

Asked by 6 years ago

This works in studio but not ingame, ingame "Part" returns nil. Part is defined as the object the ray has touched.

local remotes = game:GetService("ReplicatedStorage"):WaitForChild("Remotes")
local tool = script.Parent
local player = game:GetService("Players").LocalPlayer

local ignoreList = {player.Character, unpack(tool:GetChildren())}

tool.Equipped:connect(function(mouse)
    mouse.Icon = "rbxassetid://251138645"
    mouse.Button1Down:connect(function()
        local ray = Ray.new(tool.Handle.CFrame.p, (mouse.Hit.p - tool.Handle.CFrame.p).unit * 300)
        local part, position = workspace:FindPartOnRayWithIgnoreList(ray, ignoreList)

        local beam = Instance.new("Part")
        beam.BrickColor = BrickColor.new("Institutional white")
        beam.FormFactor = "Custom"
        beam.Material = Enum.Material.SmoothPlastic
        beam.Transparency = 0.25
        beam.Anchored = true
        beam.Locked = true
        beam.CanCollide = false

        local distance = (tool.Handle.CFrame.p - position).magnitude
        beam.Size = Vector3.new(0.3, 0.3, distance)
        beam.CFrame = CFrame.new(tool.Handle.CFrame.p, position) * CFrame.new(0, 0, -distance / 2)

        beam.Parent = workspace

        remotes['RayReplication']:FireServer(beam.Size, beam.BrickColor, beam.CFrame, beam.Material)

        table.insert(ignoreList, beam)

        delay(0.4, function()
            table.remove(ignoreList, 3)
            beam:Destroy()
        end)

        spawn(function()
            game:GetService("RunService").Heartbeat:Connect(function()
                beam.Size = Vector3.new(beam.Size.X - 0.01, beam.Size.Y - 0.01, beam.Size.Z)
                beam.Transparency = beam.Transparency + 0.05
            end)
        end)

        print(part)

        if part then print'oof'
            local humanoid = part.Parent:FindFirstChild("Humanoid")

            if not humanoid then
                humanoid = part.Parent.Parent:FindFirstChild("Humanoid")
            end

            if humanoid then
                mouse.Icon = "rbxassetid://253263084"
                delay(0.2, function()
                    mouse.Icon = "rbxassetid://251138645"
                end)
                remotes['Damage']:FireServer(humanoid)
                script.Hit:Play()
            end
        end
    end)
end)

Answer this question