materia 09

Interações, Checkpoints, Missões e Sistemas de Pontuação


Introdução

A diferença entre um jogo comum e um jogo viciante está na lógica por trás do gameplay.
No Roblox Studio, essa lógica é escrita em Lua, e combina interação, progressão e recompensa — os três pilares da experiência do jogador.

Neste guia completo, você vai aprender a estruturar interações, criar checkpoints, desenvolver missões e configurar sistemas de pontuação que mantêm os jogadores engajados e voltando ao seu jogo.


1️⃣ Entendendo a lógica de gameplay

Todo jogo no Roblox segue o mesmo ciclo básico:

  1. Entrada do jogador → quando o jogador entra, o servidor reconhece e inicializa variáveis.
  2. Interação → o jogador realiza ações no mundo (andar, clicar, coletar, vencer desafios).
  3. Progresso → o jogo salva checkpoints, missões e pontuação.
  4. Recompensa → o jogador é motivado com moedas, XP ou desbloqueios.

Essa sequência pode ser representada como:

Ação → Feedback → Recompensa → Repetição

O segredo de um bom gameplay é criar recompensas proporcionais à dificuldade e ao tempo investido.


2️⃣ Criando interações (toques, cliques e gatilhos)

Interações são os pontos de contato entre jogador e ambiente.
Elas são implementadas através de eventos (como .Touched, .ClickDetector, ou ProximityPrompt).

2.1 Interação por toque (Touched)

  1. Crie um Part no Workspace e renomeie para Portal.
  2. Adicione um Script dentro dele:

local portal = script.Parent

local function aoTocar(hit)

local player = game.Players:GetPlayerFromCharacter(hit.Parent)

if player then

print(player.Name .. ” tocou no portal!”)

player.Character:MoveTo(Vector3.new(0, 10, 0)) — teleporta

end

end

portal.Touched:Connect(aoTocar)

💡 Dica: Sempre valide se o objeto tocado é realmente um jogador antes de aplicar efeitos.


2.2 Interação por clique (ClickDetector)

  1. Insira um ClickDetector dentro de um objeto.
  2. Adicione um Script:

local click = script.Parent:FindFirstChildOfClass(“ClickDetector”)

click.MouseClick:Connect(function(player)

print(player.Name .. ” clicou no botão!”)

end)


2.3 Interação por proximidade (ProximityPrompt)

  1. Adicione um ProximityPrompt em um objeto.
  2. Customize suas propriedades:
    • ActionText: “Abrir Porta”
    • ObjectText: “Porta Trancada”
  3. Script exemplo:

local prompt = script.Parent:FindFirstChildOfClass(“ProximityPrompt”)

prompt.Triggered:Connect(function(player)

print(player.Name .. ” abriu a porta!”)

end)

🚪 Resultado: o jogador se aproxima e pressiona uma tecla para interagir — ideal para jogos de aventura e RPG.


3️⃣ Checkpoints e salvamento de progresso

Checkpoints são pontos de retorno quando o jogador morre ou reentra no jogo.
Eles tornam o gameplay mais fluido e evitam frustração.

3.1 Criando um checkpoint simples

  1. Crie um Part (ex.: “Checkpoint1”).
  2. Insira um Script dentro dele:

local checkpoint = script.Parent

local checkpointId = 1

checkpoint.Touched:Connect(function(hit)

local player = game.Players:GetPlayerFromCharacter(hit.Parent)

if player then

local leaderstats = player:FindFirstChild(“leaderstats”)

if leaderstats then

leaderstats.Checkpoint.Value = checkpointId

print(player.Name .. ” alcançou o checkpoint ” .. checkpointId)

end

end

end)

3.2 Criando o sistema de respawn

No ServerScriptService, adicione este Script:

game.Players.PlayerAdded:Connect(function(player)

local leaderstats = Instance.new(“Folder”)

leaderstats.Name = “leaderstats”

leaderstats.Parent = player

local checkpoint = Instance.new(“IntValue”)

checkpoint.Name = “Checkpoint”

checkpoint.Value = 0

checkpoint.Parent = leaderstats

player.CharacterAdded:Connect(function(character)

task.wait(0.5)

local id = player.leaderstats.Checkpoint.Value

if id == 1 then

character:MoveTo(Vector3.new(0, 10, 0)) — posição do checkpoint 1

end

end)

end)

🎯 Dica: Use leaderstats para armazenar progresso de forma temporária — e DataStoreService para salvar permanentemente.


4️⃣ Criando missões (Quests) e objetivos

Missões dão propósito e narrativa ao jogo.
Você pode criá-las com UI Labels e variáveis de progresso.

4.1 Estrutura básica de missão

Crie um ModuleScript em ReplicatedStorage → Modules/Missoes.lua:

local Missoes = {

[1] = {nome = “Primeiro Passo”, objetivo = “Toque na Pedra Azul”, completado = false},

[2] = {nome = “Explorador”, objetivo = “Encontre o Tesouro”, completado = false}

}

