Dzięki zarządzanej wycenie możesz zaoferować ceny specyficzne dla regionu dla swoich przedmiotów i zbudować bardziej inkluzywną i dostępną globalną gospodarkę. Po ustaleniu domyślnej globalnej ceny dla przedmiotu, Roblox wykorzystuje różne sygnały, takie jak siła nabywcza regionu, kursy wymiany walut oraz lokalne zachowania wydatkowe, aby ustalić najbardziej odpowiednią cenę dla tego przedmiotu w każdym regionie.
Możesz wybrać, które z Twoich przedmiotów chcesz wycenić regionalnie. Gdy włączysz zarządzaną wycenę dla przedmiotu w swojej grze, Roblox automatycznie dostosuje cenę tego przedmiotu dla użytkowników w zależności od ich lokalizacji ekonomicznej.
Lokalizacja ekonomiczna nie zawsze jest taka sama jak lokalizacja konta. Aby określić lokalizację ekonomiczną użytkownika, Roblox analizuje sygnały, w tym korzystanie z VPN, historię rozliczeń i historię konta. Jeśli ich lokalizacja ekonomiczna nie może zostać określona, użytkownicy zobaczą domyślną globalną cenę dla przedmiotu.
Aby zapobiec arbitrażowi cenowemu, gdy użytkownicy obdarowują się lub wymieniają przedmiotami z różnymi cenami zarządzanymi, możesz zarządzać transferami w grze za pomocą API GetUsersPriceLevelsAsync.
Włącz ceny regionalne
Dla przepustek
Ceny regionalne są domyślnie włączone dla wszystkich nowych i istniejących przepustek dzięki Zarządzanej wycenie.
Aby wyłączyć zarządzaną wycenę dla przepustki:
- Przejdź do Kreacji i wybierz grę.
- Przejdź do Monetyzacja ⟩ Przepustki.
- Wybierz jedną lub więcej istniejących przepustek.
- Kliknij Wyłącz zarządzaną wycenę.
- OPCJONALNEAby zobaczyć zarządzane ceny według kraju lub regionu, wybierz przepustkę i przejdź do jej strony Sprzedaż. Lista Najlepsze Kraje/Regiony aktualizuje się, aby pokazać dostosowane ceny w oparciu o domyślną cenę przepustki. Aby zobaczyć ceny dla wszystkich krajów i regionów, kliknij Zobacz wszystkie kraje.
Dla produktów dewelopera
Aby włączyć zarządzaną wycenę dla produktu dewelopera:
- Upewnij się, że Twoje produkty dewelopera mają dynamicznie skryptowane ceny.
- Zaimplementuj metodę GetUsersPriceLevelsAsync, aby regulować transfery przedmiotów w oparciu o poziomy cen użytkowników.
- Przejdź do Kreacji i wybierz grę.
- Przejdź do Monetyzacja ⟩ Produkty dewelopera.
- Wybierz jeden lub więcej istniejących produktów lub stwórz nowy produkt.
- Kliknij Włącz zarządzaną wycenę.
- OPCJONALNEAby zobaczyć zarządzaną wycenę według kraju lub regionu, wybierz produkt i przejdź do jego strony Podstawowe ustawienia. Lista Najlepsze Kraje/Regiony aktualizuje się, aby pokazać dostosowane ceny w oparciu o domyślną cenę produktu. Aby zobaczyć zarządzaną wycenę dla wszystkich krajów i regionów, kliknij Zobacz wszystkie kraje.
Dla subskrypcji
Zarządzana wycena jest domyślnie włączona dla subskrypcji wycenionych w Robux i nie można jej wyłączyć. Aby uzyskać więcej informacji, zobacz Tworzenie subskrypcji.
Zarządzana wycena nie jest dostępna dla subskrypcji wycenionych w walucie lokalnej.
Dla przedmiotów Avatara
Aby włączyć zarządzaną wycenę dla przedmiotu Avatara, zobacz Ceny na stronie Publikacja na rynku.
Sprawdź dynamiczne ceny
Kiedy włączasz zarządzaną wycenę, cena przedmiotu dostosowuje się dla użytkowników w różnych regionach, niezależnie od tego, czy jest on sprzedawany w grze, czy poza nią. Jednak jeśli twardo zakodowałeś cenę w interfejsie użytkownika swojej gry, ta liczba się nie aktualizuje, ponieważ nie jest dynamiczna ani dostępna dla Roblox. W rezultacie użytkownicy są obciążani poprawną ceną specyficzną dla regionu, ale UI nadal pokazuje im wartość twardo zakodowaną.
Narzędzie sprawdzania cen dynamicznych aktualizuje wszystkie przedmioty sprzedawane w Twojej grze za pomocą fałszywej ceny Robux lub fałszywej lokalizacji ekonomicznej, co pomaga Ci zidentyfikować, które ceny są twardo zakodowane w interfejsie użytkownika Twojej gry, a które są dynamicznie skryptowane z MarketplaceService i wywoływane z skryptu klienta. Po zidentyfikowaniu twardo zakodowanych przepustek możesz zaktualizować je, aby korzystały z funkcji MarketplaceService.
Aby użyć narzędzia sprawdzania cen dynamicznych:
- Przejdź do Monetyzacja.
- Dla przepustek, przejdź do Przepustki.
- Dla produktów dewelopera, przejdź do Produkty dewelopera.
- Kliknij … i wybierz Sprawdzanie cen dynamicznych.
- W sekcji Dodaj konta testowe wpisz do pięciu użytkowników Roblox do sprawdzenia pod kątem twardo zakodowanych cen.
- Wybierz typ testowania.
- Ceny przypięte aktualizuje wszystkie dynamicznie skryptowane ceny dla ustalonej fałszywej kwoty Robux.
- Lokalizacja przypięta aktualizuje wszystkie dynamicznie skryptowane ceny dla ceny specyficznej dla regionu dla fałszywej lokalizacji ekonomicznej.
- Kliknij Włącz. Po kilku minutach wejdź do swojej gry, aby zidentyfikować twardo zakodowane ceny.
Aby wyłączyć narzędzie sprawdzania cen dynamicznych, przejdź do strony Sprawdzanie cen dynamicznych i kliknij Wyłącz.
Aby uzyskać więcej informacji na temat twardo zakodowanych i dynamicznie skryptowanych cen produktów, zobacz Sprawdź dynamiczne ceny na stronie Optymalizacja cen. Aby uzyskać więcej informacji na temat sprzedaży przepustek i produktów dewelopera z funkcjami MarketplaceService, zobacz Sprzedaj przepustkę w swojej grze i Sprzedaj produkt dewelopera w swojej grze.
Wyświetlanie cen regionalnych w swojej grze
Dzięki zarządzanej wycenie cena, którą widzi użytkownik, może się różnić w zależności od jego lokalizacji. Jeśli wyświetlasz ceny w niestandardowym interfejsie użytkownika w grze, jak TextLabel, możesz pobrać informacje o produkcie w czasie rzeczywistym, aby upewnić się, że wyświetlana cena odpowiada cenie pokazywanej w oknie zakupu.
Aby wyświetlić cenę regionalną dla pojedynczego produktu dewelopera lub przepustki, użyj GetProductInfoAsync.
Aby wyświetlić cenę regionalną dla wszystkich produktów dewelopera, użyj GetDeveloperProductsAsync.
Chroń swoje wymiany i prezenty
Zarządzana wycena może wpływać na transfery w grze, takie jak wymiany i obdarowywanie. Z powodu różnic cenowych między regionami, arbitraż cenowy (wykorzystywanie różnic cenowych między tymi samymi produktami w celu generowania zysku) może mieć miejsce. Aby zarządzać potencjalnym arbitrażem cenowym, możesz użyć API GetUsersPriceLevelsAsync, które pozwala na określenie względnych poziomów cen użytkowników, abyś mógł wdrożyć logikę regulującą transfery przedmiotów na podstawie tych poziomów.
GetUsersPriceLevelsAsync zwraca wartość numeryczną od 1 do 1000, która wskazuje poziom cenowy użytkownika. Ta wartość ma reprezentować procent pełnej ceny, jaką użytkownik ma zamiar zapłacić. Poziom cenowy 1000 reprezentuje pełną globalną cenę, podczas gdy niższe poziomy cenowe oznaczają, że użytkownik zazwyczaj płaci niższą cenę z powodu swojej lokalizacji ekonomicznej.
Niższa różnica poziomów cenowych oznacza, że między pełną globalną ceną a zarządzaną ceną użytkownika jest mniejsza różnica cenowa. Wyższa różnica poziomów cenowych oznacza, że różnica cenowa między nimi jest większa. Na przykład:
- Użytkownik A ma poziom cenowy 1000, co reprezentuje pełną globalną cenę. Ten użytkownik płaci 100% ceny podstawowej za przedmiot.
- Użytkownik B ma poziom cenowy 500, co reprezentuje 50% pełnej globalnej ceny. Ten użytkownik płaci 50% ceny podstawowej za przedmiot.
- Gdy już znasz poziom cenowy każdego użytkownika, możesz zdecydować, czy zatwierdzić lub zablokować obdarowywanie lub wymianę między Użytkownikiem A a Użytkownikiem B w zależności od ich różnicy poziomów cenowych wynoszącej 500.
Implementacja GetUsersPriceLevelsAsync
Aby uzyskać poziomy cenowe użytkowników biorących udział w transferze przedmiotu, wywołaj funkcję GetUsersPriceLevelsAsync w MarketplaceService. Ta funkcja przyjmuje tablicę identyfikatorów użytkowników jako argument i zwraca tablicę obiektów PriceLevelInfo z następującymi polami:
type PriceLevelInfo = {UserId: number,PriceLevel: number}
Po zaimplementowaniu funkcji użyj zwróconych poziomów cenowych, aby zdecydować, czy chcesz zezwolić na transfer przedmiotu. Na przykład, możesz pozwolić użytkownikom z wyższym poziomem cenowym na obdarowywanie przedmiotów użytkownikom z niższym poziomem cenowym, ale zezwolić na wymianę tylko pomiędzy użytkownikami, którzy mają ten sam poziom cenowy. Zobacz dostępne przykłady, aby uzyskać więcej informacji.
Aby uzyskać więcej informacji na temat API GetUsersPriceLevelsAsync, zobacz MarketplaceService.
Przykłady
Przykłady tego, jak możesz użyć GetUsersPriceLevelsAsync z cenami regionalnymi.
Przykład 1: Sprawdź poziomy cenowe dla listy użytkowników
Ten przykład pokazuje, jak pobrać poziomy cenowe dla listy użytkowników, co może pomóc Ci zdecydować, czy chcesz zezwolić na transfer przedmiotu.
-- Pobierz MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- Zdefiniuj funkcję do pobrania poziomów cenowych dla listy użytkowników i utwórz tabelę wyszukiwania UserId na PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- Mapuj każdy PriceLevelInfo do tabeli wyszukiwania UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("Błąd podczas uzyskiwania poziomów cenowych:", result)
return nil
end
end
-- Przykład użycia identyfikatorów zastępczych
local user1Id = 123456789
local user2Id = 987654321
-- Wywołaj funkcję i przechowuj wynik
local priceLevels = getPriceLevelsLookup({user1Id, user2Id})
-- Jeśli udane, wydrukuj poziom każdego użytkownika
if priceLevels then
print("Poziom cenowy dla Użytkownika 1:", priceLevels[user1Id])
print("Poziom cenowy dla Użytkownika 2:", priceLevels[user2Id])
else
print("Nie udało się pobrać poziomów cenowych.")
end
Przykład 2: Porównaj poziom cenowy nadawcy z poziomem cenowym odbiorcy
Ten przykład pokazuje przykładową implementację jak sprawdzić poziom cenowy nadawcy względem poziomu cenowego odbiorcy. Może to pomóc w zarządzaniu obdarowywaniem użytkowników w regionach o wyższych cenach użytkownikom w regionach o niższych cenach.
-- Pobierz MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- Zdefiniuj funkcję do pobrania poziomów cenowych dla listy użytkowników i utwórz tabelę wyszukiwania UserId na PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- Mapuj każdy PriceLevelInfo do tabeli wyszukiwania UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("Błąd podczas uzyskiwania poziomów cenowych:", result)
return nil
end
end
-- Zdefiniuj funkcję, która sprawdza czy nadawca ma wyższy lub równy poziom cenowy odbiorcy
-- Parametry to Gracz wysyłający przedmiot oraz Gracz odbierający przedmiot
-- Funkcja zwraca true, jeśli poziom cenowy nadawcy jest większy lub równy poziomowi cenowemu odbiorcy
function isSenderPriceLevelHigherOrEqualforGifting(sender, recipient)
local priceLevelsLookup = getPriceLevelsLookup({ sender.UserId, recipient.UserId })
if not priceLevelsLookup then
error("MarketplaceService:GetUsersPriceLevelsAsync nie powiodło się. Nie można pobrać poziomów cenowych użytkowników.")
end
local senderPriceLevel = priceLevelsLookup[sender.UserId]
local recipientPriceLevel = priceLevelsLookup[recipient.UserId]
return senderPriceLevel >= recipientPriceLevel
end
Przykład 3: Sprawdź, czy dwóch użytkowników ma ten sam poziom cenowy
Ten przykład pokazuje przykładową implementację jak sprawdzić, czy dwaj użytkownicy mają ten sam poziom cenowy. Może to pomóc w zarządzaniu wymianą i zapewnieniu uczciwej wymiany między użytkownikami z różnych regionów.
-- Pobierz MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- Zdefiniuj funkcję do pobrania poziomów cenowych dla listy użytkowników i utwórz tabelę wyszukiwania UserId na PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- Mapuj każdy PriceLevelInfo do tabeli wyszukiwania UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("Błąd podczas uzyskiwania poziomów cenowych:", result)
return nil
end
end
-- Zdefiniuj funkcję, która sprawdza, czy dwóch użytkowników ma ten sam poziom cenowy
-- Parametry to dwaj użytkownicy, których poziomy cenowe chcesz porównać
-- Funkcja zwraca true, jeśli obaj użytkownicy mają ten sam poziom cenowy
function haveSamePriceLevelForTrading(userA, userB)
local priceLevelsLookup = getPriceLevelsLookup({ userA.UserId, userB.UserId })
if not priceLevelsLookup then
error("MarketplaceService:GetUsersPriceLevelsAsync nie powiodło się. Nie można pobrać poziomów cenowych użytkowników.")
end
local userAPriceLevel = priceLevelsLookup[userA.UserId]
local userBPriceLevel = priceLevelsLookup[userB.UserId]
return userAPriceLevel == userBPriceLevel
end