مع التسعير المدارة، يمكنك تقديم أسعار محددة حسب المنطقة لعناصر لديك وبناء اقتصاد عالمي أكثر شمولية وإمكانية الوصول. بعد تحديد سعر عالمي افتراضي لعنصر ما، تستخدم Roblox مجموعة من الإشارات مثل قوة الشراء للمنطقة، وأسعار صرف العملات، وسلوك الإنفاق المحلي لتحديد السعر الأنسب لذلك العنصر منطقةً تلو الأخرى.
يمكنك اختيار أي من عناصر لديك تريد تسعيرها إقليمياً. عندما تقوم بتمكين التسعير المدارة لعنصر في لعبتك، تقوم Roblox تلقائياً بضبط سعر ذلك العنصر للمستخدمين بناءً على موقعهم الاقتصادي.
الموقع الاقتصادي ليس دائماً هو نفسه موقع الحساب. لتحديد موقع المستخدم الاقتصادي، تنظر Roblox في الإشارات، بما في ذلك استخدام VPN، وسجل الفواتير، وتاريخ الحساب. إذا لم يكن من الممكن تحديد موقعهم الاقتصادي، يرى المستخدمون السعر العالمي الافتراضي للعنصر بدلاً من ذلك.
لمنع التحكّم في الأسعار عندما يقوم المستخدمون بإهداء أو تبادل عناصر بأسعار مدارة مختلفة، يمكنك إدارة التحويلات داخل اللعبة باستخدام واجهة برمجة التطبيقات GetUsersPriceLevelsAsync.
تمكين التسعير الإقليمي
للباقات
التسعير الإقليمي مفعل بشكل افتراضي لجميع الباقات الجديدة والقديمة من خلال التسعير المدارة.
لإيقاف التسعير المدارة لباقات:
- انتقل إلى الإنشاءات واختر لعبة.
- انتقل إلى الربح ⟩ الباقات.
- اختر باقة واحدة أو أكثر من الباقات الموجودة.
- انقر على تعطيل التسعير المدارة.
- اختياريلرؤية الأسعار المدارة حسب البلد أو المنطقة، اختر باقة وانتقل إلى صفحة المبيعات الخاصة بها. يتم تحديث قائمة أعلى البلدان/المناطق لعرض الأسعار المعدلة بناءً على السعر الافتراضي للباقة. لرؤية الأسعار لجميع البلدان والمناطق، انقر على عرض جميع البلدان.
للمنتجات المطورين
لتمكين التسعير المدارة لمنتج مطور:
- تحقق من أن المنتجات المطورة لديك تحتوي على أسعار مبرمجة ديناميكياً.
- قم بتنفيذ طريقة GetUsersPriceLevelsAsync لتنظيم تحويلات العناصر بناءً على مستويات أسعار المستخدمين.
- انتقل إلى الإنشاءات واختر لعبة.
- انتقل إلى الربح ⟩ منتجات المطورين.
- اختر منتجاً موجوداً واحداً أو أكثر، أو أنشئ منتجاً جديداً.
- انقر على تمكين التسعير المدارة.
- اختياريلرؤية التسعير المدارة حسب البلد أو المنطقة، اختر منتجاً وانتقل إلى صفحة الإعدادات الأساسية الخاصة به. يتم تحديث قائمة أعلى البلدان/المناطق لعرض الأسعار المعدلة بناءً على السعر الافتراضي للمنتج. لرؤية التسعير المدارة لجميع البلدان والمناطق، انقر على عرض جميع البلدان.
للاشتراكات
التسعير المدارة مفعل بشكل افتراضي للاشتراكات التي يتم تسعيرها بـ Robux ولا يمكن إيقافه. لمزيد من المعلومات، انظر إنشاء الاشتراكات.
التسعير المدارة غير متاح للاشتراكات التي يتم تسعيرها بالعملة المحلية.
لعناصر الصورة الرمزية
لتمكين التسعير المدارة لعنصر صورة رمزية، انظر التسعير في صفحة النشر إلى السوق.
تحقق من الأسعار الديناميكية
عندما تقوم بتمكين التسعير المدارة، يتم تعديل سعر العنصر للمستخدمين في مناطق مختلفة سواء كان معروضاً للبيع داخل لعبتك أو خارجها. ومع ذلك، إذا كنت قد برمجت السعر بشكل ثابت في واجهة لعبتك، فلن يتحدث هذا الرقم لأنه ليس ديناميكياً أو قابلاً للوصول من قبل Roblox. ونتيجة لذلك، يتم فرض رسوم على المستخدمين بالسعر الصحيح المحدد حسب المنطقة ولكن واجهة المستخدم لا تزال تعرض لهم القيمة المبرمجة الثابتة.
تحديث أداة فحص السعر الديناميكي جميع العناصر المعروضة للبيع داخل لعبتك بسعر Robux مزيف أو موقع اقتصادي مزيف لمساعدتك في تحديد أي الأسعار مبرمجة بشكل ثابت في واجهة لعبتك وأي منها مُبرمج ديناميكياً باستخدام MarketplaceService ويتم استدعاؤه من سكربت العميل. بعد تحديد الباقات المبرمجة بشكل ثابت، يمكنك تحديثها لاستخدام وظائف MarketplaceService.
لاستخدام أداة فحص السعر الديناميكي:
- انتقل إلى الربح.
- للباقات، انتقل إلى الباقات.
- للمنتجات المطورين، انتقل إلى منتجات المطورين.
- انقر على … واختر فحص السعر الديناميكي.
- تحت إضافة حسابات اختبار، أدخل ما يصل إلى خمسة مستخدمي Roblox للتحقق من الأسعار المبرمجة الثابتة.
- اختر نوع الاختبار.
- تثبيت السعر يحدث لكل الأسعار المبرمجة ديناميكياً بمبلغ Robux زائف محدد.
- تثبيت الموقع يحدث لكل الأسعار المبرمجة ديناميكياً بسعر محدد حسب المنطقة لموقع اقتصادي مزيف.
- انقر على تمكين. بعد بضع دقائق، أدخل لعبتك لتحديد الأسعار المبرمجة الثابتة.
لإيقاف تشغيل أداة فحص السعر الديناميكي، انتقل إلى صفحة فحص السعر الديناميكي وانقر على تعطيل.
لمزيد من المعلومات حول الأسعار المبرمجة الثابتة مقابل الأسعار المبرمجة ديناميكياً، راجع تحقق من الأسعار الديناميكية في صفحة تحسين الأسعار. لمزيد من المعلومات حول بيع الباقات والمنتجات المطورة باستخدام وظائف MarketplaceService، راجع بيع باقة داخل لعبتك وبيع منتج مطور داخل لعبتك.
عرض الأسعار الإقليمية في لعبتك
مع التسعير المدارة، قد يختلف السعر الذي يراه المستخدم بناءً على موقعه. إذا كنت تعرض الأسعار في واجهة مستخدم مخصصة داخل اللعبة، مثل TextLabel، يمكنك استرداد معلومات المنتج وقت التشغيل للتأكد من أن السعر المعروض يتطابق مع السعر المعروض في نافذة الشراء.
لعرض السعر الإقليمي لمنتج مطور أو باقة واحدة، استخدم GetProductInfoAsync.
لعرض السعر الإقليمي لجميع المنتجات المطورين، استخدم GetDeveloperProductsAsync.
حماية تجاراتك وهداياك
يمكن أن يؤثر التسعير المدارة على التحويلات داخل اللعبة مثل التداول والإهداء. بسبب اختلافات الأسعار عبر المناطق، يمكن أن يحدث تحكّم في الأسعار (استغلال الفروقات في الأسعار بين نفس المنتجات لتحقيق الربح). لإدارة إمكانية تحكّم الأسعار، يمكنك استخدام واجهة برمجة التطبيقات GetUsersPriceLevelsAsync، التي تتيح لك تحديد مستويات الأسعار النسبية للمستخدمين حتى تتمكن من تنفيذ منطق لتنظيم تحويلات العناصر بناءً على هذه المستويات.
تقدم GetUsersPriceLevelsAsync قيمة رقمية بين 1 و1000 تشير إلى مستوى سعر المستخدم. تم تصميم هذه القيمة لتمثيل نسبة السعر الكامل التي من المتوقع أن يدفعها المستخدم. يمثل مستوى السعر 1000 السعر الافتراضي الكامل، بينما تشير مستويات الأسعار الأدنى إلى أن المستخدم عادةً ما يدفع سعرًا أقل بسبب موقعه الاقتصادي.
يعني فرق مستوى السعر المنخفض أنه يوجد فرق سعر أصغر بين السعر العالمي الكامل وسعر المستخدم المدارة. يعني فرق مستوى السعر العالي أنه يوجد فرق سعر أكبر بين الاثنين. على سبيل المثال:
- المستخدم A لديه مستوى السعر 1000، الذي يمثل السعر العالمي الكامل. هذا المستخدم يدفع 100% من السعر الأساسي لعنصر ما.
- المستخدم B لديه مستوى السعر 500، الذي يمثل 50% من السعر العالمي الكامل. هذا المستخدم يدفع 50% من السعر الأساسي لعنصر ما.
- بمجرد أن تعرف مستوى سعر كل مستخدم، يمكنك اختيار الموافقة أو حظر الإهداء أو التداول بين المستخدم A والمستخدم B بناءً على فرق مستوى سعرهم الذي يبلغ 500.
تنفيذ GetUsersPriceLevelsAsync
للحصول على مستويات أسعار المستخدمين المشاركين في تحويل عنصر، استدعِ وظيفة GetUsersPriceLevelsAsync في MarketplaceService. تأخذ هذه الوظيفة مصفوفة من معرفات المستخدم كمُعطى، وتعيد مصفوفة من كائنات PriceLevelInfo تحتوي على الحقول التالية:
type PriceLevelInfo = {UserId: number,PriceLevel: number}
بعد تنفيذ الوظيفة، استخدم مستويات الأسعار التي تم إرجاعها لتحديد ما إذا كنت تريد السماح بتحويل عنصر ليحدث. على سبيل المثال، يمكنك السماح للمستخدمين ذوي مستوى السعر الأعلى بإهداء العناصر للمستخدمين ذوي مستوى السعر الأدنى، ولكن السماح فقط بالتداول بين المستخدمين الذين لديهم نفس مستوى السعر مع بعضهم البعض. انظر الأمثلة المتاحة لمزيد من المعلومات.
لمزيد من المعلومات حول واجهة برمجة التطبيقات GetUsersPriceLevelsAsync، انظر MarketplaceService.
أمثلة
أمثلة على كيفية استخدام GetUsersPriceLevelsAsync مع التسعير الإقليمي.
مثال 1: تحقق من مستويات الأسعار لقائمة من المستخدمين
يعرض هذا المثال كيفية استرداد مستويات الأسعار لقائمة من المستخدمين، مما يمكن أن يساعدك في اختيار ما إذا كنت تريد السماح بتحويل عنصر ليحدث.
-- الحصول على MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- تعريف دالة لاسترداد مستويات الأسعار لقائمة من المستخدمين وإنشاء جدول بحث من UserId إلى PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- ربط كل PriceLevelInfo بجدول بحث UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("خطأ في الحصول على مستويات الأسعار:", result)
return nil
end
end
-- مثال باستخدام معرفات مخصصة
local user1Id = 123456789
local user2Id = 987654321
-- استدعاء الدالة وتخزين النتيجة
local priceLevels = getPriceLevelsLookup({user1Id, user2Id})
-- إذا كان ناجحًا، اطبع مستوى كل مستخدم
if priceLevels then
print("مستوى السعر للمستخدم 1:", priceLevels[user1Id])
print("مستوى السعر للمستخدم 2:", priceLevels[user2Id])
else
print("فشل في استرداد مستويات الأسعار.")
end
مثال 2: قارن مستوى سعر المرسل بمستوى سعر المستلم
يعرض هذا المثال تنفيذ عينة لكيفية التحقق من مستوى سعر المرسل مقابل مستوى سعر المستلم. يمكن أن يساعدك ذلك في إدارة الإهداءات من المستخدمين في مناطق ذات أسعار أعلى إلى المستخدمين في مناطق ذات أسعار أقل.
-- الحصول على MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- تعريف دالة لاسترداد مستويات الأسعار لقائمة من المستخدمين وإنشاء جدول بحث من UserId إلى PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- ربط كل PriceLevelInfo بجدول بحث UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("خطأ في الحصول على مستويات الأسعار:", result)
return nil
end
end
-- تعريف دالة تتحقق مما إذا كان المرسل لديه مستوى سعر أعلى أو معادل للمستلم
-- المعطيات هي اللاعب الذي يرسل العنصر واللاعب الذي يستلم العنصر
-- ترجع الدالة true إذا كان مستوى سعر المرسل أكبر من أو يساوي مستوى سعر المستلم
function isSenderPriceLevelHigherOrEqualforGifting(sender, recipient)
local priceLevelsLookup = getPriceLevelsLookup({ sender.UserId, recipient.UserId })
if not priceLevelsLookup then
error("فشل MarketplaceService:GetUsersPriceLevelsAsync. غير قادر على استرداد مستويات أسعار المستخدمين.")
end
local senderPriceLevel = priceLevelsLookup[sender.UserId]
local recipientPriceLevel = priceLevelsLookup[recipient.UserId]
return senderPriceLevel >= recipientPriceLevel
end
مثال 3: تحقق مما إذا كان لدى مستخدمين مستويان سعريّان متساويان
يعرض هذا المثال تنفيذ عينة لكيفية التحقق مما إذا كان لدى مستخدمين مستويان سعريّان متساويان. يمكن أن يساعدك ذلك في إدارة التداول وضمان تبادل عادل بين المستخدمين من مناطق مختلفة.
-- الحصول على MarketplaceService
local MarketplaceService = game:GetService("MarketplaceService")
-- تعريف دالة لاسترداد مستويات الأسعار لقائمة من المستخدمين وإنشاء جدول بحث من UserId إلى PriceLevel
local function getPriceLevelsLookup(userIds)
local success, result = pcall(function()
return MarketplaceService:GetUsersPriceLevelsAsync(userIds)
end)
if success then
-- ربط كل PriceLevelInfo بجدول بحث UserId -> PriceLevel
local lookup = {}
for _, userData in ipairs(result) do
lookup[userData.UserId] = userData.PriceLevel
end
return lookup
else
warn("خطأ في الحصول على مستويات الأسعار:", result)
return nil
end
end
-- تعريف دالة تتحقق مما إذا كان لدى مستخدمين مستويان سعريّان متساويان
-- المعطيات هي المستخدمين الاثنين اللذين تريد مقارنتهما
-- ترجع الدالة true إذا كان لدى كلا المستخدمين نفس مستوى السعر
function haveSamePriceLevelForTrading(userA, userB)
local priceLevelsLookup = getPriceLevelsLookup({ userA.UserId, userB.UserId })
if not priceLevelsLookup then
error("فشل MarketplaceService:GetUsersPriceLevelsAsync. غير قادر على استرداد مستويات أسعار المستخدمين.")
end
local userAPriceLevel = priceLevelsLookup[userA.UserId]
local userBPriceLevel = priceLevelsLookup[userB.UserId]
return userAPriceLevel == userBPriceLevel
end