At the moment, it just currently sends me below the 'baseplate' area and I fall to my death, repeatedly. I've got it to sometimes spawn me at the home spawn.
What i'm TRYING to do is save a players position whenever they leave, and if they die, get sent back to the home.
But anyways, when character is added, it takes the position data and teleports, that should work.
when character is removed however, is where my problem is, i think. I seem to get these bugs that loop myself into confusion. I'm not sure at this point what i'm doing wrong. Point me in the right direction please!
local function onCharacterAdded(character) --Teleport player local player = game.Players:GetPlayerFromCharacter(character) local data = player:WaitForChild("PlayerData") local stats = data:WaitForChild("PlayerStats") local TimeJoined = game.Lighting.ClockTime character:FindFirstChild("TimeJoined").Value = TimeJoined local X = stats.PositionX.Value local Y = stats.PositionY.Value local Z = stats.PositionZ.Value character.HumanoidRootPart.CFrame = CFrame.new(X,Y,Z) end local function onCharacterRemoving(character) local player = game.Players:GetPlayerFromCharacter(character) local data = player:WaitForChild("PlayerData") local stats = data:WaitForChild("PlayerStats") local birth = stats.Birth.Value if character.Death == 1 then --character is dead, changing position data to home. local birtharea = workspace:FindFirstChild(birth).Enter local spawnX = birtharea.Position.X local spawnY = birtharea.Position.Y local spawnZ = birtharea.Position.Z stats.PositionX.Value = spawnX stats.PositionY.Value = spawnY stats.PositionZ.Value = spawnZ print(birth, stats.PositionX.Value, stats.PositionY.Value, stats.PositionZ.Value) stats.Lives.Value = stats.Lives.Value-1 else --leaving? local currentX = character.Head.Position.X local currentY = character.Head.Position.Y local currentZ = character.Head.Position.Z stats.PositionX.Value = currentX stats.PositionY.Value = currentY stats.PositionZ.Value = currentZ end end
And my 'setter' code, although not necessary but was mostly a test to see if running it before dying set the position faster, or at all. Honestly, didn't seem to do anything.
local character = script.Parent if not character then repeat wait() until character end local player = game.Players:FindFirstChild(character.Name) local playerData = player:WaitForChild("PlayerData") local TimeJoined = character:WaitForChild("TimeJoined") local Death = character:WaitForChild("Death") while wait(.1) do if TimeJoined == game.Lighting.ClockTime then playerData.PlayerStats.Days.Value = playerData.PlayerStats.Days.Value+1 end if character.Humanoid.Health > 5 then wait(1.5) Death.Value = 0 else wait(1.5) Death.Value = 1 end end