Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Make script and name it to Obbysavingsystem this is the leaderboard paste this =
- local DataStoreService = game:GetService("DataStoreService")
- local StageDataStore = DataStoreService:GetDataStore("StageData")
- local function TouchedPart(part, touchedPart)
- local ply = game.Players:GetPlayerFromCharacter(touchedPart.Parent)
- if ply then
- if ply.leaderstats.Stage.Value < tonumber(part.Name) then
- ply.leaderstats.Stage.Value = tonumber(part.Name)
- end
- end
- end
- local function AddTouchStageGiver()
- local stageNum = 1
- while true do
- local part = game.Workspace:FindFirstChild(tostring(stageNum))
- if part then
- part.Touched:connect(function (touchedPart)
- TouchedPart(part, touchedPart)
- end)
- else
- break
- end
- stageNum = stageNum + 1
- wait()
- end
- end
- local function GetSavedStage(ply)
- return StageDataStore:GetAsync(tostring(ply.UserId)) or 1
- end
- local function SaveCurrentStage(ply)
- StageDataStore:SetAsync(tostring(ply.UserId), ply.leaderstats.Stage.Value)
- end
- local SPAWN_OFFSET = Vector3.new(0, 5, 0)
- local function GetStageSpawnCFrames(stage)
- local stageSpawnPart = game.Workspace:FindFirstChild(tostring(stage))
- if not stageSpawnPart then
- return game.Workspace:FindFirstChild("1").CFrame + SPAWN_OFFSET
- end
- return stageSpawnPart.CFrame + SPAWN_OFFSET
- end
- local stageValues = {}
- local function CharacterAdded(ply, char)
- repeat wait() until stageValues[ply]
- char:SetPrimaryPartCFrame(GetStageSpawnCFrames(stageValues[ply].Value))
- end
- game.Players.PlayerAdded:connect(function (ply)
- local leaderstats = Instance.new("ObjectValue", ply)
- leaderstats.Name = "leaderstats"
- ply.CharacterAdded:connect(function (char)
- CharacterAdded(ply, char)
- end)
- local stage = Instance.new("IntValue", leaderstats)
- stage.Name = "Stage"
- stage.Value = GetSavedStage(ply)
- stageValues[ply] = stage
- --[[
- if ply.Character then
- CharacterAdded(ply, ply.Character)
- end
- --]]
- end)
- game.Players.PlayerRemoving:connect(function (ply)
- SaveCurrentStage(ply)
- end)
- wait(1)
- AddTouchStageGiver()
- Checkpoints =
- function oa(object)
- local player = game.Players:playerFromCharacter(object)
- if player ~= nil then
- local ls = player.leaderstats
- local sl = game.Workspace:FindFirstChild(ls.Stage.Value)
- print("gah")
- object.Torso.CFrame = object.Torso.CFrame + Vector3.new(0,3,0)
- wait()
- object.Torso.CFrame = sl.CFrame + Vector3.new(0,3,0)
- end end
- function oe(object)
- if object.className == "Player" then
- local ack = Instance.new("IntValue")
- ack.Name = "leaderstats"
- local ack2 = Instance.new("IntValue")
- ack2.Name = "Stage"
- ack2.Value = 1
- ack2.Parent = ack
- ack.Parent = object
- end end
- game.Players.ChildAdded:connect(oe)
- game.Workspace.ChildAdded:connect(oa)
- script =
- function ot(hit)
- if hit.Parent ~= nil then
- local player = game.Players:playerFromCharacter(hit.Parent)
- if player ~= nil then
- if player.leaderstats.Stage.Value == script.Parent.Name - 1 then
- local h = hit.Parent:FindFirstChild("Humanoid")
- if h ~= nil then
- if h.Health ~= 0 then
- player.leaderstats.Stage.Value = script.Parent.Name
- end end end end end end
- script.Parent.Touched:connect(ot)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement