Sistema de pontos básico
Atenção!!! Não apenas copie o código sem ler as explicações. Elas são necessárias tanto para entender o que você está fazendo como também para saber se está sendo colocado corretamente!
Para nosso jogo idle queremos ter alguma forma de guardar a pontuação (ou dinheiro, sementes, cookies, etc), já que é a parte principal para o funcionamento do jogo.
Na pasta StarterGui vamos criar um elemento de tela que vai salvar a pontuação atual do nosso jogador. Nela, adicione um ScreenGui, e dentro dele um TextLabel. Dentro do TextLabel, vamos adicionar dois elementos: um IntValue que renomearemos para "Pontos" e um LocalScript.

No LocalScript, adicione o seguinte trecho de código:
local texto = script.Parent
local pontos = texto:FindFirstChild("Pontos")
print(pontos)
while true do
texto.Text = pontos.Value
wait(0.01)
end
Agora precisamos de alguma forma de ganhar (ou perder) pontos.
Crie uma parte no seu mundo para servir como um objeto de teste. Vamos fazer com que, ao aproximar dele, aparecerá uma mensagem na tela pedindo para interagir. Interagindo com ela, você obtém um ponto.
Dentro da parte adicione um ProximityPrompt e, dentro desse, um Script.

Coloque o bloco abaixo dentro do Script:
local players = game:GetService("Players")
script.Parent.Triggered:Connect(function(jogador)
local playerGui = jogador.PlayerGui
local screenGui = playerGui:WaitForChild("ScreenGui")
local textLabel = screenGui:WaitForChild("TextLabel")
local pontos = textLabel:FindFirstChild("Pontos")
pontos.Value = pontos.Value + 1
textLabel.Text = pontos.Value
end)
Desafio 1: Crie uma segunda parte que gere 5 pontos ao invés de 1.
Objetivo geral do código
Ambos os blocos de código dessa página trabalham em conjunto mas, em ordem, eles fazem a seguinte função:
- Cria um sistema de pontuação.
- Aumenta a pontuação do jogador ao interagir com o bloco
Explicação passo a passo do código 1
local texto = script.Parent
-
Define a variável
textocomo o objeto pai do script. -
Nesse caso o objeto é um
TextLabel(um campo de texto na tela).
local pontos = texto:FindFirstChild("Pontos")
-
Procura por um filho chamado Pontos dentro do TextLabel.
-
Espera-se que Pontos seja um objeto do tipo IntValue, NumberValue, etc.
-
Esse objeto armazena a pontuação que será exibida no TextLabel.
print(pontos)
-
Apenas imprime no console o valor de pontos (ou nil se não encontrado).
-
Isso ajuda a depurar (verificar se o Pontos foi encontrado corretamente).
while true do
texto.Text = pontos.Value
wait(0.01)
end
-
Esse é um loop infinito, que:
-
Define o texto do TextLabel (texto.Text) como o valor atual de pontos.
-
Aguarda 0.01 segundos.
-
Repete indefinidamente.
-
-
Isso faz com que o texto do TextLabel atualize em tempo real, praticamente a cada frame (~100 vezes por segundo), conforme o valor de pontos muda.
Explicação passo a passo do código 2
local players = game:GetService("Players")
local prompt = script.Parent
local part = prompt.Parent
-
Obtém o serviço de jogadores (
Players). -
Guarda o prompt que disparará o evento de interação (
script.Parent). -
Guarda a parte (part) onde o prompt está inserido (geralmente um bloco ou objeto 3D).
script.Parent.Triggered:Connect(function(jogador)
-
Conecta uma função anônima ao evento
Triggereddo prompt. -
Esse evento é disparado quando um jogador interage com o prompt.
-
A função recebe como parâmetro o jogador que acionou o prompt.
local playerGui = jogador.PlayerGui
local screenGui = playerGui:WaitForChild("ScreenGui")
local textLabel = screenGui:WaitForChild("TextLabel")
-
Acessa a interface gráfica (
PlayerGui) do jogador. -
A partir daí, busca por um elemento
ScreenGuie depois umTextLabeldentro dela. -
Isso supõe que a interface do jogador já contém esses elementos, usados para exibir informações na tela.
local pontos = textLabel:FindFirstChild("Pontos")
pontos.Value = pontos.Value + 1
-
Procura um objeto filho chamado Pontos dentro do TextLabel.
-
Supõe-se que Pontos é um objeto do tipo IntValue (ou outro tipo numérico).
-
Aumenta o valor de pontos em 1, ou seja, incrementa a pontuação do jogador.