Como Salvar Progresso no Roblox Studio com DataStore
Neste tutorial, você vai aprender como salvar moedas no Roblox Studio usando DataStoreService, leaderstats, GetAsync, SetAsync, pcall e BindToClose. Assim, quando o jogador sair e voltar para o jogo, o progresso dele continua salvo.
- Roblox Studio
- DataStore
- Salvar moedas
- Lua
- Leaderstats
Projeto prático: o jogador coleta moedas, o valor aparece no placar e depois fica salvo mesmo ao sair do jogo.
Eventos, funções, variáveis, salvamento de dados e criação de sistemas reais dentro do Roblox.
O que é DataStore no Roblox Studio?
O DataStore é o sistema usado no Roblox Studio para salvar informações do jogador. Com ele, o jogo consegue guardar dados como moedas, pontos, itens, fases liberadas e progresso.
Sem DataStore, o jogador até pode ganhar moedas durante a partida, mas quando ele sai do jogo, esse valor pode se perder. Com DataStore, o jogo consegue carregar o progresso novamente quando o jogador volta.
Neste tutorial, vamos usar DataStore para salvar o valor de Money, que aparece no leaderstats quando o jogador coleta moedas no mapa.
1. O jogador coleta moedas
Ao encostar em uma moeda, o valor de Money aumenta no placar.
2. O valor aparece no leaderstats
O jogador consegue ver quantas moedas tem durante a partida.
3. O jogo salva com SetAsync
Quando o jogador sai, o script envia o valor para o DataStore.
4. O jogo carrega com GetAsync
Quando o jogador volta, o valor salvo é carregado novamente.
❌ Sem DataStore
O jogador coleta moedas, mas ao sair do jogo o progresso pode voltar para zero. Isso deixa o jogo menos completo e menos parecido com uma experiência real do Roblox.
✅ Com DataStore
O jogo salva o progresso do jogador. Assim, moedas, pontos e outros dados podem continuar disponíveis quando ele entra novamente na experiência.
Antes de testar o DataStore, faça isso no Roblox Studio
Antes de colar o script, é importante preparar o jogo corretamente. O DataStore salva dados nos servidores do Roblox, então algumas configurações precisam estar ativas para o teste funcionar dentro do Studio.
Publique a experiência
No Roblox Studio, salve e publique o jogo. O DataStore depende da experiência publicada para conseguir se comunicar com os serviços do Roblox.
Ative o acesso às APIs
Vá em File > Experience Settings >
Security e ative Enable Studio Access to API Services.
Use Script do servidor
O código de DataStore deve ficar em um Script dentro de
ServerScriptService. Não coloque esse sistema em LocalScript.
Crie a pasta das moedas
Para este projeto, crie uma pasta chamada Coins dentro do
Workspace e coloque as moedas dentro dela.
Se o DataStore não salvar, confira primeiro esta lista
Muitos erros acontecem não porque o script está errado, mas porque o ambiente ainda não está pronto para salvar dados.
- 🌐 Jogo publicado no Roblox
- 🔓 API Services ativado em Security
- 🧩 Script dentro de ServerScriptService
- 🪙 Pasta Coins criada no Workspace
- 📊 Nome Money igual no leaderstats
Dica para aula: primeiro teste se a moeda aumenta no leaderstats. Depois saia do jogo, entre novamente e verifique se o valor foi carregado pelo DataStore.
Como montar a estrutura do projeto antes de usar o DataStore
Antes de colocar o script, organize o jogo no Roblox Studio. Neste exemplo, vamos criar uma pasta de moedas no Workspace e um script dentro do ServerScriptService. O leaderstats será criado automaticamente pelo código.
- 📁 Workspace
- 📁 Coins
- 🪙 Coin
- 🪙 Coin
- 🪙 Coin
- 📁 ServerScriptService
- 📜 Script_DataStore
- 👤 Player
- 📁 leaderstats criado pelo script
- 📊 Money criado pelo script
Workspace > Coins
Crie uma pasta chamada Coins dentro do Workspace.
Dentro dela, coloque as moedas que o jogador poderá coletar no mapa.
Moedas no mapa
Cada moeda precisa ser uma peça que o jogador consiga tocar.
Quando a moeda for tocada, o evento Touched será ativado.
ServerScriptService
O script completo deve ficar dentro de ServerScriptService,
porque o salvamento com DataStore precisa acontecer no servidor.
Leaderstats e Money
O próprio script vai criar a pasta leaderstats e o valor
Money para mostrar as moedas do jogador no placar.
Dica importante: escreva os nomes exatamente como aparecem no script. Se a pasta for chamada de Coin em vez de Coins, por exemplo, o código não vai encontrar as moedas.
Código para salvar moedas com DataStore
Agora vamos colocar o script principal. Ele cria o leaderstats, soma moedas quando o jogador encosta em uma moeda, carrega os dados com GetAsync e salva com SetAsync.
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local Coins = workspace:WaitForChild("Coins")
local moneyStore = DataStoreService:GetDataStore("MoneyDataStore1")
local debounce = {}
for _, coin in ipairs(Coins:GetChildren()) do
coin.Touched:Connect(function(hit)
local character = hit.Parent
local humanoid = character:FindFirstChild("Humanoid")
if humanoid then
local player = Players:GetPlayerFromCharacter(character)
if not player then
return
end
if debounce[player.UserId] then
return
end
debounce[player.UserId] = true
local leaderstats = player:FindFirstChild("leaderstats")
local moedas = leaderstats and leaderstats:FindFirstChild("Money")
if moedas then
moedas.Value += 1
end
task.wait(0.5)
debounce[player.UserId] = false
coin:Destroy()
end
end)
end
local function salvarDados(player)
print("Player saiu do jogo")
local leaderstats = player:FindFirstChild("leaderstats")
local moedas = leaderstats and leaderstats:FindFirstChild("Money")
if not moedas then
return
end
local success, erro = pcall(function()
moneyStore:SetAsync(tostring(player.UserId), moedas.Value)
end)
if success then
print("Dados foram salvos")
else
warn("Erro ao salvar dados:", erro)
end
end
local function carregarDados(player)
local success, resultado = pcall(function()
return moneyStore:GetAsync(tostring(player.UserId))
end)
if success then
if resultado ~= nil then
print("Dados carregados:", resultado)
local leaderstats = player:FindFirstChild("leaderstats")
local moedas = leaderstats and leaderstats:FindFirstChild("Money")
if moedas then
moedas.Value = resultado
end
end
else
warn("Erro ao carregar os dados:", resultado)
end
end
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local money = Instance.new("IntValue")
money.Name = "Money"
money.Value = 0
money.Parent = leaderstats
carregarDados(player)
end)
Players.PlayerRemoving:Connect(function(player)
salvarDados(player)
end)
game:BindToClose(function()
for _, player in ipairs(Players:GetPlayers()) do
salvarDados(player)
end
end)
GetAsync
Busca no DataStore o valor que já foi salvo para aquele jogador.
SetAsync
Salva o valor atual de Money usando o UserId do jogador como chave.
pcall
Protege o jogo caso a tentativa de salvar ou carregar dados apresente erro.
Importante: coloque este código em um Script dentro de ServerScriptService. Não use LocalScript para salvar dados com DataStore.
Como o script de DataStore funciona por dentro?
O script pode parecer grande no começo, mas ele é formado por pequenas partes. Cada trecho tem uma função: criar o placar, detectar a moeda, carregar os dados e salvar o progresso do jogador.
Fluxo do salvamento
Veja a ordem em que as principais ações acontecem dentro do jogo.
Players.PlayerAdded
Roda quando o jogador entra no jogo. É aqui que o script cria a pasta
leaderstats e o valor Money.
leaderstats
É a pasta especial que faz o Roblox mostrar valores no placar do jogador, como dinheiro, pontos ou fases.
coin.Touched
Detecta quando o personagem encosta em uma moeda. Quando isso acontece,
o valor de Money aumenta em 1.
Debounce
Evita que a mesma moeda seja contada várias vezes muito rápido quando o jogador encosta nela.
GetAsync
Carrega o valor salvo no DataStore. Neste exemplo, usamos
player.UserId para encontrar os dados certos.
SetAsync
Salva o valor atual de Money quando o jogador sai do jogo,
mantendo o progresso para a próxima partida.
pcall
Protege o script caso a tentativa de salvar ou carregar falhe. Assim, o erro não quebra o jogo inteiro.
BindToClose
Tenta salvar os dados dos jogadores quando o servidor está fechando, aumentando a segurança do salvamento.
Resumo para o aluno: primeiro o jogo cria o placar, depois carrega as moedas salvas, soma novas moedas durante a partida e salva tudo novamente quando o jogador sai.
Por que o DataStore não está salvando?
Quando o DataStore não funciona, nem sempre o problema está no script. Muitas vezes, o erro está na configuração do jogo, no local onde o código foi colocado ou em algum nome diferente no Explorer.
Jogo não publicado
Para testar DataStore corretamente, publique a experiência no Roblox antes de tentar salvar os dados.
API Services desligado
Ative Enable Studio Access to API Services em Security nas configurações da experiência.
Script no lugar errado
O sistema de salvamento deve ficar em um Script dentro de ServerScriptService.
Nome da pasta diferente
Se o código procura por Coins, a pasta no Workspace precisa ter exatamente esse nome.
Nome do Money diferente
Se o script salva Money, o IntValue também precisa se chamar Money.
Teste encerrado muito rápido
Ao testar no Studio, espere alguns segundos antes de fechar para verificar se o salvamento aconteceu.
Confira estes pontos antes de mudar o script inteiro
Esse checklist ajuda a encontrar o problema mais rápido e evita que o aluno apague um código que já estava certo.
O jogo foi publicado no Roblox?
A opção API Services está ativada?
O script está em ServerScriptService?
A pasta Coins existe dentro do Workspace?
O valor Money aparece no leaderstats?
O Output mostra “Dados foram salvos”?
Dica de teste: primeiro veja se as moedas aumentam no placar. Depois saia do jogo, entre novamente e confira se o valor salvo voltou corretamente.
Depois das moedas: o que mais dá para salvar com DataStore?
Neste tutorial, salvamos o valor de moedas do jogador. Mas o mesmo conceito pode ser usado para criar sistemas mais completos, como inventário, fases liberadas, skins, ferramentas e recompensas.
DataStore transforma um projeto simples em um jogo mais completo
Quando o aluno aprende a salvar dados, ele começa a entender como jogos reais mantêm progresso, recompensas e informações importantes do jogador.
Primeiro salva moedas e pontos.
Depois salva itens, ferramentas e recompensas.
Por fim, cria sistemas de inventário e progresso.
Salvar inventário
O DataStore pode ser usado para salvar quais itens o jogador possui, como ferramentas, armas, pets ou recompensas.
Salvar skins
Também é possível guardar a skin escolhida pelo jogador e carregar essa escolha quando ele voltar ao jogo.
Salvar fases liberadas
Em jogos de fase, o DataStore ajuda a lembrar até onde o jogador chegou, evitando que ele precise começar tudo de novo.
Salvar conquistas
Medalhas, recordes, níveis e conquistas também podem ser salvos para deixar o jogo mais viciante e recompensador.
Salvar compras do jogo
Em projetos mais avançados, o aluno pode salvar itens comprados na loja usando valores organizados no DataStore.
Salvar nível do jogador
O mesmo sistema pode evoluir para salvar XP, nível, ranking e progresso de personagens dentro do jogo.
Dica para evoluir o projeto: comece salvando apenas um número, como moedas. Depois, avance para tabelas com vários dados do jogador, como itens, fases e escolhas.
Seu filho quer aprender Roblox Studio de verdade?
Na Programação for Kids, crianças e adolescentes aprendem programação criando projetos no Roblox Studio: scripts, moedas, lojas, sistemas de pontuação, fases, desafios e jogos completos.
Em vez de apenas jogar, o aluno começa a entender como os jogos funcionam por dentro e desenvolve lógica, criatividade e pensamento computacional.
Projetos práticos
O aluno aprende criando jogos e sistemas reais dentro do Roblox Studio.
Programação em Lua
Scripts explicados passo a passo, com foco em lógica e construção de jogos.
Raciocínio lógico
A criança aprende a resolver problemas enquanto cria algo que gosta.
Aula online
Aprendizado prático, no computador, com orientação para evoluir com segurança.
Ideal para quem ama Roblox
Uma forma inteligente de transformar interesse por jogos em aprendizado de programação.
Dúvidas comuns sobre DataStore no Roblox Studio
Se você está começando a salvar progresso no Roblox Studio, estas são algumas das dúvidas mais comuns sobre DataStore, leaderstats, GetAsync, SetAsync e salvamento de moedas.
Salvar progresso é um passo importante para criar jogos mais completos
Quando o aluno entende DataStore, ele deixa de criar apenas testes simples e começa a construir sistemas que continuam funcionando mesmo depois que o jogador sai do jogo.
Salvar moedas e pontos do jogador.
Evoluir para inventário, itens e skins.
Guardar fases, níveis e progresso.
O que é DataStore no Roblox Studio?
DataStore é o sistema usado para salvar dados do jogador, como moedas, pontos, inventário e progresso. Assim, quando o jogador sai e volta, o jogo pode carregar as informações salvas.
Onde devo colocar o script de DataStore?
O script deve ficar em um Script dentro de ServerScriptService. Esse tipo de sistema deve rodar no servidor, não em LocalScript.
Por que meu DataStore não está salvando?
Os motivos mais comuns são: jogo não publicado, API Services desativado, script no lugar errado, nomes diferentes no Explorer ou erro ao chamar GetAsync e SetAsync.
Preciso usar pcall com DataStore?
Sim. O pcall protege o script caso a tentativa de salvar ou carregar falhe. Isso evita que um erro temporário quebre o funcionamento do jogo.
Dá para salvar inventário com DataStore?
Sim. O exemplo deste tutorial salva moedas, mas o mesmo conceito pode ser usado para salvar inventário, skins, fases, itens comprados e conquistas.
Resumo: DataStore é essencial para criar jogos em que o progresso do jogador continua salvo mesmo depois que ele sai da experiência.





