local owner = script.Parent.Owner
local physics = game:GetService("PhysicsService") --The service that lets you create collision groups.
physics:CreateCollisionGroup("Door") --Create the door collision group.
physics:SetPartCollisionGroup(script.Parent,"Door")
physics:CreateCollisionGroup("OwnerParts") --Create the collision group with the owner character parts so they dont colllide with the door.
physics:CollisionGroupSetCollidable("Door","OwnerParts",false) --Make owner parts and door uncollidable.

script.Parent.Touched:Connect(function(part) --Track when something touches the door.
	local char = part.Parent
	local human = char:FindFirstChildOfClass("Humanoid")
	local plr = game.Players:GetPlayerFromCharacter(char)
	if plr and human then
		if owner.Value == nil then --Check if theres no owner.
			owner.Value = plr
			for i,v in pairs(char:GetDescendants())do
				if v:IsA("BasePart") or v:IsA("Part") then
					physics:SetPartCollisionGroup(v,"OwnerParts") --Set the bodypart's group to OwnerParts so it doesnt collide with the door!
				end
			end
		else --If there is, then kill the intruder if its not the owner.
			if char ~= owner.Value.Character then
				human:TakeDamage(10000)
			end
		end
	end
end)    

repeat wait() until owner.Value
owner.Value.CharacterAdded:Connect(function(char)
	--Repeat it when the character respawns!
	char.ChildAdded:Connect(function(part)
		if part:IsA("Part") or part:IsA("MeshPart") or part:IsA("BasePart") then
			physics:SetPartCollisionGroup(part,"OwnerParts")
			print("RESPAWN")
		end
		physics:SetPartCollisionGroup(char:WaitForChild("Head"),"OwnerParts")
		physics:SetPartCollisionGroup(char:WaitForChild("HumanoidRootPart"),"OwnerParts")
		print("RESPAWN")
	end)
end)

The issue is I want to know how line "repeat wait() until owner.Value)" works because I'm trying it out by resetting my character and making it print RESPAWN BUT ITS NOT WORKING I NEED HELP