What do you want to achieve? I am trying to have three values (stage, deaths and time spent).
What is the issue? My stages are not saving, the seconds are not going up and the deaths are not saving. These are my checkpoints : (they have teamchangeontouch off)
What solutions have you tried so far? I have tried the scripting helpers website but it was quite confusing.
This is my code:
local dss = game:GetService("DataStoreService")
local Datastore = dss:GetDataStore("ObbyData")
local checkpoints = workspace.Checkpoints
print("Checkpoints leaderstats working")
print("Deaths leaderstats working")
print("Time leaderstats working")
game.Players.PlayerAdded:Connect(function(plr)
local obbyData = Datastore:GetAsync(plr.UserId .. "-obbyStageProgress")
local stats = Instance.new("Folder")
stats.Name = "leaderstats"
stats.Parent = plr
local stage = Instance.new("StringValue")
stage.Name = "Stage"
stage.Value = obbyData or 1
stage.Parent = stats
local wipeouts = Instance.new("IntValue")
wipeouts.Name = "Deaths"
wipeouts.Value = 0
wipeouts.Parent = stats
local Data = Datastore:GetAsync(plr.UserId)
if Data then
wipeouts.Value = Data
end
local second = Instance.new("IntValue")
second.Name = "Seconds"
second.Value = stats
local Dat = Datastore:GetAsync(plr.UserId)
if Dat then
second.Value = Data
end
game.Players.PlayerRemoving:Connect(function(Player)
Datastore:SetAsync(Player.UserId, Player.leaderstats.Seconds.Value,Player.leaderstats.Deaths.Value) -- Change "Money" with your currency.
end)
local char = plr.Character or plr.CharacterAdded:Wait()
char:WaitForChild("HumanoidRootPart").CFrame = checkpoints[stage.Value].CFrame
char.Humanoid.Touched:Connect(function(touch)
if touch.Parent == checkpoints then
if (tonumber(touch.Name)and tonumber(touch.Name)>tonumber(stage.Value))or touch.Name == "End" then
stage.Value = touch.Name
pcall(function()
Datastore:SetAsync(plr.UserId.. "-obbyStageProgress", plr.leaderstats.Stage.Value,plr.leaderstats.Deaths.Value,plr.leaderstats.Seconds.Value)
end)
end
end
end)
plr.CharacterAdded:Connect(function(char)
local hrp = char:WaitForChild("HumanoidRootPart")
local humanoid = char:WaitForChild("Humanoid")
hrp:GetPropertyChangedSignal("CFrame"):Wait()
hrp.CFrame = checkpoints[stage.Value].CFrame
humanoid.Died:Connect(function(touch)
wipeouts.Value = wipeouts.Value +1
if touch.Parent == checkpoints then
if (tonumber(touch.Name)and tonumber(touch.Name)>tonumber(stage.Value))or touch.Name == "End"then
stage.Value = touch.Name
while true do
wait(2)
wipeout.Value = wipeout.Value + 1
end
pcall(function()
game.Players.PlayerRemoving:Connect(function(player)
Datastore:SetAsync(plr.UserId.. "-obbyStageProgress", plr.leaderstats.Stage.Value,plr.leaderstats.Deaths.Value,plr.leaderstats.Seconds.Value)
end)
end)
end
end
end
end
end)
end)
end)
while wait(2) do
wipeout.Value = wipeout.Value + 1
end
For the data store, I would do:
local file = Datastore:GetAsync(plr.UserId)
if file then
stage.Value = file[1]
wipeouts.Value = file[2]
end
end) -- This is the end for the PlayerAdded event
game.Players.PlayerRemoving:Connect(function(player)
Datastore:SetAsync(plr.UserId, {player.leaderstats.Stage.Value, player.Deaths.Value})
-- This goes after your leaderstats part
I don’'t know how to change this. I got this error: [14:58:08.484 - ServerScriptService.Checkpoints Script:82: Expected ‘)’ (to close ‘(’ at line 67), got ‘end’
And this is the code :
local dss = game:GetService("DataStoreService")
local Datastore = dss:GetDataStore("ObbyData")
local checkpoints = workspace.Checkpoints
print("Checkpoints leaderstats working")
print("Deaths leaderstats working")
print("Time leaderstats working")
game.Players.PlayerAdded:Connect(function(plr)
local obbyData = Datastore:GetAsync(plr.UserId .. "-obbyStageProgress")
local stats = Instance.new("Folder")
stats.Name = "leaderstats"
stats.Parent = plr
local stage = Instance.new("StringValue")
stage.Name = "Stage"
stage.Value = obbyData or 1
stage.Parent = stats
local wipeouts = Instance.new("IntValue")
wipeouts.Name = "Deaths"
wipeouts.Value = 0
wipeouts.Parent = stats
local second = Instance.new("IntValue")
second.Name = "Seconds"
second.Value = stats
local file = Datastore:GetAsync(plr.UserId)
if file then
stage.Value = file[1]
wipeouts.Value = file[2]
second.Value = file[3]
end
end)
game.Players.PlayerRemoving:Connect(function(player)
Datastore:SetAsync(plr.UserId, {player.leaderstats.Stage.Value, player.Deaths.Value}) -- Change "Money" with your currency.
end)
local char = plr.Character or plr.CharacterAdded:Wait()
char:WaitForChild("HumanoidRootPart").CFrame = checkpoints[stage.Value].CFrame
char.Humanoid.Touched:Connect(function(touch)
if touch.Parent == checkpoints then
if (tonumber(touch.Name)and tonumber(touch.Name)>tonumber(stage.Value))or touch.Name == "End" then
stage.Value = touch.Name
pcall(function()
Datastore:SetAsync(plr.UserId.. "-obbyStageProgress", plr.leaderstats.Stage.Value,plr.leaderstats.Deaths.Value,plr.leaderstats.Seconds.Value)
end)
end
end
end)
plr.CharacterAdded:Connect(function(char)
local hrp = char:WaitForChild("HumanoidRootPart")
local humanoid = char:WaitForChild("Humanoid")
hrp:GetPropertyChangedSignal("CFrame"):Wait()
hrp.CFrame = checkpoints[stage.Value].CFrame
humanoid.Died:Connect(function(touch)
wipeouts.Value = wipeouts.Value +1
if touch.Parent == checkpoints then
if (tonumber(touch.Name)and tonumber(touch.Name)>tonumber(stage.Value))or touch.Name == "End"then
stage.Value = touch.Name
while true do
wait(2)
wipeout.Value = wipeout.Value + 1
end
pcall(function()
game.Players.PlayerRemoving:Connect(function(player)
Datastore:SetAsync(plr.UserId.. "-obbyStageProgress", plr.leaderstats.Stage.Value,plr.leaderstats.Deaths.Value,plr.leaderstats.Seconds.Value)
end)
end
end)
end)
end)
end)
end)
plr.CharacterAdded:Connect(function(char)
humanoid.Died:Connect(function(touch)
wipeouts.Value = wipeouts.Value +1
if touch.Parent == checkpoints then
if (tonumber(touch.Name)and tonumber(touch.Name)>tonumber(stage.Value))or touch.Name == "End"then
stage.Value = touch.Name
while wait(2) do
wipeout.Value = wipeout.Value + 1
end
pcall(function()
game.Players.PlayerRemoving:Connect(function(player)
Datastore:SetAsync(plr.UserId.. "-obbyStageProgress", plr.leaderstats.Stage.Value,plr.leaderstats.Deaths.Value,plr.leaderstats.Seconds.Value)
end)
end
end
end)
end)