return Missoes

4.2 Sistema de progresso

No ServerScriptService, adicione:

local ReplicatedStorage = game:GetService(“ReplicatedStorage”)

local Missoes = require(ReplicatedStorage.Modules.Missoes)

game.Players.PlayerAdded:Connect(function(player)

player:SetAttribute(“MissaoAtiva”, 1)

end)

local function concluirMissao(player)

local id = player:GetAttribute(“MissaoAtiva”)

if id then

Missoes[id].completado = true

player:SetAttribute(“MissaoAtiva”, id + 1)

print(player.Name .. ” concluiu a missão: ” .. Missoes[id].nome)

end

end

4.3 Exemplo de missão interativa

  1. Crie uma pedra azul (Part com BrickColor = Bright blue).
  2. Script dentro da pedra:

local part = script.Parent

part.Touched:Connect(function(hit)

local player = game.Players:GetPlayerFromCharacter(hit.Parent)

if player then

game:GetService(“ReplicatedStorage”):FireServer(“ConcluirMissao”, player)

end

end)

🪙 Dica criativa: combine missões com checkpoints e recompensas em Robux ou moedas internas.


5️⃣ Sistema de pontuação (leaderstats e ranking)

O leaderstats é o sistema padrão do Roblox para exibir pontuação e estatísticas no topo da tela.

5.1 Criando o placar

Adicione este Script no ServerScriptService:

game.Players.PlayerAdded:Connect(function(player)

local leaderstats = Instance.new(“Folder”)

leaderstats.Name = “leaderstats”

leaderstats.Parent = player

local Pontos = Instance.new(“IntValue”)

Pontos.Name = “Pontos”

Pontos.Value = 0

Pontos.Parent = leaderstats

end)

5.2 Atualizando a pontuação

Dentro de qualquer interação (ex.: coletar moedas):

local function coletarMoeda(player)

local pontos = player.leaderstats.Pontos

pontos.Value += 10

print(player.Name .. ” ganhou 10 pontos! Total: ” .. pontos.Value)

end

5.3 Ranking global (opcional)

Você pode salvar pontuações em DataStoreService e criar um leaderboard global:

local DataStoreService = game:GetService(“DataStoreService”)

local PontosStore = DataStoreService:GetDataStore(“PontosGlobal”)

game.Players.PlayerRemoving:Connect(function(player)

local pontos = player.leaderstats.Pontos.Value

PontosStore:SetAsync(player.UserId, pontos)

end)

⚙️ Dica técnica: use salvamentos assíncronos (pcall, SetAsync, GetAsync) para evitar erros de conexão.


6️⃣ Engajamento: feedbacks e recompensas

Todo bom sistema de pontuação precisa de feedback visual e sonoro.
Isso ativa o cérebro do jogador e o incentiva a continuar jogando.

Exemplos:

  • Som de “moeda coletada” (SoundService + Sound:Play());
  • Efeito de partícula (ParticleEmitter) quando o jogador ganha pontos;
  • Mensagem na tela (StarterGui:SetCore(“SendNotification”)).

game.StarterGui:SetCore(“SendNotification”, {

Title = “Recompensa!”;

Text = “Você ganhou 50 pontos!”;

Duration = 3

})


7️⃣ Boas práticas de gameplay

PrincípioAplicação prática
ClarezaO jogador precisa entender o objetivo desde o início.
FeedbackCada ação deve ter um retorno imediato (som, luz, pontuação).
ProgressoMostre visualmente o avanço (barras, números, fases).
Desafio crescenteAumente a dificuldade de forma suave.
Recompensa justaDê prêmios proporcionais ao esforço.

🎯 Regra de ouro: o jogador deve sempre saber “o que fazer” e “por que continuar”.


❓ FAQ – Perguntas Frequentes

1. Posso criar missões com diálogo e história?
Sim. Use ScreenGui e TextLabels para criar janelas de diálogo e scripts que alternam falas e objetivos.

2. É possível salvar pontuação entre sessões?
Sim, use DataStoreService para salvar valores no servidor.

3. Checkpoints funcionam em jogos multiplayer?
Sim, mas devem ser configurados com atributos por jogador, nunca globais.

4. Como criar recompensas automáticas?
Com eventos (Touched, Triggered) e scripts que alteram valores de moedas ou XP.

5. Existe limite para leaderstats?
Não há limite fixo, mas mantenha poucas estatísticas por jogador para evitar sobrecarga.


Conclusão

A lógica de jogo é o cérebro da sua experiência Roblox.
Ela define como o jogador interage, progride e se sente recompensado.
Com interações bem planejadas, checkpoints funcionais, missões dinâmicas e um bom sistema de pontuação, você cria um jogo imersivo, viciante e memorável.

🎮 Agora é hora de transformar seu mundo no Roblox em um universo cheio de propósito e diversão.