Need help with player teleporting when died

im making a gun game and need help with a script that is meant to teleport people to the selected spawnpart. I need help on finding a way I could do this, I have tried ways and have been at it for hours but cannot find a fix! any help is appreciated.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("PlayerDiedWhileMatchOn")
local value = ReplicatedStorage:WaitForChild("RoundOn")

local spawns = 5

event.OnServerEvent:Connect(function(player)
	print("yes")
	if value.Value == true then -- checking if round is on
		print("yes2")
		if player.Character and player.Character:FindFirstChild("Humanoid") then --checking if player
			local character = player.Character
			local humanoid = character:FindFirstChild("Humanoid")
			
			print("yes3")
			if humanoid.Died then
				print("yes4")
				
				local spawnpoints = game.Workspace:WaitForChild("Map").Spawnpoints:GetChildren() -- getting spawnpoints
				local spawnpntnum = math.random(1,spawns)
				local spawnpnt = spawnpoints[spawnpntnum]
				print(spawnpoints)
				print(spawnpntnum)
				print(spawnpnt)
				
				while true do
					if humanoid.Health > 0 then
						print("skibii")
						if character.HumanoidRootPart then
							
						elseif not character.HumanoidRootPart then
							
								print("here ig")
								local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
								local spawnpoints = game.Workspace:WaitForChild("Map").Spawnpoints:GetChildren() -- getting spawnpoints
								local spawnpntnum = math.random(1,spawns)
								local spawnpnt = spawnpoints[spawnpntnum]
							end
							
						end
						break
					end
					print("inloop")
					wait(0.2)
				end
				
					
				
			
			end
		
		end
	
	end
end)

I’m not rlly sure but it looks like its because of your handling of the humanoid root part and detection of player death . try this script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("PlayerDiedWhileMatchOn")
local value = ReplicatedStorage:WaitForChild("RoundOn")

local spawns = 5

event.OnServerEvent:Connect(function(player)
	if value.Value == true then -- is round active
		local character = player.Character
		local humanoid = character and character:FindFirstChild("Humanoid")

		if humanoid then
			humanoid.Died:Connect(function()
				local spawnpoints = game.Workspace:WaitForChild("Map").Spawnpoints:GetChildren()
				local spawnpntnum = math.random(1, spawns) 
				local spawnpnt = spawnpoints[spawnpntnum] 
				local humanoidRootPart = character:WaitForChild("HumanoidRootPart")

				humanoidRootPart.CFrame = spawnpnt.CFrame
			end)
		end
	end
end)

the script currently works im just wondering how to make it so it rums when the player respawns

I just learnt about .CharacterAdded so I wrote this script, it works now!

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local event = ReplicatedStorage:WaitForChild("PlayerDiedWhileMatchOn")
local value = ReplicatedStorage:WaitForChild("RoundOn")

local spawns = 5

event.OnServerEvent:Connect(function(player)
	if value.Value == true then -- is round active
		player.CharacterAdded:Connect(function(plr)
			local spawnpoints = game.Workspace:WaitForChild("Map").Spawnpoints:GetChildren()
			local spawnpntnum = math.random(1, spawns) 
			local spawnpnt = spawnpoints[spawnpntnum] 
			local humanoidRootPart = plr:WaitForChild("HumanoidRootPart")

			humanoidRootPart.CFrame = spawnpnt.CFrame
		end)
	end
end)