Save Location

Data Store Setup

1. Make sure your game is published to Roblox

2. Click Game Settings, then Options, then Enable API Services

3. Test game on Roblox Website

4. startLocation can be any position

ServerScriptService

local DataStoreService = game:GetService('DataStoreService')

local playerData = DataStoreService:GetDataStore('PlayerData')

local RunService = game:GetService('RunService')


local startLocation = Vector3.new(-14, 0.6, -32)


local function onPlayerJoin(player)

local leaderstats = Instance.new('Folder')

leaderstats.Name = 'leaderstats'

leaderstats.Parent = player

local location = Instance.new('Vector3Value')

location.Name = 'Location'

location.Parent = player

local playerLocationId = 'Location_'..player.UserId

local LocationData = playerData:GetAsync(playerLocationId)

if LocationData then

location.Value = Vector3.new(LocationData[1],LocationData[2],LocationData[3])

player.CharacterAdded:Connect(function(chr)

local hrp = chr:WaitForChild('HumanoidRootPart')

RunService.Stepped:wait()

hrp.CFrame = CFrame.new(location.Value)

end)

else

location.Value = startLocation

end

end


local function convert(vec)

return {vec.X, vec.Y, vec.Z}

end


local function onPlayerExit(player)

local success, err = pcall(function()

local playerLocationId = 'Location_'..player.UserId

playerData:SetAsync(playerLocationId, convert(player.Location.Value))

end)

if not success then

warn('Could not save data')

end

end


game.Players.PlayerAdded:Connect(onPlayerJoin)

game.Players.PlayerRemoving:Connect(onPlayerExit)

Script for Checkpoint Part

local part = script.Parent


local function updateLocation(otherPart)

local player = game.Players:GetPlayerFromCharacter(otherPart.Parent)

if player then

player.Location.Value = otherPart.Parent.HumanoidRootPart.Position

end

end


part.Touched:Connect(updateLocation)