Sistema de loja
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!
Nesse momento é interessante começarmos a ter alguma ideia de como nosso jogo vai ser: Clicker ou Idle? Os dois? O jogador melhora as construções que tem ou simplesmente compra melhores (ou mais das mesmas)? E o visual, como vai ser? Tem outros jogos do gênero de inspiração?
Independente disso, muito provavelmente seu jogo vai ter alguma forma de gastar os pontos acumulados pelos jogador, e para isso precisamos de um sistema de loja
Por agora faremos uma marcação simples em tela para depois animar e estilizar.
Da mesma forma que criamos a visualização de pontos na primeira página dessa sessão, vamos para StarterGui e criar um novo ScreenGui. Para evitar futuros problemas com o código (além de deixar mais organizado), renomeie para menuLoja.

Para os botões desse menu temos duas opções:
- TextButton: Terá apenas um texto que podemos editar pelo próprio Roblox Studio. Adicionar algum fundo customizado ou outros efeitos pode se tornar mais difícil;
- ImageButton: Pede que uma imagem seja usada para representar o botão e podemos mudar por código qual imagem vai ser mostrada durante o jogo. Não é possível editar essa imagem dentro do Roblox Studio;
Para o atual exemplo vou utilizar o TextButton, e vou criar apenas um por agora. Também vou renomeá-lo para "item1" de forma que seja bem mais intuitivo de conectá-lo a códigos futuros. Dentro desse botão vou adicionar um LocalScript:

Dentro do LocalScript eu adicionei o seguinte bloco de códigos:
IMPORTANTE: o código precisa ser adaptado para o nome de algumas partes no seu jogo, então siga as instruções que estarão logo abaixo dele.
local melhorias = workspace:WaitForChild("Melhorias")
local melhoria1 = melhorias:WaitForChild("Item 1 ponto")
local botao = script.Parent
local gui = botao.Parent
local playerGui = gui.Parent
local pontosGui = playerGui:WaitForChild("ScreenGui")
local pontos = pontosGui:WaitForChild("TextLabel"):WaitForChild("Pontos")
print(melhoria1)
script.Parent.Activated:Connect(function(hit)
if pontos.Value < 20 then
print("Você não tem pontos suficientes")
else
pontos.Value -= 20
local clone = melhoria1:Clone();
clone.Parent = workspace
clone.Position = Vector3.new(0, 5, 0)
end
end)
- Organize todos os itens que podem ser comprados em uma pasta. Renomeie essa pasta (no meu caso, eu a nomeei como Melhorias). Na linha 1 do código mude o nome que está entre aspas para o que você colocou na sua pasta.

- Tenha certeza que deu um nome diferente para cada item, e mude o nome que está entre aspas na segunda linha para o nome que você colocou nesse item. No meu caso renomeei para Item 1 ponto.
local melhoria1 = melhorias:FindFirstChild("Item 1 ponto")
- Teste!
Do modo como está escrito o código só conseguiremos comprar a primeira melhoria gastando 20 pontos, e a melhoria vai aparecer no ponto (0,0,0) do nosso mapa (ou seja, o item vai aparecer bem no centro da área do jogo). Em breve estarei atualizando essa página ensinando como mudar o local de spawn do clone.