Un gamepass es una compra que se hace una vez y dura para siempre en tu juego: el acceso VIP, la mochila más grande, la velocidad extra. Crearlo son cinco minutos en la web de Roblox. Lo que la mayoría hace mal es la otra mitad: comprobar quién lo tiene, sin que se pueda falsear y sin llamar a los servidores de Roblox cien veces por minuto.
En la demo puedes poner tu precio y tus ventas previstas y ver cuántos Robux te quedan de verdad después de la comisión.
Respuesta rápida
Crea el gamepass desde la página de tu experiencia, copia su ID, y en el juego usa MarketplaceService:UserOwnsGamePassAsync(userId, gamePassId) en el servidor, envuelto en pcall y guardando el resultado en una tabla para no repetir la consulta. Para vender, PromptGamePassPurchase.
Lo que necesitas antes de empezar
- Un juego publicado. Un archivo local no puede tener gamepasses.
- Saber que la ventaja se aplica en el servidor: RemoteEvents: cliente y servidor.
- Unos 30 minutos.
Paso 1: crear el gamepass
En la web de Roblox, en la página de tu experiencia: Associated Items → Passes → Create a Pass. Le pones nombre, descripción e icono.
Tres cosas que ahorran disgustos:
- El icono cuadrado y legible en pequeño. Se ve a tamaño miniatura en la tienda del juego.
- La descripción dice qué da exactamente. «VIP» no significa nada; «Duplica las monedas que ganas y te da acceso a la sala VIP» sí. Y evita reembolsos y quejas.
- El precio se pone después, editando el pass ya creado. Es un paso aparte y mucha gente cree que se le ha olvidado.
Paso 2: coger el ID
En la página del pass, el número que sale en la URL. Ese es el gamePassId y es lo único que necesita tu código.
No lo confundas con el ID de un producto para desarrolladores. Los gamepasses se compran una vez; los developer products se pueden comprar muchas veces (paquetes de monedas, revivir). Cada uno tiene su función y su ID, y mezclarlos es un error muy típico.
local ID_VIP = 123456789 -- pon aqui el tuyo
Paso 3: comprobar quién lo tiene
local Mercado = game:GetService("MarketplaceService")
local Jugadores = game:GetService("Players")
local ID_VIP = 123456789
local cache = {} -- jugador -> true/false
local function tieneVip(jugador)
if cache[jugador] ~= nil then
return cache[jugador]
end
local ok, resultado = pcall(function()
return Mercado:UserOwnsGamePassAsync(jugador.UserId, ID_VIP)
end)
if not ok then
warn("No se pudo comprobar el pass: " .. tostring(resultado))
return false -- ante la duda, no damos la ventaja... pero tampoco la cacheamos
end
cache[jugador] = resultado
return resultado
end
Jugadores.PlayerRemoving:Connect(function(jugador)
cache[jugador] = nil
end)
Tres detalles que son el artículo entero:
pcallobligatorio.UserOwnsGamePassAsyncsale a internet. Falla de vez en cuando, y sinpcallte tumba el script en el que esté.- La caché. Sin ella, si compruebas el pass cada vez que el jugador hace algo, te comes el límite de peticiones y empieza a devolver errores. Con ella, una consulta por sesión.
- El error no se cachea. Fíjate en que el
return falsedel fallo no escribe encache: así, si fue un problema puntual, la siguiente comprobación lo vuelve a intentar. Si cachearas elfalse, un fallo de red le quitaría el VIP a alguien que pagó hasta que se reconectara.
Paso 4: aplicar la ventaja
Siempre en el servidor:
Jugadores.PlayerAdded:Connect(function(jugador)
jugador.CharacterAdded:Connect(function(personaje)
if tieneVip(jugador) then
local humanoide = personaje:WaitForChild("Humanoid")
humanoide.WalkSpeed = 24 -- lo normal son 16
end
end)
end)
Va dentro de CharacterAdded porque el personaje se crea de nuevo cada vez que el jugador muere, y con él vuelven los valores por defecto.
Si la ventaja es «gana el doble de monedas», el sitio donde se aplica es donde se suman las monedas, no en la interfaz:
local function darMonedas(jugador, cantidad)
if tieneVip(jugador) then
cantidad = cantidad * 2
end
-- ...sumar cantidad
end
Paso 5: el botón de compra
Desde un LocalScript, porque la ventana de compra la abre el cliente:
local Mercado = game:GetService("MarketplaceService")
local jugador = game:GetService("Players").LocalPlayer
local ID_VIP = 123456789
script.Parent.Activated:Connect(function()
Mercado:PromptGamePassPurchase(jugador, ID_VIP)
end)
Y en el servidor, para enterarte de que la compra salió bien:
Mercado.PromptGamePassPurchaseFinished:Connect(function(jugador, idPass, comprado)
if idPass ~= ID_VIP then return end
if not comprado then return end
cache[jugador] = true -- actualizamos la cache al momento
local personaje = jugador.Character
if personaje then
local humanoide = personaje:FindFirstChild("Humanoid")
if humanoide then
humanoide.WalkSpeed = 24
end
end
end)
Sin esa última parte, el jugador paga y no nota nada hasta que se reconecta. Es la queja más repetida de los gamepasses mal montados.

