Last Location Saving... not saving. - Roblox Scripting

Wassup, here is my code. I’m trying to save the player’s last position when they leave the game. but… it’s not saving. Here is my code:

Saving script (SSS):

local players = game:GetService("Players")
local DVersion = 3
local DataStoreService = game:GetService("DataStoreService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ValueTable = {}

ReplicatedStorage.GameFunctions.Get_Value.OnServerInvoke = function(player, Name, Folder)
	local save = DataStoreService:GetDataStore(Name ..DVersion)
	local previousData = save:GetAsync(player.UserId)
	local Val = player:FindFirstChild(Folder):FindFirstChild(Name)
	
	if Val then
		if previousData ~= nil then
			return previousData
		else
			return Val.Value
		end
	end
end

ReplicatedStorage.GameFunctions.Update_Value.OnServerInvoke = function(player, Name, Folder, Value)
	local save = DataStoreService:GetDataStore(Name ..DVersion)
	local previousData = save:GetAsync(player.UserId)
	local Val = player:FindFirstChild(Folder):FindFirstChild(Name)
	
	if Val then
		Val.Value = Value
		save:SetAsync(player.UserId, Val.Value)
	end
end

local function CreateFolders(player)
	local Id_Data = Instance.new("Folder")
	Id_Data.Parent = player
	Id_Data.Name = "Id_Data"
	
	local PlayerStats_Data = Instance.new("Folder")
	PlayerStats_Data.Parent = player
	PlayerStats_Data.Name = "PlayerStats_Data"
end

local function CreateValues(player, Saving)
	-------------------------------------------------------------------------
	local LastPosition = Instance.new("StringValue")
	LastPosition.Parent = player:WaitForChild("PlayerStats_Data")
	LastPosition.Name = "LastPosition"
	table.insert(ValueTable, LastPosition)
	local save = DataStoreService:GetDataStore(LastPosition.Name ..DVersion)
	local previousData = save:GetAsync(player.UserId)
	LastPosition.Changed:Connect(function(newVal)
		print(newVal)
		save:SetAsync(player.UserId, LastPosition.Value)
	end)

	if previousData ~= nil then
		LastPosition.Value = previousData
	else
		save:SetAsync(player.UserId, LastPosition.Value)
	end

end

local function SaveValues(player)
	for _,Element in pairs(ValueTable) do
		local save = DataStoreService:GetDataStore(Element.Name ..DVersion)
		local previousData = save:GetAsync(player.UserId)
		save:SetAsync(player.UserId, Element.Value)
		print(Element.Value)
	end
end

players.PlayerAdded:Connect(function(player)
	CreateFolders(player)
	CreateValues(player, false)
end)

players.PlayerRemoving:Connect(function(player)
	player.CharacterRemoving:Connect(function(character)
		SaveValues(player)
	end)
end)

Position Script idk, (SSS):

local players = game:GetService("Players")

players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		local Value = player.PlayerStats_Data:WaitForChild("LastPosition")
		local PositionValue = tonumber(Value.Value)
		local Hrp = character:WaitForChild("HumanoidRootPart")
		print(Value.Value)
		if PositionValue ~= nil then
			Hrp.CFrame = CFrame.new(PositionValue)
		end
	end)
end)

players.PlayerRemoving:Connect(function(player)
	player.CharacterRemoving:Connect(function(character)
		local Value = player.PlayerStats_Data:WaitForChild("LastPosition")
		local Hrp = character:WaitForChild("HumanoidRootPart")
		local PositionValue = tostring(Hrp.Position)
		print(Hrp.Position)
		print(PositionValue)
		Value.Value = PositionValue
	end)
end)

Thanks,

1 Like
1 Like