وكل عملية شراء تُنشئ مدخلها الخاص، فشراء العنصر نفسه مرتين يمنحك مدخلين. ويحمل كل مدخل حقلَي
status وused_at يضبطهما الخادم، وكلاهما للقراءة فقط — فلا توجد دالة في أيٍّ من حزمتَي التطوير
تُعلّم المدخل بأنه مستخدَم.عملية الشراء آمنة ماليًا. فهي لا تُعاد أبدًا بعد فشل غامض ولا تُصفّ في طابور عند انقطاع
الاتصال، ومن ثمّ لا يمكن أن تخصم مرتين. ويُجلب المخزون دائمًا محدَّثًا من الخادم؛ أما الكتالوج
فمُخزَّن مؤقتًا ويُقدَّم دون اتصال، لذا عامِل أي سعر معروض على أنه استرشادي حتى تنجح عملية الشراء.
لا تمنح عملية الشراء محتويات العنصر. فعنصر المتجر له اسم وحالة وسعر وعملة — ولا يوجد حقل يصف
ما الذي يمنحه، لذا لا يملك الخادم ما يضيفه إلى رصيد اللاعب. شراء حزمة «1000 ذهب» يخصم السعر
ويسجّل المدخل؛ أما الذهب فلا يُضاف.ومنح المحتويات من داخل اللعبة نفسها هو الخيار الوحيد اليوم، وهو غير آمن لأي شيء يهمّك: إذ يمكن
تعديل التطبيق ليمنح أي كمية، كما أن انقطاع الاتصال بعد الخصم يترك اللاعب مخصومًا منه دون مقابل.
ومنح المكافآت من جهة الخادم مطلبٌ قيد التتبّع.
لوحة التحكم
Unity
Unreal
اضبط المتاجر وعناصرها لإصدار لعبة من لوحة التحكم — حدّد الأسعار والعملات ومدى التوفّر.
اضبط المتاجر والعناصر من لوحة التحكم.
استخدم دوال المتجر في حزمة التطوير لسرد المتاجر والعناصر المتاحة لإصدار لعبتك، ثم نفّذ عملية
شراء لصالح اللاعب المسجَّل دخوله. وتعمل PurchaseAsync افتراضيًا على اللاعب المسجَّل دخوله،
وتُعيد مدخل المخزون الذي أنشأته.
وترمي عملية الشراء المرفوضة استثناءً — التقط FlockException وتحقّق من ErrorCode بحثًا عن
FlockErrorCode.ShopInsufficientFunds لتمييز «الرصيد غير كافٍ» عن فشل الشبكة.
تصفّح باستخدام عقد Flock | Shop، أو مزوّد المتجر في C++. ويمكن قراءة حقلَي data وstats
الحرَّين لأي عنصر عبر مسار منقوط، فلا حاجة إلى عقدة لتحليل JSON.
اشترِ باختيار عنصر مُولَّد — المعرّف مضمَّن سلفًا ويستحيل أن تخطئ في كتابته.
Sdk->GetShopProvider()->Purchase(ItemId, [](TFlockResult<FFlockPlayerInventory> Entry) { if (!Entry.bSuccess && Entry.Error.Code == EFlockErrorCode::ShopInsufficientFunds) { // The server declined — show the player, don't retry. } });
راجع العملات والمحافظ للاطّلاع على الأرصدة التي تقوم عليها
عمليات الشراء.