Monetizar seu jogo

Passe no Roblox: como criar, vender e a data que muda a venda entre jogos

Passe cobra uma vez por um privilegio permanente. Este guia cobre a ordem certa de criar, os limites de preco, por que o privilegio nao e automatico e o que a documentacao oficial marcou para 30 de maio de 2026.

por Gustavo Cantino8 min de leituraIniciante

Produzido com IA a partir das fontes citadas abaixo, e conferido por checagens automáticas contra essas mesmas fontes. Nenhuma pessoa leu este texto antes da publicação. Política Editorial

Placa tipográfica com a categoria Monetizar seu jogo em destaque, o nível iniciante abaixo, e um campo de barras verticais verde-limão sobre fundo escuro.

Se o seu jogo vende um passe que é usado em outro jogo seu — ou se você monta pacotes que atravessam o seu catálogo —, existe uma data na documentação oficial da Roblox que você precisa ter olhado: 30 de maio de 2026. É o dia em que a venda de passes entre jogos foi marcada para ser desativada.

Essa data já passou. Este texto explica o que o passe é, como se cria um do jeito certo, o que a documentação diz sobre a venda entre jogos e como conferir, em código, se algum fluxo seu ainda depende disso.

O problema

A confusão começa antes da data. Passe e produto de desenvolvedor são coisas diferentes, e escolher errado custa retrabalho de loja inteira.

Segundo a documentação, o passe existe para cobrar do usuário uma taxa única em Robux por um privilégio dentro do jogo: entrada numa área restrita, um item de avatar no jogo, um poder permanente. Para o que o jogador pode comprar várias vezes — poção, poder temporário, moeda de jogo — a própria página manda usar produto de desenvolvedor.

A regra prática é a repetição, não o preço: se o mesmo jogador pode querer aquilo duas vezes, não é passe.

O segundo problema é de sequência. Antes de criar um passe é preciso que o jogo já esteja publicado e acessível na Roblox. Quem tenta montar a monetização antes de publicar trava logo no primeiro passo, e a mensagem que aparece não deixa isso óbvio.

E o terceiro é o que motivou este texto: a venda entre jogos. Se a sua arquitetura assume que um passe comprado no jogo A libera algo no jogo B, a documentação recomenda migrar para transferências de Robux antes da data marcada, justamente para não haver interrupção de serviço.

Passo a passo

O caminho oficial para criar um passe tem uma ordem fixa:

  1. Publique o jogo primeiro. Sem isso o passe não existe como opção.
  2. Vá em Creations e selecione o jogo.
  3. Vá em Monetization, depois Passes.
  4. Clique em Create pass.
  5. Envie a imagem do ícone. A documentação é específica: ela não pode passar de 512x512 pixels, não deve ter detalhe importante fora dos limites circulares, e precisa estar em .jpg, .png ou .bmp.
  6. Escreva nome e descrição.
  7. Escolha a categoria — é ela que organiza o item na loja dentro do jogo.
  8. Clique em Create pass de novo, para confirmar.

O detalhe do círculo é o que mais pega gente desprevenida: a imagem é enviada quadrada e exibida recortada. Texto encostado no canto some.

Depois de criado, você precisa do ID do passe para qualquer coisa em script. Ele sai em Monetization ⟩ Passes: passe o mouse sobre a miniatura, clique no botão de reticências e escolha Copy Asset ID.

Há ainda duas regras que valem checar antes de publicar a venda:

  • Se o passe for usado como recompensa aleatória, a documentação manda revisar a política de itens virtuais randomizados antes.
  • Se você usa otimização de preço, o script precisa rodar no cliente, para que cada usuário veja o preço personalizado dele.

Esse segundo ponto é fácil de errar de um jeito silencioso: um script de servidor buscando preço mostra o mesmo número para todo mundo, e você não descobre olhando o seu próprio jogo.

Vender fora do jogo

Dá para vender o passe também na aba Store da página do jogo, e o caminho é outro: em Monetization ⟩ Passes, passe o mouse sobre o passe, abra o menu de reticências, selecione o passe, vá em Sales e ligue o botão Item for Sale. Depois é preencher o preço em Robux e salvar.

O preço tem limites definidos: o mínimo é 1 Robux e o máximo é 1 bilhão de Robux. E o valor que você digita afeta diretamente quanto de Robux você recebe por venda — não é um número decorativo.

O privilégio não é automático

Esta é a parte que mais surpreende quem está montando a primeira loja: comprar o passe não dá nada ao jogador por si só. A documentação é direta — você precisa atribuir manualmente os privilégios do passe a quem comprou.

O caminho recomendado é usar PlayerAdded quando o jogador entra no jogo, verificar se ele já possui o passe e então conceder o que o passe promete. E há uma instrução de lugar: o script fica em ServerScriptService, para que o servidor cuide dos privilégios — não o cliente.

Para o momento da compra existe o evento PromptGamePassPurchaseFinished, que avisa quando o fluxo terminou e se deu certo. É nele que você concede o privilégio a quem acabou de comprar, sem esperar o jogador sair e voltar.

O histórico é seu problema

Um detalhe que a documentação declara e quase ninguém lê: a Roblox não registra o histórico de compras de passes por usuário específico. Você pode solicitar o download dos dados de vendas, mas se quiser saber quem comprou o quê e quando, guardar isso é responsabilidade sua.