Paso 6: esconder el botón a quien ya lo tiene
Un detalle pequeño que se agradece: si el jugador ya compró el pass, que no le sigas ofreciendo comprarlo. Como la comprobación es del servidor, se lo mandas al cliente con un RemoteEvent al entrar, o con un BoolValue dentro del jugador que el cliente lee.
Cuánto te llega de cada venta
El porcentaje que se queda la plataforma cambia, así que aquí no vas a encontrar una cifra escrita a mano. Míralo en la documentación oficial de creadores antes de poner precio, y usa ese número en la calculadora de arriba. Desconfía de cualquier blog que te dé el porcentaje sin decirte cuándo lo comprobó.
El mecanismo, que no cambia:
Robux que te llegan = precio × ventas × (1 − comisión)
Y si además quieres euros, hay un segundo paso con su propio tipo de cambio, su mínimo y sus requisitos de cuenta. Ahí el orden importa: primero la comisión, después la conversión.
Dos cosas sobre el precio que sí se pueden decir sin inventar cifras:
- Un precio alto no compensa solo por ser alto. Un pass de 100 Robux que compra una de cada cien personas y uno de 400 que compra una de cada mil no dan lo mismo, y solo lo sabrás mirando tus propias estadísticas.
- Prueba y mide. El panel de la experiencia te da ventas por día. Cambia el precio, deja pasar una semana entera (los fines de semana no se parecen a los martes) y compara.
Nada de proyecciones: aquí no hay «con esto ganas X al mes». Depende de cuánta gente juegue tu juego, y eso no lo sabe nadie de antemano.
Haz la cuenta aquí
Del precio del pass a lo que te llega
Pon tu precio, tus ventas y el porcentaje de comisión que hayas comprobado hoy en la documentación oficial. La calculadora no inventa cifras: usa las tuyas.
El 30 % es solo el valor de partida del formulario. Comprueba el porcentaje de hoy en la documentación oficial de creadores y ponlo aquí: es lo único que hace que esta cuenta valga algo.
Errores habituales
Compra el pass y no le pasa nada hasta reconectar
Falta PromptGamePassPurchaseFinished, o está en un LocalScript en vez de en el servidor.
La ventaja se pierde al morir
La estás aplicando una sola vez al entrar. Va dentro de CharacterAdded.
UserOwnsGamePassAsync da error de vez en cuando
Es normal, sale a internet: por eso va en pcall y con reintentos si te importa mucho. Lo que no puedes hacer es dejar que el error tumbe el script.
Le quita el VIP a alguien que lo compró
Estás cacheando el false de un fallo de red. Cachea solo las respuestas buenas.
Se me olvidó poner el precio y nadie lo compra
Pasa más de lo que parece: el pass se crea sin precio y hasta que no lo editas no está a la venta.
Funciona en Studio pero no en el juego publicado
Comprueba que el ID es el del pass correcto y que el pass pertenece a esa experiencia. Si el juego está en un grupo, el pass tiene que estar creado desde el grupo.
Preguntas frecuentes
¿Gamepass o producto para desarrolladores?
Gamepass para lo que se compra una vez y es permanente (VIP, mochila, velocidad). Producto para lo que se compra muchas veces (paquetes de monedas, revivir, saltarse la espera). Si dudas, pregúntate si tiene sentido comprarlo dos veces.
¿Puedo cambiar el precio después?
Sí, cuando quieras. Quien ya lo compró lo mantiene, y no se devuelve nada si baja.
¿Puedo hacer que un gamepass dé varias ventajas?
Sí, y suele ser mejor: un pass con tres ventajas se vende más que tres passes de una. Compruébalo una vez y aplica las tres.
¿Cómo pruebo la compra sin gastar Robux de verdad?
En Studio, PromptGamePassPurchase abre la ventana pero no cobra. Para probar la ruta completa, la única forma es comprarlo con otra cuenta. Muchos desarrolladores dejan un pass de 1 Robux temporal para eso.
¿Se puede regalar un gamepass a alguien?
No directamente desde el juego. Lo que sí puedes es dar la ventaja por script a quien tú quieras (una lista de UserIds), sin pasar por el pass.
Última revisión: 1 de septiembre de 2026





Deja una respuesta