Con el Precio Gestionado, puedes ofrecer precios específicos por región para tus artículos y construir una economía global más inclusiva y accesible. Después de que determines un precio global por defecto para un artículo, Roblox utiliza una variedad de señales como el poder adquisitivo de la región, tasas de cambio de divisas y comportamiento de gasto local para establecer el precio más apropiado para ese artículo, región por región.
Puedes elegir cuáles de tus artículos deseas poner a precio regional. Cuando habilitas el Precio Gestionado para un artículo en tu juego, Roblox ajusta automáticamente el precio de ese artículo para los usuarios en función de su ubicación económica.
La ubicación económica no siempre es la misma que la ubicación de la cuenta. Para determinar la ubicación económica de un usuario, Roblox analiza señales, incluyendo el uso de VPN, el historial de facturación y el historial de cuentas. Si no se puede determinar su ubicación económica, los usuarios ven el precio global por defecto para el artículo.
Para prevenir el arbitraje de precios cuando los usuarios regalan o intercambian artículos con diferentes precios gestionados, puedes gestionar las transferencias dentro del juego con la API GetUsersPriceLevelsAsync.
Habilitar precios regionales
Para pases
El precio regional está habilitado por defecto para todos los pases nuevos y existentes a través del Precio Gestionado.
Para deshabilitar el precio gestionado para un pase:
- Ve a Creaciones y selecciona un juego.
- Ve a Monetización ⟩ Pases.
- Selecciona uno o más pases existentes.
- Haz clic en Deshabilitar Precio Gestionado.
- OPCIONALPara ver precios gestionados por país o región, selecciona un pase y ve a su página de Ventas. La lista Principales Países/Regiones se actualiza para mostrar los precios ajustados según el precio por defecto del pase. Para ver precios de todos los países y regiones, haz clic en Ver todos los países.
Para productos de desarrollador
Para habilitar el precio gestionado para un producto de desarrollador:
- Asegúrate de que tus productos de desarrollador tengan precios dinámicamente guionados.
- Implementa el método GetUsersPriceLevelsAsync para regular las transferencias de artículos según los niveles de precio de los usuarios.
- Ve a Creaciones y selecciona un juego.
- Ve a Monetización ⟩ Productos de Desarrollador.
- Selecciona uno o más productos existentes, o crea un nuevo producto.
- Haz clic en Habilitar Precio Gestionado.
- OPCIONALPara ver el Precio Gestionado por país o región, selecciona un producto y ve a su página de Configuraciones Básicas. La lista Principales Países/Regiones se actualiza para mostrar los precios ajustados según el precio por defecto del producto. Para ver el Precio Gestionado para todos los países y regiones, haz clic en Ver todos los países.
Para suscripciones
El precio gestionado está habilitado por defecto para las suscripciones con precio en Robux y no se puede desactivar. Para más información, consulta Crear suscripciones.
El precio gestionado no está disponible para suscripciones con precio en moneda local.
Para artículos de Avatar
Para habilitar el Precio Gestionado para un artículo de Avatar, consulta Precios en la página Publicar en el Mercado.
Comprobar precios dinámicos
Cuando habilitas el Precio Gestionado, el precio del artículo se ajusta para los usuarios en diferentes regiones, ya sea que esté a la venta dentro o fuera de tu juego. Sin embargo, si has codificado el precio en la interfaz de usuario de tu juego, ese número no se actualiza ya que no es dinámico ni accesible por Roblox. Como resultado, se cobra a los usuarios el precio específico por región correcto, pero la interfaz de usuario aún les muestra el valor codificado.
La herramienta de verificación de precios dinámicos actualiza todos los artículos a la venta dentro de tu juego con un precio falso en Robux o una ubicación económica falsa para ayudarte a identificar qué precios están codificados en la interfaz de usuario de tu juego y cuáles son guionados dinámicamente con MarketplaceService y llamados desde un script de cliente. Después de que hayas identificado los pases codificados, puedes actualizarlos para que usen las funciones de MarketplaceService.
Para usar la herramienta de verificación de precios dinámicos:
- Ve a Monetización.
- Para pases, ve a Pases.
- Para productos de desarrollador, ve a Productos de Desarrollador.
- Haz clic en … y selecciona Verificación de Precio Dinámico.
- En Agregar cuentas de prueba, ingresa hasta cinco usuarios de Roblox para comprobar los precios codificados.
- Selecciona un tipo de prueba.
- Precio fijado actualiza todos los precios guionados dinámicamente con una cantidad falsa de Robux fijada.
- Ubicación fijada actualiza todos los precios guionados dinámicamente con un precio específico por región para una ubicación económica falsa.
- Haz clic en Habilitar. Después de unos minutos, ingresa a tu juego para identificar los precios codificados.
Para deshabilitar la herramienta de verificación de precios dinámicos, ve a la página de Verificación de Precio Dinámico y haz clic en Deshabilitar.
Para más información sobre precios codificados frente a precios guionados dinámicamente, consulta Comprobar precios dinámicos en la página de Optimización de Precios. Para más información sobre cómo vender pases y productos de desarrollador con funciones de MarketplaceService, consulta Vender un pase dentro de tu juego y Vender un producto de desarrollador dentro de tu juego.
Mostrar precios regionales en tu juego
Con el Precio Gestionado, el precio que ve un usuario puede variar según su ubicación. Si muestras precios en una interfaz de usuario personalizada dentro del juego, como un TextLabel, puedes obtener información del producto en tiempo de ejecución para asegurarte de que el precio mostrado coincida con el precio que se muestra en el aviso de compra.
Para mostrar el precio regional de un único producto de desarrollador o pase, usa GetProductInfoAsync.
Para mostrar el precio regional de todos los productos de desarrollador, usa GetDeveloperProductsAsync.
Proteger tus intercambios y regalos
El precio gestionado puede afectar las transferencias dentro del juego, como el intercambio y los regalos. Debido a las diferencias de precio entre regiones, puede ocurrir el arbitraje de precios (explotar discrepancias de precios entre los mismos productos para generar ganancias). Para gestionar la posibilidad de arbitraje de precios, puedes usar la API GetUsersPriceLevelsAsync, que te permite determinar los niveles de precios relativos de los usuarios para que puedas implementar lógica que regule las transferencias de artículos en función de estos niveles.
GetUsersPriceLevelsAsync proporciona un valor numérico entre 1 y 1000 que indica el nivel de precio de un usuario. Este valor está diseñado para representar el porcentaje del precio total que se espera que pague un usuario. El nivel de precio 1000 representa el precio global completo, mientras que niveles de precio más bajos indican que el usuario normalmente paga un precio más bajo debido a su ubicación económica.
Una diferencia de nivel de precio más baja significa que hay una menor diferencia de precio entre el precio global completo y el precio gestionado del usuario. Una diferencia de nivel de precio más alta significa que hay una mayor diferencia de precio entre los dos. Por ejemplo:
- El Usuario A tiene el nivel de precio 1000, que representa el precio global completo. Este usuario paga el 100% del precio base por un artículo.
- El Usuario B tiene el nivel de precio 500, que representa el 50% del precio global completo. Este usuario paga el 50% del precio base por un artículo.
- Una vez que conoces el nivel de precio de cada usuario, puedes elegir aprobar o bloquear el regalo o el intercambio entre el Usuario A y el Usuario B en función de su diferencia de nivel de precio de 500.
Implementar GetUsersPriceLevelsAsync
Para obtener los niveles de precio de los usuarios involucrados en una transferencia de artículos, llama a la función GetUsersPriceLevelsAsync en MarketplaceService. Esta función toma un array de ID de usuario como su argumento y devuelve un array de objetos PriceLevelInfo con los siguientes campos:
type PriceLevelInfo = {UserId: number,PriceLevel: number}
Después de implementar la función, utiliza los niveles de precios devueltos para elegir si deseas permitir que se realice una transferencia de artículos. Por ejemplo, puedes permitir que los usuarios con un nivel de precio más alto regalen artículos a usuarios con un nivel de precio más bajo, pero solo permitir intercambios entre usuarios que tengan el mismo nivel de precio entre sí. Consulta los ejemplos disponibles para más información.
Para más información sobre la API GetUsersPriceLevelsAsync, consulta MarketplaceService.
Ejemplos
Ejemplos de cómo puedes usar GetUsersPriceLevelsAsync con precios regionales.
Ejemplo 1: Comprobar los niveles de precio para una lista de usuarios
Este ejemplo te muestra cómo recuperar niveles de precio para una lista de usuarios, lo que puede ayudarte a elegir si deseas permitir que se realice una transferencia de artículos.
-- Obtener el MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- Definir una función para recuperar niveles de precio para una lista de usuarios y crear una tabla de búsqueda de UserId a PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- Mapear cada PriceLevelInfo a una tabla de búsqueda de UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("Error al obtener niveles de precio:", result)
return nil
end
end
-- Ejemplo usando ID de marcador de posición
local user1Id = 123456789
local user2Id = 987654321
-- Llamar a la función y almacenar el resultado
local priceLevels = getPriceLevelsLookup({user1Id, user2Id})
-- Si es exitoso, imprimir el nivel de cada usuario
if priceLevels then
print("Nivel de precio para el Usuario 1:", priceLevels[user1Id])
print("Nivel de precio para el Usuario 2:", priceLevels[user2Id])
else
print("No se pudo recuperar los niveles de precio.")
end
Ejemplo 2: Comparar el nivel de precio de un remitente con el nivel de precio de un destinatario
Este ejemplo te muestra una implementación de muestra de cómo comprobar el nivel de precio de un remitente contra el nivel de precio del destinatario. Esto puede ayudarte a gestionar el regalo de usuarios en regiones de precios más altos a usuarios en regiones de precios más bajos.
-- Obtener el MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- Definir una función para recuperar niveles de precio para una lista de usuarios y crear una tabla de búsqueda de UserId a PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- Mapear cada PriceLevelInfo a una tabla de búsqueda de UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("Error al obtener niveles de precio:", result)
return nil
end
end
-- Definir una función que verifica si el remitente tiene un nivel de precio mayor o igual que el destinatario
-- Los parámetros son el Jugador que envía el artículo y el Jugador que recibe el artículo
-- La función devuelve true si el nivel de precio del remitente es mayor o igual que el nivel de precio del destinatario
function isSenderPriceLevelHigherOrEqualforGifting(sender, recipient)
local priceLevelsLookup = getPriceLevelsLookup({ sender.UserId, recipient.UserId })
if not priceLevelsLookup then
error("MarketplaceService:GetUsersPriceLevelsAsync falló. No se pueden recuperar los niveles de precio de los usuarios.")
end
local senderPriceLevel = priceLevelsLookup[sender.UserId]
local recipientPriceLevel = priceLevelsLookup[recipient.UserId]
return senderPriceLevel >= recipientPriceLevel
end
Ejemplo 3: Comprobar si dos usuarios tienen el mismo nivel de precio
Este ejemplo te muestra una implementación de muestra de cómo comprobar si dos usuarios tienen el mismo nivel de precio. Esto puede ayudarte a gestionar intercambios y garantizar un intercambio justo entre usuarios de diferentes regiones.
-- Obtener el MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- Definir una función para recuperar niveles de precio para una lista de usuarios y crear una tabla de búsqueda de UserId a PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- Mapear cada PriceLevelInfo a una tabla de búsqueda de UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("Error al obtener niveles de precio:", result)
return nil
end
end
-- Definir una función que comprueba si dos usuarios tienen el mismo nivel de precio
-- Los parámetros son los dos usuarios cuyos niveles de precio deseas comparar
-- La función devuelve true si ambos usuarios tienen el mismo nivel de precio
function haveSamePriceLevelForTrading(userA, userB)
local priceLevelsLookup = getPriceLevelsLookup({ userA.UserId, userB.UserId })
if not priceLevelsLookup then
error("MarketplaceService:GetUsersPriceLevelsAsync falló. No se pueden recuperar los niveles de precio de los usuarios.")
end
local userAPriceLevel = priceLevelsLookup[userA.UserId]
local userBPriceLevel = priceLevelsLookup[userB.UserId]
return userAPriceLevel == userBPriceLevel
end