Quem descobre isso tarde geralmente descobre no pior momento: quando um jogador reclama que pagou e não recebeu, e não há de onde tirar a resposta.

Artefato

O script abaixo faz duas coisas: lê a informação do passe pelo caminho oficial e mostra o preço. Ele existe para você confirmar, no seu jogo, que o ID está certo e que o passe está à venda — antes de amarrar qualquer lógica nele.

Dois pontos que a documentação marca e que o script respeita: a chamada é GetProductInfo, e o segundo parâmetro para passe precisa ser Enum.InfoType.GamePass. Trocar isso por outro tipo devolve dados de outra coisa, ou nada.

O pcall não é zelo: a chamada vai à rede e pode falhar por motivos que não têm relação com o seu código.

Erro comum

O erro mais caro aqui não é de sintaxe — é de arquitetura, e ele só aparece quando já está em produção.

Supor que o passe atravessa jogos. Se o seu jogo A vende um passe que o jogo B consulta, esse é exatamente o desenho que a documentação marcou para desativar em 30 de maio de 2026, recomendando integrar transferências de Robux antes da data para evitar interrupção. Se você montou isso e nunca voltou a olhar, o momento de conferir é agora, não quando um jogador abrir um tíquete.

O segundo erro é confundir o tipo do item. Um passe vendido onde deveria haver produto de desenvolvedor não quebra: ele simplesmente limita a receita, porque o jogador que compraria cinco vezes compra uma só. Isso não aparece em log de erro nenhum — aparece no gráfico de receita, meses depois, como um número que nunca cresce.

O terceiro é o da otimização de preço rodando no servidor. O preço exibido fica igual para todos, a personalização não acontece, e como o jogo funciona, ninguém investiga.

E o quarto é o ícone: enviar uma arte retangular com o nome do passe escrito na borda. O recorte circular corta o texto, e o que sobra na loja é uma imagem sem identificação.

Há ainda um quinto, e é o que gera tíquete de suporte: colocar a concessão do privilégio no cliente em vez do servidor. A documentação pede o script em ServerScriptService justamente porque quem decide o que o jogador ganhou não pode ser a máquina do jogador. Funciona nos testes, e some no primeiro jogador que recarrega a página.

O sexto é não guardar nada. Como o histórico por usuário não existe do lado da Roblox, um jogo sem registro próprio não tem como responder "esse jogador comprou?" seis meses depois — e a resposta padrão vira devolver o benefício por educação, o que é uma política cara.

Próximo passo

Se você tem passes publicados, faça esta varredura, nesta ordem:

  1. Liste os passes que outro jogo seu consulta. Qualquer verificação de posse feita fora do jogo que vendeu o passe entra na lista.
  2. Para cada um, decida o substituto. A recomendação da própria documentação é transferência de Robux.
  3. Confira o tipo de cada item. Passe para compra única, produto de desenvolvedor para o que se compra de novo.
  4. Rode o script acima com cada ID. Ele responde em uma execução se o ID está certo e se o item está à venda.

Se você ainda vai criar o primeiro passe, comece pela ordem certa: publicar o jogo, criar o passe, copiar o ID e só então escrever a lógica. A tentação de escrever o script primeiro é grande, e o ID que falta é o que faz perder a tarde.

Para o que se compra mais de uma vez, a página de produtos de desenvolvedor é o lugar de continuar — e a decisão entre os dois formatos, feita antes de montar a loja, é a que evita refazer tudo depois.

Fontes

Como corrigimos erros

Artefato pronto pra usar

Conceder o privilegio do passe na entrada e na compra (ServerScriptService)
lua
-- ServerScriptService: o servidor decide o que o jogador ganhou, nunca o cliente.
-- Cobre os dois momentos: quem JA tinha o passe ao entrar, e quem compra agora.

local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

local PASS_ID = 0000000 -- troque pelo ID do seu passe (Copy Asset ID)

local function concederPrivilegio(player)
	-- ponha aqui o que o passe promete: velocidade, area, item.
	-- e o UNICO lugar que concede, para nao haver duas verdades.
	local humanoid = player.Character and player.Character:FindFirstChildOfClass("Humanoid")
	if humanoid then
		humanoid.WalkSpeed = 32
	end
end

local function jogadorTemOPasse(player)
	local ok, tem = pcall(function()
		return MarketplaceService:UserOwnsGamePassAsync(player.UserId, PASS_ID)
	end)
	if not ok then
		-- chamada de rede falha por motivo que nao e o seu codigo.
		-- negar em silencio e pior que avisar: registre e siga.
		warn("falha ao checar o passe de " .. player.Name .. ": " .. tostring(tem))
		return false
	end
	return tem
end

Players.PlayerAdded:Connect(function(player)
	if jogadorTemOPasse(player) then
		concederPrivilegio(player)
	end
	player.CharacterAdded:Connect(function()
		-- o personagem renasce e o privilegio some com ele: reaplique.
		if jogadorTemOPasse(player) then
			concederPrivilegio(player)
		end
	end)
end)

MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, passId, comprou)
	if comprou and passId == PASS_ID then
		concederPrivilegio(player)
		-- o historico por usuario NAO existe do lado da Roblox:
		-- se voce precisa saber quem comprou, grave aqui.
	end
end)
Neste artigo

Continue por aqui