And that worked really well! Thank you so much for the idea, I really appreciate it!
In case anyone is curios on how I coded this, here’s the answer
local LimbSize = {
Head = Character:WaitForChild("Head").Size*.5,
LowerTorso = Character:WaitForChild("LowerTorso").Size*.5,
UpperTorso = Character:WaitForChild("UpperTorso").Size*.5,
RightUpperArm = Character:WaitForChild("RightUpperArm").Size*.5,
RightHand = Character:WaitForChild("RightHand").Size*.5,
LeftUpperArm = Character:WaitForChild("LeftUpperArm").Size*.5,
LeftHand = Character:WaitForChild("LeftHand").Size*.5,
RightUpperLeg = Character:WaitForChild("RightUpperLeg").Size*.5,
RightFoot = Character:WaitForChild("RightFoot").Size*.5,
LeftUpperLeg = Character:WaitForChild("LeftUpperLeg").Size*.5,
LeftFoot = Character:WaitForChild("LeftFoot").Size*.5
}
local OffsetCFrames = { -- Offset from some body part
-- Base Check
Character:WaitForChild("UpperTorso").CFrame,
-- Torso
Character:WaitForChild("UpperTorso").CFrame * CFrame.new(LimbSize.UpperTorso),
Character:WaitForChild("UpperTorso").CFrame * CFrame.new(LimbSize.UpperTorso * Vector3.new(-1,1,1)),
Character:WaitForChild("UpperTorso").CFrame * CFrame.new(LimbSize.UpperTorso * Vector3.new(-1,1,-1)),
Character:WaitForChild("UpperTorso").CFrame * CFrame.new(LimbSize.UpperTorso * Vector3.new(1,1,-1)),
Character:WaitForChild("LowerTorso").CFrame * CFrame.new(LimbSize.LowerTorso * Vector3.new(1,-1,1)),
Character:WaitForChild("LowerTorso").CFrame * CFrame.new(-LimbSize.LowerTorso * Vector3.new(-1,-1,1)),
Character:WaitForChild("LowerTorso").CFrame * CFrame.new(-LimbSize.LowerTorso),
Character:WaitForChild("LowerTorso").CFrame * CFrame.new(LimbSize.LowerTorso * Vector3.new(1,-1,-1)),
-- Head
Character:WaitForChild("Head").CFrame * CFrame.new(LimbSize.Head),
Character:WaitForChild("Head").CFrame * CFrame.new(LimbSize.Head * Vector3.new(-1,1,1)),
Character:WaitForChild("Head").CFrame * CFrame.new(LimbSize.Head * Vector3.new(-1,1,-1)),
Character:WaitForChild("Head").CFrame * CFrame.new(LimbSize.Head * Vector3.new(1,1,-1)),
-- RightArm
Character:WaitForChild("RightUpperArm").CFrame * CFrame.new(LimbSize.RightUpperArm),
Character:WaitForChild("RightUpperArm").CFrame * CFrame.new(LimbSize.RightUpperArm * Vector3.new(1,1,-1)),
Character:WaitForChild("RightHand").CFrame * CFrame.new(LimbSize.RightHand * Vector3.new(1,-1,1)),
Character:WaitForChild("RightHand").CFrame * CFrame.new(LimbSize.RightHand * Vector3.new(1,-1,-1)),
-- LeftArm
Character:WaitForChild("LeftUpperArm").CFrame * CFrame.new(LimbSize.LeftUpperArm * Vector3.new(-1,1,1)),
Character:WaitForChild("LeftUpperArm").CFrame * CFrame.new(LimbSize.LeftUpperArm * Vector3.new(-1,1,-1)),
Character:WaitForChild("LeftHand").CFrame * CFrame.new(LimbSize.LeftHand * Vector3.new(-1,-1,1)),
Character:WaitForChild("LeftHand").CFrame * CFrame.new(-LimbSize.LeftHand),
Character:WaitForChild("RightFoot").CFrame * CFrame.new(LimbSize.RightFoot * Vector3.new(1,-1,1)),
Character:WaitForChild("RightFoot").CFrame * CFrame.new(LimbSize.RightFoot * Vector3.new(1,-1,-1)),
Character:WaitForChild("LeftFoot").CFrame * CFrame.new(LimbSize.LeftFoot * Vector3.new(-1,-1,1)),
Character:WaitForChild("LeftFoot").CFrame * CFrame.new(-LimbSize.LeftFoot)
}
local RayParams = RaycastParams.new()
RayParams.FilterType = Enum.RaycastFilterType.Exclude
RayParams.IgnoreWater = true
RayParams.FilterDescendantsInstances = table.pack(table.unpack(Character:GetChildren()), table.unpack(Character:GetDescendants()))
local ray
for i = 1, #OffsetCFrames do -- testing if any raycasts work
ray = game.Workspace:Raycast(HeadCFrame.Position, (OffsetCFrames[i].Position - HeadCFrame.Position), RayParams)
if not ray then
break -- We can break early from the loop
end
end
if not ray then
print("Player Seen")
end