So I have my spawn position randomizer figured out, but when the part I want to randomize on is not square it only spawns 2-5 Y studs around the middle of the rectangle but spawns horizontally(90 degrees off) the length of the rectangle
local function SpawnPart(SpawnLocation) local ChosenSpawn = SpawnLocation
local RNG = Random.new() local Part = ChosenSpawn local Rx,Ry,Rz = ChosenSpawn.Orientation.X,ChosenSpawn.Orientation.Y,ChosenSpawn.Orientation.Z local Position = ChosenSpawn.Position --+ ChosenSpawn.Orientation local Size = Part.Size local MinX , MaxX = Position.X - Size.X/2, Position.X + Size.X/2 local MinZ, MaxZ = Position.Z - Size.Z/2, Position.Z + Size.Z/2 local X, Y, Z = RNG:NextNumber(MinX, MaxX), Position.Y + Item.PickablePart.Size.Y/2 , RNG:NextNumber(MinZ, MaxZ) local RanPosition = Vector3.new(X, Y, Z) Item:SetPrimaryPartCFrame(CFrame.new(RanPosition)) -- Get and set the new 'Y' Value by firing a raycast down to find 'Y' local Rotation = CFrame.fromEulerAnglesXYZ(0,math.rad(math.random(1,360)),0) local rayOrigin = Item.PickablePart.Position local rayDirection = Vector3.new(0, -100, 0) local raycastParams = RaycastParams.new() raycastParams.FilterDescendantsInstances = {Item} raycastParams.FilterType = Enum.RaycastFilterType.Blacklist local raycastResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams) if raycastResult then local hitPart = raycastResult.Instance if hitPart then Item:SetPrimaryPartCFrame(CFrame.new(Vector3.new(X, raycastResult.Position.Y + Item.PickablePart.Size.Y/2, Z))* Rotation) end end end