Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How do I make coins for obby levels?

How do I make a coin where every level you complete you get say 5 coins, but you cant get it again. PLEASE help I have been stuck on this for a while.

1 answer

✓ Accepted answer

There a few ways you could do this. You could either tag all your checkpoints or put them in a folder and loop through them. For this example, we will be using the folder method, so it's easier for someone to understand.

First, we need to create the leaderstats so that we can add the coins to the value. (This will not save as I did not include a datastore)

--[[
	Script Type: Normal Script
	Parent: ServerScriptService
]]

-- services --
local players = game:GetService("Players")

-- script --
players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder", player) -- creates a folder and sets its parent to the new player
	leaderstats.Name = "leaderstats"
	
	local stage = Instance.new("NumberValue", leaderstats) -- new number value for the stages
	stage.Name = "Stage"
	
	local coins = Instance.new("NumberValue", leaderstats) -- new number value for the coins
	coins.Name = "Coins"
	
end)

Now that we have that let's get to the checkpoint system. We need to create a folder in the workspace named "Checkpoints" with the checkpoints inside of it. Each checkpoint's name should be set to whatever that stage level is.

--[[
	Script Type: Normal Script
	Parent: ServerScriptService
]]

-- services --
local players = game:GetService("Players")

-- locals --
local checkpointfolder = workspace:FindFirstChild("Checkpoints") -- find the checkpoint folder
local coinreward = 5 -- change this to whatever amount you'd like to give

if checkpointfolder then
	for index, checkpoint in pairs(checkpointfolder:GetChildren()) do
		if checkpoint:IsA("BasePart") then
			checkpoint.Touched:Connect(function(obj)
				local character = obj.Parent or obj.Parent.Parent
				
				if character:FindFirstChild("Humanoid") then
					local playerobj = players:GetPlayerFromCharacter(character)
					
					local leaderstats = playerobj:FindFirstChild("leaderstats")
					local coins = leaderstats:FindFirstChild("Coins")
					local stage = leaderstats:FindFirstChild("Stage")
					
					if leaderstats then
						if stage and coins then
							if tonumber(checkpoint.Name) == stage.Value + 1 then -- next stage will always be greater by one
								stage.Value = tonumber(checkpoint.Name) -- set their stage value to that stage
								coins.Value += coinreward -- add 5 coins to their coins
								print(("%s has moved onto the next stage and earned %s coins as a reward."):format(playerobj.Name, tostring(coinreward)))
							end
						end
					end
				end
			end)
			
		end
		
	end
	
else
	return warn("Could not find the checkpoint folder")
	
end

This discussion is preserved as it was. New answers, comments, and votes are closed.